]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxPropertyGrid from Jaakko Salli (#9934)
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 12 Sep 2008 20:57:41 +0000 (20:57 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 12 Sep 2008 20:57:41 +0000 (20:57 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55576 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

100 files changed:
Makefile.in
autoconf_inc.m4
build/bakefiles/common.bkl
build/bakefiles/config.bkl
build/bakefiles/files.bkl
build/bakefiles/make_dist.mk
build/bakefiles/monolithic.bkl
build/bakefiles/multilib.bkl
build/bakefiles/wxpresets/presets/wx.bkl
build/bakefiles/wxpresets/presets/wx_win32.bkl
build/bakefiles/wxwin.py
build/msw/config.bcc
build/msw/config.gcc
build/msw/config.vc
build/msw/config.wat
build/msw/makefile.bcc
build/msw/makefile.gcc
build/msw/makefile.vc
build/msw/makefile.wat
build/msw/wx.dsw
build/msw/wx_core.dsp
build/msw/wx_propgrid.dsp [new file with mode: 0644]
build/msw/wx_vc7.sln
build/msw/wx_vc7_core.vcproj
build/msw/wx_vc7_propgrid.vcproj [new file with mode: 0644]
build/msw/wx_vc8.sln
build/msw/wx_vc8_core.vcproj
build/msw/wx_vc8_propgrid.vcproj [new file with mode: 0644]
configure
configure.in
distrib/msw/generic.rsp
distrib/msw/makefile.rsp
distrib/msw/vc.rsp
distrib/scripts/manifests/dmc.rsp
distrib/scripts/manifests/generic.rsp
distrib/scripts/manifests/generic_samples.rsp
distrib/scripts/manifests/makefile.rsp
distrib/scripts/manifests/vc.rsp
docs/changes.txt
docs/doxygen/groups/class_propgrid.h [new file with mode: 0644]
docs/doxygen/mainpages/cat_classes.h
docs/doxygen/mainpages/const_cpp.h
docs/doxygen/mainpages/const_wxusedef.h
docs/doxygen/mainpages/libs.h
docs/doxygen/mainpages/samples.h
docs/doxygen/mainpages/topics.h
docs/doxygen/overviews/propgrid.h [new file with mode: 0644]
docs/msw/install.txt
include/wx/dlimpexp.h
include/wx/motif/setup0.h
include/wx/msw/setup0.h
include/wx/msw/wince/setup.h
include/wx/os2/setup0.h
include/wx/osx/setup0.h
include/wx/palmos/setup0.h
include/wx/propgrid/advprops.h [new file with mode: 0644]
include/wx/propgrid/editors.h [new file with mode: 0644]
include/wx/propgrid/manager.h [new file with mode: 0644]
include/wx/propgrid/property.h [new file with mode: 0644]
include/wx/propgrid/propgrid.h [new file with mode: 0644]
include/wx/propgrid/propgriddefs.h [new file with mode: 0644]
include/wx/propgrid/propgridiface.h [new file with mode: 0644]
include/wx/propgrid/propgridpagestate.h [new file with mode: 0644]
include/wx/propgrid/props.h [new file with mode: 0644]
include/wx/setup_inc.h
include/wx/univ/setup0.h
interface/wx/propgrid/editors.h [new file with mode: 0644]
interface/wx/propgrid/manager.h [new file with mode: 0644]
interface/wx/propgrid/property.h [new file with mode: 0644]
interface/wx/propgrid/propgrid.h [new file with mode: 0644]
interface/wx/propgrid/propgridiface.h [new file with mode: 0644]
interface/wx/propgrid/propgridpagestate.h [new file with mode: 0644]
misc/scripts/makemswtags.bat
misc/scripts/makeunixtags.sh
samples/propgrid/Makefile.in [new file with mode: 0644]
samples/propgrid/makefile.bcc [new file with mode: 0644]
samples/propgrid/makefile.gcc [new file with mode: 0644]
samples/propgrid/makefile.unx [new file with mode: 0644]
samples/propgrid/makefile.vc [new file with mode: 0644]
samples/propgrid/makefile.wat [new file with mode: 0644]
samples/propgrid/propgrid.bkl [new file with mode: 0644]
samples/propgrid/propgrid.cpp [new file with mode: 0644]
samples/propgrid/propgrid.dsp [new file with mode: 0644]
samples/propgrid/propgrid.h [new file with mode: 0644]
samples/propgrid/propgrid_minimal.cpp [new file with mode: 0644]
samples/propgrid/propgrid_vc7.vcproj [new file with mode: 0644]
samples/propgrid/propgrid_vc8.vcproj [new file with mode: 0644]
samples/propgrid/sampleprops.cpp [new file with mode: 0644]
samples/propgrid/sampleprops.h [new file with mode: 0644]
samples/propgrid/tests.cpp [new file with mode: 0644]
setup.h.in
setup.h_vms
src/propgrid/advprops.cpp [new file with mode: 0644]
src/propgrid/editors.cpp [new file with mode: 0644]
src/propgrid/manager.cpp [new file with mode: 0644]
src/propgrid/property.cpp [new file with mode: 0644]
src/propgrid/propgrid.cpp [new file with mode: 0644]
src/propgrid/propgridiface.cpp [new file with mode: 0644]
src/propgrid/propgridpagestate.cpp [new file with mode: 0644]
src/propgrid/props.cpp [new file with mode: 0644]

index 775be9537a1f04c5720fd22a3cc3335be44f2b6a..c091115e48898026c2ea4685894c633928077cbf 100644 (file)
@@ -1634,6 +1634,38 @@ AUILIB_OBJECTS =  \
        auilib_auibar.o \
        auilib_tabmdi.o
 AUILIB_ODEP =  $(___pch_wxprec_auilib_wx_wxprec_h_gch___depname)
        auilib_auibar.o \
        auilib_tabmdi.o
 AUILIB_ODEP =  $(___pch_wxprec_auilib_wx_wxprec_h_gch___depname)
+PROPGRIDDLL_CXXFLAGS = $(__propgriddll_PCH_INC) -D__WX$(TOOLKIT)__ \
+       $(__WXUNIV_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) -DWXBUILDING $(__INC_TIFF_BUILD_p) $(__INC_TIFF_p) \
+       $(__INC_JPEG_p) $(__INC_PNG_p) $(__INC_ZLIB_p) $(__INC_REGEX_p) \
+       $(__INC_EXPAT_p) -DWXUSINGDLL -DWXMAKINGDLL_PROPGRID $(PIC_FLAG) \
+       $(CXXWARNINGS) $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDDLL_OBJECTS =  \
+       $(__propgriddll___win32rc) \
+       propgriddll_advprops.o \
+       propgriddll_editors.o \
+       propgriddll_manager.o \
+       propgriddll_property.o \
+       propgriddll_propgrid.o \
+       propgriddll_propgridiface.o \
+       propgriddll_propgridpagestate.o \
+       propgriddll_props.o
+PROPGRIDDLL_ODEP =  $(___pch_wxprec_propgriddll_wx_wxprec_h_gch___depname)
+PROPGRIDLIB_CXXFLAGS = $(__propgridlib_PCH_INC) -D__WX$(TOOLKIT)__ \
+       $(__WXUNIV_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) -DWXBUILDING $(__INC_TIFF_BUILD_p) $(__INC_TIFF_p) \
+       $(__INC_JPEG_p) $(__INC_PNG_p) $(__INC_ZLIB_p) $(__INC_REGEX_p) \
+       $(__INC_EXPAT_p) $(CXXWARNINGS) $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDLIB_OBJECTS =  \
+       propgridlib_advprops.o \
+       propgridlib_editors.o \
+       propgridlib_manager.o \
+       propgridlib_property.o \
+       propgridlib_propgrid.o \
+       propgridlib_propgridiface.o \
+       propgridlib_propgridpagestate.o \
+       propgridlib_props.o
+PROPGRIDLIB_ODEP =  $(___pch_wxprec_propgridlib_wx_wxprec_h_gch___depname)
 RICHTEXTDLL_CXXFLAGS = $(__richtextdll_PCH_INC) -D__WX$(TOOLKIT)__ \
        $(__WXUNIV_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
        $(__THREAD_DEFINE_p) -DWXBUILDING $(__INC_TIFF_BUILD_p) $(__INC_TIFF_p) \
 RICHTEXTDLL_CXXFLAGS = $(__richtextdll_PCH_INC) -D__WX$(TOOLKIT)__ \
        $(__WXUNIV_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
        $(__THREAD_DEFINE_p) -DWXBUILDING $(__INC_TIFF_BUILD_p) $(__INC_TIFF_p) \
@@ -3725,6 +3757,15 @@ COND_USE_GUI_1_ALL_GUI_HEADERS =  \
        wx/aui/auibar.h \
        wx/aui/tabmdi.h \
        wx/aui/aui.h \
        wx/aui/auibar.h \
        wx/aui/tabmdi.h \
        wx/aui/aui.h \
+       wx/propgrid/advprops.h \
+       wx/propgrid/editors.h \
+       wx/propgrid/manager.h \
+       wx/propgrid/property.h \
+       wx/propgrid/propgrid.h \
+       wx/propgrid/propgriddefs.h \
+       wx/propgrid/propgridiface.h \
+       wx/propgrid/propgridpagestate.h \
+       wx/propgrid/props.h \
        wx/richtext/richtextctrl.h \
        wx/richtext/richtextbuffer.h \
        wx/richtext/richtexthtml.h \
        wx/richtext/richtextctrl.h \
        wx/richtext/richtextbuffer.h \
        wx/richtext/richtexthtml.h \
@@ -3974,6 +4015,14 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS =  \
        monodll_auibook.o \
        monodll_auibar.o \
        monodll_tabmdi.o \
        monodll_auibook.o \
        monodll_auibar.o \
        monodll_tabmdi.o \
+       monodll_advprops.o \
+       monodll_editors.o \
+       monodll_manager.o \
+       monodll_property.o \
+       monodll_propgrid.o \
+       monodll_propgridiface.o \
+       monodll_propgridpagestate.o \
+       monodll_props.o \
        monodll_richtextctrl.o \
        monodll_richtextbuffer.o \
        monodll_richtextstyles.o \
        monodll_richtextctrl.o \
        monodll_richtextbuffer.o \
        monodll_richtextstyles.o \
@@ -5770,6 +5819,14 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS_1 =  \
        monolib_auibook.o \
        monolib_auibar.o \
        monolib_tabmdi.o \
        monolib_auibook.o \
        monolib_auibar.o \
        monolib_tabmdi.o \
+       monolib_advprops.o \
+       monolib_editors.o \
+       monolib_manager.o \
+       monolib_property.o \
+       monolib_propgrid.o \
+       monolib_propgridiface.o \
+       monolib_propgridpagestate.o \
+       monolib_props.o \
        monolib_richtextctrl.o \
        monolib_richtextbuffer.o \
        monolib_richtextstyles.o \
        monolib_richtextctrl.o \
        monolib_richtextbuffer.o \
        monolib_richtextstyles.o \
@@ -11362,6 +11419,73 @@ COND_MONOLITHIC_0_SHARED_0_USE_AUI_1___auilib___depname = \
 @COND_USE_PCH_1@       = .pch/wxprec_auilib/wx/wxprec.h.gch
 @COND_SHARED_1@____wxaui_namedll_DEP = $(__auidll___depname)
 @COND_SHARED_0@____wxaui_namelib_DEP = $(__auilib___depname)
 @COND_USE_PCH_1@       = .pch/wxprec_auilib/wx/wxprec.h.gch
 @COND_SHARED_1@____wxaui_namedll_DEP = $(__auidll___depname)
 @COND_SHARED_0@____wxaui_namelib_DEP = $(__auilib___depname)
+COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1___propgriddll___depname = \
+       $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@__propgriddll___depname = $(COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1___propgriddll___depname)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@__install_propgriddll___depname \
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    = install_propgriddll
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@__uninstall_propgriddll___depname \
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    = uninstall_propgriddll
+COND_PLATFORM_MACOSX_1___propgriddll___macinstnamecmd = -install_name \
+       $(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2)
+@COND_PLATFORM_MACOSX_1@__propgriddll___macinstnamecmd = $(COND_PLATFORM_MACOSX_1___propgriddll___macinstnamecmd)
+COND_PLATFORM_OS2_1___propgriddll___importlib = -import \
+       $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
+@COND_PLATFORM_OS2_1@__propgriddll___importlib = $(COND_PLATFORM_OS2_1___propgriddll___importlib)
+COND_WINDOWS_IMPLIB_1___propgriddll___importlib = \
+       -Wl,--out-implib=$(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
+@COND_WINDOWS_IMPLIB_1@__propgriddll___importlib = $(COND_WINDOWS_IMPLIB_1___propgriddll___importlib)
+@COND_GCC_PCH_1@__propgriddll_PCH_INC = -I.pch/wxprec_propgriddll
+@COND_ICC_PCH_1@__propgriddll_PCH_INC = -use_pch \
+@COND_ICC_PCH_1@       .pch/wxprec_propgriddll/wx/wxprec.h.gch
+@COND_USE_PCH_1@___pch_wxprec_propgriddll_wx_wxprec_h_gch___depname \
+@COND_USE_PCH_1@       = .pch/wxprec_propgriddll/wx/wxprec.h.gch
+COND_USE_SOVERLINUX_1___propgriddll___soname_flags = \
+       $(SONAME_FLAG)$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2)
+@COND_USE_SOVERLINUX_1@__propgriddll___soname_flags = $(COND_USE_SOVERLINUX_1___propgriddll___soname_flags)
+COND_USE_SOVERSOLARIS_1___propgriddll___soname_flags = \
+       $(SONAME_FLAG)$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
+@COND_USE_SOVERSOLARIS_1@__propgriddll___soname_flags = $(COND_USE_SOVERSOLARIS_1___propgriddll___soname_flags)
+COND_USE_SOSYMLINKS_1___propgriddll___so_symlinks_cmd = (cd $(LIBDIRNAME)/; rm \
+       -f \
+       $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2); \
+       $(LN_S) \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3) \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2); \
+       $(LN_S) \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2) \
+       $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX))
+@COND_USE_SOSYMLINKS_1@__propgriddll___so_symlinks_cmd = $(COND_USE_SOSYMLINKS_1___propgriddll___so_symlinks_cmd)
+COND_USE_SOSYMLINKS_1___propgriddll___so_symlinks_inst_cmd = rm -f \
+       $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2); \
+       $(LN_S) \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3) \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2); \
+       $(LN_S) \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2) \
+       $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
+@COND_USE_SOSYMLINKS_1@__propgriddll___so_symlinks_inst_cmd = $(COND_USE_SOSYMLINKS_1___propgriddll___so_symlinks_inst_cmd)
+COND_USE_SOSYMLINKS_1___propgriddll___so_symlinks_uninst_cmd = rm -f \
+       $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2) \
+       $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
+@COND_USE_SOSYMLINKS_1@__propgriddll___so_symlinks_uninst_cmd = $(COND_USE_SOSYMLINKS_1___propgriddll___so_symlinks_uninst_cmd)
+@COND_PLATFORM_WIN32_1@__propgriddll___win32rc = propgriddll_version_rc.o
+COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1___propgridlib___depname = \
+       $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT)
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@__propgridlib___depname = $(COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1___propgridlib___depname)
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@__install_propgridlib___depname \
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@    = install_propgridlib
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@__uninstall_propgridlib___depname \
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@    = uninstall_propgridlib
+@COND_GCC_PCH_1@__propgridlib_PCH_INC = -I.pch/wxprec_propgridlib
+@COND_ICC_PCH_1@__propgridlib_PCH_INC = -use_pch \
+@COND_ICC_PCH_1@       .pch/wxprec_propgridlib/wx/wxprec.h.gch
+@COND_USE_PCH_1@___pch_wxprec_propgridlib_wx_wxprec_h_gch___depname \
+@COND_USE_PCH_1@       = .pch/wxprec_propgridlib/wx/wxprec.h.gch
+@COND_SHARED_1@____wxpropgrid_namedll_DEP = $(__propgriddll___depname)
+@COND_SHARED_0@____wxpropgrid_namelib_DEP = $(__propgridlib___depname)
 COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1___richtextdll___depname = \
        $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
 @COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1@__richtextdll___depname = $(COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1___richtextdll___depname)
 COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1___richtextdll___depname = \
        $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
 @COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1@__richtextdll___depname = $(COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1___richtextdll___depname)
@@ -12248,10 +12372,10 @@ COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1___htmldll_library_link_LIBR_0 \
        = \
        -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html-$(WX_RELEASE)$(HOST_SUFFIX)
 @COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1@__htmldll_library_link_LIBR_0 = $(COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1___htmldll_library_link_LIBR_0)
        = \
        -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html-$(WX_RELEASE)$(HOST_SUFFIX)
 @COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1@__htmldll_library_link_LIBR_0 = $(COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1___htmldll_library_link_LIBR_0)
-@COND_WXUNIV_1@__WXUNIV_DEFINE_p_54 = --define __WXUNIVERSAL__
-@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_53 = --define wxNO_EXCEPTIONS
-@COND_USE_RTTI_0@__RTTI_DEFINE_p_53 = --define wxNO_RTTI
-@COND_USE_THREADS_0@__THREAD_DEFINE_p_53 = --define wxNO_THREADS
+@COND_WXUNIV_1@__WXUNIV_DEFINE_p_58 = --define __WXUNIVERSAL__
+@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_57 = --define wxNO_EXCEPTIONS
+@COND_USE_RTTI_0@__RTTI_DEFINE_p_57 = --define wxNO_RTTI
+@COND_USE_THREADS_0@__THREAD_DEFINE_p_57 = --define wxNO_THREADS
 @COND_PLATFORM_MACOSX_0_USE_SOVERSION_1@dll___targetsuf2 = .$(SO_SUFFIX).0
 @COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@dll___targetsuf2 = .0.$(SO_SUFFIX)
 @COND_USE_SOVERSION_0@dll___targetsuf2 = .$(SO_SUFFIX)
 @COND_PLATFORM_MACOSX_0_USE_SOVERSION_1@dll___targetsuf2 = .$(SO_SUFFIX).0
 @COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@dll___targetsuf2 = .0.$(SO_SUFFIX)
 @COND_USE_SOVERSION_0@dll___targetsuf2 = .$(SO_SUFFIX)
@@ -12264,20 +12388,20 @@ COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1___htmldll_library_link_LIBR_0 \
 @COND_USE_SOVERSION_0@dll___targetsuf3 = .$(SO_SUFFIX)
 @COND_TOOLKIT_MSW@__RCDEFDIR_p = --include-dir \
 @COND_TOOLKIT_MSW@     $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME)
 @COND_USE_SOVERSION_0@dll___targetsuf3 = .$(SO_SUFFIX)
 @COND_TOOLKIT_MSW@__RCDEFDIR_p = --include-dir \
 @COND_TOOLKIT_MSW@     $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME)
-@COND_WXUSE_LIBTIFF_BUILTIN@__INC_TIFF_BUILD_p_54 \
+@COND_WXUSE_LIBTIFF_BUILTIN@__INC_TIFF_BUILD_p_58 \
 @COND_WXUSE_LIBTIFF_BUILTIN@   = --include-dir \
 @COND_WXUSE_LIBTIFF_BUILTIN@   $(wx_top_builddir)/src/tiff/libtiff
 @COND_WXUSE_LIBTIFF_BUILTIN@   = --include-dir \
 @COND_WXUSE_LIBTIFF_BUILTIN@   $(wx_top_builddir)/src/tiff/libtiff
-@COND_WXUSE_LIBTIFF_BUILTIN@__INC_TIFF_p_54 = \
+@COND_WXUSE_LIBTIFF_BUILTIN@__INC_TIFF_p_58 = \
 @COND_WXUSE_LIBTIFF_BUILTIN@   --include-dir $(top_srcdir)/src/tiff/libtiff
 @COND_WXUSE_LIBTIFF_BUILTIN@   --include-dir $(top_srcdir)/src/tiff/libtiff
-@COND_WXUSE_LIBJPEG_BUILTIN@__INC_JPEG_p_54 = \
+@COND_WXUSE_LIBJPEG_BUILTIN@__INC_JPEG_p_58 = \
 @COND_WXUSE_LIBJPEG_BUILTIN@   --include-dir $(top_srcdir)/src/jpeg
 @COND_WXUSE_LIBJPEG_BUILTIN@   --include-dir $(top_srcdir)/src/jpeg
-@COND_WXUSE_LIBPNG_BUILTIN@__INC_PNG_p_53 = \
+@COND_WXUSE_LIBPNG_BUILTIN@__INC_PNG_p_57 = \
 @COND_WXUSE_LIBPNG_BUILTIN@    --include-dir $(top_srcdir)/src/png
 @COND_WXUSE_LIBPNG_BUILTIN@    --include-dir $(top_srcdir)/src/png
-@COND_WXUSE_ZLIB_BUILTIN@__INC_ZLIB_p_55 = \
+@COND_WXUSE_ZLIB_BUILTIN@__INC_ZLIB_p_59 = \
 @COND_WXUSE_ZLIB_BUILTIN@      --include-dir $(top_srcdir)/src/zlib
 @COND_WXUSE_ZLIB_BUILTIN@      --include-dir $(top_srcdir)/src/zlib
-@COND_WXUSE_REGEX_BUILTIN@__INC_REGEX_p_53 = \
+@COND_WXUSE_REGEX_BUILTIN@__INC_REGEX_p_57 = \
 @COND_WXUSE_REGEX_BUILTIN@     --include-dir $(top_srcdir)/src/regex
 @COND_WXUSE_REGEX_BUILTIN@     --include-dir $(top_srcdir)/src/regex
-@COND_WXUSE_EXPAT_BUILTIN@__INC_EXPAT_p_53 = \
+@COND_WXUSE_EXPAT_BUILTIN@__INC_EXPAT_p_57 = \
 @COND_WXUSE_EXPAT_BUILTIN@     --include-dir $(top_srcdir)/src/expat/lib
 @COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@__LIB_TIFF_p \
 @COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ = \
 @COND_WXUSE_EXPAT_BUILTIN@     --include-dir $(top_srcdir)/src/expat/lib
 @COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@__LIB_TIFF_p \
 @COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ = \
@@ -12310,9 +12434,9 @@ COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p = \
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: $(__wxregex___depname) $(__wxzlib___depname) $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(__wxexpat___depname) $(__wxscintilla___depname) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) $(__sound_sdl___depname) $(__wxrc___depname) $(__cocoa_res___depname)
+all: $(__wxregex___depname) $(__wxzlib___depname) $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(__wxexpat___depname) $(__wxscintilla___depname) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__propgriddll___depname) $(__propgridlib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) $(__sound_sdl___depname) $(__wxrc___depname) $(__cocoa_res___depname)
 
 
-install: all $(__install_wxregex___depname) $(__install_wxzlib___depname) $(__install_wxpng___depname) $(__install_wxjpeg___depname) $(__install_wxtiff___depname) $(__install_wxexpat___depname) $(__install_wxscintilla___depname) $(__install_monodll___depname) $(__install_monolib___depname) $(__install_basedll___depname) $(__install_baselib___depname) $(__install_netdll___depname) $(__install_netlib___depname) $(__install_coredll___depname) $(__install_corelib___depname) $(__install_advdll___depname) $(__install_advlib___depname) $(__install_mediadll___depname) $(__install_medialib___depname) $(__install_htmldll___depname) $(__install_htmllib___depname) $(__install_qadll___depname) $(__install_qalib___depname) $(__install_xmldll___depname) $(__install_xmllib___depname) $(__install_xrcdll___depname) $(__install_xrclib___depname) $(__install_auidll___depname) $(__install_auilib___depname) $(__install_richtextdll___depname) $(__install_richtextlib___depname) $(__install_stcdll___depname) $(__install_stclib___depname) $(__install_gldll___depname) $(__install_gllib___depname) $(__install_sound_sdl___depname) $(__install_wxrc___depname) install-wxconfig locale_install locale_msw_install $(__cocoa_res_install___depname)
+install: all $(__install_wxregex___depname) $(__install_wxzlib___depname) $(__install_wxpng___depname) $(__install_wxjpeg___depname) $(__install_wxtiff___depname) $(__install_wxexpat___depname) $(__install_wxscintilla___depname) $(__install_monodll___depname) $(__install_monolib___depname) $(__install_basedll___depname) $(__install_baselib___depname) $(__install_netdll___depname) $(__install_netlib___depname) $(__install_coredll___depname) $(__install_corelib___depname) $(__install_advdll___depname) $(__install_advlib___depname) $(__install_mediadll___depname) $(__install_medialib___depname) $(__install_htmldll___depname) $(__install_htmllib___depname) $(__install_qadll___depname) $(__install_qalib___depname) $(__install_xmldll___depname) $(__install_xmllib___depname) $(__install_xrcdll___depname) $(__install_xrclib___depname) $(__install_auidll___depname) $(__install_auilib___depname) $(__install_propgriddll___depname) $(__install_propgridlib___depname) $(__install_richtextdll___depname) $(__install_richtextlib___depname) $(__install_stcdll___depname) $(__install_stclib___depname) $(__install_gldll___depname) $(__install_gllib___depname) $(__install_sound_sdl___depname) $(__install_wxrc___depname) install-wxconfig locale_install locale_msw_install $(__cocoa_res_install___depname)
        $(INSTALL_DIR) $(DESTDIR)$(datadir)/aclocal
        (cd $(srcdir) ; $(INSTALL_DATA)  wxwin.m4 $(DESTDIR)$(datadir)/aclocal)
        $(INSTALL_DIR) $(DESTDIR)$(datadir)/bakefile/presets
        $(INSTALL_DIR) $(DESTDIR)$(datadir)/aclocal
        (cd $(srcdir) ; $(INSTALL_DATA)  wxwin.m4 $(DESTDIR)$(datadir)/aclocal)
        $(INSTALL_DIR) $(DESTDIR)$(datadir)/bakefile/presets
@@ -12347,7 +12471,7 @@ install: all $(__install_wxregex___depname) $(__install_wxzlib___depname) $(__in
        @echo " ------------------------------------------------------"
        @echo " "
 
        @echo " ------------------------------------------------------"
        @echo " "
 
-uninstall: $(__uninstall_wxregex___depname) $(__uninstall_wxzlib___depname) $(__uninstall_wxpng___depname) $(__uninstall_wxjpeg___depname) $(__uninstall_wxtiff___depname) $(__uninstall_wxexpat___depname) $(__uninstall_wxscintilla___depname) $(__uninstall_monodll___depname) $(__uninstall_monolib___depname) $(__uninstall_basedll___depname) $(__uninstall_baselib___depname) $(__uninstall_netdll___depname) $(__uninstall_netlib___depname) $(__uninstall_coredll___depname) $(__uninstall_corelib___depname) $(__uninstall_advdll___depname) $(__uninstall_advlib___depname) $(__uninstall_mediadll___depname) $(__uninstall_medialib___depname) $(__uninstall_htmldll___depname) $(__uninstall_htmllib___depname) $(__uninstall_qadll___depname) $(__uninstall_qalib___depname) $(__uninstall_xmldll___depname) $(__uninstall_xmllib___depname) $(__uninstall_xrcdll___depname) $(__uninstall_xrclib___depname) $(__uninstall_auidll___depname) $(__uninstall_auilib___depname) $(__uninstall_richtextdll___depname) $(__uninstall_richtextlib___depname) $(__uninstall_stcdll___depname) $(__uninstall_stclib___depname) $(__uninstall_gldll___depname) $(__uninstall_gllib___depname) $(__uninstall_sound_sdl___depname) locale_uninstall locale_msw_uninstall
+uninstall: $(__uninstall_wxregex___depname) $(__uninstall_wxzlib___depname) $(__uninstall_wxpng___depname) $(__uninstall_wxjpeg___depname) $(__uninstall_wxtiff___depname) $(__uninstall_wxexpat___depname) $(__uninstall_wxscintilla___depname) $(__uninstall_monodll___depname) $(__uninstall_monolib___depname) $(__uninstall_basedll___depname) $(__uninstall_baselib___depname) $(__uninstall_netdll___depname) $(__uninstall_netlib___depname) $(__uninstall_coredll___depname) $(__uninstall_corelib___depname) $(__uninstall_advdll___depname) $(__uninstall_advlib___depname) $(__uninstall_mediadll___depname) $(__uninstall_medialib___depname) $(__uninstall_htmldll___depname) $(__uninstall_htmllib___depname) $(__uninstall_qadll___depname) $(__uninstall_qalib___depname) $(__uninstall_xmldll___depname) $(__uninstall_xmllib___depname) $(__uninstall_xrcdll___depname) $(__uninstall_xrclib___depname) $(__uninstall_auidll___depname) $(__uninstall_auilib___depname) $(__uninstall_propgriddll___depname) $(__uninstall_propgridlib___depname) $(__uninstall_richtextdll___depname) $(__uninstall_richtextlib___depname) $(__uninstall_stcdll___depname) $(__uninstall_stclib___depname) $(__uninstall_gldll___depname) $(__uninstall_gllib___depname) $(__uninstall_sound_sdl___depname) locale_uninstall locale_msw_uninstall
        (cd $(DESTDIR)$(datadir)/aclocal ; rm -f wxwin.m4)
        (cd $(DESTDIR)$(datadir)/bakefile/presets ; rm -f wx.bkl wx_unix.bkl wx_win32.bkl)
        for f in setup.h $(RCDEFS_H); do \
        (cd $(DESTDIR)$(datadir)/aclocal ; rm -f wxwin.m4)
        (cd $(DESTDIR)$(datadir)/bakefile/presets ; rm -f wx.bkl wx_unix.bkl wx_win32.bkl)
        for f in setup.h $(RCDEFS_H); do \
@@ -12369,6 +12493,7 @@ install-strip: install
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIX)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIX)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
+       $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
@@ -12428,6 +12553,10 @@ clean: $(__clean_wxrc___depname)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT)
+       rm -f $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
+       rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
+       rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2)
+       rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT)
        rm -f $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2)
        rm -f $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
        rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf2)
@@ -12926,6 +13055,42 @@ distclean: clean
 
 @COND_MONOLITHIC_0_USE_AUI_1@wxaui: $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 
 
 @COND_MONOLITHIC_0_USE_AUI_1@wxaui: $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@$(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3): $(PROPGRIDDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla___depname) $(__wxexpat___depname) $(__wxzlib___depname) $(__wxregex___depname) $(__propgriddll___win32rc) $(__advdll___depname) $(__coredll___depname) $(__basedll___depname)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    $(SHARED_LD_CXX) $@ $(PROPGRIDDLL_OBJECTS) -L$(LIBDIRNAME) -L$(LIBDIRNAME) -L$(LIBDIRNAME) $(LDFLAGS)   -L$(LIBDIRNAME) $(__propgriddll___macinstnamecmd) $(__propgriddll___importlib) $(__propgriddll___soname_flags) $(WXMACVERSION_CMD)  $(LIBS) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    $(__propgriddll___so_symlinks_cmd)
+
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@install_propgriddll: 
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    $(INSTALL_DIR) $(DESTDIR)$(libdir)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    $(INSTALL_DATA) $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) $(DESTDIR)$(libdir)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    $(INSTALL_PROGRAM) $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3) $(DESTDIR)$(libdir)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    (cd $(DESTDIR)$(libdir) ; $(__propgriddll___so_symlinks_inst_cmd))
+
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@uninstall_propgriddll: 
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    rm -f $(DESTDIR)$(libdir)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    rm -f $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3)
+@COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1@    (cd $(DESTDIR)$(libdir) ; $(__propgriddll___so_symlinks_uninst_cmd))
+
+@COND_USE_PCH_1@.pch/wxprec_propgriddll/wx/wxprec.h.gch: 
+@COND_USE_PCH_1@       $(BK_MAKE_PCH) .pch/wxprec_propgriddll/wx/wxprec.h.gch wx/wxprec.h $(CXX) $(PROPGRIDDLL_CXXFLAGS)
+
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@$(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT): $(PROPGRIDLIB_OBJECTS)
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@    rm -f $@
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@    $(AR) $(AROPTIONS) $@ $(PROPGRIDLIB_OBJECTS)
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@    $(RANLIB) $@
+
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@install_propgridlib: 
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@    $(INSTALL_DIR) $(DESTDIR)$(libdir)
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@    $(INSTALL_DATA) $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT) $(DESTDIR)$(libdir)
+
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@uninstall_propgridlib: 
+@COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1@    rm -f $(DESTDIR)$(libdir)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT)
+
+@COND_USE_PCH_1@.pch/wxprec_propgridlib/wx/wxprec.h.gch: 
+@COND_USE_PCH_1@       $(BK_MAKE_PCH) .pch/wxprec_propgridlib/wx/wxprec.h.gch wx/wxprec.h $(CXX) $(PROPGRIDLIB_CXXFLAGS)
+
+@COND_MONOLITHIC_0_USE_PROPGRID_1@wxpropgrid: $(____wxpropgrid_namedll_DEP) $(____wxpropgrid_namelib_DEP)
+
 @COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1@$(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3): $(RICHTEXTDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla___depname) $(__wxexpat___depname) $(__wxzlib___depname) $(__wxregex___depname) $(__richtextdll___win32rc) $(__advdll___depname) $(__htmldll_library_link_DEP) $(__xmldll___depname) $(__coredll___depname) $(__basedll___depname)
 @COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1@    $(SHARED_LD_CXX) $@ $(RICHTEXTDLL_OBJECTS) -L$(LIBDIRNAME) -L$(LIBDIRNAME) -L$(LIBDIRNAME) $(__htmldll_library_link_LIBR) -L$(LIBDIRNAME) $(LDFLAGS)   -L$(LIBDIRNAME) $(__richtextdll___macinstnamecmd) $(__richtextdll___importlib) $(__richtextdll___soname_flags) $(WXMACVERSION_CMD)  $(LIBS) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv-$(WX_RELEASE)$(HOST_SUFFIX) $(__htmldll_library_link_LIBR_0) -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
 @COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1@    
 @COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1@$(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(dll___targetsuf3): $(RICHTEXTDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla___depname) $(__wxexpat___depname) $(__wxzlib___depname) $(__wxregex___depname) $(__richtextdll___win32rc) $(__advdll___depname) $(__htmldll_library_link_DEP) $(__xmldll___depname) $(__coredll___depname) $(__basedll___depname)
 @COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1@    $(SHARED_LD_CXX) $@ $(RICHTEXTDLL_OBJECTS) -L$(LIBDIRNAME) -L$(LIBDIRNAME) -L$(LIBDIRNAME) $(__htmldll_library_link_LIBR) -L$(LIBDIRNAME) $(LDFLAGS)   -L$(LIBDIRNAME) $(__richtextdll___macinstnamecmd) $(__richtextdll___importlib) $(__richtextdll___soname_flags) $(WXMACVERSION_CMD)  $(LIBS) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv-$(WX_RELEASE)$(HOST_SUFFIX) $(__htmldll_library_link_LIBR_0) -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
 @COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1@    
@@ -14538,6 +14703,30 @@ monodll_auibar.o: $(srcdir)/src/aui/auibar.cpp $(MONODLL_ODEP)
 monodll_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(MONODLL_ODEP)
        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
 monodll_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(MONODLL_ODEP)
        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
+monodll_advprops.o: $(srcdir)/src/propgrid/advprops.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/advprops.cpp
+
+monodll_editors.o: $(srcdir)/src/propgrid/editors.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/editors.cpp
+
+monodll_manager.o: $(srcdir)/src/propgrid/manager.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/manager.cpp
+
+monodll_property.o: $(srcdir)/src/propgrid/property.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/property.cpp
+
+monodll_propgrid.o: $(srcdir)/src/propgrid/propgrid.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/propgrid.cpp
+
+monodll_propgridiface.o: $(srcdir)/src/propgrid/propgridiface.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/propgridiface.cpp
+
+monodll_propgridpagestate.o: $(srcdir)/src/propgrid/propgridpagestate.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/propgridpagestate.cpp
+
+monodll_props.o: $(srcdir)/src/propgrid/props.cpp $(MONODLL_ODEP)
+       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/propgrid/props.cpp
+
 monodll_richtextctrl.o: $(srcdir)/src/richtext/richtextctrl.cpp $(MONODLL_ODEP)
        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/richtext/richtextctrl.cpp
 
 monodll_richtextctrl.o: $(srcdir)/src/richtext/richtextctrl.cpp $(MONODLL_ODEP)
        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/richtext/richtextctrl.cpp
 
@@ -18391,7 +18580,7 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1_USE_GUI_1@     $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/html/chm.cpp
 
 monodll_version_rc.o: $(srcdir)/src/msw/version.rc $(MONODLL_ODEP)
 @COND_PLATFORM_MACOSX_1_USE_GUI_1@     $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/html/chm.cpp
 
 monodll_version_rc.o: $(srcdir)/src/msw/version.rc $(MONODLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define wxUSE_BASE=1 --define WXMAKINGDLL --include-dir $(top_srcdir)/src/stc/scintilla/include --include-dir $(top_srcdir)/src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define wxUSE_BASE=1 --define WXMAKINGDLL --include-dir $(top_srcdir)/src/stc/scintilla/include --include-dir $(top_srcdir)/src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS
 
 monolib_appbase.o: $(srcdir)/src/common/appbase.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/appbase.cpp
 
 monolib_appbase.o: $(srcdir)/src/common/appbase.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/appbase.cpp
@@ -19182,6 +19371,30 @@ monolib_auibar.o: $(srcdir)/src/aui/auibar.cpp $(MONOLIB_ODEP)
 monolib_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
 monolib_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
+monolib_advprops.o: $(srcdir)/src/propgrid/advprops.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/advprops.cpp
+
+monolib_editors.o: $(srcdir)/src/propgrid/editors.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/editors.cpp
+
+monolib_manager.o: $(srcdir)/src/propgrid/manager.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/manager.cpp
+
+monolib_property.o: $(srcdir)/src/propgrid/property.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/property.cpp
+
+monolib_propgrid.o: $(srcdir)/src/propgrid/propgrid.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/propgrid.cpp
+
+monolib_propgridiface.o: $(srcdir)/src/propgrid/propgridiface.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/propgridiface.cpp
+
+monolib_propgridpagestate.o: $(srcdir)/src/propgrid/propgridpagestate.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/propgridpagestate.cpp
+
+monolib_props.o: $(srcdir)/src/propgrid/props.cpp $(MONOLIB_ODEP)
+       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/propgrid/props.cpp
+
 monolib_richtextctrl.o: $(srcdir)/src/richtext/richtextctrl.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/richtext/richtextctrl.cpp
 
 monolib_richtextctrl.o: $(srcdir)/src/richtext/richtextctrl.cpp $(MONOLIB_ODEP)
        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/richtext/richtextctrl.cpp
 
@@ -23035,7 +23248,7 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_PLATFORM_MACOSX_1_USE_GUI_1@     $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/html/chm.cpp
 
 basedll_version_rc.o: $(srcdir)/src/msw/version.rc $(BASEDLL_ODEP)
 @COND_PLATFORM_MACOSX_1_USE_GUI_1@     $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/html/chm.cpp
 
 basedll_version_rc.o: $(srcdir)/src/msw/version.rc $(BASEDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIX)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define wxUSE_GUI=0 --define WXMAKINGDLL_BASE --define wxUSE_BASE=1
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIX)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define wxUSE_GUI=0 --define WXMAKINGDLL_BASE --define wxUSE_BASE=1
 
 basedll_appbase.o: $(srcdir)/src/common/appbase.cpp $(BASEDLL_ODEP)
        $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/appbase.cpp
 
 basedll_appbase.o: $(srcdir)/src/common/appbase.cpp $(BASEDLL_ODEP)
        $(CXXC) -c -o $@ $(BASEDLL_CXXFLAGS) $(srcdir)/src/common/appbase.cpp
@@ -23968,7 +24181,7 @@ baselib_uma.o: $(srcdir)/src/osx/carbon/uma.cpp $(BASELIB_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/os2/utilsexc.cpp
 
 netdll_version_rc.o: $(srcdir)/src/msw/version.rc $(NETDLL_ODEP)
 @COND_PLATFORM_OS2_1@  $(CXXC) -c -o $@ $(BASELIB_CXXFLAGS) $(srcdir)/src/os2/utilsexc.cpp
 
 netdll_version_rc.o: $(srcdir)/src/msw/version.rc $(NETDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIX)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define wxUSE_GUI=0 --define WXUSINGDLL --define WXMAKINGDLL_NET
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIX)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define wxUSE_GUI=0 --define WXUSINGDLL --define WXMAKINGDLL_NET
 
 netdll_fs_inet.o: $(srcdir)/src/common/fs_inet.cpp $(NETDLL_ODEP)
        $(CXXC) -c -o $@ $(NETDLL_CXXFLAGS) $(srcdir)/src/common/fs_inet.cpp
 
 netdll_fs_inet.o: $(srcdir)/src/common/fs_inet.cpp $(NETDLL_ODEP)
        $(CXXC) -c -o $@ $(NETDLL_CXXFLAGS) $(srcdir)/src/common/fs_inet.cpp
@@ -24073,7 +24286,7 @@ netlib_net.o: $(srcdir)/src/msw/wince/net.cpp $(NETLIB_ODEP)
 @COND_PLATFORM_WIN32_1@        $(CXXC) -c -o $@ $(NETLIB_CXXFLAGS) $(srcdir)/src/msw/gsocket.cpp
 
 coredll_version_rc.o: $(srcdir)/src/msw/version.rc $(COREDLL_ODEP)
 @COND_PLATFORM_WIN32_1@        $(CXXC) -c -o $@ $(NETLIB_CXXFLAGS) $(srcdir)/src/msw/gsocket.cpp
 
 coredll_version_rc.o: $(srcdir)/src/msw/version.rc $(COREDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_CORE --define wxUSE_BASE=0
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_CORE --define wxUSE_BASE=0
 
 coredll_event.o: $(srcdir)/src/common/event.cpp $(COREDLL_ODEP)
        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/event.cpp
 
 coredll_event.o: $(srcdir)/src/common/event.cpp $(COREDLL_ODEP)
        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/event.cpp
@@ -31066,7 +31279,7 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
 @COND_USE_GUI_1@       $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/generic/vscroll.cpp
 
 advdll_version_rc.o: $(srcdir)/src/msw/version.rc $(ADVDLL_ODEP)
 @COND_USE_GUI_1@       $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/generic/vscroll.cpp
 
 advdll_version_rc.o: $(srcdir)/src/msw/version.rc $(ADVDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_ADV
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_ADV
 
 advdll_animate.o: $(srcdir)/src/gtk/animate.cpp $(ADVDLL_ODEP)
        $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/gtk/animate.cpp
 
 advdll_animate.o: $(srcdir)/src/gtk/animate.cpp $(ADVDLL_ODEP)
        $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/gtk/animate.cpp
@@ -31675,7 +31888,7 @@ advlib_wizard.o: $(srcdir)/src/generic/wizard.cpp $(ADVLIB_ODEP)
 @COND_TOOLKIT_WINCE_WXUNIV_0@  $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
 
 mediadll_version_rc.o: $(srcdir)/src/msw/version.rc $(MEDIADLL_ODEP)
 @COND_TOOLKIT_WINCE_WXUNIV_0@  $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
 
 mediadll_version_rc.o: $(srcdir)/src/msw/version.rc $(MEDIADLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_MEDIA
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_MEDIA
 
 mediadll_mediactrlcmn.o: $(srcdir)/src/common/mediactrlcmn.cpp $(MEDIADLL_ODEP)
        $(CXXC) -c -o $@ $(MEDIADLL_CXXFLAGS) $(srcdir)/src/common/mediactrlcmn.cpp
 
 mediadll_mediactrlcmn.o: $(srcdir)/src/common/mediactrlcmn.cpp $(MEDIADLL_ODEP)
        $(CXXC) -c -o $@ $(MEDIADLL_CXXFLAGS) $(srcdir)/src/common/mediactrlcmn.cpp
@@ -31762,7 +31975,7 @@ medialib_mediactrlcmn.o: $(srcdir)/src/common/mediactrlcmn.cpp $(MEDIALIB_ODEP)
 @COND_TOOLKIT_X11@     $(CXXC) -c -o $@ $(MEDIALIB_CXXFLAGS) $(srcdir)/src/unix/mediactrl.cpp
 
 htmldll_version_rc.o: $(srcdir)/src/msw/version.rc $(HTMLDLL_ODEP)
 @COND_TOOLKIT_X11@     $(CXXC) -c -o $@ $(MEDIALIB_CXXFLAGS) $(srcdir)/src/unix/mediactrl.cpp
 
 htmldll_version_rc.o: $(srcdir)/src/msw/version.rc $(HTMLDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_HTML
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_HTML
 
 htmldll_helpbest.o: $(srcdir)/src/msw/helpbest.cpp $(HTMLDLL_ODEP)
        $(CXXC) -c -o $@ $(HTMLDLL_CXXFLAGS) $(srcdir)/src/msw/helpbest.cpp
 
 htmldll_helpbest.o: $(srcdir)/src/msw/helpbest.cpp $(HTMLDLL_ODEP)
        $(CXXC) -c -o $@ $(HTMLDLL_CXXFLAGS) $(srcdir)/src/msw/helpbest.cpp
@@ -31921,7 +32134,7 @@ htmllib_htmllbox.o: $(srcdir)/src/generic/htmllbox.cpp $(HTMLLIB_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(HTMLLIB_CXXFLAGS) $(srcdir)/src/html/chm.cpp
 
 qadll_version_rc.o: $(srcdir)/src/msw/version.rc $(QADLL_ODEP)
 @COND_PLATFORM_MACOSX_1@       $(CXXC) -c -o $@ $(HTMLLIB_CXXFLAGS) $(srcdir)/src/html/chm.cpp
 
 qadll_version_rc.o: $(srcdir)/src/msw/version.rc $(QADLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_QA
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_QA
 
 qadll_debugrpt.o: $(srcdir)/src/common/debugrpt.cpp $(QADLL_ODEP)
        $(CXXC) -c -o $@ $(QADLL_CXXFLAGS) $(srcdir)/src/common/debugrpt.cpp
 
 qadll_debugrpt.o: $(srcdir)/src/common/debugrpt.cpp $(QADLL_ODEP)
        $(CXXC) -c -o $@ $(QADLL_CXXFLAGS) $(srcdir)/src/common/debugrpt.cpp
@@ -31936,7 +32149,7 @@ qalib_dbgrptg.o: $(srcdir)/src/generic/dbgrptg.cpp $(QALIB_ODEP)
        $(CXXC) -c -o $@ $(QALIB_CXXFLAGS) $(srcdir)/src/generic/dbgrptg.cpp
 
 xmldll_version_rc.o: $(srcdir)/src/msw/version.rc $(XMLDLL_ODEP)
        $(CXXC) -c -o $@ $(QALIB_CXXFLAGS) $(srcdir)/src/generic/dbgrptg.cpp
 
 xmldll_version_rc.o: $(srcdir)/src/msw/version.rc $(XMLDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIX)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define wxUSE_GUI=0 --define WXUSINGDLL --define WXMAKINGDLL_XML
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIX)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define wxUSE_GUI=0 --define WXUSINGDLL --define WXMAKINGDLL_XML
 
 xmldll_xml.o: $(srcdir)/src/xml/xml.cpp $(XMLDLL_ODEP)
        $(CXXC) -c -o $@ $(XMLDLL_CXXFLAGS) $(srcdir)/src/xml/xml.cpp
 
 xmldll_xml.o: $(srcdir)/src/xml/xml.cpp $(XMLDLL_ODEP)
        $(CXXC) -c -o $@ $(XMLDLL_CXXFLAGS) $(srcdir)/src/xml/xml.cpp
@@ -31951,7 +32164,7 @@ xmllib_xtixml.o: $(srcdir)/src/common/xtixml.cpp $(XMLLIB_ODEP)
        $(CXXC) -c -o $@ $(XMLLIB_CXXFLAGS) $(srcdir)/src/common/xtixml.cpp
 
 xrcdll_version_rc.o: $(srcdir)/src/msw/version.rc $(XRCDLL_ODEP)
        $(CXXC) -c -o $@ $(XMLLIB_CXXFLAGS) $(srcdir)/src/common/xtixml.cpp
 
 xrcdll_version_rc.o: $(srcdir)/src/msw/version.rc $(XRCDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_XRC
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_XRC
 
 xrcdll_xh_animatctrl.o: $(srcdir)/src/xrc/xh_animatctrl.cpp $(XRCDLL_ODEP)
        $(CXXC) -c -o $@ $(XRCDLL_CXXFLAGS) $(srcdir)/src/xrc/xh_animatctrl.cpp
 
 xrcdll_xh_animatctrl.o: $(srcdir)/src/xrc/xh_animatctrl.cpp $(XRCDLL_ODEP)
        $(CXXC) -c -o $@ $(XRCDLL_CXXFLAGS) $(srcdir)/src/xrc/xh_animatctrl.cpp
@@ -32302,7 +32515,7 @@ xrclib_xmlrsall.o: $(srcdir)/src/xrc/xmlrsall.cpp $(XRCLIB_ODEP)
        $(CXXC) -c -o $@ $(XRCLIB_CXXFLAGS) $(srcdir)/src/xrc/xmlrsall.cpp
 
 auidll_version_rc.o: $(srcdir)/src/msw/version.rc $(AUIDLL_ODEP)
        $(CXXC) -c -o $@ $(XRCLIB_CXXFLAGS) $(srcdir)/src/xrc/xmlrsall.cpp
 
 auidll_version_rc.o: $(srcdir)/src/msw/version.rc $(AUIDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_AUI
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_AUI
 
 auidll_framemanager.o: $(srcdir)/src/aui/framemanager.cpp $(AUIDLL_ODEP)
        $(CXXC) -c -o $@ $(AUIDLL_CXXFLAGS) $(srcdir)/src/aui/framemanager.cpp
 
 auidll_framemanager.o: $(srcdir)/src/aui/framemanager.cpp $(AUIDLL_ODEP)
        $(CXXC) -c -o $@ $(AUIDLL_CXXFLAGS) $(srcdir)/src/aui/framemanager.cpp
@@ -32340,8 +32553,59 @@ auilib_auibar.o: $(srcdir)/src/aui/auibar.cpp $(AUILIB_ODEP)
 auilib_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(AUILIB_ODEP)
        $(CXXC) -c -o $@ $(AUILIB_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
 auilib_tabmdi.o: $(srcdir)/src/aui/tabmdi.cpp $(AUILIB_ODEP)
        $(CXXC) -c -o $@ $(AUILIB_CXXFLAGS) $(srcdir)/src/aui/tabmdi.cpp
 
+propgriddll_version_rc.o: $(srcdir)/src/msw/version.rc $(PROPGRIDDLL_ODEP)
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_PROPGRID
+
+propgriddll_advprops.o: $(srcdir)/src/propgrid/advprops.cpp $(PROPGRIDDLL_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(srcdir)/src/propgrid/advprops.cpp
+
+propgriddll_editors.o: $(srcdir)/src/propgrid/editors.cpp $(PROPGRIDDLL_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(srcdir)/src/propgrid/editors.cpp
+
+propgriddll_manager.o: $(srcdir)/src/propgrid/manager.cpp $(PROPGRIDDLL_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(srcdir)/src/propgrid/manager.cpp
+
+propgriddll_property.o: $(srcdir)/src/propgrid/property.cpp $(PROPGRIDDLL_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(srcdir)/src/propgrid/property.cpp
+
+propgriddll_propgrid.o: $(srcdir)/src/propgrid/propgrid.cpp $(PROPGRIDDLL_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(srcdir)/src/propgrid/propgrid.cpp
+
+propgriddll_propgridiface.o: $(srcdir)/src/propgrid/propgridiface.cpp $(PROPGRIDDLL_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(srcdir)/src/propgrid/propgridiface.cpp
+
+propgriddll_propgridpagestate.o: $(srcdir)/src/propgrid/propgridpagestate.cpp $(PROPGRIDDLL_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(srcdir)/src/propgrid/propgridpagestate.cpp
+
+propgriddll_props.o: $(srcdir)/src/propgrid/props.cpp $(PROPGRIDDLL_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(srcdir)/src/propgrid/props.cpp
+
+propgridlib_advprops.o: $(srcdir)/src/propgrid/advprops.cpp $(PROPGRIDLIB_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(srcdir)/src/propgrid/advprops.cpp
+
+propgridlib_editors.o: $(srcdir)/src/propgrid/editors.cpp $(PROPGRIDLIB_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(srcdir)/src/propgrid/editors.cpp
+
+propgridlib_manager.o: $(srcdir)/src/propgrid/manager.cpp $(PROPGRIDLIB_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(srcdir)/src/propgrid/manager.cpp
+
+propgridlib_property.o: $(srcdir)/src/propgrid/property.cpp $(PROPGRIDLIB_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(srcdir)/src/propgrid/property.cpp
+
+propgridlib_propgrid.o: $(srcdir)/src/propgrid/propgrid.cpp $(PROPGRIDLIB_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(srcdir)/src/propgrid/propgrid.cpp
+
+propgridlib_propgridiface.o: $(srcdir)/src/propgrid/propgridiface.cpp $(PROPGRIDLIB_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(srcdir)/src/propgrid/propgridiface.cpp
+
+propgridlib_propgridpagestate.o: $(srcdir)/src/propgrid/propgridpagestate.cpp $(PROPGRIDLIB_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(srcdir)/src/propgrid/propgridpagestate.cpp
+
+propgridlib_props.o: $(srcdir)/src/propgrid/props.cpp $(PROPGRIDLIB_ODEP)
+       $(CXXC) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(srcdir)/src/propgrid/props.cpp
+
 richtextdll_version_rc.o: $(srcdir)/src/msw/version.rc $(RICHTEXTDLL_ODEP)
 richtextdll_version_rc.o: $(srcdir)/src/msw/version.rc $(RICHTEXTDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_RICHTEXT
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_RICHTEXT
 
 richtextdll_richtextctrl.o: $(srcdir)/src/richtext/richtextctrl.cpp $(RICHTEXTDLL_ODEP)
        $(CXXC) -c -o $@ $(RICHTEXTDLL_CXXFLAGS) $(srcdir)/src/richtext/richtextctrl.cpp
 
 richtextdll_richtextctrl.o: $(srcdir)/src/richtext/richtextctrl.cpp $(RICHTEXTDLL_ODEP)
        $(CXXC) -c -o $@ $(RICHTEXTDLL_CXXFLAGS) $(srcdir)/src/richtext/richtextctrl.cpp
@@ -32398,7 +32662,7 @@ richtextlib_richtextprint.o: $(srcdir)/src/richtext/richtextprint.cpp $(RICHTEXT
        $(CXXC) -c -o $@ $(RICHTEXTLIB_CXXFLAGS) $(srcdir)/src/richtext/richtextprint.cpp
 
 stcdll_version_rc.o: $(srcdir)/src/msw/version.rc $(STCDLL_ODEP)
        $(CXXC) -c -o $@ $(RICHTEXTLIB_CXXFLAGS) $(srcdir)/src/richtext/richtextprint.cpp
 
 stcdll_version_rc.o: $(srcdir)/src/msw/version.rc $(STCDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --include-dir $(top_srcdir)/src/stc/scintilla/include --include-dir $(top_srcdir)/src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS --define WXUSINGDLL --define WXMAKINGDLL_STC
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --include-dir $(top_srcdir)/src/stc/scintilla/include --include-dir $(top_srcdir)/src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS --define WXUSINGDLL --define WXMAKINGDLL_STC
 
 stcdll_stc.o: $(srcdir)/src/stc/stc.cpp $(STCDLL_ODEP)
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/src/stc/stc.cpp
 
 stcdll_stc.o: $(srcdir)/src/stc/stc.cpp $(STCDLL_ODEP)
        $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/src/stc/stc.cpp
@@ -32419,7 +32683,7 @@ stclib_ScintillaWX.o: $(srcdir)/src/stc/ScintillaWX.cpp $(STCLIB_ODEP)
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/src/stc/ScintillaWX.cpp
 
 gldll_version_rc.o: $(srcdir)/src/msw/version.rc $(GLDLL_ODEP)
        $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/src/stc/ScintillaWX.cpp
 
 gldll_version_rc.o: $(srcdir)/src/msw/version.rc $(GLDLL_ODEP)
-       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_54)  $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_54) $(__INC_TIFF_p_54) $(__INC_JPEG_p_54) $(__INC_PNG_p_53) $(__INC_ZLIB_p_55) $(__INC_REGEX_p_53) $(__INC_EXPAT_p_53) --define WXUSINGDLL --define WXMAKINGDLL_GL
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_58)  $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57)   --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include $(__INC_TIFF_BUILD_p_58) $(__INC_TIFF_p_58) $(__INC_JPEG_p_58) $(__INC_PNG_p_57) $(__INC_ZLIB_p_59) $(__INC_REGEX_p_57) $(__INC_EXPAT_p_57) --define WXUSINGDLL --define WXMAKINGDLL_GL
 
 gldll_glcmn.o: $(srcdir)/src/common/glcmn.cpp $(GLDLL_ODEP)
        $(CXXC) -c -o $@ $(GLDLL_CXXFLAGS) $(srcdir)/src/common/glcmn.cpp
 
 gldll_glcmn.o: $(srcdir)/src/common/glcmn.cpp $(GLDLL_ODEP)
        $(CXXC) -c -o $@ $(GLDLL_CXXFLAGS) $(srcdir)/src/common/glcmn.cpp
@@ -32541,6 +32805,7 @@ COMMDIR  = $(WXDIR)/src/common
 HTMLDIR  = $(WXDIR)/src/html
 RICHTEXTDIR = $(WXDIR)/src/richtext
 AUIDIR =   $(WXDIR)/src/aui
 HTMLDIR  = $(WXDIR)/src/html
 RICHTEXTDIR = $(WXDIR)/src/richtext
 AUIDIR =   $(WXDIR)/src/aui
+PROPGRIDDIR = $(WXDIR)/src/propgrid
 STCDIR =   $(WXDIR)/src/stc
 UNIXDIR  = $(WXDIR)/src/unix
 PNGDIR   = $(WXDIR)/src/png
 STCDIR =   $(WXDIR)/src/stc
 UNIXDIR  = $(WXDIR)/src/unix
 PNGDIR   = $(WXDIR)/src/png
@@ -32686,6 +32951,7 @@ ALL_GUI_DIST: ALL_DIST
        mkdir $(DISTDIR)/include/wx/html
        mkdir $(DISTDIR)/include/wx/richtext
        mkdir $(DISTDIR)/include/wx/aui
        mkdir $(DISTDIR)/include/wx/html
        mkdir $(DISTDIR)/include/wx/richtext
        mkdir $(DISTDIR)/include/wx/aui
+       mkdir $(DISTDIR)/include/wx/propgrid
        mkdir $(DISTDIR)/include/wx/stc
        mkdir $(DISTDIR)/include/wx/protocol
        mkdir $(DISTDIR)/include/wx/unix
        mkdir $(DISTDIR)/include/wx/stc
        mkdir $(DISTDIR)/include/wx/protocol
        mkdir $(DISTDIR)/include/wx/unix
@@ -32699,6 +32965,7 @@ ALL_GUI_DIST: ALL_DIST
        $(CP_P) $(INCDIR)/wx/html/*.h $(DISTDIR)/include/wx/html
        $(CP_P) $(INCDIR)/wx/richtext/*.h $(DISTDIR)/include/wx/richtext
        $(CP_P) $(INCDIR)/wx/aui/*.h $(DISTDIR)/include/wx/aui
        $(CP_P) $(INCDIR)/wx/html/*.h $(DISTDIR)/include/wx/html
        $(CP_P) $(INCDIR)/wx/richtext/*.h $(DISTDIR)/include/wx/richtext
        $(CP_P) $(INCDIR)/wx/aui/*.h $(DISTDIR)/include/wx/aui
+       $(CP_P) $(INCDIR)/wx/propgrid/*.h $(DISTDIR)/include/wx/propgrid
        $(CP_P) $(INCDIR)/wx/stc/*.h $(DISTDIR)/include/wx/stc
        $(CP_P) $(INCDIR)/wx/unix/*.h $(DISTDIR)/include/wx/unix
        $(CP_P) $(INCDIR)/wx/unix/private/*.h $(DISTDIR)/include/wx/unix/private
        $(CP_P) $(INCDIR)/wx/stc/*.h $(DISTDIR)/include/wx/stc
        $(CP_P) $(INCDIR)/wx/unix/*.h $(DISTDIR)/include/wx/unix
        $(CP_P) $(INCDIR)/wx/unix/private/*.h $(DISTDIR)/include/wx/unix/private
@@ -32738,7 +33005,10 @@ ALL_GUI_DIST: ALL_DIST
         
        mkdir $(DISTDIR)/src/aui
        $(CP_P) $(AUIDIR)/*.cpp $(DISTDIR)/src/aui
         
        mkdir $(DISTDIR)/src/aui
        $(CP_P) $(AUIDIR)/*.cpp $(DISTDIR)/src/aui
-        
+
+       mkdir $(DISTDIR)/src/propgrid
+       $(CP_P) $(PROPGRIDDIR)/*.cpp $(DISTDIR)/src/propgrid
+
        mkdir $(DISTDIR)/src/stc
        mkdir $(DISTDIR)/src/stc/scintilla
        mkdir $(DISTDIR)/src/stc/scintilla/src
        mkdir $(DISTDIR)/src/stc
        mkdir $(DISTDIR)/src/stc/scintilla
        mkdir $(DISTDIR)/src/stc/scintilla/src
@@ -32800,6 +33070,7 @@ BASE_DIST: ALL_DIST INTL_DIST
        mkdir $(DISTDIR)/include/wx/html
        mkdir $(DISTDIR)/include/wx/richtext
        mkdir $(DISTDIR)/include/wx/aui
        mkdir $(DISTDIR)/include/wx/html
        mkdir $(DISTDIR)/include/wx/richtext
        mkdir $(DISTDIR)/include/wx/aui
+       mkdir $(DISTDIR)/include/wx/propgrid
        mkdir $(DISTDIR)/include/wx/stc
        mkdir $(DISTDIR)/include/wx/osx
        mkdir $(DISTDIR)/include/wx/osx/carbon
        mkdir $(DISTDIR)/include/wx/stc
        mkdir $(DISTDIR)/include/wx/osx
        mkdir $(DISTDIR)/include/wx/osx/carbon
@@ -33246,6 +33517,7 @@ MANUAL_DIST:
        mkdir $(DISTDIR)/interface/wx/msw
        mkdir $(DISTDIR)/interface/wx/msw/ole
        mkdir $(DISTDIR)/interface/wx/protocol
        mkdir $(DISTDIR)/interface/wx/msw
        mkdir $(DISTDIR)/interface/wx/msw/ole
        mkdir $(DISTDIR)/interface/wx/protocol
+       mkdir $(DISTDIR)/interface/wx/propgrid
        mkdir $(DISTDIR)/interface/wx/richtext
        mkdir $(DISTDIR)/interface/wx/stc
        mkdir $(DISTDIR)/interface/wx/xml
        mkdir $(DISTDIR)/interface/wx/richtext
        mkdir $(DISTDIR)/interface/wx/stc
        mkdir $(DISTDIR)/interface/wx/xml
@@ -33257,6 +33529,7 @@ MANUAL_DIST:
        $(CP_P) $(IFACEDIR)/wx/msw/*.h $(DISTDIR)/interface/wx/msw
        $(CP_P) $(IFACEDIR)/wx/msw/ole/*.h $(DISTDIR)/interface/wx/msw/ole
        $(CP_P) $(IFACEDIR)/wx/protocol/*.h $(DISTDIR)/interface/wx/protocol
        $(CP_P) $(IFACEDIR)/wx/msw/*.h $(DISTDIR)/interface/wx/msw
        $(CP_P) $(IFACEDIR)/wx/msw/ole/*.h $(DISTDIR)/interface/wx/msw/ole
        $(CP_P) $(IFACEDIR)/wx/protocol/*.h $(DISTDIR)/interface/wx/protocol
+       $(CP_P) $(IFACEDIR)/wx/propgrid/*.h $(DISTDIR)/interface/wx/propgrid
        $(CP_P) $(IFACEDIR)/wx/richtext/*.h $(DISTDIR)/interface/wx/richtext
        $(CP_P) $(IFACEDIR)/wx/stc/*.h $(DISTDIR)/interface/wx/stc
        $(CP_P) $(IFACEDIR)/wx/xml/*.h $(DISTDIR)/interface/wx/xml
        $(CP_P) $(IFACEDIR)/wx/richtext/*.h $(DISTDIR)/interface/wx/richtext
        $(CP_P) $(IFACEDIR)/wx/stc/*.h $(DISTDIR)/interface/wx/stc
        $(CP_P) $(IFACEDIR)/wx/xml/*.h $(DISTDIR)/interface/wx/xml
@@ -33429,4 +33702,4 @@ rpm: bzip-dist
 # Include dependency info, if present:
 @IF_GNU_MAKE@-include .deps/*.d
 
 # Include dependency info, if present:
 @IF_GNU_MAKE@-include .deps/*.d
 
-.PHONY: all install uninstall clean distclean install_wxregex uninstall_wxregex install_wxzlib uninstall_wxzlib install_wxpng uninstall_wxpng install_wxjpeg uninstall_wxjpeg install_wxtiff uninstall_wxtiff install_wxexpat uninstall_wxexpat install_wxscintilla uninstall_wxscintilla install_monodll uninstall_monodll install_monolib uninstall_monolib install_basedll uninstall_basedll install_baselib uninstall_baselib wxbase install_netdll uninstall_netdll install_netlib uninstall_netlib wxnet install_coredll uninstall_coredll install_corelib uninstall_corelib wxcore install_advdll uninstall_advdll install_advlib uninstall_advlib wxadv install_mediadll uninstall_mediadll install_medialib uninstall_medialib wxmedia install_htmldll uninstall_htmldll install_htmllib uninstall_htmllib wxhtml install_qadll uninstall_qadll install_qalib uninstall_qalib wxqa install_xmldll uninstall_xmldll install_xmllib uninstall_xmllib wxxml install_xrcdll uninstall_xrcdll install_xrclib uninstall_xrclib wxxrc install_auidll uninstall_auidll install_auilib uninstall_auilib wxaui install_richtextdll uninstall_richtextdll install_richtextlib uninstall_richtextlib wxrichtext install_stcdll uninstall_stcdll install_stclib uninstall_stclib wxstc install_gldll uninstall_gldll install_gllib uninstall_gllib wxgl install_sound_sdl uninstall_sound_sdl samples
+.PHONY: all install uninstall clean distclean install_wxregex uninstall_wxregex install_wxzlib uninstall_wxzlib install_wxpng uninstall_wxpng install_wxjpeg uninstall_wxjpeg install_wxtiff uninstall_wxtiff install_wxexpat uninstall_wxexpat install_wxscintilla uninstall_wxscintilla install_monodll uninstall_monodll install_monolib uninstall_monolib install_basedll uninstall_basedll install_baselib uninstall_baselib wxbase install_netdll uninstall_netdll install_netlib uninstall_netlib wxnet install_coredll uninstall_coredll install_corelib uninstall_corelib wxcore install_advdll uninstall_advdll install_advlib uninstall_advlib wxadv install_mediadll uninstall_mediadll install_medialib uninstall_medialib wxmedia install_htmldll uninstall_htmldll install_htmllib uninstall_htmllib wxhtml install_qadll uninstall_qadll install_qalib uninstall_qalib wxqa install_xmldll uninstall_xmldll install_xmllib uninstall_xmllib wxxml install_xrcdll uninstall_xrcdll install_xrclib uninstall_xrclib wxxrc install_auidll uninstall_auidll install_auilib uninstall_auilib wxaui install_propgriddll uninstall_propgriddll install_propgridlib uninstall_propgridlib wxpropgrid install_richtextdll uninstall_richtextdll install_richtextlib uninstall_richtextlib wxrichtext install_stcdll uninstall_stcdll install_stclib uninstall_stclib wxstc install_gldll uninstall_gldll install_gllib uninstall_gllib wxgl install_sound_sdl uninstall_sound_sdl samples
index b8b33c6e112910c3d0e25a9e64e34a71e49cd78f..08ad6d7c5bf9280e7c2aad8fe5dc93e1ab70cd81 100644 (file)
@@ -1,4 +1,4 @@
-dnl ### begin block 00_header[../../demos/bombs/bombs.bkl,../../demos/demos.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/html_samples.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/mobile_samples.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/opengl_samples.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/utils.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 00_header[../../demos/bombs/bombs.bkl,../../demos/demos.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/html_samples.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/mobile_samples.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/opengl_samples.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/utils.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
 dnl
 dnl This macro was generated by
 dnl Bakefile 0.2.3 (http://www.bakefile.org)
 dnl
 dnl This macro was generated by
 dnl Bakefile 0.2.3 (http://www.bakefile.org)
@@ -8,85 +8,85 @@ BAKEFILE_AUTOCONF_INC_M4_VERSION="0.2.3"
 
 dnl ### begin block 10_AC_BAKEFILE_PRECOMP_HEADERS[../../tests/test.bkl,wx.bkl] ###
 AC_BAKEFILE_PRECOMP_HEADERS
 
 dnl ### begin block 10_AC_BAKEFILE_PRECOMP_HEADERS[../../tests/test.bkl,wx.bkl] ###
 AC_BAKEFILE_PRECOMP_HEADERS
-dnl ### begin block 20_COND_BUILD_DEBUG[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_DEBUG[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_DEBUG="#"
     if test "x$BUILD" = "xdebug" ; then
         COND_BUILD_DEBUG=""
     fi
     AC_SUBST(COND_BUILD_DEBUG)
     COND_BUILD_DEBUG="#"
     if test "x$BUILD" = "xdebug" ; then
         COND_BUILD_DEBUG=""
     fi
     AC_SUBST(COND_BUILD_DEBUG)
-dnl ### begin block 20_COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT="#"
     if test "x$BUILD" = "xdebug" -a "x$DEBUG_FLAG" = "xdefault" ; then
         COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT=""
     fi
     AC_SUBST(COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT)
     COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT="#"
     if test "x$BUILD" = "xdebug" -a "x$DEBUG_FLAG" = "xdefault" ; then
         COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT=""
     fi
     AC_SUBST(COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT)
-dnl ### begin block 20_COND_BUILD_DEBUG_DEBUG_INFO_DEFAULT[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_DEBUG_DEBUG_INFO_DEFAULT[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_DEBUG_DEBUG_INFO_DEFAULT="#"
     if test "x$BUILD" = "xdebug" -a "x$DEBUG_INFO" = "xdefault" ; then
         COND_BUILD_DEBUG_DEBUG_INFO_DEFAULT=""
     fi
     AC_SUBST(COND_BUILD_DEBUG_DEBUG_INFO_DEFAULT)
     COND_BUILD_DEBUG_DEBUG_INFO_DEFAULT="#"
     if test "x$BUILD" = "xdebug" -a "x$DEBUG_INFO" = "xdefault" ; then
         COND_BUILD_DEBUG_DEBUG_INFO_DEFAULT=""
     fi
     AC_SUBST(COND_BUILD_DEBUG_DEBUG_INFO_DEFAULT)
-dnl ### begin block 20_COND_BUILD_DEBUG_UNICODE_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_DEBUG_UNICODE_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_DEBUG_UNICODE_0="#"
     if test "x$BUILD" = "xdebug" -a "x$UNICODE" = "x0" ; then
         COND_BUILD_DEBUG_UNICODE_0=""
     fi
     AC_SUBST(COND_BUILD_DEBUG_UNICODE_0)
     COND_BUILD_DEBUG_UNICODE_0="#"
     if test "x$BUILD" = "xdebug" -a "x$UNICODE" = "x0" ; then
         COND_BUILD_DEBUG_UNICODE_0=""
     fi
     AC_SUBST(COND_BUILD_DEBUG_UNICODE_0)
-dnl ### begin block 20_COND_BUILD_DEBUG_UNICODE_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_DEBUG_UNICODE_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_DEBUG_UNICODE_1="#"
     if test "x$BUILD" = "xdebug" -a "x$UNICODE" = "x1" ; then
         COND_BUILD_DEBUG_UNICODE_1=""
     fi
     AC_SUBST(COND_BUILD_DEBUG_UNICODE_1)
     COND_BUILD_DEBUG_UNICODE_1="#"
     if test "x$BUILD" = "xdebug" -a "x$UNICODE" = "x1" ; then
         COND_BUILD_DEBUG_UNICODE_1=""
     fi
     AC_SUBST(COND_BUILD_DEBUG_UNICODE_1)
-dnl ### begin block 20_COND_BUILD_RELEASE[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_RELEASE[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_RELEASE="#"
     if test "x$BUILD" = "xrelease" ; then
         COND_BUILD_RELEASE=""
     fi
     AC_SUBST(COND_BUILD_RELEASE)
     COND_BUILD_RELEASE="#"
     if test "x$BUILD" = "xrelease" ; then
         COND_BUILD_RELEASE=""
     fi
     AC_SUBST(COND_BUILD_RELEASE)
-dnl ### begin block 20_COND_BUILD_RELEASE_DEBUG_INFO_DEFAULT[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_RELEASE_DEBUG_INFO_DEFAULT[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_RELEASE_DEBUG_INFO_DEFAULT="#"
     if test "x$BUILD" = "xrelease" -a "x$DEBUG_INFO" = "xdefault" ; then
         COND_BUILD_RELEASE_DEBUG_INFO_DEFAULT=""
     fi
     AC_SUBST(COND_BUILD_RELEASE_DEBUG_INFO_DEFAULT)
     COND_BUILD_RELEASE_DEBUG_INFO_DEFAULT="#"
     if test "x$BUILD" = "xrelease" -a "x$DEBUG_INFO" = "xdefault" ; then
         COND_BUILD_RELEASE_DEBUG_INFO_DEFAULT=""
     fi
     AC_SUBST(COND_BUILD_RELEASE_DEBUG_INFO_DEFAULT)
-dnl ### begin block 20_COND_BUILD_RELEASE_UNICODE_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_RELEASE_UNICODE_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_RELEASE_UNICODE_0="#"
     if test "x$BUILD" = "xrelease" -a "x$UNICODE" = "x0" ; then
         COND_BUILD_RELEASE_UNICODE_0=""
     fi
     AC_SUBST(COND_BUILD_RELEASE_UNICODE_0)
     COND_BUILD_RELEASE_UNICODE_0="#"
     if test "x$BUILD" = "xrelease" -a "x$UNICODE" = "x0" ; then
         COND_BUILD_RELEASE_UNICODE_0=""
     fi
     AC_SUBST(COND_BUILD_RELEASE_UNICODE_0)
-dnl ### begin block 20_COND_BUILD_RELEASE_UNICODE_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_BUILD_RELEASE_UNICODE_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_BUILD_RELEASE_UNICODE_1="#"
     if test "x$BUILD" = "xrelease" -a "x$UNICODE" = "x1" ; then
         COND_BUILD_RELEASE_UNICODE_1=""
     fi
     AC_SUBST(COND_BUILD_RELEASE_UNICODE_1)
     COND_BUILD_RELEASE_UNICODE_1="#"
     if test "x$BUILD" = "xrelease" -a "x$UNICODE" = "x1" ; then
         COND_BUILD_RELEASE_UNICODE_1=""
     fi
     AC_SUBST(COND_BUILD_RELEASE_UNICODE_1)
-dnl ### begin block 20_COND_DEBUG_FLAG_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_DEBUG_FLAG_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_DEBUG_FLAG_1="#"
     if test "x$DEBUG_FLAG" = "x1" ; then
         COND_DEBUG_FLAG_1=""
     fi
     AC_SUBST(COND_DEBUG_FLAG_1)
     COND_DEBUG_FLAG_1="#"
     if test "x$DEBUG_FLAG" = "x1" ; then
         COND_DEBUG_FLAG_1=""
     fi
     AC_SUBST(COND_DEBUG_FLAG_1)
-dnl ### begin block 20_COND_DEBUG_INFO_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_DEBUG_INFO_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_DEBUG_INFO_0="#"
     if test "x$DEBUG_INFO" = "x0" ; then
         COND_DEBUG_INFO_0=""
     fi
     AC_SUBST(COND_DEBUG_INFO_0)
     COND_DEBUG_INFO_0="#"
     if test "x$DEBUG_INFO" = "x0" ; then
         COND_DEBUG_INFO_0=""
     fi
     AC_SUBST(COND_DEBUG_INFO_0)
-dnl ### begin block 20_COND_DEBUG_INFO_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_DEBUG_INFO_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_DEBUG_INFO_1="#"
     if test "x$DEBUG_INFO" = "x1" ; then
         COND_DEBUG_INFO_1=""
     fi
     AC_SUBST(COND_DEBUG_INFO_1)
     COND_DEBUG_INFO_1="#"
     if test "x$DEBUG_INFO" = "x1" ; then
         COND_DEBUG_INFO_1=""
     fi
     AC_SUBST(COND_DEBUG_INFO_1)
-dnl ### begin block 20_COND_DEPS_TRACKING_0[../../demos/bombs/bombs.bkl,../../demos/demos.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/html_samples.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/mobile_samples.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/opengl_samples.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/utils.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_DEPS_TRACKING_0[../../demos/bombs/bombs.bkl,../../demos/demos.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/html_samples.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/mobile_samples.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/opengl_samples.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/utils.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_DEPS_TRACKING_0="#"
     if test "x$DEPS_TRACKING" = "x0" ; then
         COND_DEPS_TRACKING_0=""
     fi
     AC_SUBST(COND_DEPS_TRACKING_0)
     COND_DEPS_TRACKING_0="#"
     if test "x$DEPS_TRACKING" = "x0" ; then
         COND_DEPS_TRACKING_0=""
     fi
     AC_SUBST(COND_DEPS_TRACKING_0)
-dnl ### begin block 20_COND_DEPS_TRACKING_1[../../demos/bombs/bombs.bkl,../../demos/demos.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/html_samples.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/mobile_samples.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/opengl_samples.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/utils.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_DEPS_TRACKING_1[../../demos/bombs/bombs.bkl,../../demos/demos.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/html_samples.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/mobile_samples.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/opengl_samples.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/utils.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_DEPS_TRACKING_1="#"
     if test "x$DEPS_TRACKING" = "x1" ; then
         COND_DEPS_TRACKING_1=""
     COND_DEPS_TRACKING_1="#"
     if test "x$DEPS_TRACKING" = "x1" ; then
         COND_DEPS_TRACKING_1=""
@@ -104,7 +104,7 @@ dnl ### begin block 20_COND_ICC_PCH_1[../../tests/test.bkl,wx.bkl] ###
         COND_ICC_PCH_1=""
     fi
     AC_SUBST(COND_ICC_PCH_1)
         COND_ICC_PCH_1=""
     fi
     AC_SUBST(COND_ICC_PCH_1)
-dnl ### begin block 20_COND_MONOLITHIC_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_MONOLITHIC_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_MONOLITHIC_0="#"
     if test "x$MONOLITHIC" = "x0" ; then
         COND_MONOLITHIC_0=""
     COND_MONOLITHIC_0="#"
     if test "x$MONOLITHIC" = "x0" ; then
         COND_MONOLITHIC_0=""
@@ -146,6 +146,12 @@ dnl ### begin block 20_COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1[wx.bkl] ###
         COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1)
         COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1)
+dnl ### begin block 20_COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1[wx.bkl] ###
+    COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1="#"
+    if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x0" -a "x$USE_PROPGRID" = "x1" ; then
+        COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1=""
+    fi
+    AC_SUBST(COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1)
 dnl ### begin block 20_COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1[wx.bkl] ###
     COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x0" -a "x$USE_RICHTEXT" = "x1" ; then
 dnl ### begin block 20_COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1[wx.bkl] ###
     COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x0" -a "x$USE_RICHTEXT" = "x1" ; then
@@ -200,6 +206,12 @@ dnl ### begin block 20_COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1[wx.bkl] ###
         COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1)
         COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1)
+dnl ### begin block 20_COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1[wx.bkl] ###
+    COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1="#"
+    if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x1" -a "x$USE_PROPGRID" = "x1" ; then
+        COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1=""
+    fi
+    AC_SUBST(COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1)
 dnl ### begin block 20_COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1[wx.bkl] ###
     COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x1" -a "x$USE_RICHTEXT" = "x1" ; then
 dnl ### begin block 20_COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1[wx.bkl] ###
     COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x1" -a "x$USE_RICHTEXT" = "x1" ; then
@@ -242,12 +254,18 @@ dnl ### begin block 20_COND_MONOLITHIC_0_USE_HTML_1[wx.bkl] ###
         COND_MONOLITHIC_0_USE_HTML_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_USE_HTML_1)
         COND_MONOLITHIC_0_USE_HTML_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_USE_HTML_1)
-dnl ### begin block 20_COND_MONOLITHIC_0_USE_MEDIA_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_MONOLITHIC_0_USE_MEDIA_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_MONOLITHIC_0_USE_MEDIA_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$USE_MEDIA" = "x1" ; then
         COND_MONOLITHIC_0_USE_MEDIA_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_USE_MEDIA_1)
     COND_MONOLITHIC_0_USE_MEDIA_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$USE_MEDIA" = "x1" ; then
         COND_MONOLITHIC_0_USE_MEDIA_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_USE_MEDIA_1)
+dnl ### begin block 20_COND_MONOLITHIC_0_USE_PROPGRID_1[wx.bkl] ###
+    COND_MONOLITHIC_0_USE_PROPGRID_1="#"
+    if test "x$MONOLITHIC" = "x0" -a "x$USE_PROPGRID" = "x1" ; then
+        COND_MONOLITHIC_0_USE_PROPGRID_1=""
+    fi
+    AC_SUBST(COND_MONOLITHIC_0_USE_PROPGRID_1)
 dnl ### begin block 20_COND_MONOLITHIC_0_USE_QA_1[wx.bkl] ###
     COND_MONOLITHIC_0_USE_QA_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$USE_QA" = "x1" ; then
 dnl ### begin block 20_COND_MONOLITHIC_0_USE_QA_1[wx.bkl] ###
     COND_MONOLITHIC_0_USE_QA_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$USE_QA" = "x1" ; then
@@ -272,7 +290,7 @@ dnl ### begin block 20_COND_MONOLITHIC_0_USE_XRC_1[wx.bkl] ###
         COND_MONOLITHIC_0_USE_XRC_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_USE_XRC_1)
         COND_MONOLITHIC_0_USE_XRC_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_0_USE_XRC_1)
-dnl ### begin block 20_COND_MONOLITHIC_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_MONOLITHIC_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_MONOLITHIC_1="#"
     if test "x$MONOLITHIC" = "x1" ; then
         COND_MONOLITHIC_1=""
     COND_MONOLITHIC_1="#"
     if test "x$MONOLITHIC" = "x1" ; then
         COND_MONOLITHIC_1=""
@@ -290,13 +308,13 @@ dnl ### begin block 20_COND_MONOLITHIC_1_SHARED_1[wx.bkl] ###
         COND_MONOLITHIC_1_SHARED_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_1_SHARED_1)
         COND_MONOLITHIC_1_SHARED_1=""
     fi
     AC_SUBST(COND_MONOLITHIC_1_SHARED_1)
-dnl ### begin block 20_COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1="#"
     if test "x$OFFICIAL_BUILD" = "x0" -a "x$PLATFORM_WIN32" = "x1" ; then
         COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1=""
     fi
     AC_SUBST(COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1)
     COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1="#"
     if test "x$OFFICIAL_BUILD" = "x0" -a "x$PLATFORM_WIN32" = "x1" ; then
         COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1=""
     fi
     AC_SUBST(COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1)
-dnl ### begin block 20_COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1="#"
     if test "x$OFFICIAL_BUILD" = "x1" -a "x$PLATFORM_WIN32" = "x1" ; then
         COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1=""
     COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1="#"
     if test "x$OFFICIAL_BUILD" = "x1" -a "x$PLATFORM_WIN32" = "x1" ; then
         COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1=""
@@ -314,7 +332,7 @@ dnl ### begin block 20_COND_PLATFORM_MACOSX_0_USE_SOVERSION_1[wx.bkl] ###
         COND_PLATFORM_MACOSX_0_USE_SOVERSION_1=""
     fi
     AC_SUBST(COND_PLATFORM_MACOSX_0_USE_SOVERSION_1)
         COND_PLATFORM_MACOSX_0_USE_SOVERSION_1=""
     fi
     AC_SUBST(COND_PLATFORM_MACOSX_0_USE_SOVERSION_1)
-dnl ### begin block 20_COND_PLATFORM_MACOSX_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_MACOSX_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_PLATFORM_MACOSX_1="#"
     if test "x$PLATFORM_MACOSX" = "x1" ; then
         COND_PLATFORM_MACOSX_1=""
     COND_PLATFORM_MACOSX_1="#"
     if test "x$PLATFORM_MACOSX" = "x1" ; then
         COND_PLATFORM_MACOSX_1=""
@@ -368,19 +386,19 @@ dnl ### begin block 20_COND_PLATFORM_MACOSX_1_USE_SOVERSION_1[wx.bkl] ###
         COND_PLATFORM_MACOSX_1_USE_SOVERSION_1=""
     fi
     AC_SUBST(COND_PLATFORM_MACOSX_1_USE_SOVERSION_1)
         COND_PLATFORM_MACOSX_1_USE_SOVERSION_1=""
     fi
     AC_SUBST(COND_PLATFORM_MACOSX_1_USE_SOVERSION_1)
-dnl ### begin block 20_COND_PLATFORM_MACOS_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_MACOS_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_PLATFORM_MACOS_1="#"
     if test "x$PLATFORM_MACOS" = "x1" ; then
         COND_PLATFORM_MACOS_1=""
     fi
     AC_SUBST(COND_PLATFORM_MACOS_1)
     COND_PLATFORM_MACOS_1="#"
     if test "x$PLATFORM_MACOS" = "x1" ; then
         COND_PLATFORM_MACOS_1=""
     fi
     AC_SUBST(COND_PLATFORM_MACOS_1)
-dnl ### begin block 20_COND_PLATFORM_MAC_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_MAC_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl] ###
     COND_PLATFORM_MAC_0="#"
     if test "x$PLATFORM_MAC" = "x0" ; then
         COND_PLATFORM_MAC_0=""
     fi
     AC_SUBST(COND_PLATFORM_MAC_0)
     COND_PLATFORM_MAC_0="#"
     if test "x$PLATFORM_MAC" = "x0" ; then
         COND_PLATFORM_MAC_0=""
     fi
     AC_SUBST(COND_PLATFORM_MAC_0)
-dnl ### begin block 20_COND_PLATFORM_MAC_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_MAC_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl] ###
     COND_PLATFORM_MAC_1="#"
     if test "x$PLATFORM_MAC" = "x1" ; then
         COND_PLATFORM_MAC_1=""
     COND_PLATFORM_MAC_1="#"
     if test "x$PLATFORM_MAC" = "x1" ; then
         COND_PLATFORM_MAC_1=""
@@ -392,25 +410,25 @@ dnl ### begin block 20_COND_PLATFORM_MSDOS_0[../../samples/dialup/dialup.bkl] ##
         COND_PLATFORM_MSDOS_0=""
     fi
     AC_SUBST(COND_PLATFORM_MSDOS_0)
         COND_PLATFORM_MSDOS_0=""
     fi
     AC_SUBST(COND_PLATFORM_MSDOS_0)
-dnl ### begin block 20_COND_PLATFORM_MSDOS_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_MSDOS_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_PLATFORM_MSDOS_1="#"
     if test "x$PLATFORM_MSDOS" = "x1" ; then
         COND_PLATFORM_MSDOS_1=""
     fi
     AC_SUBST(COND_PLATFORM_MSDOS_1)
     COND_PLATFORM_MSDOS_1="#"
     if test "x$PLATFORM_MSDOS" = "x1" ; then
         COND_PLATFORM_MSDOS_1=""
     fi
     AC_SUBST(COND_PLATFORM_MSDOS_1)
-dnl ### begin block 20_COND_PLATFORM_OS2_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_OS2_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_PLATFORM_OS2_1="#"
     if test "x$PLATFORM_OS2" = "x1" ; then
         COND_PLATFORM_OS2_1=""
     fi
     AC_SUBST(COND_PLATFORM_OS2_1)
     COND_PLATFORM_OS2_1="#"
     if test "x$PLATFORM_OS2" = "x1" ; then
         COND_PLATFORM_OS2_1=""
     fi
     AC_SUBST(COND_PLATFORM_OS2_1)
-dnl ### begin block 20_COND_PLATFORM_UNIX_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_UNIX_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_PLATFORM_UNIX_0="#"
     if test "x$PLATFORM_UNIX" = "x0" ; then
         COND_PLATFORM_UNIX_0=""
     fi
     AC_SUBST(COND_PLATFORM_UNIX_0)
     COND_PLATFORM_UNIX_0="#"
     if test "x$PLATFORM_UNIX" = "x0" ; then
         COND_PLATFORM_UNIX_0=""
     fi
     AC_SUBST(COND_PLATFORM_UNIX_0)
-dnl ### begin block 20_COND_PLATFORM_UNIX_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_UNIX_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_PLATFORM_UNIX_1="#"
     if test "x$PLATFORM_UNIX" = "x1" ; then
         COND_PLATFORM_UNIX_1=""
     COND_PLATFORM_UNIX_1="#"
     if test "x$PLATFORM_UNIX" = "x1" ; then
         COND_PLATFORM_UNIX_1=""
@@ -440,13 +458,13 @@ dnl ### begin block 20_COND_PLATFORM_UNIX_1_USE_PLUGINS_0[wx.bkl] ###
         COND_PLATFORM_UNIX_1_USE_PLUGINS_0=""
     fi
     AC_SUBST(COND_PLATFORM_UNIX_1_USE_PLUGINS_0)
         COND_PLATFORM_UNIX_1_USE_PLUGINS_0=""
     fi
     AC_SUBST(COND_PLATFORM_UNIX_1_USE_PLUGINS_0)
-dnl ### begin block 20_COND_PLATFORM_WIN32_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_WIN32_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_PLATFORM_WIN32_0="#"
     if test "x$PLATFORM_WIN32" = "x0" ; then
         COND_PLATFORM_WIN32_0=""
     fi
     AC_SUBST(COND_PLATFORM_WIN32_0)
     COND_PLATFORM_WIN32_0="#"
     if test "x$PLATFORM_WIN32" = "x0" ; then
         COND_PLATFORM_WIN32_0=""
     fi
     AC_SUBST(COND_PLATFORM_WIN32_0)
-dnl ### begin block 20_COND_PLATFORM_WIN32_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_PLATFORM_WIN32_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_PLATFORM_WIN32_1="#"
     if test "x$PLATFORM_WIN32" = "x1" ; then
         COND_PLATFORM_WIN32_1=""
     COND_PLATFORM_WIN32_1="#"
     if test "x$PLATFORM_WIN32" = "x1" ; then
         COND_PLATFORM_WIN32_1=""
@@ -524,7 +542,7 @@ dnl ### begin block 20_COND_SHARED_0_WXUSE_ZLIB_BUILTIN[wx.bkl] ###
         COND_SHARED_0_WXUSE_ZLIB_BUILTIN=""
     fi
     AC_SUBST(COND_SHARED_0_WXUSE_ZLIB_BUILTIN)
         COND_SHARED_0_WXUSE_ZLIB_BUILTIN=""
     fi
     AC_SUBST(COND_SHARED_0_WXUSE_ZLIB_BUILTIN)
-dnl ### begin block 20_COND_SHARED_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_SHARED_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_SHARED_1="#"
     if test "x$SHARED" = "x1" ; then
         COND_SHARED_1=""
     COND_SHARED_1="#"
     if test "x$SHARED" = "x1" ; then
         COND_SHARED_1=""
@@ -542,7 +560,7 @@ dnl ### begin block 20_COND_TOOLKIT_[wx.bkl] ###
         COND_TOOLKIT_=""
     fi
     AC_SUBST(COND_TOOLKIT_)
         COND_TOOLKIT_=""
     fi
     AC_SUBST(COND_TOOLKIT_)
-dnl ### begin block 20_COND_TOOLKIT_COCOA[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/test.bkl,../../utils/helpview/src/helpview.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_TOOLKIT_COCOA[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/test.bkl,../../utils/helpview/src/helpview.bkl,wx.bkl] ###
     COND_TOOLKIT_COCOA="#"
     if test "x$TOOLKIT" = "xCOCOA" ; then
         COND_TOOLKIT_COCOA=""
     COND_TOOLKIT_COCOA="#"
     if test "x$TOOLKIT" = "xCOCOA" ; then
         COND_TOOLKIT_COCOA=""
@@ -626,7 +644,7 @@ dnl ### begin block 20_COND_TOOLKIT_GTK_USE_GUI_1[wx.bkl] ###
         COND_TOOLKIT_GTK_USE_GUI_1=""
     fi
     AC_SUBST(COND_TOOLKIT_GTK_USE_GUI_1)
         COND_TOOLKIT_GTK_USE_GUI_1=""
     fi
     AC_SUBST(COND_TOOLKIT_GTK_USE_GUI_1)
-dnl ### begin block 20_COND_TOOLKIT_MAC[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_TOOLKIT_MAC[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_TOOLKIT_MAC="#"
     if test "x$TOOLKIT" = "xMAC" ; then
         COND_TOOLKIT_MAC=""
     COND_TOOLKIT_MAC="#"
     if test "x$TOOLKIT" = "xMAC" ; then
         COND_TOOLKIT_MAC=""
@@ -662,7 +680,7 @@ dnl ### begin block 20_COND_TOOLKIT_MOTIF_USE_GUI_1_WXUNIV_0[wx.bkl] ###
         COND_TOOLKIT_MOTIF_USE_GUI_1_WXUNIV_0=""
     fi
     AC_SUBST(COND_TOOLKIT_MOTIF_USE_GUI_1_WXUNIV_0)
         COND_TOOLKIT_MOTIF_USE_GUI_1_WXUNIV_0=""
     fi
     AC_SUBST(COND_TOOLKIT_MOTIF_USE_GUI_1_WXUNIV_0)
-dnl ### begin block 20_COND_TOOLKIT_MSW[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_TOOLKIT_MSW[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_TOOLKIT_MSW="#"
     if test "x$TOOLKIT" = "xMSW" ; then
         COND_TOOLKIT_MSW=""
     COND_TOOLKIT_MSW="#"
     if test "x$TOOLKIT" = "xMSW" ; then
         COND_TOOLKIT_MSW=""
@@ -686,7 +704,7 @@ dnl ### begin block 20_COND_TOOLKIT_MSW_WXUNIV_0[wx.bkl] ###
         COND_TOOLKIT_MSW_WXUNIV_0=""
     fi
     AC_SUBST(COND_TOOLKIT_MSW_WXUNIV_0)
         COND_TOOLKIT_MSW_WXUNIV_0=""
     fi
     AC_SUBST(COND_TOOLKIT_MSW_WXUNIV_0)
-dnl ### begin block 20_COND_TOOLKIT_OSX_CARBON[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/test.bkl,../../utils/helpview/src/helpview.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_TOOLKIT_OSX_CARBON[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/test.bkl,../../utils/helpview/src/helpview.bkl,wx.bkl] ###
     COND_TOOLKIT_OSX_CARBON="#"
     if test "x$TOOLKIT" = "xOSX_CARBON" ; then
         COND_TOOLKIT_OSX_CARBON=""
     COND_TOOLKIT_OSX_CARBON="#"
     if test "x$TOOLKIT" = "xOSX_CARBON" ; then
         COND_TOOLKIT_OSX_CARBON=""
@@ -704,7 +722,7 @@ dnl ### begin block 20_COND_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0[wx.bkl] ###
         COND_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0=""
     fi
     AC_SUBST(COND_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0)
         COND_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0=""
     fi
     AC_SUBST(COND_TOOLKIT_OSX_CARBON_USE_GUI_1_WXUNIV_0)
-dnl ### begin block 20_COND_TOOLKIT_OSX_COCOA[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/test.bkl,../../utils/helpview/src/helpview.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_TOOLKIT_OSX_COCOA[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/test.bkl,../../utils/helpview/src/helpview.bkl,wx.bkl] ###
     COND_TOOLKIT_OSX_COCOA="#"
     if test "x$TOOLKIT" = "xOSX_COCOA" ; then
         COND_TOOLKIT_OSX_COCOA=""
     COND_TOOLKIT_OSX_COCOA="#"
     if test "x$TOOLKIT" = "xOSX_COCOA" ; then
         COND_TOOLKIT_OSX_COCOA=""
@@ -722,7 +740,7 @@ dnl ### begin block 20_COND_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0[wx.bkl] ###
         COND_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0=""
     fi
     AC_SUBST(COND_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0)
         COND_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0=""
     fi
     AC_SUBST(COND_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0)
-dnl ### begin block 20_COND_TOOLKIT_OSX_IPHONE[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/test.bkl,../../utils/helpview/src/helpview.bkl] ###
+dnl ### begin block 20_COND_TOOLKIT_OSX_IPHONE[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/test.bkl,../../utils/helpview/src/helpview.bkl] ###
     COND_TOOLKIT_OSX_IPHONE="#"
     if test "x$TOOLKIT" = "xOSX_IPHONE" ; then
         COND_TOOLKIT_OSX_IPHONE=""
     COND_TOOLKIT_OSX_IPHONE="#"
     if test "x$TOOLKIT" = "xOSX_IPHONE" ; then
         COND_TOOLKIT_OSX_IPHONE=""
@@ -782,31 +800,31 @@ dnl ### begin block 20_COND_TOOLKIT_X11_USE_GUI_1[wx.bkl] ###
         COND_TOOLKIT_X11_USE_GUI_1=""
     fi
     AC_SUBST(COND_TOOLKIT_X11_USE_GUI_1)
         COND_TOOLKIT_X11_USE_GUI_1=""
     fi
     AC_SUBST(COND_TOOLKIT_X11_USE_GUI_1)
-dnl ### begin block 20_COND_UNICODE_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_UNICODE_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_UNICODE_1="#"
     if test "x$UNICODE" = "x1" ; then
         COND_UNICODE_1=""
     fi
     AC_SUBST(COND_UNICODE_1)
     COND_UNICODE_1="#"
     if test "x$UNICODE" = "x1" ; then
         COND_UNICODE_1=""
     fi
     AC_SUBST(COND_UNICODE_1)
-dnl ### begin block 20_COND_USE_EXCEPTIONS_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_EXCEPTIONS_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_EXCEPTIONS_0="#"
     if test "x$USE_EXCEPTIONS" = "x0" ; then
         COND_USE_EXCEPTIONS_0=""
     fi
     AC_SUBST(COND_USE_EXCEPTIONS_0)
     COND_USE_EXCEPTIONS_0="#"
     if test "x$USE_EXCEPTIONS" = "x0" ; then
         COND_USE_EXCEPTIONS_0=""
     fi
     AC_SUBST(COND_USE_EXCEPTIONS_0)
-dnl ### begin block 20_COND_USE_EXCEPTIONS_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_EXCEPTIONS_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_EXCEPTIONS_1="#"
     if test "x$USE_EXCEPTIONS" = "x1" ; then
         COND_USE_EXCEPTIONS_1=""
     fi
     AC_SUBST(COND_USE_EXCEPTIONS_1)
     COND_USE_EXCEPTIONS_1="#"
     if test "x$USE_EXCEPTIONS" = "x1" ; then
         COND_USE_EXCEPTIONS_1=""
     fi
     AC_SUBST(COND_USE_EXCEPTIONS_1)
-dnl ### begin block 20_COND_USE_GUI_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_GUI_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_GUI_0="#"
     if test "x$USE_GUI" = "x0" ; then
         COND_USE_GUI_0=""
     fi
     AC_SUBST(COND_USE_GUI_0)
     COND_USE_GUI_0="#"
     if test "x$USE_GUI" = "x0" ; then
         COND_USE_GUI_0=""
     fi
     AC_SUBST(COND_USE_GUI_0)
-dnl ### begin block 20_COND_USE_GUI_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_GUI_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_GUI_1="#"
     if test "x$USE_GUI" = "x1" ; then
         COND_USE_GUI_1=""
     COND_USE_GUI_1="#"
     if test "x$USE_GUI" = "x1" ; then
         COND_USE_GUI_1=""
@@ -830,19 +848,19 @@ dnl ### begin block 20_COND_USE_GUI_1_WXUNIV_1[wx.bkl] ###
         COND_USE_GUI_1_WXUNIV_1=""
     fi
     AC_SUBST(COND_USE_GUI_1_WXUNIV_1)
         COND_USE_GUI_1_WXUNIV_1=""
     fi
     AC_SUBST(COND_USE_GUI_1_WXUNIV_1)
-dnl ### begin block 20_COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN="#"
     if test "x$USE_GUI" = "x1" -a "x$wxUSE_LIBJPEG" = "xbuiltin" ; then
         COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN=""
     fi
     AC_SUBST(COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN)
     COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN="#"
     if test "x$USE_GUI" = "x1" -a "x$wxUSE_LIBJPEG" = "xbuiltin" ; then
         COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN=""
     fi
     AC_SUBST(COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN)
-dnl ### begin block 20_COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN="#"
     if test "x$USE_GUI" = "x1" -a "x$wxUSE_LIBPNG" = "xbuiltin" ; then
         COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN=""
     fi
     AC_SUBST(COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN)
     COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN="#"
     if test "x$USE_GUI" = "x1" -a "x$wxUSE_LIBPNG" = "xbuiltin" ; then
         COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN=""
     fi
     AC_SUBST(COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN)
-dnl ### begin block 20_COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN="#"
     if test "x$USE_GUI" = "x1" -a "x$wxUSE_LIBTIFF" = "xbuiltin" ; then
         COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN=""
     COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN="#"
     if test "x$USE_GUI" = "x1" -a "x$wxUSE_LIBTIFF" = "xbuiltin" ; then
         COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN=""
@@ -860,19 +878,19 @@ dnl ### begin block 20_COND_USE_PCH_1[../../tests/test.bkl,wx.bkl] ###
         COND_USE_PCH_1=""
     fi
     AC_SUBST(COND_USE_PCH_1)
         COND_USE_PCH_1=""
     fi
     AC_SUBST(COND_USE_PCH_1)
-dnl ### begin block 20_COND_USE_PLUGINS_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_PLUGINS_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_PLUGINS_0="#"
     if test "x$USE_PLUGINS" = "x0" ; then
         COND_USE_PLUGINS_0=""
     fi
     AC_SUBST(COND_USE_PLUGINS_0)
     COND_USE_PLUGINS_0="#"
     if test "x$USE_PLUGINS" = "x0" ; then
         COND_USE_PLUGINS_0=""
     fi
     AC_SUBST(COND_USE_PLUGINS_0)
-dnl ### begin block 20_COND_USE_RTTI_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_RTTI_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_RTTI_0="#"
     if test "x$USE_RTTI" = "x0" ; then
         COND_USE_RTTI_0=""
     fi
     AC_SUBST(COND_USE_RTTI_0)
     COND_USE_RTTI_0="#"
     if test "x$USE_RTTI" = "x0" ; then
         COND_USE_RTTI_0=""
     fi
     AC_SUBST(COND_USE_RTTI_0)
-dnl ### begin block 20_COND_USE_RTTI_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_RTTI_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_RTTI_1="#"
     if test "x$USE_RTTI" = "x1" ; then
         COND_USE_RTTI_1=""
     COND_USE_RTTI_1="#"
     if test "x$USE_RTTI" = "x1" ; then
         COND_USE_RTTI_1=""
@@ -914,13 +932,13 @@ dnl ### begin block 20_COND_USE_STC_1[wx.bkl] ###
         COND_USE_STC_1=""
     fi
     AC_SUBST(COND_USE_STC_1)
         COND_USE_STC_1=""
     fi
     AC_SUBST(COND_USE_STC_1)
-dnl ### begin block 20_COND_USE_THREADS_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_THREADS_0[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_THREADS_0="#"
     if test "x$USE_THREADS" = "x0" ; then
         COND_USE_THREADS_0=""
     fi
     AC_SUBST(COND_USE_THREADS_0)
     COND_USE_THREADS_0="#"
     if test "x$USE_THREADS" = "x0" ; then
         COND_USE_THREADS_0=""
     fi
     AC_SUBST(COND_USE_THREADS_0)
-dnl ### begin block 20_COND_USE_THREADS_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_USE_THREADS_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_USE_THREADS_1="#"
     if test "x$USE_THREADS" = "x1" ; then
         COND_USE_THREADS_1=""
     COND_USE_THREADS_1="#"
     if test "x$USE_THREADS" = "x1" ; then
         COND_USE_THREADS_1=""
@@ -950,43 +968,43 @@ dnl ### begin block 20_COND_WXUNIV_0[wx.bkl] ###
         COND_WXUNIV_0=""
     fi
     AC_SUBST(COND_WXUNIV_0)
         COND_WXUNIV_0=""
     fi
     AC_SUBST(COND_WXUNIV_0)
-dnl ### begin block 20_COND_WXUNIV_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_WXUNIV_1[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_WXUNIV_1="#"
     if test "x$WXUNIV" = "x1" ; then
         COND_WXUNIV_1=""
     fi
     AC_SUBST(COND_WXUNIV_1)
     COND_WXUNIV_1="#"
     if test "x$WXUNIV" = "x1" ; then
         COND_WXUNIV_1=""
     fi
     AC_SUBST(COND_WXUNIV_1)
-dnl ### begin block 20_COND_WXUSE_EXPAT_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_WXUSE_EXPAT_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_WXUSE_EXPAT_BUILTIN="#"
     if test "x$wxUSE_EXPAT" = "xbuiltin" ; then
         COND_WXUSE_EXPAT_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_EXPAT_BUILTIN)
     COND_WXUSE_EXPAT_BUILTIN="#"
     if test "x$wxUSE_EXPAT" = "xbuiltin" ; then
         COND_WXUSE_EXPAT_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_EXPAT_BUILTIN)
-dnl ### begin block 20_COND_WXUSE_LIBJPEG_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_WXUSE_LIBJPEG_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_WXUSE_LIBJPEG_BUILTIN="#"
     if test "x$wxUSE_LIBJPEG" = "xbuiltin" ; then
         COND_WXUSE_LIBJPEG_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_LIBJPEG_BUILTIN)
     COND_WXUSE_LIBJPEG_BUILTIN="#"
     if test "x$wxUSE_LIBJPEG" = "xbuiltin" ; then
         COND_WXUSE_LIBJPEG_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_LIBJPEG_BUILTIN)
-dnl ### begin block 20_COND_WXUSE_LIBPNG_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_WXUSE_LIBPNG_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_WXUSE_LIBPNG_BUILTIN="#"
     if test "x$wxUSE_LIBPNG" = "xbuiltin" ; then
         COND_WXUSE_LIBPNG_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_LIBPNG_BUILTIN)
     COND_WXUSE_LIBPNG_BUILTIN="#"
     if test "x$wxUSE_LIBPNG" = "xbuiltin" ; then
         COND_WXUSE_LIBPNG_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_LIBPNG_BUILTIN)
-dnl ### begin block 20_COND_WXUSE_LIBTIFF_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_WXUSE_LIBTIFF_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_WXUSE_LIBTIFF_BUILTIN="#"
     if test "x$wxUSE_LIBTIFF" = "xbuiltin" ; then
         COND_WXUSE_LIBTIFF_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_LIBTIFF_BUILTIN)
     COND_WXUSE_LIBTIFF_BUILTIN="#"
     if test "x$wxUSE_LIBTIFF" = "xbuiltin" ; then
         COND_WXUSE_LIBTIFF_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_LIBTIFF_BUILTIN)
-dnl ### begin block 20_COND_WXUSE_REGEX_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_WXUSE_REGEX_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_WXUSE_REGEX_BUILTIN="#"
     if test "x$wxUSE_REGEX" = "xbuiltin" ; then
         COND_WXUSE_REGEX_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_REGEX_BUILTIN)
     COND_WXUSE_REGEX_BUILTIN="#"
     if test "x$wxUSE_REGEX" = "xbuiltin" ; then
         COND_WXUSE_REGEX_BUILTIN=""
     fi
     AC_SUBST(COND_WXUSE_REGEX_BUILTIN)
-dnl ### begin block 20_COND_WXUSE_ZLIB_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
+dnl ### begin block 20_COND_WXUSE_ZLIB_BUILTIN[../../demos/bombs/bombs.bkl,../../demos/forty/forty.bkl,../../demos/fractal/fractal.bkl,../../demos/life/life.bkl,../../demos/poem/poem.bkl,../../samples/access/access.bkl,../../samples/animate/anitest.bkl,../../samples/artprov/artprov.bkl,../../samples/aui/auidemo.bkl,../../samples/calendar/calendar.bkl,../../samples/caret/caret.bkl,../../samples/collpane/collpane.bkl,../../samples/combo/combo.bkl,../../samples/config/config.bkl,../../samples/console/console.bkl,../../samples/controls/controls.bkl,../../samples/dataview/dataview.bkl,../../samples/debugrpt/debugrpt.bkl,../../samples/dialogs/dialogs.bkl,../../samples/dialup/dialup.bkl,../../samples/display/display.bkl,../../samples/dnd/dnd.bkl,../../samples/docview/docview.bkl,../../samples/docvwmdi/docvwmdi.bkl,../../samples/dragimag/dragimag.bkl,../../samples/drawing/drawing.bkl,../../samples/editlbox/editlbox.bkl,../../samples/erase/erase.bkl,../../samples/event/event.bkl,../../samples/except/except.bkl,../../samples/exec/exec.bkl,../../samples/font/font.bkl,../../samples/grid/grid.bkl,../../samples/help/help.bkl,../../samples/htlbox/htlbox.bkl,../../samples/html/about/about.bkl,../../samples/html/help/help.bkl,../../samples/html/helpview/helpview.bkl,../../samples/html/htmlctrl/htmlctrl.bkl,../../samples/html/printing/printing.bkl,../../samples/html/test/test.bkl,../../samples/html/virtual/virtual.bkl,../../samples/html/widget/widget.bkl,../../samples/html/zip/zip.bkl,../../samples/image/image.bkl,../../samples/internat/internat.bkl,../../samples/ipc/ipc.bkl,../../samples/joytest/joytest.bkl,../../samples/keyboard/keyboard.bkl,../../samples/layout/layout.bkl,../../samples/listctrl/listctrl.bkl,../../samples/mdi/mdi.bkl,../../samples/mediaplayer/mediaplayer.bkl,../../samples/memcheck/memcheck.bkl,../../samples/menu/menu.bkl,../../samples/mfc/mfc.bkl,../../samples/minimal/minimal.bkl,../../samples/mobile/styles/styles.bkl,../../samples/mobile/wxedit/wxedit.bkl,../../samples/nativdlg/nativdlg.bkl,../../samples/notebook/notebook.bkl,../../samples/oleauto/oleauto.bkl,../../samples/opengl/cube/cube.bkl,../../samples/opengl/isosurf/isosurf.bkl,../../samples/opengl/penguin/penguin.bkl,../../samples/ownerdrw/ownerdrw.bkl,../../samples/popup/popup.bkl,../../samples/power/power.bkl,../../samples/printing/printing.bkl,../../samples/propgrid/propgrid.bkl,../../samples/regtest/regtest.bkl,../../samples/render/render.bkl,../../samples/richtext/richtext.bkl,../../samples/sashtest/sashtest.bkl,../../samples/scroll/scroll.bkl,../../samples/scrollsub/scrollsub.bkl,../../samples/shaped/shaped.bkl,../../samples/sockets/sockets.bkl,../../samples/sound/sound.bkl,../../samples/splash/splash.bkl,../../samples/splitter/splitter.bkl,../../samples/statbar/statbar.bkl,../../samples/stc/stctest.bkl,../../samples/svg/svgtest.bkl,../../samples/taborder/taborder.bkl,../../samples/taskbar/taskbar.bkl,../../samples/text/text.bkl,../../samples/thread/thread.bkl,../../samples/toolbar/toolbar.bkl,../../samples/treectrl/treectrl.bkl,../../samples/typetest/typetest.bkl,../../samples/validate/validate.bkl,../../samples/vscroll/vscroll.bkl,../../samples/widgets/widgets.bkl,../../samples/wizard/wizard.bkl,../../samples/wrapsizer/wrapsizer.bkl,../../samples/xrc/xrcdemo.bkl,../../tests/benchmarks/bench.bkl,../../tests/test.bkl,../../utils/HelpGen/src/helpgen.bkl,../../utils/emulator/src/emulator.bkl,../../utils/helpview/src/helpview.bkl,../../utils/hhp2cached/hhp2cached.bkl,../../utils/ifacecheck/ifacecheck.bkl,../../utils/ifacecheck/src/ifacecheck.bkl,../../utils/tex2rtf/src/tex2rtf.bkl,../../utils/wxrc/wxrc.bkl,wx.bkl] ###
     COND_WXUSE_ZLIB_BUILTIN="#"
     if test "x$wxUSE_ZLIB" = "xbuiltin" ; then
         COND_WXUSE_ZLIB_BUILTIN=""
     COND_WXUSE_ZLIB_BUILTIN="#"
     if test "x$wxUSE_ZLIB" = "xbuiltin" ; then
         COND_WXUSE_ZLIB_BUILTIN=""
index 89080fa27e19dd81424ee685bcf2441a6062244a..f2abec66fd5ad4cd017cb9bd16bfb41a35d1d12e 100644 (file)
     <set var="WXLIB_AUI">
         <if cond="MONOLITHIC=='0'">$(mk.evalExpr(wxwin.mkLibName('aui')))</if>
     </set>
     <set var="WXLIB_AUI">
         <if cond="MONOLITHIC=='0'">$(mk.evalExpr(wxwin.mkLibName('aui')))</if>
     </set>
+    <set var="WXLIB_PROPGRID">
+        <if cond="MONOLITHIC=='0'">$(mk.evalExpr(wxwin.mkLibName('propgrid')))</if>
+    </set>
     <set var="WXLIB_RICHTEXT">
         <if cond="MONOLITHIC=='0'">$(mk.evalExpr(wxwin.mkLibName('richtext')))</if>
     </set>
     <set var="WXLIB_RICHTEXT">
         <if cond="MONOLITHIC=='0'">$(mk.evalExpr(wxwin.mkLibName('richtext')))</if>
     </set>
index e9e8505137884b45f2cd416c5ac2fc4cdca29372..37ed41dc6d443c4fac3bc3f132c163b4aa0e5aac 100644 (file)
@@ -213,6 +213,14 @@ Acts according to BUILD by default.
         </description>
     </option>
 
         </description>
     </option>
 
+    <option name="USE_PROPGRID">
+        <values>0,1</values>
+        <default-value>1</default-value>
+        <description>
+            Build wxPropertyGrid library (USE_GUI must be 1)?
+        </description>
+    </option>
+
     <option name="USE_RICHTEXT">
         <values>0,1</values>
         <default-value>1</default-value>
     <option name="USE_RICHTEXT">
         <values>0,1</values>
         <default-value>1</default-value>
@@ -444,6 +452,7 @@ Set the version of your Mingw installation here.
         <set var="RUNTIME_LIBS">dynamic</set>
         <set var="OFFICIAL_BUILD">0</set>
         <set var="USE_AUI">1</set>
         <set var="RUNTIME_LIBS">dynamic</set>
         <set var="OFFICIAL_BUILD">0</set>
         <set var="USE_AUI">1</set>
+        <set var="USE_PROPGRID">1</set>
         <set var="USE_RICHTEXT">1</set>
         <set var="USE_STC">1</set>
         <set var="USE_HTML">1</set>
         <set var="USE_RICHTEXT">1</set>
         <set var="USE_STC">1</set>
         <set var="USE_HTML">1</set>
index 8e222c4e353e06b08e8b8fcf75def6e1b2129db1..f7f5ccc49f022a307008c8d52deb444cfeab2f12 100644 (file)
@@ -3456,6 +3456,32 @@ src/osx/iphone/window.mm
     wx/aui/aui.h
 </set>
 
     wx/aui/aui.h
 </set>
 
+<!-- ====================================================================== -->
+<!--                                  wxPropertyGrid                        -->
+<!-- ====================================================================== -->
+
+<set var="PROPGRID_SRC" hints="files">
+    src/propgrid/advprops.cpp
+    src/propgrid/editors.cpp
+    src/propgrid/manager.cpp
+    src/propgrid/property.cpp
+    src/propgrid/propgrid.cpp
+    src/propgrid/propgridiface.cpp
+    src/propgrid/propgridpagestate.cpp
+    src/propgrid/props.cpp
+</set>
+<set var="PROPGRID_HDR" hints="files">
+    wx/propgrid/advprops.h
+    wx/propgrid/editors.h
+    wx/propgrid/manager.h
+    wx/propgrid/property.h
+    wx/propgrid/propgrid.h
+    wx/propgrid/propgriddefs.h
+    wx/propgrid/propgridiface.h
+    wx/propgrid/propgridpagestate.h
+    wx/propgrid/props.h
+</set>
+
 <!-- ====================================================================== -->
 <!--                                  wxRichTextCtrl                        -->
 <!-- ====================================================================== -->
 <!-- ====================================================================== -->
 <!--                                  wxRichTextCtrl                        -->
 <!-- ====================================================================== -->
@@ -3744,8 +3770,8 @@ src/osx/iphone/window.mm
             $(LOWLEVEL_HDR)
             $(GUI_CORE_HEADERS)
             $(ADVANCED_HDR) $(MEDIA_HDR) $(HTML_HDR)
             $(LOWLEVEL_HDR)
             $(GUI_CORE_HEADERS)
             $(ADVANCED_HDR) $(MEDIA_HDR) $(HTML_HDR)
-            $(OPENGL_HDR) $(QA_HDR) $(XRC_HDR) $(AUI_HDR) $(RICHTEXT_HDR)
-            $(STC_HDR)
+            $(OPENGL_HDR) $(QA_HDR) $(XRC_HDR) $(AUI_HDR) $(PROPGRID_HDR)
+            $(RICHTEXT_HDR) $(STC_HDR)
         </if>
     </set>
 
         </if>
     </set>
 
index 3dbe39db71ef61734b898e12c17849cf4873f11f..fc74933a0904e225de82f24b9a7b5ebd48ab1c8d 100644 (file)
@@ -15,6 +15,7 @@ COMMDIR  = $(WXDIR)/src/common
 HTMLDIR  = $(WXDIR)/src/html
 RICHTEXTDIR = $(WXDIR)/src/richtext
 AUIDIR =   $(WXDIR)/src/aui
 HTMLDIR  = $(WXDIR)/src/html
 RICHTEXTDIR = $(WXDIR)/src/richtext
 AUIDIR =   $(WXDIR)/src/aui
+PROPGRIDDIR = $(WXDIR)/src/propgrid
 STCDIR =   $(WXDIR)/src/stc
 UNIXDIR  = $(WXDIR)/src/unix
 PNGDIR   = $(WXDIR)/src/png
 STCDIR =   $(WXDIR)/src/stc
 UNIXDIR  = $(WXDIR)/src/unix
 PNGDIR   = $(WXDIR)/src/png
@@ -160,6 +161,7 @@ ALL_GUI_DIST: ALL_DIST
        mkdir $(DISTDIR)/include/wx/html
        mkdir $(DISTDIR)/include/wx/richtext
        mkdir $(DISTDIR)/include/wx/aui
        mkdir $(DISTDIR)/include/wx/html
        mkdir $(DISTDIR)/include/wx/richtext
        mkdir $(DISTDIR)/include/wx/aui
+       mkdir $(DISTDIR)/include/wx/propgrid
        mkdir $(DISTDIR)/include/wx/stc
        mkdir $(DISTDIR)/include/wx/protocol
        mkdir $(DISTDIR)/include/wx/unix
        mkdir $(DISTDIR)/include/wx/stc
        mkdir $(DISTDIR)/include/wx/protocol
        mkdir $(DISTDIR)/include/wx/unix
@@ -173,6 +175,7 @@ ALL_GUI_DIST: ALL_DIST
        $(CP_P) $(INCDIR)/wx/html/*.h $(DISTDIR)/include/wx/html
        $(CP_P) $(INCDIR)/wx/richtext/*.h $(DISTDIR)/include/wx/richtext
        $(CP_P) $(INCDIR)/wx/aui/*.h $(DISTDIR)/include/wx/aui
        $(CP_P) $(INCDIR)/wx/html/*.h $(DISTDIR)/include/wx/html
        $(CP_P) $(INCDIR)/wx/richtext/*.h $(DISTDIR)/include/wx/richtext
        $(CP_P) $(INCDIR)/wx/aui/*.h $(DISTDIR)/include/wx/aui
+       $(CP_P) $(INCDIR)/wx/propgrid/*.h $(DISTDIR)/include/wx/propgrid
        $(CP_P) $(INCDIR)/wx/stc/*.h $(DISTDIR)/include/wx/stc
        $(CP_P) $(INCDIR)/wx/unix/*.h $(DISTDIR)/include/wx/unix
        $(CP_P) $(INCDIR)/wx/unix/private/*.h $(DISTDIR)/include/wx/unix/private
        $(CP_P) $(INCDIR)/wx/stc/*.h $(DISTDIR)/include/wx/stc
        $(CP_P) $(INCDIR)/wx/unix/*.h $(DISTDIR)/include/wx/unix
        $(CP_P) $(INCDIR)/wx/unix/private/*.h $(DISTDIR)/include/wx/unix/private
@@ -212,7 +215,10 @@ ALL_GUI_DIST: ALL_DIST
         
        mkdir $(DISTDIR)/src/aui
        $(CP_P) $(AUIDIR)/*.cpp $(DISTDIR)/src/aui
         
        mkdir $(DISTDIR)/src/aui
        $(CP_P) $(AUIDIR)/*.cpp $(DISTDIR)/src/aui
-        
+
+       mkdir $(DISTDIR)/src/propgrid
+       $(CP_P) $(PROPGRIDDIR)/*.cpp $(DISTDIR)/src/propgrid
+
        mkdir $(DISTDIR)/src/stc
        mkdir $(DISTDIR)/src/stc/scintilla
        mkdir $(DISTDIR)/src/stc/scintilla/src
        mkdir $(DISTDIR)/src/stc
        mkdir $(DISTDIR)/src/stc/scintilla
        mkdir $(DISTDIR)/src/stc/scintilla/src
@@ -274,6 +280,7 @@ BASE_DIST: ALL_DIST INTL_DIST
        mkdir $(DISTDIR)/include/wx/html
        mkdir $(DISTDIR)/include/wx/richtext
        mkdir $(DISTDIR)/include/wx/aui
        mkdir $(DISTDIR)/include/wx/html
        mkdir $(DISTDIR)/include/wx/richtext
        mkdir $(DISTDIR)/include/wx/aui
+       mkdir $(DISTDIR)/include/wx/propgrid
        mkdir $(DISTDIR)/include/wx/stc
        mkdir $(DISTDIR)/include/wx/osx
        mkdir $(DISTDIR)/include/wx/osx/carbon
        mkdir $(DISTDIR)/include/wx/stc
        mkdir $(DISTDIR)/include/wx/osx
        mkdir $(DISTDIR)/include/wx/osx/carbon
@@ -720,6 +727,7 @@ MANUAL_DIST:
        mkdir $(DISTDIR)/interface/wx/msw
        mkdir $(DISTDIR)/interface/wx/msw/ole
        mkdir $(DISTDIR)/interface/wx/protocol
        mkdir $(DISTDIR)/interface/wx/msw
        mkdir $(DISTDIR)/interface/wx/msw/ole
        mkdir $(DISTDIR)/interface/wx/protocol
+       mkdir $(DISTDIR)/interface/wx/propgrid
        mkdir $(DISTDIR)/interface/wx/richtext
        mkdir $(DISTDIR)/interface/wx/stc
        mkdir $(DISTDIR)/interface/wx/xml
        mkdir $(DISTDIR)/interface/wx/richtext
        mkdir $(DISTDIR)/interface/wx/stc
        mkdir $(DISTDIR)/interface/wx/xml
@@ -731,6 +739,7 @@ MANUAL_DIST:
        $(CP_P) $(IFACEDIR)/wx/msw/*.h $(DISTDIR)/interface/wx/msw
        $(CP_P) $(IFACEDIR)/wx/msw/ole/*.h $(DISTDIR)/interface/wx/msw/ole
        $(CP_P) $(IFACEDIR)/wx/protocol/*.h $(DISTDIR)/interface/wx/protocol
        $(CP_P) $(IFACEDIR)/wx/msw/*.h $(DISTDIR)/interface/wx/msw
        $(CP_P) $(IFACEDIR)/wx/msw/ole/*.h $(DISTDIR)/interface/wx/msw/ole
        $(CP_P) $(IFACEDIR)/wx/protocol/*.h $(DISTDIR)/interface/wx/protocol
+       $(CP_P) $(IFACEDIR)/wx/propgrid/*.h $(DISTDIR)/interface/wx/propgrid
        $(CP_P) $(IFACEDIR)/wx/richtext/*.h $(DISTDIR)/interface/wx/richtext
        $(CP_P) $(IFACEDIR)/wx/stc/*.h $(DISTDIR)/interface/wx/stc
        $(CP_P) $(IFACEDIR)/wx/xml/*.h $(DISTDIR)/interface/wx/xml
        $(CP_P) $(IFACEDIR)/wx/richtext/*.h $(DISTDIR)/interface/wx/richtext
        $(CP_P) $(IFACEDIR)/wx/stc/*.h $(DISTDIR)/interface/wx/stc
        $(CP_P) $(IFACEDIR)/wx/xml/*.h $(DISTDIR)/interface/wx/xml
index d8c18e29499831856664c8d0c18628074add4b70..82a35dd4cffc682c436e5e6850707b5ccd237259 100644 (file)
@@ -5,7 +5,7 @@
     <set var="MONOLIB_GUI_SRC">
         <if cond="USE_GUI=='1'">
             $(CORE_SRC) $(ADVANCED_SRC) $(MEDIA_SRC) $(HTML_SRC) $(QA_SRC)
     <set var="MONOLIB_GUI_SRC">
         <if cond="USE_GUI=='1'">
             $(CORE_SRC) $(ADVANCED_SRC) $(MEDIA_SRC) $(HTML_SRC) $(QA_SRC)
-            $(XRC_SRC) $(AUI_SRC) $(RICHTEXT_SRC) $(STC_SRC)
+            $(XRC_SRC) $(AUI_SRC) $(PROPGRID_SRC) $(RICHTEXT_SRC) $(STC_SRC)
         </if>
     </set>
     <set var="MONOLIB_SRC">
         </if>
     </set>
     <set var="MONOLIB_SRC">
index d94bf39ee8da4565a69eea1b5795e76fc6059f87..93e5848a4e10a4fedd929997e24f476eaab0a505 100644 (file)
 
     <set var="MSVC6PRJ_MERGED_TARGETS_MULTILIB" append="1">aui=auilib+auidll</set>
 
 
     <set var="MSVC6PRJ_MERGED_TARGETS_MULTILIB" append="1">aui=auilib+auidll</set>
 
+    <!-- ================================================================ -->
+    <!--                            PROPGRID                              -->
+    <!-- ================================================================ -->
+
+    <dll id="propgriddll" template="wx_dll"
+         cond="SHARED=='1' and USE_PROPGRID=='1' and MONOLITHIC=='0'">
+        <define>WXUSINGDLL</define>
+        <define>WXMAKINGDLL_PROPGRID</define>
+        <sources>$(PROPGRID_SRC)</sources>
+        <library>advdll</library>
+        <library>coredll</library>
+        <library>basedll</library>
+        <msvc-headers>$(PROPGRID_HDR)</msvc-headers>
+    </dll>
+
+    <lib id="propgridlib" template="wx_lib"
+         cond="SHARED=='0' and USE_PROPGRID=='1' and MONOLITHIC=='0'">
+        <sources>$(PROPGRID_SRC)</sources>
+        <msvc-headers>$(PROPGRID_HDR)</msvc-headers>
+    </lib>
+    
+    <wxshortcut id="wxpropgrid" cond="MONOLITHIC=='0' and USE_PROPGRID=='1'"/>
+
+    <set var="MSVC6PRJ_MERGED_TARGETS_MULTILIB" append="1">propgrid=propgridlib+propgriddll</set>
+
     <!-- ================================================================ -->
     <!--                            RICHTEXT                              -->
     <!-- ================================================================ -->
     <!-- ================================================================ -->
     <!--                            RICHTEXT                              -->
     <!-- ================================================================ -->
index bb48de3a1809d1406346b113e48c318c9568f347..31778ddabe26588b49e0eb9e0cbe19124cd6072c 100644 (file)
@@ -87,6 +87,7 @@
 
         <wx-lib>richtext</wx-lib>
         <wx-lib>aui</wx-lib>
 
         <wx-lib>richtext</wx-lib>
         <wx-lib>aui</wx-lib>
+        <wx-lib>propgrid</wx-lib>
         <wx-lib>stc</wx-lib>
         <wx-lib>qa</wx-lib>
         <wx-lib>gl</wx-lib>
         <wx-lib>stc</wx-lib>
         <wx-lib>qa</wx-lib>
         <wx-lib>gl</wx-lib>
                          tag definitions.
     -->
     <set var="WX_LIB_LIST">
                          tag definitions.
     -->
     <set var="WX_LIB_LIST">
-        base core net xml xrc html adv media gl qa aui richtext stc
+        base core net xml xrc html adv media gl qa aui propgrid richtext stc
     </set>
 
     <!-- if you define this variable to 0 before including wx presets, the
     </set>
 
     <!-- if you define this variable to 0 before including wx presets, the
index 541e9fecf8a6f417ede5f4d06be69a896a6cd34f..b056dc222389c97c4da2d10ac0d7692534725db4 100644 (file)
     <define-wxlib-name>adv</define-wxlib-name>
     <define-wxlib-name>qa</define-wxlib-name>
     <define-wxlib-name>aui</define-wxlib-name>
     <define-wxlib-name>adv</define-wxlib-name>
     <define-wxlib-name>qa</define-wxlib-name>
     <define-wxlib-name>aui</define-wxlib-name>
+    <define-wxlib-name>propgrid</define-wxlib-name>
     <define-wxlib-name>stc</define-wxlib-name>
     <define-wxlib-name>richtext</define-wxlib-name>
 
     <define-wxlib-name>stc</define-wxlib-name>
     <define-wxlib-name>richtext</define-wxlib-name>
 
         <if cond="value=='adv'"><sys-lib>$(WXLIB_ADV_NAME)</sys-lib></if>
         <if cond="value=='qa'"><sys-lib>$(WXLIB_QA_NAME)</sys-lib></if>
         <if cond="value=='aui'"><sys-lib>$(WXLIB_AUI_NAME)</sys-lib></if>
         <if cond="value=='adv'"><sys-lib>$(WXLIB_ADV_NAME)</sys-lib></if>
         <if cond="value=='qa'"><sys-lib>$(WXLIB_QA_NAME)</sys-lib></if>
         <if cond="value=='aui'"><sys-lib>$(WXLIB_AUI_NAME)</sys-lib></if>
+        <if cond="value=='propgrid'"><sys-lib>$(WXLIB_PROPGRID_NAME)</sys-lib></if>
         <if cond="value=='richtext'"><sys-lib>$(WXLIB_RICHTEXT_NAME)</sys-lib></if>
 
         <!-- The GL lib isn't part of the monolithic build, treat it as a contrib: -->
         <if cond="value=='richtext'"><sys-lib>$(WXLIB_RICHTEXT_NAME)</sys-lib></if>
 
         <!-- The GL lib isn't part of the monolithic build, treat it as a contrib: -->
index 8b9192c59c9477e5bb5651a922ea2f89ea0afa8a..bad7270fa049ff3958717c7adc88d1bdc65d7e50 100644 (file)
@@ -40,11 +40,11 @@ def mk_wxid(id):
 
 # All libs that are part of the main library:
 MAIN_LIBS = ['mono', 'base', 'core', 'adv', 'html', 'xml', 'net',
 
 # All libs that are part of the main library:
 MAIN_LIBS = ['mono', 'base', 'core', 'adv', 'html', 'xml', 'net',
-             'media', 'qa', 'xrc', 'aui', 'richtext', 'stc']
+             'media', 'qa', 'xrc', 'aui', 'propgrid', 'richtext', 'stc']
 # List of library names/ids for categories with different names:
 LIBS_NOGUI = ['xml', 'net']
 LIBS_GUI   = ['core', 'adv', 'html', 'gl', 'qa', 'xrc', 'media',
 # List of library names/ids for categories with different names:
 LIBS_NOGUI = ['xml', 'net']
 LIBS_GUI   = ['core', 'adv', 'html', 'gl', 'qa', 'xrc', 'media',
-              'aui', 'richtext', 'stc']
+              'aui', 'propgrid', 'richtext', 'stc']
 # Additional libraries that must be linked in:
 EXTRALIBS = {
     'gl' : '$(EXTRALIBS_OPENGL)',
 # Additional libraries that must be linked in:
 EXTRALIBS = {
     'gl' : '$(EXTRALIBS_OPENGL)',
index c7343b863e695755ed51d5b050d761e6889dcecb..5cf7055c9df8bf04ac715e94df255844e6cac1aa 100644 (file)
@@ -113,6 +113,11 @@ USE_XRC = 1
 USE_AUI = 1
 !endif
 
 USE_AUI = 1
 !endif
 
+# Build wxPropertyGrid library (USE_GUI must be 1)? [0,1]
+!ifndef USE_PROPGRID
+USE_PROPGRID = 1
+!endif
+
 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1]
 !ifndef USE_RICHTEXT
 USE_RICHTEXT = 1
 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1]
 !ifndef USE_RICHTEXT
 USE_RICHTEXT = 1
index b4e121dd9e48b3c2aa78f09ac27cd9db2500995c..a19394731185cd396d07342d93829bbdac78f6ab 100644 (file)
@@ -79,6 +79,9 @@ USE_XRC := 1
 # Build wxAUI library (USE_GUI must be 1)? [0,1]
 USE_AUI := 1
 
 # Build wxAUI library (USE_GUI must be 1)? [0,1]
 USE_AUI := 1
 
+# Build wxPropertyGrid library (USE_GUI must be 1)? [0,1]
+USE_PROPGRID := 1
+
 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1]
 USE_RICHTEXT := 1
 
 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1]
 USE_RICHTEXT := 1
 
index 53fae08ef5775c195a6caa10e125d5ac43b403a4..b32d5b6864e6c7c1aceaa947fc55ac3e5fd40889 100644 (file)
@@ -86,6 +86,9 @@ USE_XRC = 1
 # Build wxAUI library (USE_GUI must be 1)? [0,1]
 USE_AUI = 1
 
 # Build wxAUI library (USE_GUI must be 1)? [0,1]
 USE_AUI = 1
 
+# Build wxPropertyGrid library (USE_GUI must be 1)? [0,1]
+USE_PROPGRID = 1
+
 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1]
 USE_RICHTEXT = 1
 
 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1]
 USE_RICHTEXT = 1
 
index 28806dc8275be1a381420f8c1225c6e2e9aa24e9..16374f0c83da3be80ee3a1f9dff13f448ad273a0 100644 (file)
@@ -77,6 +77,9 @@ USE_XRC = 1
 # Build wxAUI library (USE_GUI must be 1)? [0,1]
 USE_AUI = 1
 
 # Build wxAUI library (USE_GUI must be 1)? [0,1]
 USE_AUI = 1
 
+# Build wxPropertyGrid library (USE_GUI must be 1)? [0,1]
+USE_PROPGRID = 1
+
 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1]
 USE_RICHTEXT = 1
 
 # Build wxRichTextCtrl library (USE_GUI must be 1)? [0,1]
 USE_RICHTEXT = 1
 
index b48c6d673041397129b9cd6ea62c7e54f070951b..554b510c9babc95dda74750ed818ec55e76a3ae8 100644 (file)
@@ -28,8 +28,9 @@ MAKEARGS = -DCC="$(CC)" -DCXX="$(CXX)" -DCFLAGS="$(CFLAGS)" \
        -DDEBUG_INFO="$(DEBUG_INFO)" -DDEBUG_FLAG="$(DEBUG_FLAG)" \
        -DMONOLITHIC="$(MONOLITHIC)" -DUSE_GUI="$(USE_GUI)" \
        -DUSE_HTML="$(USE_HTML)" -DUSE_MEDIA="$(USE_MEDIA)" -DUSE_XRC="$(USE_XRC)" \
        -DDEBUG_INFO="$(DEBUG_INFO)" -DDEBUG_FLAG="$(DEBUG_FLAG)" \
        -DMONOLITHIC="$(MONOLITHIC)" -DUSE_GUI="$(USE_GUI)" \
        -DUSE_HTML="$(USE_HTML)" -DUSE_MEDIA="$(USE_MEDIA)" -DUSE_XRC="$(USE_XRC)" \
-       -DUSE_AUI="$(USE_AUI)" -DUSE_RICHTEXT="$(USE_RICHTEXT)" \
-       -DUSE_STC="$(USE_STC)" -DUSE_OPENGL="$(USE_OPENGL)" -DUSE_QA="$(USE_QA)" \
+       -DUSE_AUI="$(USE_AUI)" -DUSE_PROPGRID="$(USE_PROPGRID)" \
+       -DUSE_RICHTEXT="$(USE_RICHTEXT)" -DUSE_STC="$(USE_STC)" \
+       -DUSE_OPENGL="$(USE_OPENGL)" -DUSE_QA="$(USE_QA)" \
        -DUSE_EXCEPTIONS="$(USE_EXCEPTIONS)" -DUSE_RTTI="$(USE_RTTI)" \
        -DUSE_THREADS="$(USE_THREADS)" -DUSE_GDIPLUS="$(USE_GDIPLUS)" \
        -DOFFICIAL_BUILD="$(OFFICIAL_BUILD)" -DVENDOR="$(VENDOR)" \
        -DUSE_EXCEPTIONS="$(USE_EXCEPTIONS)" -DUSE_RTTI="$(USE_RTTI)" \
        -DUSE_THREADS="$(USE_THREADS)" -DUSE_GDIPLUS="$(USE_GDIPLUS)" \
        -DOFFICIAL_BUILD="$(OFFICIAL_BUILD)" -DVENDOR="$(VENDOR)" \
@@ -1223,6 +1224,42 @@ AUILIB_OBJECTS =  \
        $(OBJS)\auilib_auibook.obj \
        $(OBJS)\auilib_auibar.obj \
        $(OBJS)\auilib_tabmdi.obj
        $(OBJS)\auilib_auibook.obj \
        $(OBJS)\auilib_auibar.obj \
        $(OBJS)\auilib_tabmdi.obj
+PROPGRIDDLL_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
+       $(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
+       $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
+       $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include -DWXBUILDING \
+       -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib \
+       -I..\..\src\regex -I..\..\src\expat\lib -DWXUSINGDLL -DWXMAKINGDLL_PROPGRID \
+       -Hu -H=$(OBJS)\wxprec_propgriddll.csm $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDDLL_OBJECTS =  \
+       $(OBJS)\propgriddll_dummy.obj \
+       $(OBJS)\propgriddll_advprops.obj \
+       $(OBJS)\propgriddll_editors.obj \
+       $(OBJS)\propgriddll_manager.obj \
+       $(OBJS)\propgriddll_property.obj \
+       $(OBJS)\propgriddll_propgrid.obj \
+       $(OBJS)\propgriddll_propgridiface.obj \
+       $(OBJS)\propgriddll_propgridpagestate.obj \
+       $(OBJS)\propgriddll_props.obj
+PROPGRIDLIB_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
+       $(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
+       $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
+       $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include -DWXBUILDING \
+       -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib \
+       -I..\..\src\regex -I..\..\src\expat\lib -Hu \
+       -H=$(OBJS)\wxprec_propgridlib.csm $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDLIB_OBJECTS =  \
+       $(OBJS)\propgridlib_dummy.obj \
+       $(OBJS)\propgridlib_advprops.obj \
+       $(OBJS)\propgridlib_editors.obj \
+       $(OBJS)\propgridlib_manager.obj \
+       $(OBJS)\propgridlib_property.obj \
+       $(OBJS)\propgridlib_propgrid.obj \
+       $(OBJS)\propgridlib_propgridiface.obj \
+       $(OBJS)\propgridlib_propgridpagestate.obj \
+       $(OBJS)\propgridlib_props.obj
 RICHTEXTDLL_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
        $(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
        $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
 RICHTEXTDLL_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
        $(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
        $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
@@ -1469,6 +1506,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_auibook.obj \
        $(OBJS)\monodll_auibar.obj \
        $(OBJS)\monodll_tabmdi.obj \
        $(OBJS)\monodll_auibook.obj \
        $(OBJS)\monodll_auibar.obj \
        $(OBJS)\monodll_tabmdi.obj \
+       $(OBJS)\monodll_advprops.obj \
+       $(OBJS)\monodll_editors.obj \
+       $(OBJS)\monodll_manager.obj \
+       $(OBJS)\monodll_property.obj \
+       $(OBJS)\monodll_propgrid.obj \
+       $(OBJS)\monodll_propgridiface.obj \
+       $(OBJS)\monodll_propgridpagestate.obj \
+       $(OBJS)\monodll_props.obj \
        $(OBJS)\monodll_richtextctrl.obj \
        $(OBJS)\monodll_richtextbuffer.obj \
        $(OBJS)\monodll_richtextstyles.obj \
        $(OBJS)\monodll_richtextctrl.obj \
        $(OBJS)\monodll_richtextbuffer.obj \
        $(OBJS)\monodll_richtextstyles.obj \
@@ -2126,6 +2171,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_auibook.obj \
        $(OBJS)\monolib_auibar.obj \
        $(OBJS)\monolib_tabmdi.obj \
        $(OBJS)\monolib_auibook.obj \
        $(OBJS)\monolib_auibar.obj \
        $(OBJS)\monolib_tabmdi.obj \
+       $(OBJS)\monolib_advprops.obj \
+       $(OBJS)\monolib_editors.obj \
+       $(OBJS)\monolib_manager.obj \
+       $(OBJS)\monolib_property.obj \
+       $(OBJS)\monolib_propgrid.obj \
+       $(OBJS)\monolib_propgridiface.obj \
+       $(OBJS)\monolib_propgridpagestate.obj \
+       $(OBJS)\monolib_props.obj \
        $(OBJS)\monolib_richtextctrl.obj \
        $(OBJS)\monolib_richtextbuffer.obj \
        $(OBJS)\monolib_richtextstyles.obj \
        $(OBJS)\monolib_richtextctrl.obj \
        $(OBJS)\monolib_richtextbuffer.obj \
        $(OBJS)\monolib_richtextstyles.obj \
@@ -3893,6 +3946,20 @@ ____wxaui_namedll_DEP = $(__auidll___depname)
 !if "$(SHARED)" == "0"
 ____wxaui_namelib_DEP = $(__auilib___depname)
 !endif
 !if "$(SHARED)" == "0"
 ____wxaui_namelib_DEP = $(__auilib___depname)
 !endif
+!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_PROPGRID)" == "1"
+__propgriddll___depname = \
+       $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).dll
+!endif
+!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_PROPGRID)" == "1"
+__propgridlib___depname = \
+       $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+!endif
+!if "$(SHARED)" == "1"
+____wxpropgrid_namedll_DEP = $(__propgriddll___depname)
+!endif
+!if "$(SHARED)" == "0"
+____wxpropgrid_namelib_DEP = $(__propgridlib___depname)
+!endif
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_RICHTEXT)" == "1"
 __richtextdll___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).dll
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_RICHTEXT)" == "1"
 __richtextdll___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).dll
@@ -3958,10 +4025,10 @@ __htmldll_library_link_LIBR = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html.lib
 !endif
 !if "$(USE_THREADS)" == "0"
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html.lib
 !endif
 !if "$(USE_THREADS)" == "0"
-__THREADSFLAG_11 = 
+__THREADSFLAG_12 = 
 !endif
 !if "$(USE_THREADS)" == "1"
 !endif
 !if "$(USE_THREADS)" == "1"
-__THREADSFLAG_11 = mt
+__THREADSFLAG_12 = mt
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
 __RUNTIME_LIBS_4 = i
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
 __RUNTIME_LIBS_4 = i
@@ -3970,34 +4037,34 @@ __RUNTIME_LIBS_4 = i
 __RUNTIME_LIBS_4 = 
 !endif
 !if "$(WXUNIV)" == "1"
 __RUNTIME_LIBS_4 = 
 !endif
 !if "$(WXUNIV)" == "1"
-__WXUNIV_DEFINE_p_54 = -d__WXUNIVERSAL__
+__WXUNIV_DEFINE_p_58 = -d__WXUNIVERSAL__
 !endif
 !if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
 !endif
 !if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
-__DEBUG_DEFINE_p_53 = -d__WXDEBUG__
+__DEBUG_DEFINE_p_57 = -d__WXDEBUG__
 !endif
 !if "$(DEBUG_FLAG)" == "1"
 !endif
 !if "$(DEBUG_FLAG)" == "1"
-__DEBUG_DEFINE_p_53 = -d__WXDEBUG__
+__DEBUG_DEFINE_p_57 = -d__WXDEBUG__
 !endif
 !if "$(USE_EXCEPTIONS)" == "0"
 !endif
 !if "$(USE_EXCEPTIONS)" == "0"
-__EXCEPTIONS_DEFINE_p_53 = -dwxNO_EXCEPTIONS
+__EXCEPTIONS_DEFINE_p_57 = -dwxNO_EXCEPTIONS
 !endif
 !if "$(USE_RTTI)" == "0"
 !endif
 !if "$(USE_RTTI)" == "0"
-__RTTI_DEFINE_p_53 = -dwxNO_RTTI
+__RTTI_DEFINE_p_57 = -dwxNO_RTTI
 !endif
 !if "$(USE_THREADS)" == "0"
 !endif
 !if "$(USE_THREADS)" == "0"
-__THREAD_DEFINE_p_53 = -dwxNO_THREADS
+__THREAD_DEFINE_p_57 = -dwxNO_THREADS
 !endif
 !if "$(UNICODE)" == "0"
 !endif
 !if "$(UNICODE)" == "0"
-__UNICODE_DEFINE_p_54 = -dwxUSE_UNICODE=0
+__UNICODE_DEFINE_p_58 = -dwxUSE_UNICODE=0
 !endif
 !if "$(UNICODE)" == "1"
 !endif
 !if "$(UNICODE)" == "1"
-__UNICODE_DEFINE_p_54 = -d_UNICODE
+__UNICODE_DEFINE_p_58 = -d_UNICODE
 !endif
 !if "$(MSLU)" == "1"
 !endif
 !if "$(MSLU)" == "1"
-__MSLU_DEFINE_p_53 = -dwxUSE_UNICODE_MSLU=1
+__MSLU_DEFINE_p_57 = -dwxUSE_UNICODE_MSLU=1
 !endif
 !if "$(USE_GDIPLUS)" == "1"
 !endif
 !if "$(USE_GDIPLUS)" == "1"
-__GFXCTX_DEFINE_p_53 = -dwxUSE_GRAPHICS_CONTEXT=1
+__GFXCTX_DEFINE_p_57 = -dwxUSE_GRAPHICS_CONTEXT=1
 !endif
 !if "$(USE_GUI)" == "1"
 __LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
 !endif
 !if "$(USE_GUI)" == "1"
 __LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
@@ -4088,7 +4155,7 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: setup_h $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(__wxscintilla) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) build_cfg_file
+all: setup_h $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(__wxscintilla) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__propgriddll___depname) $(__propgridlib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) build_cfg_file
 
 clean: 
        -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
 
 clean: 
        -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
@@ -4189,6 +4256,14 @@ clean:
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_bcc$(VENDORTAG).ils del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_bcc$(VENDORTAG).ils
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_bcc$(VENDORTAG).ils del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_bcc$(VENDORTAG).ils
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).dll
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).tds del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).tds
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).ilc del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).ilc
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).ild del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).ild
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).ilf del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).ilf
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).ils del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).ils
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).tds del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).tds
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).ilc del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).ilc
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).tds del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).tds
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).ilc del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).ilc
@@ -4273,7 +4348,7 @@ $(LIBDIRNAME)\wxscintilla$(WXDEBUGFLAG).lib: $(WXSCINTILLA_OBJECTS)
 !if "$(MONOLITHIC)" == "1" && "$(SHARED)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_bcc$(VENDORTAG).dll: $(OBJS)\monodll_dummy.obj  $(MONODLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\monodll_version.res $(__wxscintilla_library_link_DEP)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "1" && "$(SHARED)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_bcc$(VENDORTAG).dll: $(OBJS)\monodll_dummy.obj  $(MONODLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\monodll_version.res $(__wxscintilla_library_link_DEP)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(MONODLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib     $(__wxscintilla) import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\monodll_version.res
+       c0d32.obj $(MONODLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib     $(__wxscintilla) import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\monodll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR) $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR) $@
 !endif
@@ -4289,7 +4364,7 @@ $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXD
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1"
 $(LIBDIRNAME)\wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_bcc$(VENDORTAG).dll: $(OBJS)\basedll_dummy.obj  $(BASEDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\basedll_version.res
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1"
 $(LIBDIRNAME)\wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_bcc$(VENDORTAG).dll: $(OBJS)\basedll_dummy.obj  $(BASEDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\basedll_version.res
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(BASEDLL_OBJECTS),$@,, wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\basedll_version.res
+       c0d32.obj $(BASEDLL_OBJECTS),$@,, wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\basedll_version.res
 |
        implib -f $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR) $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR) $@
 !endif
@@ -4309,7 +4384,7 @@ wxbase: $(____wxbase_namedll_DEP) $(____wxbase_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1"
 $(LIBDIRNAME)\wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net_bcc$(VENDORTAG).dll: $(OBJS)\netdll_dummy.obj  $(NETDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\netdll_version.res $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1"
 $(LIBDIRNAME)\wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net_bcc$(VENDORTAG).dll: $(OBJS)\netdll_dummy.obj  $(NETDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\netdll_version.res $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(NETDLL_OBJECTS),$@,, wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\netdll_version.res
+       c0d32.obj $(NETDLL_OBJECTS),$@,, wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\netdll_version.res
 |
        implib -f $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net $@
 !endif
@@ -4329,7 +4404,7 @@ wxnet: $(____wxnet_namedll_DEP) $(____wxnet_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core_bcc$(VENDORTAG).dll: $(OBJS)\coredll_dummy.obj  $(COREDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\coredll_version.res $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core_bcc$(VENDORTAG).dll: $(OBJS)\coredll_dummy.obj  $(COREDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\coredll_version.res $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(COREDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\coredll_version.res
+       c0d32.obj $(COREDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\coredll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core $@
 !endif
@@ -4349,7 +4424,7 @@ wxcore: $(____wxcore_namedll_DEP) $(____wxcore_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv_bcc$(VENDORTAG).dll: $(OBJS)\advdll_dummy.obj  $(ADVDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\advdll_version.res $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv_bcc$(VENDORTAG).dll: $(OBJS)\advdll_dummy.obj  $(ADVDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\advdll_version.res $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(ADVDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib  import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\advdll_version.res
+       c0d32.obj $(ADVDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib  import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\advdll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv $@
 !endif
@@ -4369,7 +4444,7 @@ wxadv: $(____wxadv_namedll_DEP) $(____wxadv_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_MEDIA)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media_bcc$(VENDORTAG).dll: $(OBJS)\mediadll_dummy.obj  $(MEDIADLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\mediadll_version.res $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_MEDIA)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media_bcc$(VENDORTAG).dll: $(OBJS)\mediadll_dummy.obj  $(MEDIADLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\mediadll_version.res $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(MEDIADLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib  import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\mediadll_version.res
+       c0d32.obj $(MEDIADLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib  import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\mediadll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media $@
 !endif
@@ -4389,7 +4464,7 @@ wxmedia: $(____wxmedia_namedll_DEP) $(____wxmedia_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_HTML)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html_bcc$(VENDORTAG).dll: $(OBJS)\htmldll_dummy.obj  $(HTMLDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\htmldll_version.res $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_HTML)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html_bcc$(VENDORTAG).dll: $(OBJS)\htmldll_dummy.obj  $(HTMLDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\htmldll_version.res $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(HTMLDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib  import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\htmldll_version.res
+       c0d32.obj $(HTMLDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib  import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\htmldll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html $@
 !endif
@@ -4409,7 +4484,7 @@ wxhtml: $(____wxhtml_namedll_DEP) $(____wxhtml_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_QA)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa_bcc$(VENDORTAG).dll: $(OBJS)\qadll_dummy.obj  $(QADLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\qadll_version.res $(__coredll___depname) $(__basedll___depname) $(__xmldll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_QA)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa_bcc$(VENDORTAG).dll: $(OBJS)\qadll_dummy.obj  $(QADLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\qadll_version.res $(__coredll___depname) $(__basedll___depname) $(__xmldll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(QADLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml.lib import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\qadll_version.res
+       c0d32.obj $(QADLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml.lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\qadll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa $@
 !endif
@@ -4429,7 +4504,7 @@ wxqa: $(____wxqa_namedll_DEP) $(____wxqa_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1"
 $(LIBDIRNAME)\wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml_bcc$(VENDORTAG).dll: $(OBJS)\xmldll_dummy.obj  $(XMLDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\xmldll_version.res $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1"
 $(LIBDIRNAME)\wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml_bcc$(VENDORTAG).dll: $(OBJS)\xmldll_dummy.obj  $(XMLDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\xmldll_version.res $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(XMLDLL_OBJECTS),$@,, wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib  import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\xmldll_version.res
+       c0d32.obj $(XMLDLL_OBJECTS),$@,, wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib  import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\xmldll_version.res
 |
        implib -f $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml $@
 !endif
@@ -4449,7 +4524,7 @@ wxxml: $(____wxxml_namedll_DEP) $(____wxxml_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_XRC)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc_bcc$(VENDORTAG).dll: $(OBJS)\xrcdll_dummy.obj  $(XRCDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\xrcdll_version.res $(__htmldll_library_link_DEP) $(__advdll___depname) $(__coredll___depname) $(__xmldll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_XRC)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc_bcc$(VENDORTAG).dll: $(OBJS)\xrcdll_dummy.obj  $(XRCDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\xrcdll_version.res $(__htmldll_library_link_DEP) $(__advdll___depname) $(__coredll___depname) $(__xmldll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(XRCDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(__htmldll_library_link_LIBR) $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\xrcdll_version.res
+       c0d32.obj $(XRCDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(__htmldll_library_link_LIBR) $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\xrcdll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc $@
 !endif
@@ -4469,7 +4544,7 @@ wxxrc: $(____wxxrc_namedll_DEP) $(____wxxrc_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_AUI)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_bcc$(VENDORTAG).dll: $(OBJS)\auidll_dummy.obj  $(AUIDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\auidll_version.res $(__advdll___depname) $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_AUI)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_bcc$(VENDORTAG).dll: $(OBJS)\auidll_dummy.obj  $(AUIDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\auidll_version.res $(__advdll___depname) $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(AUIDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\auidll_version.res
+       c0d32.obj $(AUIDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\auidll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui $@
 !endif
@@ -4486,10 +4561,30 @@ $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXD
 wxaui: $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 !endif
 
 wxaui: $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 !endif
 
+!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_PROPGRID)" == "1"
+$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG).dll: $(OBJS)\propgriddll_dummy.obj  $(PROPGRIDDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\propgriddll_version.res $(__advdll___depname) $(__coredll___depname) $(__basedll___depname)
+       ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
+       c0d32.obj $(PROPGRIDDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\propgriddll_version.res
+|
+       implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid $@
+!endif
+
+!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_PROPGRID)" == "1"
+$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib: $(OBJS)\propgridlib_dummy.obj  $(PROPGRIDLIB_OBJECTS)
+       if exist $@ del $@
+       tlib /a /p4096 $@ @&&|
+       $(PROPGRIDLIB_OBJECTS)
+|
+!endif
+
+!if "$(MONOLITHIC)" == "0" && "$(USE_PROPGRID)" == "1"
+wxpropgrid: $(____wxpropgrid_namedll_DEP) $(____wxpropgrid_namelib_DEP)
+!endif
+
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_RICHTEXT)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).dll: $(OBJS)\richtextdll_dummy.obj  $(RICHTEXTDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\richtextdll_version.res $(__advdll___depname) $(__htmldll_library_link_DEP) $(__xmldll___depname) $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_RICHTEXT)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG).dll: $(OBJS)\richtextdll_dummy.obj  $(RICHTEXTDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\richtextdll_version.res $(__advdll___depname) $(__htmldll_library_link_DEP) $(__xmldll___depname) $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(RICHTEXTDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(__htmldll_library_link_LIBR) $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\richtextdll_version.res
+       c0d32.obj $(RICHTEXTDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(__htmldll_library_link_LIBR) $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\richtextdll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext $@
 !endif
@@ -4509,7 +4604,7 @@ wxrichtext: $(____wxrichtext_namedll_DEP) $(____wxrichtext_namelib_DEP)
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_STC)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_bcc$(VENDORTAG).dll: $(OBJS)\stcdll_dummy.obj  $(STCDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(__wxscintilla)  $(OBJS)\stcdll_version.res $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_STC)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_bcc$(VENDORTAG).dll: $(OBJS)\stcdll_dummy.obj  $(STCDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(__wxscintilla)  $(OBJS)\stcdll_version.res $(__coredll___depname) $(__basedll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(STCDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wxscintilla$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\stcdll_version.res
+       c0d32.obj $(STCDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(LIBDIRNAME)\wxscintilla$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\stcdll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc $@
 !endif
@@ -4529,7 +4624,7 @@ wxstc: $(____wxstc_namedll_DEP) $(____wxstc_namelib_DEP)
 !if "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_OPENGL)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_bcc$(VENDORTAG).dll: $(OBJS)\gldll_dummy.obj  $(GLDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\gldll_version.res $(__basedll___depname) $(__coredll___depname) $(__monodll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
 !if "$(SHARED)" == "1" && "$(USE_GUI)" == "1" && "$(USE_OPENGL)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_bcc$(VENDORTAG).dll: $(OBJS)\gldll_dummy.obj  $(GLDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib  $(OBJS)\gldll_version.res $(__basedll___depname) $(__coredll___depname) $(__monodll___depname)
        ilink32 -Tpd -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) @&&|
-       c0d32.obj $(GLDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(__WXLIBGLDEP_CORE_p) $(__WXLIBGLDEP_BASE_p) $(__WXLIB_MONO_p)  import32.lib cw32$(__THREADSFLAG_11)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\gldll_version.res
+       c0d32.obj $(GLDLL_OBJECTS),$@,, $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib $(__WXLIBGLDEP_CORE_p) $(__WXLIBGLDEP_BASE_p) $(__WXLIB_MONO_p)  import32.lib cw32$(__THREADSFLAG_12)$(__RUNTIME_LIBS_4).lib,, $(OBJS)\gldll_version.res
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl $@
 !endif
 |
        implib -f $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl $@
 !endif
@@ -6009,6 +6104,30 @@ $(OBJS)\monodll_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\monodll_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
 $(OBJS)\monodll_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
+$(OBJS)\monodll_advprops.obj: ..\..\src\propgrid\advprops.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
+
+$(OBJS)\monodll_editors.obj: ..\..\src\propgrid\editors.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\editors.cpp
+
+$(OBJS)\monodll_manager.obj: ..\..\src\propgrid\manager.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\manager.cpp
+
+$(OBJS)\monodll_property.obj: ..\..\src\propgrid\property.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\property.cpp
+
+$(OBJS)\monodll_propgrid.obj: ..\..\src\propgrid\propgrid.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\propgrid.cpp
+
+$(OBJS)\monodll_propgridiface.obj: ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\propgridiface.cpp
+
+$(OBJS)\monodll_propgridpagestate.obj: ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\propgridpagestate.cpp
+
+$(OBJS)\monodll_props.obj: ..\..\src\propgrid\props.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\props.cpp
+
 $(OBJS)\monodll_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
 $(OBJS)\monodll_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
@@ -7392,7 +7511,7 @@ $(OBJS)\monodll_joystick.obj: ..\..\src\msw\joystick.cpp
 !endif
 
 $(OBJS)\monodll_version.res: ..\..\src\msw\version.rc
 !endif
 
 $(OBJS)\monodll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dwxUSE_BASE=1 -dWXMAKINGDLL -i..\..\src\stc\scintilla\include -i..\..\src\stc\scintilla\src -d__WX__ -dSCI_LEXER -dLINK_LEXERS ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dwxUSE_BASE=1 -dWXMAKINGDLL -i..\..\src\stc\scintilla\include -i..\..\src\stc\scintilla\src -d__WX__ -dSCI_LEXER -dLINK_LEXERS ..\..\src\msw\version.rc
 
 $(OBJS)\monolib_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\monolib_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) -H ..\..\src\common\dummy.cpp
@@ -8168,6 +8287,30 @@ $(OBJS)\monolib_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\monolib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
 $(OBJS)\monolib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
+$(OBJS)\monolib_advprops.obj: ..\..\src\propgrid\advprops.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
+
+$(OBJS)\monolib_editors.obj: ..\..\src\propgrid\editors.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\editors.cpp
+
+$(OBJS)\monolib_manager.obj: ..\..\src\propgrid\manager.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\manager.cpp
+
+$(OBJS)\monolib_property.obj: ..\..\src\propgrid\property.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\property.cpp
+
+$(OBJS)\monolib_propgrid.obj: ..\..\src\propgrid\propgrid.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\propgrid.cpp
+
+$(OBJS)\monolib_propgridiface.obj: ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\propgridiface.cpp
+
+$(OBJS)\monolib_propgridpagestate.obj: ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\propgridpagestate.cpp
+
+$(OBJS)\monolib_props.obj: ..\..\src\propgrid\props.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\props.cpp
+
 $(OBJS)\monolib_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
 $(OBJS)\monolib_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
@@ -9554,7 +9697,7 @@ $(OBJS)\basedll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\basedll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\basedll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dwxUSE_GUI=0 -dWXMAKINGDLL_BASE -dwxUSE_BASE=1 ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dwxUSE_GUI=0 -dWXMAKINGDLL_BASE -dwxUSE_BASE=1 ..\..\src\msw\version.rc
 
 $(OBJS)\basedll_appbase.obj: ..\..\src\common\appbase.cpp
        $(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\appbase.cpp
 
 $(OBJS)\basedll_appbase.obj: ..\..\src\common\appbase.cpp
        $(CXX) -q -c -P -o$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\appbase.cpp
@@ -10175,7 +10318,7 @@ $(OBJS)\netdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(NETDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\netdll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(NETDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\netdll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dwxUSE_GUI=0 -dWXUSINGDLL -dWXMAKINGDLL_NET ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dwxUSE_GUI=0 -dWXUSINGDLL -dWXMAKINGDLL_NET ..\..\src\msw\version.rc
 
 $(OBJS)\netdll_fs_inet.obj: ..\..\src\common\fs_inet.cpp
        $(CXX) -q -c -P -o$@ $(NETDLL_CXXFLAGS) ..\..\src\common\fs_inet.cpp
 
 $(OBJS)\netdll_fs_inet.obj: ..\..\src\common\fs_inet.cpp
        $(CXX) -q -c -P -o$@ $(NETDLL_CXXFLAGS) ..\..\src\common\fs_inet.cpp
@@ -10262,7 +10405,7 @@ $(OBJS)\coredll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\coredll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\coredll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_CORE -dwxUSE_BASE=0 ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_CORE -dwxUSE_BASE=0 ..\..\src\msw\version.rc
 
 $(OBJS)\coredll_event.obj: ..\..\src\common\event.cpp
        $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\event.cpp
 
 $(OBJS)\coredll_event.obj: ..\..\src\common\event.cpp
        $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\event.cpp
@@ -12937,7 +13080,7 @@ $(OBJS)\advdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\advdll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\advdll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_ADV ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_ADV ..\..\src\msw\version.rc
 
 $(OBJS)\advdll_bmpcbox.obj: ..\..\src\msw\bmpcbox.cpp
        $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) ..\..\src\msw\bmpcbox.cpp
 
 $(OBJS)\advdll_bmpcbox.obj: ..\..\src\msw\bmpcbox.cpp
        $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) ..\..\src\msw\bmpcbox.cpp
@@ -13166,7 +13309,7 @@ $(OBJS)\mediadll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(MEDIADLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\mediadll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(MEDIADLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\mediadll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_MEDIA ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_MEDIA ..\..\src\msw\version.rc
 
 $(OBJS)\mediadll_mediactrlcmn.obj: ..\..\src\common\mediactrlcmn.cpp
        $(CXX) -q -c -P -o$@ $(MEDIADLL_CXXFLAGS) ..\..\src\common\mediactrlcmn.cpp
 
 $(OBJS)\mediadll_mediactrlcmn.obj: ..\..\src\common\mediactrlcmn.cpp
        $(CXX) -q -c -P -o$@ $(MEDIADLL_CXXFLAGS) ..\..\src\common\mediactrlcmn.cpp
@@ -13205,7 +13348,7 @@ $(OBJS)\htmldll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(HTMLDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\htmldll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(HTMLDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\htmldll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_HTML ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_HTML ..\..\src\msw\version.rc
 
 $(OBJS)\htmldll_helpbest.obj: ..\..\src\msw\helpbest.cpp
        $(CXX) -q -c -P -o$@ $(HTMLDLL_CXXFLAGS) ..\..\src\msw\helpbest.cpp
 
 $(OBJS)\htmldll_helpbest.obj: ..\..\src\msw\helpbest.cpp
        $(CXX) -q -c -P -o$@ $(HTMLDLL_CXXFLAGS) ..\..\src\msw\helpbest.cpp
@@ -13358,7 +13501,7 @@ $(OBJS)\qadll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(QADLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\qadll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(QADLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\qadll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_QA ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_QA ..\..\src\msw\version.rc
 
 $(OBJS)\qadll_debugrpt.obj: ..\..\src\common\debugrpt.cpp
        $(CXX) -q -c -P -o$@ $(QADLL_CXXFLAGS) ..\..\src\common\debugrpt.cpp
 
 $(OBJS)\qadll_debugrpt.obj: ..\..\src\common\debugrpt.cpp
        $(CXX) -q -c -P -o$@ $(QADLL_CXXFLAGS) ..\..\src\common\debugrpt.cpp
@@ -13379,7 +13522,7 @@ $(OBJS)\xmldll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(XMLDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\xmldll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(XMLDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\xmldll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dwxUSE_GUI=0 -dWXUSINGDLL -dWXMAKINGDLL_XML ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dwxUSE_GUI=0 -dWXUSINGDLL -dWXMAKINGDLL_XML ..\..\src\msw\version.rc
 
 $(OBJS)\xmldll_xml.obj: ..\..\src\xml\xml.cpp
        $(CXX) -q -c -P -o$@ $(XMLDLL_CXXFLAGS) ..\..\src\xml\xml.cpp
 
 $(OBJS)\xmldll_xml.obj: ..\..\src\xml\xml.cpp
        $(CXX) -q -c -P -o$@ $(XMLDLL_CXXFLAGS) ..\..\src\xml\xml.cpp
@@ -13400,7 +13543,7 @@ $(OBJS)\xrcdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(XRCDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\xrcdll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(XRCDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\xrcdll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_XRC ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_XRC ..\..\src\msw\version.rc
 
 $(OBJS)\xrcdll_xh_animatctrl.obj: ..\..\src\xrc\xh_animatctrl.cpp
        $(CXX) -q -c -P -o$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_animatctrl.cpp
 
 $(OBJS)\xrcdll_xh_animatctrl.obj: ..\..\src\xrc\xh_animatctrl.cpp
        $(CXX) -q -c -P -o$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_animatctrl.cpp
@@ -13757,7 +13900,7 @@ $(OBJS)\auidll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\auidll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\auidll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_AUI ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_AUI ..\..\src\msw\version.rc
 
 $(OBJS)\auidll_framemanager.obj: ..\..\src\aui\framemanager.cpp
        $(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\framemanager.cpp
 
 $(OBJS)\auidll_framemanager.obj: ..\..\src\aui\framemanager.cpp
        $(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\framemanager.cpp
@@ -13798,11 +13941,68 @@ $(OBJS)\auilib_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\auilib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
 $(OBJS)\auilib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
+$(OBJS)\propgriddll_dummy.obj: ..\..\src\common\dummy.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
+
+$(OBJS)\propgriddll_version.res: ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_PROPGRID ..\..\src\msw\version.rc
+
+$(OBJS)\propgriddll_advprops.obj: ..\..\src\propgrid\advprops.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
+
+$(OBJS)\propgriddll_editors.obj: ..\..\src\propgrid\editors.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\editors.cpp
+
+$(OBJS)\propgriddll_manager.obj: ..\..\src\propgrid\manager.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\manager.cpp
+
+$(OBJS)\propgriddll_property.obj: ..\..\src\propgrid\property.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\property.cpp
+
+$(OBJS)\propgriddll_propgrid.obj: ..\..\src\propgrid\propgrid.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\propgrid.cpp
+
+$(OBJS)\propgriddll_propgridiface.obj: ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\propgridiface.cpp
+
+$(OBJS)\propgriddll_propgridpagestate.obj: ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\propgridpagestate.cpp
+
+$(OBJS)\propgriddll_props.obj: ..\..\src\propgrid\props.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\props.cpp
+
+$(OBJS)\propgridlib_dummy.obj: ..\..\src\common\dummy.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) -H ..\..\src\common\dummy.cpp
+
+$(OBJS)\propgridlib_advprops.obj: ..\..\src\propgrid\advprops.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
+
+$(OBJS)\propgridlib_editors.obj: ..\..\src\propgrid\editors.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\editors.cpp
+
+$(OBJS)\propgridlib_manager.obj: ..\..\src\propgrid\manager.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\manager.cpp
+
+$(OBJS)\propgridlib_property.obj: ..\..\src\propgrid\property.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\property.cpp
+
+$(OBJS)\propgridlib_propgrid.obj: ..\..\src\propgrid\propgrid.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\propgrid.cpp
+
+$(OBJS)\propgridlib_propgridiface.obj: ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\propgridiface.cpp
+
+$(OBJS)\propgridlib_propgridpagestate.obj: ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\propgridpagestate.cpp
+
+$(OBJS)\propgridlib_props.obj: ..\..\src\propgrid\props.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\props.cpp
+
 $(OBJS)\richtextdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(RICHTEXTDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\richtextdll_version.res: ..\..\src\msw\version.rc
 $(OBJS)\richtextdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(RICHTEXTDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\richtextdll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_RICHTEXT ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_RICHTEXT ..\..\src\msw\version.rc
 
 $(OBJS)\richtextdll_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -q -c -P -o$@ $(RICHTEXTDLL_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
 $(OBJS)\richtextdll_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -q -c -P -o$@ $(RICHTEXTDLL_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
@@ -13865,7 +14065,7 @@ $(OBJS)\stcdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\stcdll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\stcdll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -i..\..\src\stc\scintilla\include -i..\..\src\stc\scintilla\src -d__WX__ -dSCI_LEXER -dLINK_LEXERS -dWXUSINGDLL -dWXMAKINGDLL_STC ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -i..\..\src\stc\scintilla\include -i..\..\src\stc\scintilla\src -d__WX__ -dSCI_LEXER -dLINK_LEXERS -dWXUSINGDLL -dWXMAKINGDLL_STC ..\..\src\msw\version.rc
 
 $(OBJS)\stcdll_stc.obj: ..\..\src\stc\stc.cpp
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) ..\..\src\stc\stc.cpp
 
 $(OBJS)\stcdll_stc.obj: ..\..\src\stc\stc.cpp
        $(CXX) -q -c -P -o$@ $(STCDLL_CXXFLAGS) ..\..\src\stc\stc.cpp
@@ -13892,7 +14092,7 @@ $(OBJS)\gldll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) -q -c -P -o$@ $(GLDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\gldll_version.res: ..\..\src\msw\version.rc
        $(CXX) -q -c -P -o$@ $(GLDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp
 
 $(OBJS)\gldll_version.res: ..\..\src\msw\version.rc
-       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_GL ..\..\src\msw\version.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) -i$(SETUPHDIR) -i..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_bcc$(VENDORTAG)  -i..\..\src\tiff\libtiff -i..\..\src\jpeg -i..\..\src\png -i..\..\src\zlib -i..\..\src\regex -i..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_GL ..\..\src\msw\version.rc
 
 $(OBJS)\gldll_glcmn.obj: ..\..\src\common\glcmn.cpp
        $(CXX) -q -c -P -o$@ $(GLDLL_CXXFLAGS) ..\..\src\common\glcmn.cpp
 
 $(OBJS)\gldll_glcmn.obj: ..\..\src\common\glcmn.cpp
        $(CXX) -q -c -P -o$@ $(GLDLL_CXXFLAGS) ..\..\src\common\glcmn.cpp
index 220796800fc1f27a83a19708e96f948ed531820e..14db0c9b2016e01be142e15d58d84a1590733484 100644 (file)
@@ -20,8 +20,8 @@ MAKEARGS = LINK_DLL_FLAGS="$(LINK_DLL_FLAGS)" \
        DEBUG_INFO="$(DEBUG_INFO)" DEBUG_FLAG="$(DEBUG_FLAG)" \
        MONOLITHIC="$(MONOLITHIC)" USE_GUI="$(USE_GUI)" USE_HTML="$(USE_HTML)" \
        USE_MEDIA="$(USE_MEDIA)" USE_XRC="$(USE_XRC)" USE_AUI="$(USE_AUI)" \
        DEBUG_INFO="$(DEBUG_INFO)" DEBUG_FLAG="$(DEBUG_FLAG)" \
        MONOLITHIC="$(MONOLITHIC)" USE_GUI="$(USE_GUI)" USE_HTML="$(USE_HTML)" \
        USE_MEDIA="$(USE_MEDIA)" USE_XRC="$(USE_XRC)" USE_AUI="$(USE_AUI)" \
-       USE_RICHTEXT="$(USE_RICHTEXT)" USE_STC="$(USE_STC)" \
-       USE_OPENGL="$(USE_OPENGL)" USE_QA="$(USE_QA)" \
+       USE_PROPGRID="$(USE_PROPGRID)" USE_RICHTEXT="$(USE_RICHTEXT)" \
+       USE_STC="$(USE_STC)" USE_OPENGL="$(USE_OPENGL)" USE_QA="$(USE_QA)" \
        USE_EXCEPTIONS="$(USE_EXCEPTIONS)" USE_RTTI="$(USE_RTTI)" \
        USE_THREADS="$(USE_THREADS)" USE_GDIPLUS="$(USE_GDIPLUS)" \
        OFFICIAL_BUILD="$(OFFICIAL_BUILD)" VENDOR="$(VENDOR)" \
        USE_EXCEPTIONS="$(USE_EXCEPTIONS)" USE_RTTI="$(USE_RTTI)" \
        USE_THREADS="$(USE_THREADS)" USE_GDIPLUS="$(USE_GDIPLUS)" \
        OFFICIAL_BUILD="$(OFFICIAL_BUILD)" VENDOR="$(VENDOR)" \
@@ -1227,6 +1227,44 @@ AUILIB_OBJECTS =  \
        $(OBJS)\auilib_auibook.o \
        $(OBJS)\auilib_auibar.o \
        $(OBJS)\auilib_tabmdi.o
        $(OBJS)\auilib_auibook.o \
        $(OBJS)\auilib_auibar.o \
        $(OBJS)\auilib_tabmdi.o
+PROPGRIDDLL_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
+       $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
+       $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
+       $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include -W -Wall -DWXBUILDING \
+       -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib \
+       -I..\..\src\regex -I..\..\src\expat\lib -DWXUSINGDLL -DWXMAKINGDLL_PROPGRID \
+       $(__RTTIFLAG) $(__EXCEPTIONSFLAG) -Wno-ctor-dtor-privacy $(CPPFLAGS) \
+       $(CXXFLAGS)
+PROPGRIDDLL_OBJECTS =  \
+       $(OBJS)\propgriddll_dummy.o \
+       $(OBJS)\propgriddll_version_rc.o \
+       $(OBJS)\propgriddll_advprops.o \
+       $(OBJS)\propgriddll_editors.o \
+       $(OBJS)\propgriddll_manager.o \
+       $(OBJS)\propgriddll_property.o \
+       $(OBJS)\propgriddll_propgrid.o \
+       $(OBJS)\propgriddll_propgridiface.o \
+       $(OBJS)\propgriddll_propgridpagestate.o \
+       $(OBJS)\propgriddll_props.o
+PROPGRIDLIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
+       $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
+       $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
+       $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include -W -Wall -DWXBUILDING \
+       -I..\..\src\tiff\libtiff -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib \
+       -I..\..\src\regex -I..\..\src\expat\lib $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \
+       -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDLIB_OBJECTS =  \
+       $(OBJS)\propgridlib_dummy.o \
+       $(OBJS)\propgridlib_advprops.o \
+       $(OBJS)\propgridlib_editors.o \
+       $(OBJS)\propgridlib_manager.o \
+       $(OBJS)\propgridlib_property.o \
+       $(OBJS)\propgridlib_propgrid.o \
+       $(OBJS)\propgridlib_propgridiface.o \
+       $(OBJS)\propgridlib_propgridpagestate.o \
+       $(OBJS)\propgridlib_props.o
 RICHTEXTDLL_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
        $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
        $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
 RICHTEXTDLL_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
        $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
        $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
@@ -1485,6 +1523,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_auibook.o \
        $(OBJS)\monodll_auibar.o \
        $(OBJS)\monodll_tabmdi.o \
        $(OBJS)\monodll_auibook.o \
        $(OBJS)\monodll_auibar.o \
        $(OBJS)\monodll_tabmdi.o \
+       $(OBJS)\monodll_advprops.o \
+       $(OBJS)\monodll_editors.o \
+       $(OBJS)\monodll_manager.o \
+       $(OBJS)\monodll_property.o \
+       $(OBJS)\monodll_propgrid.o \
+       $(OBJS)\monodll_propgridiface.o \
+       $(OBJS)\monodll_propgridpagestate.o \
+       $(OBJS)\monodll_props.o \
        $(OBJS)\monodll_richtextctrl.o \
        $(OBJS)\monodll_richtextbuffer.o \
        $(OBJS)\monodll_richtextstyles.o \
        $(OBJS)\monodll_richtextctrl.o \
        $(OBJS)\monodll_richtextbuffer.o \
        $(OBJS)\monodll_richtextstyles.o \
@@ -2148,6 +2194,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_auibook.o \
        $(OBJS)\monolib_auibar.o \
        $(OBJS)\monolib_tabmdi.o \
        $(OBJS)\monolib_auibook.o \
        $(OBJS)\monolib_auibar.o \
        $(OBJS)\monolib_tabmdi.o \
+       $(OBJS)\monolib_advprops.o \
+       $(OBJS)\monolib_editors.o \
+       $(OBJS)\monolib_manager.o \
+       $(OBJS)\monolib_property.o \
+       $(OBJS)\monolib_propgrid.o \
+       $(OBJS)\monolib_propgridiface.o \
+       $(OBJS)\monolib_propgridpagestate.o \
+       $(OBJS)\monolib_props.o \
        $(OBJS)\monolib_richtextctrl.o \
        $(OBJS)\monolib_richtextbuffer.o \
        $(OBJS)\monolib_richtextstyles.o \
        $(OBJS)\monolib_richtextctrl.o \
        $(OBJS)\monolib_richtextbuffer.o \
        $(OBJS)\monolib_richtextstyles.o \
@@ -4009,6 +4063,28 @@ ____wxaui_namelib_DEP = $(__auilib___depname)
 endif
 ifeq ($(MONOLITHIC),0)
 ifeq ($(SHARED),1)
 endif
 ifeq ($(MONOLITHIC),0)
 ifeq ($(SHARED),1)
+ifeq ($(USE_PROPGRID),1)
+__propgriddll___depname = \
+       $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_gcc$(VENDORTAG).dll
+endif
+endif
+endif
+ifeq ($(MONOLITHIC),0)
+ifeq ($(SHARED),0)
+ifeq ($(USE_PROPGRID),1)
+__propgridlib___depname = \
+       $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.a
+endif
+endif
+endif
+ifeq ($(SHARED),1)
+____wxpropgrid_namedll_DEP = $(__propgriddll___depname)
+endif
+ifeq ($(SHARED),0)
+____wxpropgrid_namelib_DEP = $(__propgridlib___depname)
+endif
+ifeq ($(MONOLITHIC),0)
+ifeq ($(SHARED),1)
 ifeq ($(USE_RICHTEXT),1)
 __richtextdll___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_gcc$(VENDORTAG).dll
 ifeq ($(USE_RICHTEXT),1)
 __richtextdll___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_gcc$(VENDORTAG).dll
@@ -4108,36 +4184,36 @@ endif
 endif
 endif
 ifeq ($(WXUNIV),1)
 endif
 endif
 ifeq ($(WXUNIV),1)
-__WXUNIV_DEFINE_p_54 = --define __WXUNIVERSAL__
+__WXUNIV_DEFINE_p_58 = --define __WXUNIVERSAL__
 endif
 ifeq ($(BUILD),debug)
 ifeq ($(DEBUG_FLAG),default)
 endif
 ifeq ($(BUILD),debug)
 ifeq ($(DEBUG_FLAG),default)
-__DEBUG_DEFINE_p_53 = --define __WXDEBUG__
+__DEBUG_DEFINE_p_57 = --define __WXDEBUG__
 endif
 endif
 ifeq ($(DEBUG_FLAG),1)
 endif
 endif
 ifeq ($(DEBUG_FLAG),1)
-__DEBUG_DEFINE_p_53 = --define __WXDEBUG__
+__DEBUG_DEFINE_p_57 = --define __WXDEBUG__
 endif
 ifeq ($(USE_EXCEPTIONS),0)
 endif
 ifeq ($(USE_EXCEPTIONS),0)
-__EXCEPTIONS_DEFINE_p_53 = --define wxNO_EXCEPTIONS
+__EXCEPTIONS_DEFINE_p_57 = --define wxNO_EXCEPTIONS
 endif
 ifeq ($(USE_RTTI),0)
 endif
 ifeq ($(USE_RTTI),0)
-__RTTI_DEFINE_p_53 = --define wxNO_RTTI
+__RTTI_DEFINE_p_57 = --define wxNO_RTTI
 endif
 ifeq ($(USE_THREADS),0)
 endif
 ifeq ($(USE_THREADS),0)
-__THREAD_DEFINE_p_53 = --define wxNO_THREADS
+__THREAD_DEFINE_p_57 = --define wxNO_THREADS
 endif
 ifeq ($(UNICODE),0)
 endif
 ifeq ($(UNICODE),0)
-__UNICODE_DEFINE_p_54 = --define wxUSE_UNICODE=0
+__UNICODE_DEFINE_p_58 = --define wxUSE_UNICODE=0
 endif
 ifeq ($(UNICODE),1)
 endif
 ifeq ($(UNICODE),1)
-__UNICODE_DEFINE_p_54 = --define _UNICODE
+__UNICODE_DEFINE_p_58 = --define _UNICODE
 endif
 ifeq ($(MSLU),1)
 endif
 ifeq ($(MSLU),1)
-__MSLU_DEFINE_p_53 = --define wxUSE_UNICODE_MSLU=1
+__MSLU_DEFINE_p_57 = --define wxUSE_UNICODE_MSLU=1
 endif
 ifeq ($(USE_GDIPLUS),1)
 endif
 ifeq ($(USE_GDIPLUS),1)
-__GFXCTX_DEFINE_p_53 = --define wxUSE_GRAPHICS_CONTEXT=1
+__GFXCTX_DEFINE_p_57 = --define wxUSE_GRAPHICS_CONTEXT=1
 endif
 ifeq ($(USE_GUI),1)
 __LIB_TIFF_p = -lwxtiff$(WXDEBUGFLAG)
 endif
 ifeq ($(USE_GUI),1)
 __LIB_TIFF_p = -lwxtiff$(WXDEBUGFLAG)
@@ -4240,7 +4316,7 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: setup_h $(LIBDIRNAME)\libwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).a $(LIBDIRNAME)\libwxzlib$(WXDEBUGFLAG).a $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(LIBDIRNAME)\libwxexpat$(WXDEBUGFLAG).a $(__wxscintilla) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) build_cfg_file
+all: setup_h $(LIBDIRNAME)\libwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).a $(LIBDIRNAME)\libwxzlib$(WXDEBUGFLAG).a $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(LIBDIRNAME)\libwxexpat$(WXDEBUGFLAG).a $(__wxscintilla) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__propgriddll___depname) $(__propgridlib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) build_cfg_file
 
 clean: 
        -if exist $(OBJS)\*.o del $(OBJS)\*.o
 
 clean: 
        -if exist $(OBJS)\*.o del $(OBJS)\*.o
@@ -4285,6 +4361,9 @@ clean:
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_gcc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_gcc$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.a
        -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.a
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_gcc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_gcc$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.a
        -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.a
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_gcc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_gcc$(VENDORTAG).dll
+       -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.a
+       -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.a
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_gcc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_gcc$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.a
        -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.a
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_gcc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_gcc$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.a
        -if exist $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.a del $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.a
@@ -4613,6 +4692,32 @@ wxaui: $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 endif
 endif
 
 endif
 endif
 
+ifeq ($(MONOLITHIC),0)
+ifeq ($(SHARED),1)
+ifeq ($(USE_PROPGRID),1)
+$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_gcc$(VENDORTAG).dll: $(PROPGRIDDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\libwxexpat$(WXDEBUGFLAG).a $(LIBDIRNAME)\libwxzlib$(WXDEBUGFLAG).a $(LIBDIRNAME)\libwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).a $(OBJS)\propgriddll_version_rc.o $(__advdll___depname) $(__coredll___depname) $(__basedll___depname)
+       $(CXX) $(LINK_DLL_FLAGS) -fPIC -o $@ $(PROPGRIDDLL_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--out-implib=$(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.a  $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.a $(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.a $(LIBDIRNAME)\libwxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).a
+endif
+endif
+endif
+
+ifeq ($(MONOLITHIC),0)
+ifeq ($(SHARED),0)
+ifeq ($(USE_PROPGRID),1)
+$(LIBDIRNAME)\libwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.a: $(PROPGRIDLIB_OBJECTS)
+       if exist $@ del $@
+       ar rcu $@ $(PROPGRIDLIB_OBJECTS)
+       ranlib $@
+endif
+endif
+endif
+
+ifeq ($(MONOLITHIC),0)
+ifeq ($(USE_PROPGRID),1)
+wxpropgrid: $(____wxpropgrid_namedll_DEP) $(____wxpropgrid_namelib_DEP)
+endif
+endif
+
 ifeq ($(MONOLITHIC),0)
 ifeq ($(SHARED),1)
 ifeq ($(USE_RICHTEXT),1)
 ifeq ($(MONOLITHIC),0)
 ifeq ($(SHARED),1)
 ifeq ($(USE_RICHTEXT),1)
@@ -6151,6 +6256,30 @@ $(OBJS)\monodll_auibar.o: ../../src/aui/auibar.cpp
 $(OBJS)\monodll_tabmdi.o: ../../src/aui/tabmdi.cpp
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\monodll_tabmdi.o: ../../src/aui/tabmdi.cpp
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\monodll_advprops.o: ../../src/propgrid/advprops.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monodll_editors.o: ../../src/propgrid/editors.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monodll_manager.o: ../../src/propgrid/manager.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monodll_property.o: ../../src/propgrid/property.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monodll_propgrid.o: ../../src/propgrid/propgrid.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monodll_propgridiface.o: ../../src/propgrid/propgridiface.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monodll_propgridpagestate.o: ../../src/propgrid/propgridpagestate.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monodll_props.o: ../../src/propgrid/props.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\monodll_richtextctrl.o: ../../src/richtext/richtextctrl.cpp
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\monodll_richtextctrl.o: ../../src/richtext/richtextctrl.cpp
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 
@@ -7648,7 +7777,7 @@ $(OBJS)\monodll_joystick.o: ../../src/msw/joystick.cpp
 endif
 
 $(OBJS)\monodll_version_rc.o: ../../src/msw/version.rc
 endif
 
 $(OBJS)\monodll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define wxUSE_BASE=1 --define WXMAKINGDLL --include-dir ../../src/stc/scintilla/include --include-dir ../../src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define wxUSE_BASE=1 --define WXMAKINGDLL --include-dir ../../src/stc/scintilla/include --include-dir ../../src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS
 
 $(OBJS)\monolib_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\monolib_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -8424,6 +8553,30 @@ $(OBJS)\monolib_auibar.o: ../../src/aui/auibar.cpp
 $(OBJS)\monolib_tabmdi.o: ../../src/aui/tabmdi.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\monolib_tabmdi.o: ../../src/aui/tabmdi.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\monolib_advprops.o: ../../src/propgrid/advprops.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monolib_editors.o: ../../src/propgrid/editors.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monolib_manager.o: ../../src/propgrid/manager.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monolib_property.o: ../../src/propgrid/property.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monolib_propgrid.o: ../../src/propgrid/propgrid.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monolib_propgridiface.o: ../../src/propgrid/propgridiface.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monolib_propgridpagestate.o: ../../src/propgrid/propgridpagestate.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\monolib_props.o: ../../src/propgrid/props.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\monolib_richtextctrl.o: ../../src/richtext/richtextctrl.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\monolib_richtextctrl.o: ../../src/richtext/richtextctrl.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 
@@ -9924,7 +10077,7 @@ $(OBJS)\basedll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\basedll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\basedll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define wxUSE_GUI=0 --define WXMAKINGDLL_BASE --define wxUSE_BASE=1
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define wxUSE_GUI=0 --define WXMAKINGDLL_BASE --define wxUSE_BASE=1
 
 $(OBJS)\basedll_appbase.o: ../../src/common/appbase.cpp
        $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\basedll_appbase.o: ../../src/common/appbase.cpp
        $(CXX) -c -o $@ $(BASEDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -10545,7 +10698,7 @@ $(OBJS)\netdll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(NETDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\netdll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(NETDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\netdll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define wxUSE_GUI=0 --define WXUSINGDLL --define WXMAKINGDLL_NET
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define wxUSE_GUI=0 --define WXUSINGDLL --define WXMAKINGDLL_NET
 
 $(OBJS)\netdll_fs_inet.o: ../../src/common/fs_inet.cpp
        $(CXX) -c -o $@ $(NETDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\netdll_fs_inet.o: ../../src/common/fs_inet.cpp
        $(CXX) -c -o $@ $(NETDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -10632,7 +10785,7 @@ $(OBJS)\coredll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\coredll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\coredll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_CORE --define wxUSE_BASE=0
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_CORE --define wxUSE_BASE=0
 
 $(OBJS)\coredll_event.o: ../../src/common/event.cpp
        $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\coredll_event.o: ../../src/common/event.cpp
        $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -13531,7 +13684,7 @@ $(OBJS)\advdll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\advdll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\advdll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_ADV
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_ADV
 
 $(OBJS)\advdll_bmpcbox.o: ../../src/msw/bmpcbox.cpp
        $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\advdll_bmpcbox.o: ../../src/msw/bmpcbox.cpp
        $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -13760,7 +13913,7 @@ $(OBJS)\mediadll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(MEDIADLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\mediadll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(MEDIADLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\mediadll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_MEDIA
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_MEDIA
 
 $(OBJS)\mediadll_mediactrlcmn.o: ../../src/common/mediactrlcmn.cpp
        $(CXX) -c -o $@ $(MEDIADLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\mediadll_mediactrlcmn.o: ../../src/common/mediactrlcmn.cpp
        $(CXX) -c -o $@ $(MEDIADLL_CXXFLAGS) $(CPPDEPS) $<
@@ -13799,7 +13952,7 @@ $(OBJS)\htmldll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(HTMLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\htmldll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(HTMLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\htmldll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_HTML
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_HTML
 
 $(OBJS)\htmldll_helpbest.o: ../../src/msw/helpbest.cpp
        $(CXX) -c -o $@ $(HTMLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\htmldll_helpbest.o: ../../src/msw/helpbest.cpp
        $(CXX) -c -o $@ $(HTMLDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -13952,7 +14105,7 @@ $(OBJS)\qadll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(QADLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\qadll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(QADLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\qadll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_QA
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_QA
 
 $(OBJS)\qadll_debugrpt.o: ../../src/common/debugrpt.cpp
        $(CXX) -c -o $@ $(QADLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\qadll_debugrpt.o: ../../src/common/debugrpt.cpp
        $(CXX) -c -o $@ $(QADLL_CXXFLAGS) $(CPPDEPS) $<
@@ -13973,7 +14126,7 @@ $(OBJS)\xmldll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(XMLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\xmldll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(XMLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\xmldll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define wxUSE_GUI=0 --define WXUSINGDLL --define WXMAKINGDLL_XML
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define wxUSE_GUI=0 --define WXUSINGDLL --define WXMAKINGDLL_XML
 
 $(OBJS)\xmldll_xml.o: ../../src/xml/xml.cpp
        $(CXX) -c -o $@ $(XMLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\xmldll_xml.o: ../../src/xml/xml.cpp
        $(CXX) -c -o $@ $(XMLDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -13994,7 +14147,7 @@ $(OBJS)\xrcdll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(XRCDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\xrcdll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(XRCDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\xrcdll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_XRC
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_XRC
 
 $(OBJS)\xrcdll_xh_animatctrl.o: ../../src/xrc/xh_animatctrl.cpp
        $(CXX) -c -o $@ $(XRCDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\xrcdll_xh_animatctrl.o: ../../src/xrc/xh_animatctrl.cpp
        $(CXX) -c -o $@ $(XRCDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -14351,7 +14504,7 @@ $(OBJS)\auidll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\auidll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\auidll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_AUI
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_AUI
 
 $(OBJS)\auidll_framemanager.o: ../../src/aui/framemanager.cpp
        $(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\auidll_framemanager.o: ../../src/aui/framemanager.cpp
        $(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -14392,11 +14545,68 @@ $(OBJS)\auilib_auibar.o: ../../src/aui/auibar.cpp
 $(OBJS)\auilib_tabmdi.o: ../../src/aui/tabmdi.cpp
        $(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\auilib_tabmdi.o: ../../src/aui/tabmdi.cpp
        $(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\propgriddll_dummy.o: ../../src/common/dummy.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgriddll_version_rc.o: ../../src/msw/version.rc
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_PROPGRID
+
+$(OBJS)\propgriddll_advprops.o: ../../src/propgrid/advprops.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgriddll_editors.o: ../../src/propgrid/editors.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgriddll_manager.o: ../../src/propgrid/manager.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgriddll_property.o: ../../src/propgrid/property.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgriddll_propgrid.o: ../../src/propgrid/propgrid.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgriddll_propgridiface.o: ../../src/propgrid/propgridiface.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgriddll_propgridpagestate.o: ../../src/propgrid/propgridpagestate.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgriddll_props.o: ../../src/propgrid/props.cpp
+       $(CXX) -c -o $@ $(PROPGRIDDLL_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_dummy.o: ../../src/common/dummy.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_advprops.o: ../../src/propgrid/advprops.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_editors.o: ../../src/propgrid/editors.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_manager.o: ../../src/propgrid/manager.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_property.o: ../../src/propgrid/property.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_propgrid.o: ../../src/propgrid/propgrid.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_propgridiface.o: ../../src/propgrid/propgridiface.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_propgridpagestate.o: ../../src/propgrid/propgridpagestate.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgridlib_props.o: ../../src/propgrid/props.cpp
+       $(CXX) -c -o $@ $(PROPGRIDLIB_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\richtextdll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(RICHTEXTDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\richtextdll_version_rc.o: ../../src/msw/version.rc
 $(OBJS)\richtextdll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(RICHTEXTDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\richtextdll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_RICHTEXT
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_RICHTEXT
 
 $(OBJS)\richtextdll_richtextctrl.o: ../../src/richtext/richtextctrl.cpp
        $(CXX) -c -o $@ $(RICHTEXTDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\richtextdll_richtextctrl.o: ../../src/richtext/richtextctrl.cpp
        $(CXX) -c -o $@ $(RICHTEXTDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -14459,7 +14669,7 @@ $(OBJS)\stcdll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\stcdll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\stcdll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --include-dir ../../src/stc/scintilla/include --include-dir ../../src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS --define WXUSINGDLL --define WXMAKINGDLL_STC
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --include-dir ../../src/stc/scintilla/include --include-dir ../../src/stc/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS --define WXUSINGDLL --define WXMAKINGDLL_STC
 
 $(OBJS)\stcdll_stc.o: ../../src/stc/stc.cpp
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\stcdll_stc.o: ../../src/stc/stc.cpp
        $(CXX) -c -o $@ $(STCDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -14486,7 +14696,7 @@ $(OBJS)\gldll_dummy.o: ../../src/common/dummy.cpp
        $(CXX) -c -o $@ $(GLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\gldll_version_rc.o: ../../src/msw/version.rc
        $(CXX) -c -o $@ $(GLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\gldll_version_rc.o: ../../src/msw/version.rc
-       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_GL
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) --include-dir $(SETUPHDIR) --include-dir ../../include --define WXBUILDING --define WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_gcc$(VENDORTAG)  --include-dir ../../src/tiff/libtiff --include-dir ../../src/jpeg --include-dir ../../src/png --include-dir ../../src/zlib --include-dir ../../src/regex --include-dir ../../src/expat/lib --define WXUSINGDLL --define WXMAKINGDLL_GL
 
 $(OBJS)\gldll_glcmn.o: ../../src/common/glcmn.cpp
        $(CXX) -c -o $@ $(GLDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\gldll_glcmn.o: ../../src/common/glcmn.cpp
        $(CXX) -c -o $@ $(GLDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -14503,7 +14713,7 @@ $(OBJS)\gllib_glcmn.o: ../../src/common/glcmn.cpp
 $(OBJS)\gllib_glcanvas.o: ../../src/msw/glcanvas.cpp
        $(CXX) -c -o $@ $(GLLIB_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\gllib_glcanvas.o: ../../src/msw/glcanvas.cpp
        $(CXX) -c -o $@ $(GLLIB_CXXFLAGS) $(CPPDEPS) $<
 
-.PHONY: all clean setup_h wxbase wxnet wxcore wxadv wxmedia wxhtml wxqa wxxml wxxrc wxaui wxrichtext wxstc wxgl samples build_cfg_file
+.PHONY: all clean setup_h wxbase wxnet wxcore wxadv wxmedia wxhtml wxqa wxxml wxxrc wxaui wxpropgrid wxrichtext wxstc wxgl samples build_cfg_file
 
 
 SHELL := $(COMSPEC)
 
 
 SHELL := $(COMSPEC)
index e8dcc8eb078aacf661dea147fcbe0723494ff10d..d481bbb88b87998d7fd1d06bfcef7ec089b76576 100644 (file)
@@ -19,8 +19,8 @@ MAKEARGS = CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" \
        DEBUG_FLAG="$(DEBUG_FLAG)" DEBUG_RUNTIME_LIBS="$(DEBUG_RUNTIME_LIBS)" \
        MONOLITHIC="$(MONOLITHIC)" USE_GUI="$(USE_GUI)" USE_HTML="$(USE_HTML)" \
        USE_MEDIA="$(USE_MEDIA)" USE_XRC="$(USE_XRC)" USE_AUI="$(USE_AUI)" \
        DEBUG_FLAG="$(DEBUG_FLAG)" DEBUG_RUNTIME_LIBS="$(DEBUG_RUNTIME_LIBS)" \
        MONOLITHIC="$(MONOLITHIC)" USE_GUI="$(USE_GUI)" USE_HTML="$(USE_HTML)" \
        USE_MEDIA="$(USE_MEDIA)" USE_XRC="$(USE_XRC)" USE_AUI="$(USE_AUI)" \
-       USE_RICHTEXT="$(USE_RICHTEXT)" USE_STC="$(USE_STC)" \
-       USE_OPENGL="$(USE_OPENGL)" USE_QA="$(USE_QA)" \
+       USE_PROPGRID="$(USE_PROPGRID)" USE_RICHTEXT="$(USE_RICHTEXT)" \
+       USE_STC="$(USE_STC)" USE_OPENGL="$(USE_OPENGL)" USE_QA="$(USE_QA)" \
        USE_EXCEPTIONS="$(USE_EXCEPTIONS)" USE_RTTI="$(USE_RTTI)" \
        USE_THREADS="$(USE_THREADS)" USE_GDIPLUS="$(USE_GDIPLUS)" \
        OFFICIAL_BUILD="$(OFFICIAL_BUILD)" VENDOR="$(VENDOR)" \
        USE_EXCEPTIONS="$(USE_EXCEPTIONS)" USE_RTTI="$(USE_RTTI)" \
        USE_THREADS="$(USE_THREADS)" USE_GDIPLUS="$(USE_GDIPLUS)" \
        OFFICIAL_BUILD="$(OFFICIAL_BUILD)" VENDOR="$(VENDOR)" \
@@ -1304,7 +1304,50 @@ AUILIB_OBJECTS =  \
        $(OBJS)\auilib_auibook.obj \
        $(OBJS)\auilib_auibar.obj \
        $(OBJS)\auilib_tabmdi.obj
        $(OBJS)\auilib_auibook.obj \
        $(OBJS)\auilib_auibar.obj \
        $(OBJS)\auilib_tabmdi.obj
-RICHTEXTDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_397)$(__DEBUGRUNTIME) /DWIN32 \
+PROPGRIDDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_397)$(__DEBUGRUNTIME) /DWIN32 \
+       $(__DEBUGINFO) \
+       /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).pdb \
+       $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
+       $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
+       $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \
+       $(__MSLU_DEFINE_p) $(__GFXCTX_DEFINE_p) /I$(SETUPHDIR) /I..\..\include /W4 \
+       /DWXBUILDING /I..\..\src\tiff\libtiff /I..\..\src\jpeg /I..\..\src\png \
+       /I..\..\src\zlib /I..\..\src\regex /I..\..\src\expat\lib /DWXUSINGDLL \
+       /DWXMAKINGDLL_PROPGRID $(__RTTIFLAG) $(__EXCEPTIONSFLAG) /Yu"wx/wxprec.h" \
+       /Fp"$(OBJS)\wxprec_propgriddll.pch" $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDDLL_OBJECTS =  \
+       $(OBJS)\propgriddll_dummy.obj \
+       $(OBJS)\propgriddll_version.res \
+       $(OBJS)\propgriddll_advprops.obj \
+       $(OBJS)\propgriddll_editors.obj \
+       $(OBJS)\propgriddll_manager.obj \
+       $(OBJS)\propgriddll_property.obj \
+       $(OBJS)\propgriddll_propgrid.obj \
+       $(OBJS)\propgriddll_propgridiface.obj \
+       $(OBJS)\propgriddll_propgridpagestate.obj \
+       $(OBJS)\propgriddll_props.obj
+PROPGRIDLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_410)$(__DEBUGRUNTIME) /DWIN32 \
+       $(__DEBUGINFO) \
+       /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.pdb \
+       $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
+       $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
+       $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \
+       $(__MSLU_DEFINE_p) $(__GFXCTX_DEFINE_p) /I$(SETUPHDIR) /I..\..\include /W4 \
+       /DWXBUILDING /I..\..\src\tiff\libtiff /I..\..\src\jpeg /I..\..\src\png \
+       /I..\..\src\zlib /I..\..\src\regex /I..\..\src\expat\lib $(__RTTIFLAG) \
+       $(__EXCEPTIONSFLAG) /Yu"wx/wxprec.h" /Fp"$(OBJS)\wxprec_propgridlib.pch" \
+       $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDLIB_OBJECTS =  \
+       $(OBJS)\propgridlib_dummy.obj \
+       $(OBJS)\propgridlib_advprops.obj \
+       $(OBJS)\propgridlib_editors.obj \
+       $(OBJS)\propgridlib_manager.obj \
+       $(OBJS)\propgridlib_property.obj \
+       $(OBJS)\propgridlib_propgrid.obj \
+       $(OBJS)\propgridlib_propgridiface.obj \
+       $(OBJS)\propgridlib_propgridpagestate.obj \
+       $(OBJS)\propgridlib_props.obj
+RICHTEXTDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_424)$(__DEBUGRUNTIME) /DWIN32 \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
@@ -1327,7 +1370,7 @@ RICHTEXTDLL_OBJECTS =  \
        $(OBJS)\richtextdll_richtextsymboldlg.obj \
        $(OBJS)\richtextdll_richtextstyledlg.obj \
        $(OBJS)\richtextdll_richtextprint.obj
        $(OBJS)\richtextdll_richtextsymboldlg.obj \
        $(OBJS)\richtextdll_richtextstyledlg.obj \
        $(OBJS)\richtextdll_richtextprint.obj
-RICHTEXTLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_410)$(__DEBUGRUNTIME) /DWIN32 \
+RICHTEXTLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_437)$(__DEBUGRUNTIME) /DWIN32 \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
@@ -1349,7 +1392,7 @@ RICHTEXTLIB_OBJECTS =  \
        $(OBJS)\richtextlib_richtextsymboldlg.obj \
        $(OBJS)\richtextlib_richtextstyledlg.obj \
        $(OBJS)\richtextlib_richtextprint.obj
        $(OBJS)\richtextlib_richtextsymboldlg.obj \
        $(OBJS)\richtextlib_richtextstyledlg.obj \
        $(OBJS)\richtextlib_richtextprint.obj
-STCDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_424)$(__DEBUGRUNTIME) /DWIN32 \
+STCDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_451)$(__DEBUGRUNTIME) /DWIN32 \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_vc$(VENDORTAG).pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_vc$(VENDORTAG).pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
@@ -1368,7 +1411,7 @@ STCDLL_OBJECTS =  \
        $(OBJS)\stcdll_stc.obj \
        $(OBJS)\stcdll_PlatWX.obj \
        $(OBJS)\stcdll_ScintillaWX.obj
        $(OBJS)\stcdll_stc.obj \
        $(OBJS)\stcdll_PlatWX.obj \
        $(OBJS)\stcdll_ScintillaWX.obj
-STCLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_437)$(__DEBUGRUNTIME) /DWIN32 \
+STCLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_464)$(__DEBUGRUNTIME) /DWIN32 \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc.pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc.pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
@@ -1385,7 +1428,7 @@ STCLIB_OBJECTS =  \
        $(OBJS)\stclib_stc.obj \
        $(OBJS)\stclib_PlatWX.obj \
        $(OBJS)\stclib_ScintillaWX.obj
        $(OBJS)\stclib_stc.obj \
        $(OBJS)\stclib_PlatWX.obj \
        $(OBJS)\stclib_ScintillaWX.obj
-GLDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_451)$(__DEBUGRUNTIME) /DWIN32 \
+GLDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_478)$(__DEBUGRUNTIME) /DWIN32 \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_vc$(VENDORTAG).pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_vc$(VENDORTAG).pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
@@ -1401,7 +1444,7 @@ GLDLL_OBJECTS =  \
        $(OBJS)\gldll_version.res \
        $(OBJS)\gldll_glcmn.obj \
        $(OBJS)\gldll_glcanvas.obj
        $(OBJS)\gldll_version.res \
        $(OBJS)\gldll_glcmn.obj \
        $(OBJS)\gldll_glcanvas.obj
-GLLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_464)$(__DEBUGRUNTIME) /DWIN32 \
+GLLIB_CXXFLAGS = /M$(__RUNTIME_LIBS_491)$(__DEBUGRUNTIME) /DWIN32 \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl.pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
        $(__DEBUGINFO) \
        /Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl.pdb \
        $(____DEBUGRUNTIME) $(__OPTIMIZEFLAG) $(__NO_VC_CRTDBG_p) /D__WXMSW__ \
@@ -1643,6 +1686,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_auibook.obj \
        $(OBJS)\monodll_auibar.obj \
        $(OBJS)\monodll_tabmdi.obj \
        $(OBJS)\monodll_auibook.obj \
        $(OBJS)\monodll_auibar.obj \
        $(OBJS)\monodll_tabmdi.obj \
+       $(OBJS)\monodll_advprops.obj \
+       $(OBJS)\monodll_editors.obj \
+       $(OBJS)\monodll_manager.obj \
+       $(OBJS)\monodll_property.obj \
+       $(OBJS)\monodll_propgrid.obj \
+       $(OBJS)\monodll_propgridiface.obj \
+       $(OBJS)\monodll_propgridpagestate.obj \
+       $(OBJS)\monodll_props.obj \
        $(OBJS)\monodll_richtextctrl.obj \
        $(OBJS)\monodll_richtextbuffer.obj \
        $(OBJS)\monodll_richtextstyles.obj \
        $(OBJS)\monodll_richtextctrl.obj \
        $(OBJS)\monodll_richtextbuffer.obj \
        $(OBJS)\monodll_richtextstyles.obj \
@@ -2306,6 +2357,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_auibook.obj \
        $(OBJS)\monolib_auibar.obj \
        $(OBJS)\monolib_tabmdi.obj \
        $(OBJS)\monolib_auibook.obj \
        $(OBJS)\monolib_auibar.obj \
        $(OBJS)\monolib_tabmdi.obj \
+       $(OBJS)\monolib_advprops.obj \
+       $(OBJS)\monolib_editors.obj \
+       $(OBJS)\monolib_manager.obj \
+       $(OBJS)\monolib_property.obj \
+       $(OBJS)\monolib_propgrid.obj \
+       $(OBJS)\monolib_propgridiface.obj \
+       $(OBJS)\monolib_propgridpagestate.obj \
+       $(OBJS)\monolib_props.obj \
        $(OBJS)\monolib_richtextctrl.obj \
        $(OBJS)\monolib_richtextbuffer.obj \
        $(OBJS)\monolib_richtextstyles.obj \
        $(OBJS)\monolib_richtextctrl.obj \
        $(OBJS)\monolib_richtextbuffer.obj \
        $(OBJS)\monolib_richtextstyles.obj \
@@ -4193,25 +4252,51 @@ ____wxaui_namedll_DEP = $(__auidll___depname)
 !if "$(SHARED)" == "0"
 ____wxaui_namelib_DEP = $(__auilib___depname)
 !endif
 !if "$(SHARED)" == "0"
 ____wxaui_namelib_DEP = $(__auilib___depname)
 !endif
+!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_PROPGRID)" == "1"
+__propgriddll___depname = \
+       $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).dll
+!endif
+!if "$(RUNTIME_LIBS)" == "dynamic"
+__RUNTIME_LIBS_397 = D
+!endif
+!if "$(RUNTIME_LIBS)" == "static"
+__RUNTIME_LIBS_397 = $(__THREADSFLAG)
+!endif
+!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_PROPGRID)" == "1"
+__propgridlib___depname = \
+       $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+!endif
+!if "$(RUNTIME_LIBS)" == "dynamic"
+__RUNTIME_LIBS_410 = D
+!endif
+!if "$(RUNTIME_LIBS)" == "static"
+__RUNTIME_LIBS_410 = $(__THREADSFLAG)
+!endif
+!if "$(SHARED)" == "1"
+____wxpropgrid_namedll_DEP = $(__propgriddll___depname)
+!endif
+!if "$(SHARED)" == "0"
+____wxpropgrid_namelib_DEP = $(__propgridlib___depname)
+!endif
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_RICHTEXT)" == "1"
 __richtextdll___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).dll
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_RICHTEXT)" == "1"
 __richtextdll___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).dll
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
-__RUNTIME_LIBS_397 = D
+__RUNTIME_LIBS_424 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_397 = $(__THREADSFLAG)
+__RUNTIME_LIBS_424 = $(__THREADSFLAG)
 !endif
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_RICHTEXT)" == "1"
 __richtextlib___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
 !endif
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_RICHTEXT)" == "1"
 __richtextlib___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
-__RUNTIME_LIBS_410 = D
+__RUNTIME_LIBS_437 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_410 = $(__THREADSFLAG)
+__RUNTIME_LIBS_437 = $(__THREADSFLAG)
 !endif
 !if "$(SHARED)" == "1"
 ____wxrichtext_namedll_DEP = $(__richtextdll___depname)
 !endif
 !if "$(SHARED)" == "1"
 ____wxrichtext_namedll_DEP = $(__richtextdll___depname)
@@ -4224,20 +4309,20 @@ __stcdll___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_vc$(VENDORTAG).dll
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_vc$(VENDORTAG).dll
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
-__RUNTIME_LIBS_424 = D
+__RUNTIME_LIBS_451 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_424 = $(__THREADSFLAG)
+__RUNTIME_LIBS_451 = $(__THREADSFLAG)
 !endif
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_STC)" == "1"
 __stclib___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc.lib
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
 !endif
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_STC)" == "1"
 __stclib___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc.lib
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
-__RUNTIME_LIBS_437 = D
+__RUNTIME_LIBS_464 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_437 = $(__THREADSFLAG)
+__RUNTIME_LIBS_464 = $(__THREADSFLAG)
 !endif
 !if "$(SHARED)" == "1"
 ____wxstc_namedll_DEP = $(__stcdll___depname)
 !endif
 !if "$(SHARED)" == "1"
 ____wxstc_namedll_DEP = $(__stcdll___depname)
@@ -4250,10 +4335,10 @@ __gldll___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_vc$(VENDORTAG).dll
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_vc$(VENDORTAG).dll
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
-__RUNTIME_LIBS_451 = D
+__RUNTIME_LIBS_478 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_451 = $(__THREADSFLAG)
+__RUNTIME_LIBS_478 = $(__THREADSFLAG)
 !endif
 !if "$(MONOLITHIC)" == "0"
 __WXLIBGLDEP_CORE_p = \
 !endif
 !if "$(MONOLITHIC)" == "0"
 __WXLIBGLDEP_CORE_p = \
@@ -4272,10 +4357,10 @@ __gllib___depname = \
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl.lib
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
        $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl.lib
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
-__RUNTIME_LIBS_464 = D
+__RUNTIME_LIBS_491 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_464 = $(__THREADSFLAG)
+__RUNTIME_LIBS_491 = $(__THREADSFLAG)
 !endif
 !if "$(SHARED)" == "1"
 ____wxgl_namedll_DEP = $(__gldll___depname)
 !endif
 !if "$(SHARED)" == "1"
 ____wxgl_namedll_DEP = $(__gldll___depname)
@@ -4318,40 +4403,40 @@ ____DEBUGRUNTIME_4 =
 ____DEBUGRUNTIME_4 = /d _DEBUG
 !endif
 !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0"
 ____DEBUGRUNTIME_4 = /d _DEBUG
 !endif
 !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0"
-__NO_VC_CRTDBG_p_60 = /d __NO_VC_CRTDBG__
+__NO_VC_CRTDBG_p_64 = /d __NO_VC_CRTDBG__
 !endif
 !if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
 !endif
 !if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
-__NO_VC_CRTDBG_p_60 = /d __NO_VC_CRTDBG__
+__NO_VC_CRTDBG_p_64 = /d __NO_VC_CRTDBG__
 !endif
 !if "$(WXUNIV)" == "1"
 !endif
 !if "$(WXUNIV)" == "1"
-__WXUNIV_DEFINE_p_54 = /d __WXUNIVERSAL__
+__WXUNIV_DEFINE_p_58 = /d __WXUNIVERSAL__
 !endif
 !if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
 !endif
 !if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
-__DEBUG_DEFINE_p_53 = /d __WXDEBUG__
+__DEBUG_DEFINE_p_57 = /d __WXDEBUG__
 !endif
 !if "$(DEBUG_FLAG)" == "1"
 !endif
 !if "$(DEBUG_FLAG)" == "1"
-__DEBUG_DEFINE_p_53 = /d __WXDEBUG__
+__DEBUG_DEFINE_p_57 = /d __WXDEBUG__
 !endif
 !if "$(USE_EXCEPTIONS)" == "0"
 !endif
 !if "$(USE_EXCEPTIONS)" == "0"
-__EXCEPTIONS_DEFINE_p_53 = /d wxNO_EXCEPTIONS
+__EXCEPTIONS_DEFINE_p_57 = /d wxNO_EXCEPTIONS
 !endif
 !if "$(USE_RTTI)" == "0"
 !endif
 !if "$(USE_RTTI)" == "0"
-__RTTI_DEFINE_p_53 = /d wxNO_RTTI
+__RTTI_DEFINE_p_57 = /d wxNO_RTTI
 !endif
 !if "$(USE_THREADS)" == "0"
 !endif
 !if "$(USE_THREADS)" == "0"
-__THREAD_DEFINE_p_53 = /d wxNO_THREADS
+__THREAD_DEFINE_p_57 = /d wxNO_THREADS
 !endif
 !if "$(UNICODE)" == "0"
 !endif
 !if "$(UNICODE)" == "0"
-__UNICODE_DEFINE_p_54 = /d wxUSE_UNICODE=0
+__UNICODE_DEFINE_p_58 = /d wxUSE_UNICODE=0
 !endif
 !if "$(UNICODE)" == "1"
 !endif
 !if "$(UNICODE)" == "1"
-__UNICODE_DEFINE_p_54 = /d _UNICODE
+__UNICODE_DEFINE_p_58 = /d _UNICODE
 !endif
 !if "$(MSLU)" == "1"
 !endif
 !if "$(MSLU)" == "1"
-__MSLU_DEFINE_p_53 = /d wxUSE_UNICODE_MSLU=1
+__MSLU_DEFINE_p_57 = /d wxUSE_UNICODE_MSLU=1
 !endif
 !if "$(USE_GDIPLUS)" == "1"
 !endif
 !if "$(USE_GDIPLUS)" == "1"
-__GFXCTX_DEFINE_p_53 = /d wxUSE_GRAPHICS_CONTEXT=1
+__GFXCTX_DEFINE_p_57 = /d wxUSE_GRAPHICS_CONTEXT=1
 !endif
 !if "$(USE_GUI)" == "1"
 __LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
 !endif
 !if "$(USE_GUI)" == "1"
 __LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
@@ -4478,7 +4563,7 @@ $(OBJS):
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all: setup_h $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(__wxscintilla) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) build_cfg_file
+all: setup_h $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(__wxscintilla) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__propgriddll___depname) $(__propgridlib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) build_cfg_file
 
 clean: 
        -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
 
 clean: 
        -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
@@ -4546,6 +4631,11 @@ clean:
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_vc$(VENDORTAG).pdb del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_vc$(VENDORTAG).pdb
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_vc$(VENDORTAG).pdb del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_vc$(VENDORTAG).pdb
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).dll
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).ilk del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).ilk
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).pdb del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).pdb
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).ilk del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).ilk
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).pdb del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).pdb
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).ilk del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).ilk
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).pdb del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).pdb
@@ -4822,6 +4912,25 @@ $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXD
 wxaui: $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 !endif
 
 wxaui: $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 !endif
 
+!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_PROPGRID)" == "1"
+$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).dll: $(OBJS)\propgriddll_dummy.obj  $(PROPGRIDDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(OBJS)\propgriddll_version.res $(__advdll___depname) $(__coredll___depname) $(__basedll___depname)
+       link /DLL /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_4) /pdb:"$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG).pdb"  $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) @<<
+       $(PROPGRIDDLL_OBJECTS)  $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib /IMPLIB:$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+<<
+!endif
+
+!if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "0" && "$(USE_PROPGRID)" == "1"
+$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib: $(OBJS)\propgridlib_dummy.obj  $(PROPGRIDLIB_OBJECTS)
+       if exist $@ del $@
+       link /LIB /NOLOGO /OUT:$@ @<<
+       $(PROPGRIDLIB_OBJECTS)
+<<
+!endif
+
+!if "$(MONOLITHIC)" == "0" && "$(USE_PROPGRID)" == "1"
+wxpropgrid: $(____wxpropgrid_namedll_DEP) $(____wxpropgrid_namelib_DEP)
+!endif
+
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_RICHTEXT)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).dll: $(OBJS)\richtextdll_dummy.obj  $(RICHTEXTDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(OBJS)\richtextdll_version.res $(__advdll___depname) $(__htmldll_library_link_DEP) $(__xmldll___depname) $(__coredll___depname) $(__basedll___depname)
        link /DLL /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_4) /pdb:"$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).pdb"  $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) @<<
 !if "$(MONOLITHIC)" == "0" && "$(SHARED)" == "1" && "$(USE_RICHTEXT)" == "1"
 $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).dll: $(OBJS)\richtextdll_dummy.obj  $(RICHTEXTDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(OBJS)\richtextdll_version.res $(__advdll___depname) $(__htmldll_library_link_DEP) $(__xmldll___depname) $(__coredll___depname) $(__basedll___depname)
        link /DLL /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_4) /pdb:"$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG).pdb"  $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) @<<
@@ -6341,6 +6450,30 @@ $(OBJS)\monodll_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\monodll_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
 $(OBJS)\monodll_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
+$(OBJS)\monodll_advprops.obj: ..\..\src\propgrid\advprops.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
+
+$(OBJS)\monodll_editors.obj: ..\..\src\propgrid\editors.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\editors.cpp
+
+$(OBJS)\monodll_manager.obj: ..\..\src\propgrid\manager.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\manager.cpp
+
+$(OBJS)\monodll_property.obj: ..\..\src\propgrid\property.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\property.cpp
+
+$(OBJS)\monodll_propgrid.obj: ..\..\src\propgrid\propgrid.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\propgrid.cpp
+
+$(OBJS)\monodll_propgridiface.obj: ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\propgridiface.cpp
+
+$(OBJS)\monodll_propgridpagestate.obj: ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\propgridpagestate.cpp
+
+$(OBJS)\monodll_props.obj: ..\..\src\propgrid\props.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\props.cpp
+
 $(OBJS)\monodll_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
 $(OBJS)\monodll_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
@@ -7724,7 +7857,7 @@ $(OBJS)\monodll_joystick.obj: ..\..\src\msw\joystick.cpp
 !endif
 
 $(OBJS)\monodll_version.res: ..\..\src\msw\version.rc
 !endif
 
 $(OBJS)\monodll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d wxUSE_BASE=1 /d WXMAKINGDLL /i ..\..\src\stc\scintilla\include /i ..\..\src\stc\scintilla\src /d __WX__ /d SCI_LEXER /d LINK_LEXERS ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d wxUSE_BASE=1 /d WXMAKINGDLL /i ..\..\src\stc\scintilla\include /i ..\..\src\stc\scintilla\src /d __WX__ /d SCI_LEXER /d LINK_LEXERS ..\..\src\msw\version.rc
 
 $(OBJS)\monolib_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\monolib_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
@@ -8500,6 +8633,30 @@ $(OBJS)\monolib_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\monolib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
 $(OBJS)\monolib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
+$(OBJS)\monolib_advprops.obj: ..\..\src\propgrid\advprops.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
+
+$(OBJS)\monolib_editors.obj: ..\..\src\propgrid\editors.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\editors.cpp
+
+$(OBJS)\monolib_manager.obj: ..\..\src\propgrid\manager.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\manager.cpp
+
+$(OBJS)\monolib_property.obj: ..\..\src\propgrid\property.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\property.cpp
+
+$(OBJS)\monolib_propgrid.obj: ..\..\src\propgrid\propgrid.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\propgrid.cpp
+
+$(OBJS)\monolib_propgridiface.obj: ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\propgridiface.cpp
+
+$(OBJS)\monolib_propgridpagestate.obj: ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\propgridpagestate.cpp
+
+$(OBJS)\monolib_props.obj: ..\..\src\propgrid\props.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\props.cpp
+
 $(OBJS)\monolib_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
 $(OBJS)\monolib_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
@@ -9886,7 +10043,7 @@ $(OBJS)\basedll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\basedll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\basedll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d wxUSE_GUI=0 /d WXMAKINGDLL_BASE /d wxUSE_BASE=1 ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d wxUSE_GUI=0 /d WXMAKINGDLL_BASE /d wxUSE_BASE=1 ..\..\src\msw\version.rc
 
 $(OBJS)\basedll_appbase.obj: ..\..\src\common\appbase.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\appbase.cpp
 
 $(OBJS)\basedll_appbase.obj: ..\..\src\common\appbase.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(BASEDLL_CXXFLAGS) ..\..\src\common\appbase.cpp
@@ -10507,7 +10664,7 @@ $(OBJS)\netdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(NETDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\netdll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(NETDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\netdll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d wxUSE_GUI=0 /d WXUSINGDLL /d WXMAKINGDLL_NET ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_net_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d wxUSE_GUI=0 /d WXUSINGDLL /d WXMAKINGDLL_NET ..\..\src\msw\version.rc
 
 $(OBJS)\netdll_fs_inet.obj: ..\..\src\common\fs_inet.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(NETDLL_CXXFLAGS) ..\..\src\common\fs_inet.cpp
 
 $(OBJS)\netdll_fs_inet.obj: ..\..\src\common\fs_inet.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(NETDLL_CXXFLAGS) ..\..\src\common\fs_inet.cpp
@@ -10594,7 +10751,7 @@ $(OBJS)\coredll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\coredll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\coredll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_CORE /d wxUSE_BASE=0 ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_CORE /d wxUSE_BASE=0 ..\..\src\msw\version.rc
 
 $(OBJS)\coredll_event.obj: ..\..\src\common\event.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\event.cpp
 
 $(OBJS)\coredll_event.obj: ..\..\src\common\event.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\event.cpp
@@ -13269,7 +13426,7 @@ $(OBJS)\advdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\advdll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\advdll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_ADV ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_ADV ..\..\src\msw\version.rc
 
 $(OBJS)\advdll_bmpcbox.obj: ..\..\src\msw\bmpcbox.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) ..\..\src\msw\bmpcbox.cpp
 
 $(OBJS)\advdll_bmpcbox.obj: ..\..\src\msw\bmpcbox.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) ..\..\src\msw\bmpcbox.cpp
@@ -13498,7 +13655,7 @@ $(OBJS)\mediadll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MEDIADLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\mediadll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(MEDIADLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\mediadll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_MEDIA ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_media_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_MEDIA ..\..\src\msw\version.rc
 
 $(OBJS)\mediadll_mediactrlcmn.obj: ..\..\src\common\mediactrlcmn.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MEDIADLL_CXXFLAGS) ..\..\src\common\mediactrlcmn.cpp
 
 $(OBJS)\mediadll_mediactrlcmn.obj: ..\..\src\common\mediactrlcmn.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MEDIADLL_CXXFLAGS) ..\..\src\common\mediactrlcmn.cpp
@@ -13537,7 +13694,7 @@ $(OBJS)\htmldll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(HTMLDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\htmldll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(HTMLDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\htmldll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_HTML ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_html_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_HTML ..\..\src\msw\version.rc
 
 $(OBJS)\htmldll_helpbest.obj: ..\..\src\msw\helpbest.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(HTMLDLL_CXXFLAGS) ..\..\src\msw\helpbest.cpp
 
 $(OBJS)\htmldll_helpbest.obj: ..\..\src\msw\helpbest.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(HTMLDLL_CXXFLAGS) ..\..\src\msw\helpbest.cpp
@@ -13690,7 +13847,7 @@ $(OBJS)\qadll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(QADLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\qadll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(QADLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\qadll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_QA ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_qa_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_QA ..\..\src\msw\version.rc
 
 $(OBJS)\qadll_debugrpt.obj: ..\..\src\common\debugrpt.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(QADLL_CXXFLAGS) ..\..\src\common\debugrpt.cpp
 
 $(OBJS)\qadll_debugrpt.obj: ..\..\src\common\debugrpt.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(QADLL_CXXFLAGS) ..\..\src\common\debugrpt.cpp
@@ -13711,7 +13868,7 @@ $(OBJS)\xmldll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(XMLDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\xmldll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(XMLDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\xmldll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d wxUSE_GUI=0 /d WXUSINGDLL /d WXMAKINGDLL_XML ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wxbase$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xml_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d wxUSE_GUI=0 /d WXUSINGDLL /d WXMAKINGDLL_XML ..\..\src\msw\version.rc
 
 $(OBJS)\xmldll_xml.obj: ..\..\src\xml\xml.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(XMLDLL_CXXFLAGS) ..\..\src\xml\xml.cpp
 
 $(OBJS)\xmldll_xml.obj: ..\..\src\xml\xml.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(XMLDLL_CXXFLAGS) ..\..\src\xml\xml.cpp
@@ -13732,7 +13889,7 @@ $(OBJS)\xrcdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(XRCDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\xrcdll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(XRCDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\xrcdll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_XRC ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_xrc_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_XRC ..\..\src\msw\version.rc
 
 $(OBJS)\xrcdll_xh_animatctrl.obj: ..\..\src\xrc\xh_animatctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_animatctrl.cpp
 
 $(OBJS)\xrcdll_xh_animatctrl.obj: ..\..\src\xrc\xh_animatctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_animatctrl.cpp
@@ -14089,7 +14246,7 @@ $(OBJS)\auidll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\auidll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\auidll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_AUI ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_AUI ..\..\src\msw\version.rc
 
 $(OBJS)\auidll_framemanager.obj: ..\..\src\aui\framemanager.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\framemanager.cpp
 
 $(OBJS)\auidll_framemanager.obj: ..\..\src\aui\framemanager.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\framemanager.cpp
@@ -14130,11 +14287,68 @@ $(OBJS)\auilib_auibar.obj: ..\..\src\aui\auibar.cpp
 $(OBJS)\auilib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
 $(OBJS)\auilib_tabmdi.obj: ..\..\src\aui\tabmdi.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabmdi.cpp
 
+$(OBJS)\propgriddll_dummy.obj: ..\..\src\common\dummy.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
+
+$(OBJS)\propgriddll_version.res: ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_PROPGRID ..\..\src\msw\version.rc
+
+$(OBJS)\propgriddll_advprops.obj: ..\..\src\propgrid\advprops.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
+
+$(OBJS)\propgriddll_editors.obj: ..\..\src\propgrid\editors.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\editors.cpp
+
+$(OBJS)\propgriddll_manager.obj: ..\..\src\propgrid\manager.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\manager.cpp
+
+$(OBJS)\propgriddll_property.obj: ..\..\src\propgrid\property.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\property.cpp
+
+$(OBJS)\propgriddll_propgrid.obj: ..\..\src\propgrid\propgrid.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\propgrid.cpp
+
+$(OBJS)\propgriddll_propgridiface.obj: ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\propgridiface.cpp
+
+$(OBJS)\propgriddll_propgridpagestate.obj: ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\propgridpagestate.cpp
+
+$(OBJS)\propgriddll_props.obj: ..\..\src\propgrid\props.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDDLL_CXXFLAGS) ..\..\src\propgrid\props.cpp
+
+$(OBJS)\propgridlib_dummy.obj: ..\..\src\common\dummy.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
+
+$(OBJS)\propgridlib_advprops.obj: ..\..\src\propgrid\advprops.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
+
+$(OBJS)\propgridlib_editors.obj: ..\..\src\propgrid\editors.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\editors.cpp
+
+$(OBJS)\propgridlib_manager.obj: ..\..\src\propgrid\manager.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\manager.cpp
+
+$(OBJS)\propgridlib_property.obj: ..\..\src\propgrid\property.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\property.cpp
+
+$(OBJS)\propgridlib_propgrid.obj: ..\..\src\propgrid\propgrid.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\propgrid.cpp
+
+$(OBJS)\propgridlib_propgridiface.obj: ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\propgridiface.cpp
+
+$(OBJS)\propgridlib_propgridpagestate.obj: ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\propgridpagestate.cpp
+
+$(OBJS)\propgridlib_props.obj: ..\..\src\propgrid\props.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRIDLIB_CXXFLAGS) ..\..\src\propgrid\props.cpp
+
 $(OBJS)\richtextdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(RICHTEXTDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\richtextdll_version.res: ..\..\src\msw\version.rc
 $(OBJS)\richtextdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(RICHTEXTDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\richtextdll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_RICHTEXT ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_RICHTEXT ..\..\src\msw\version.rc
 
 $(OBJS)\richtextdll_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(RICHTEXTDLL_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
 
 $(OBJS)\richtextdll_richtextctrl.obj: ..\..\src\richtext\richtextctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(RICHTEXTDLL_CXXFLAGS) ..\..\src\richtext\richtextctrl.cpp
@@ -14197,7 +14411,7 @@ $(OBJS)\stcdll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\stcdll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\stcdll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /i ..\..\src\stc\scintilla\include /i ..\..\src\stc\scintilla\src /d __WX__ /d SCI_LEXER /d LINK_LEXERS /d WXUSINGDLL /d WXMAKINGDLL_STC ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /i ..\..\src\stc\scintilla\include /i ..\..\src\stc\scintilla\src /d __WX__ /d SCI_LEXER /d LINK_LEXERS /d WXUSINGDLL /d WXMAKINGDLL_STC ..\..\src\msw\version.rc
 
 $(OBJS)\stcdll_stc.obj: ..\..\src\stc\stc.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) ..\..\src\stc\stc.cpp
 
 $(OBJS)\stcdll_stc.obj: ..\..\src\stc\stc.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(STCDLL_CXXFLAGS) ..\..\src\stc\stc.cpp
@@ -14224,7 +14438,7 @@ $(OBJS)\gldll_dummy.obj: ..\..\src\common\dummy.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(GLDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\gldll_version.res: ..\..\src\msw\version.rc
        $(CXX) /c /nologo /TP /Fo$@ $(GLDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
 
 $(OBJS)\gldll_version.res: ..\..\src\msw\version.rc
-       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_60)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_54) $(__DEBUG_DEFINE_p_53) $(__EXCEPTIONS_DEFINE_p_53) $(__RTTI_DEFINE_p_53) $(__THREAD_DEFINE_p_53) $(__UNICODE_DEFINE_p_54) $(__MSLU_DEFINE_p_53) $(__GFXCTX_DEFINE_p_53) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_GL ..\..\src\msw\version.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_4) $(__NO_VC_CRTDBG_p_64)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_58) $(__DEBUG_DEFINE_p_57) $(__EXCEPTIONS_DEFINE_p_57) $(__RTTI_DEFINE_p_57) $(__THREAD_DEFINE_p_57) $(__UNICODE_DEFINE_p_58) $(__MSLU_DEFINE_p_57) $(__GFXCTX_DEFINE_p_57) /i $(SETUPHDIR) /i ..\..\include /d WXBUILDING /d WXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl_vc$(VENDORTAG)  /i ..\..\src\tiff\libtiff /i ..\..\src\jpeg /i ..\..\src\png /i ..\..\src\zlib /i ..\..\src\regex /i ..\..\src\expat\lib /d WXUSINGDLL /d WXMAKINGDLL_GL ..\..\src\msw\version.rc
 
 $(OBJS)\gldll_glcmn.obj: ..\..\src\common\glcmn.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(GLDLL_CXXFLAGS) ..\..\src\common\glcmn.cpp
 
 $(OBJS)\gldll_glcmn.obj: ..\..\src\common\glcmn.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(GLDLL_CXXFLAGS) ..\..\src\common\glcmn.cpp
index 198ec7fc2c70738935304804f48794952f1b41e8..491aedae4b5467575a1b0c9b8af4476d65357278 100644 (file)
@@ -195,6 +195,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  &
        $(OBJS)\monodll_auibook.obj &
        $(OBJS)\monodll_auibar.obj &
        $(OBJS)\monodll_tabmdi.obj &
        $(OBJS)\monodll_auibook.obj &
        $(OBJS)\monodll_auibar.obj &
        $(OBJS)\monodll_tabmdi.obj &
+       $(OBJS)\monodll_advprops.obj &
+       $(OBJS)\monodll_editors.obj &
+       $(OBJS)\monodll_manager.obj &
+       $(OBJS)\monodll_property.obj &
+       $(OBJS)\monodll_propgrid.obj &
+       $(OBJS)\monodll_propgridiface.obj &
+       $(OBJS)\monodll_propgridpagestate.obj &
+       $(OBJS)\monodll_props.obj &
        $(OBJS)\monodll_richtextctrl.obj &
        $(OBJS)\monodll_richtextbuffer.obj &
        $(OBJS)\monodll_richtextstyles.obj &
        $(OBJS)\monodll_richtextctrl.obj &
        $(OBJS)\monodll_richtextbuffer.obj &
        $(OBJS)\monodll_richtextstyles.obj &
@@ -863,6 +871,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  &
        $(OBJS)\monolib_auibook.obj &
        $(OBJS)\monolib_auibar.obj &
        $(OBJS)\monolib_tabmdi.obj &
        $(OBJS)\monolib_auibook.obj &
        $(OBJS)\monolib_auibar.obj &
        $(OBJS)\monolib_tabmdi.obj &
+       $(OBJS)\monolib_advprops.obj &
+       $(OBJS)\monolib_editors.obj &
+       $(OBJS)\monolib_manager.obj &
+       $(OBJS)\monolib_property.obj &
+       $(OBJS)\monolib_propgrid.obj &
+       $(OBJS)\monolib_propgridiface.obj &
+       $(OBJS)\monolib_propgridpagestate.obj &
+       $(OBJS)\monolib_props.obj &
        $(OBJS)\monolib_richtextctrl.obj &
        $(OBJS)\monolib_richtextbuffer.obj &
        $(OBJS)\monolib_richtextstyles.obj &
        $(OBJS)\monolib_richtextctrl.obj &
        $(OBJS)\monolib_richtextbuffer.obj &
        $(OBJS)\monolib_richtextstyles.obj &
@@ -2768,6 +2784,32 @@ ____wxaui_namelib_DEP =
 !ifeq SHARED 0
 ____wxaui_namelib_DEP = $(__auilib___depname)
 !endif
 !ifeq SHARED 0
 ____wxaui_namelib_DEP = $(__auilib___depname)
 !endif
+__propgriddll___depname =
+!ifeq MONOLITHIC 0
+!ifeq SHARED 1
+!ifeq USE_PROPGRID 1
+__propgriddll___depname = &
+       $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_wat$(VENDORTAG).dll
+!endif
+!endif
+!endif
+__propgridlib___depname =
+!ifeq MONOLITHIC 0
+!ifeq SHARED 0
+!ifeq USE_PROPGRID 1
+__propgridlib___depname = &
+       $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+!endif
+!endif
+!endif
+____wxpropgrid_namedll_DEP =
+!ifeq SHARED 1
+____wxpropgrid_namedll_DEP = $(__propgriddll___depname)
+!endif
+____wxpropgrid_namelib_DEP =
+!ifeq SHARED 0
+____wxpropgrid_namelib_DEP = $(__propgridlib___depname)
+!endif
 __richtextdll___depname =
 !ifeq MONOLITHIC 0
 !ifeq SHARED 1
 __richtextdll___depname =
 !ifeq MONOLITHIC 0
 !ifeq SHARED 1
@@ -3023,8 +3065,8 @@ MAKEARGS = CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" &
        DEBUG_INFO="$(DEBUG_INFO)" DEBUG_FLAG="$(DEBUG_FLAG)" &
        MONOLITHIC="$(MONOLITHIC)" USE_GUI="$(USE_GUI)" USE_HTML="$(USE_HTML)" &
        USE_MEDIA="$(USE_MEDIA)" USE_XRC="$(USE_XRC)" USE_AUI="$(USE_AUI)" &
        DEBUG_INFO="$(DEBUG_INFO)" DEBUG_FLAG="$(DEBUG_FLAG)" &
        MONOLITHIC="$(MONOLITHIC)" USE_GUI="$(USE_GUI)" USE_HTML="$(USE_HTML)" &
        USE_MEDIA="$(USE_MEDIA)" USE_XRC="$(USE_XRC)" USE_AUI="$(USE_AUI)" &
-       USE_RICHTEXT="$(USE_RICHTEXT)" USE_STC="$(USE_STC)" &
-       USE_OPENGL="$(USE_OPENGL)" USE_QA="$(USE_QA)" &
+       USE_PROPGRID="$(USE_PROPGRID)" USE_RICHTEXT="$(USE_RICHTEXT)" &
+       USE_STC="$(USE_STC)" USE_OPENGL="$(USE_OPENGL)" USE_QA="$(USE_QA)" &
        USE_EXCEPTIONS="$(USE_EXCEPTIONS)" USE_RTTI="$(USE_RTTI)" &
        USE_THREADS="$(USE_THREADS)" USE_GDIPLUS="$(USE_GDIPLUS)" &
        OFFICIAL_BUILD="$(OFFICIAL_BUILD)" VENDOR="$(VENDOR)" &
        USE_EXCEPTIONS="$(USE_EXCEPTIONS)" USE_RTTI="$(USE_RTTI)" &
        USE_THREADS="$(USE_THREADS)" USE_GDIPLUS="$(USE_GDIPLUS)" &
        OFFICIAL_BUILD="$(OFFICIAL_BUILD)" VENDOR="$(VENDOR)" &
@@ -4222,6 +4264,43 @@ AUILIB_OBJECTS =  &
        $(OBJS)\auilib_auibook.obj &
        $(OBJS)\auilib_auibar.obj &
        $(OBJS)\auilib_tabmdi.obj
        $(OBJS)\auilib_auibook.obj &
        $(OBJS)\auilib_auibar.obj &
        $(OBJS)\auilib_tabmdi.obj
+PROPGRIDDLL_CXXFLAGS = -bd $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
+       $(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
+       $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) &
+       $(__UNICODE_DEFINE_p) $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) -i=..\..\include &
+       -wx -wcd=549 -wcd=656 -wcd=657 -wcd=667 -dWXBUILDING -i=..\..\src\tiff\libtiff &
+       -i=..\..\src\jpeg -i=..\..\src\png -i=..\..\src\zlib -i=..\..\src\regex &
+       -i=..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_PROPGRID &
+       /fh=$(OBJS)\wxprec_propgriddll.pch $(__RTTIFLAG) $(__EXCEPTIONSFLAG) &
+       $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDDLL_OBJECTS =  &
+       $(OBJS)\propgriddll_dummy.obj &
+       $(OBJS)\propgriddll_advprops.obj &
+       $(OBJS)\propgriddll_editors.obj &
+       $(OBJS)\propgriddll_manager.obj &
+       $(OBJS)\propgriddll_property.obj &
+       $(OBJS)\propgriddll_propgrid.obj &
+       $(OBJS)\propgriddll_propgridiface.obj &
+       $(OBJS)\propgriddll_propgridpagestate.obj &
+       $(OBJS)\propgriddll_props.obj
+PROPGRIDLIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
+       $(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
+       $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) &
+       $(__UNICODE_DEFINE_p) $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) -i=..\..\include &
+       -wx -wcd=549 -wcd=656 -wcd=657 -wcd=667 -dWXBUILDING -i=..\..\src\tiff\libtiff &
+       -i=..\..\src\jpeg -i=..\..\src\png -i=..\..\src\zlib -i=..\..\src\regex &
+       -i=..\..\src\expat\lib /fh=$(OBJS)\wxprec_propgridlib.pch $(__RTTIFLAG) &
+       $(__EXCEPTIONSFLAG) $(CPPFLAGS) $(CXXFLAGS)
+PROPGRIDLIB_OBJECTS =  &
+       $(OBJS)\propgridlib_dummy.obj &
+       $(OBJS)\propgridlib_advprops.obj &
+       $(OBJS)\propgridlib_editors.obj &
+       $(OBJS)\propgridlib_manager.obj &
+       $(OBJS)\propgridlib_property.obj &
+       $(OBJS)\propgridlib_propgrid.obj &
+       $(OBJS)\propgridlib_propgridiface.obj &
+       $(OBJS)\propgridlib_propgridpagestate.obj &
+       $(OBJS)\propgridlib_props.obj
 RICHTEXTDLL_CXXFLAGS = -bd $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
        $(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
        $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) &
 RICHTEXTDLL_CXXFLAGS = -bd $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) &
        $(__RUNTIME_LIBS) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
        $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) &
@@ -4325,7 +4404,7 @@ $(OBJS) :
 
 ### Targets: ###
 
 
 ### Targets: ###
 
-all : .SYMBOLIC setup_h $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(__wxscintilla) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) build_cfg_file
+all : .SYMBOLIC setup_h $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(__wxpng___depname) $(__wxjpeg___depname) $(__wxtiff___depname) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(__wxscintilla) $(__monodll___depname) $(__monolib___depname) $(__basedll___depname) $(__baselib___depname) $(__netdll___depname) $(__netlib___depname) $(__coredll___depname) $(__corelib___depname) $(__advdll___depname) $(__advlib___depname) $(__mediadll___depname) $(__medialib___depname) $(__htmldll___depname) $(__htmllib___depname) $(__qadll___depname) $(__qalib___depname) $(__xmldll___depname) $(__xmllib___depname) $(__xrcdll___depname) $(__xrclib___depname) $(__auidll___depname) $(__auilib___depname) $(__propgriddll___depname) $(__propgridlib___depname) $(__richtextdll___depname) $(__richtextlib___depname) $(__stcdll___depname) $(__stclib___depname) $(__gldll___depname) $(__gllib___depname) build_cfg_file
 
 clean : .SYMBOLIC 
        -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
 
 clean : .SYMBOLIC 
        -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
@@ -4373,6 +4452,9 @@ clean : .SYMBOLIC
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_wat$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_wat$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_wat$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui_wat$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_aui.lib
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_wat$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_wat$(VENDORTAG).dll
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+       -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_wat$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_wat$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_wat$(VENDORTAG).dll del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext_wat$(VENDORTAG).dll
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib
        -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_richtext.lib
@@ -4813,6 +4895,42 @@ wxaui : .SYMBOLIC $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 !endif
 !endif
 
 !endif
 !endif
 
+!ifeq MONOLITHIC 0
+!ifeq SHARED 1
+!ifeq USE_PROPGRID 1
+$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_wat$(VENDORTAG).dll :  $(PROPGRIDDLL_OBJECTS) $(__wxtiff___depname) $(__wxjpeg___depname) $(__wxpng___depname) $(__wxscintilla) $(LIBDIRNAME)\wxexpat$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxzlib$(WXDEBUGFLAG).lib $(LIBDIRNAME)\wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib $(OBJS)\propgriddll_version.res $(__advdll___depname) $(__coredll___depname) $(__basedll___depname)
+       @%create $(OBJS)\propgriddll.lbc
+       @%append $(OBJS)\propgriddll.lbc option quiet
+       @%append $(OBJS)\propgriddll.lbc name $^@
+       @%append $(OBJS)\propgriddll.lbc option caseexact
+       @%append $(OBJS)\propgriddll.lbc $(LDFLAGS) $(__DEBUGINFO_3)  libpath $(LIBDIRNAME)
+       @for %i in ($(PROPGRIDDLL_OBJECTS)) do @%append $(OBJS)\propgriddll.lbc file %i
+       @for %i in ( $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE)  $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib $(LIBDIRNAME)\wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib) do @%append $(OBJS)\propgriddll.lbc library %i
+       @%append $(OBJS)\propgriddll.lbc option resource=$(OBJS)\propgriddll_version.res
+       @%append $(OBJS)\propgriddll.lbc system nt_dll
+       wlink @$(OBJS)\propgriddll.lbc
+       wlib -q -n -b $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib +$^@
+!endif
+!endif
+!endif
+
+!ifeq MONOLITHIC 0
+!ifeq SHARED 0
+!ifeq USE_PROPGRID 1
+$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib :  $(PROPGRIDLIB_OBJECTS)
+       @%create $(OBJS)\propgridlib.lbc
+       @for %i in ($(PROPGRIDLIB_OBJECTS)) do @%append $(OBJS)\propgridlib.lbc +%i
+       wlib -q -p4096 -n -b $^@ @$(OBJS)\propgridlib.lbc
+!endif
+!endif
+!endif
+
+!ifeq MONOLITHIC 0
+!ifeq USE_PROPGRID 1
+wxpropgrid : .SYMBOLIC $(____wxpropgrid_namedll_DEP) $(____wxpropgrid_namelib_DEP)
+!endif
+!endif
+
 !ifeq MONOLITHIC 0
 !ifeq SHARED 1
 !ifeq USE_RICHTEXT 1
 !ifeq MONOLITHIC 0
 !ifeq SHARED 1
 !ifeq USE_RICHTEXT 1
@@ -6383,6 +6501,30 @@ $(OBJS)\monodll_auibar.obj :  .AUTODEPEND ..\..\src\aui\auibar.cpp
 $(OBJS)\monodll_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 
 $(OBJS)\monodll_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 
+$(OBJS)\monodll_advprops.obj :  .AUTODEPEND ..\..\src\propgrid\advprops.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
+$(OBJS)\monodll_editors.obj :  .AUTODEPEND ..\..\src\propgrid\editors.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
+$(OBJS)\monodll_manager.obj :  .AUTODEPEND ..\..\src\propgrid\manager.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
+$(OBJS)\monodll_property.obj :  .AUTODEPEND ..\..\src\propgrid\property.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
+$(OBJS)\monodll_propgrid.obj :  .AUTODEPEND ..\..\src\propgrid\propgrid.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
+$(OBJS)\monodll_propgridiface.obj :  .AUTODEPEND ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
+$(OBJS)\monodll_propgridpagestate.obj :  .AUTODEPEND ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
+$(OBJS)\monodll_props.obj :  .AUTODEPEND ..\..\src\propgrid\props.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+
 $(OBJS)\monodll_richtextctrl.obj :  .AUTODEPEND ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 
 $(OBJS)\monodll_richtextctrl.obj :  .AUTODEPEND ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 
@@ -8656,6 +8798,30 @@ $(OBJS)\monolib_auibar.obj :  .AUTODEPEND ..\..\src\aui\auibar.cpp
 $(OBJS)\monolib_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 
 $(OBJS)\monolib_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 
+$(OBJS)\monolib_advprops.obj :  .AUTODEPEND ..\..\src\propgrid\advprops.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
+$(OBJS)\monolib_editors.obj :  .AUTODEPEND ..\..\src\propgrid\editors.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
+$(OBJS)\monolib_manager.obj :  .AUTODEPEND ..\..\src\propgrid\manager.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
+$(OBJS)\monolib_property.obj :  .AUTODEPEND ..\..\src\propgrid\property.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
+$(OBJS)\monolib_propgrid.obj :  .AUTODEPEND ..\..\src\propgrid\propgrid.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
+$(OBJS)\monolib_propgridiface.obj :  .AUTODEPEND ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
+$(OBJS)\monolib_propgridpagestate.obj :  .AUTODEPEND ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
+$(OBJS)\monolib_props.obj :  .AUTODEPEND ..\..\src\propgrid\props.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+
 $(OBJS)\monolib_richtextctrl.obj :  .AUTODEPEND ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 
 $(OBJS)\monolib_richtextctrl.obj :  .AUTODEPEND ..\..\src\richtext\richtextctrl.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 
@@ -14624,6 +14790,63 @@ $(OBJS)\auilib_auibar.obj :  .AUTODEPEND ..\..\src\aui\auibar.cpp
 $(OBJS)\auilib_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(AUILIB_CXXFLAGS) $<
 
 $(OBJS)\auilib_tabmdi.obj :  .AUTODEPEND ..\..\src\aui\tabmdi.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(AUILIB_CXXFLAGS) $<
 
+$(OBJS)\propgriddll_dummy.obj :  .AUTODEPEND ..\..\src\common\dummy.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgriddll_version.res :  .AUTODEPEND ..\..\src\msw\version.rc
+       wrc -q -ad -bt=nt -r -fo=$^@    -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p)  $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) -i=..\..\include -dWXBUILDING -dWXDLLNAME=wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid_wat$(VENDORTAG)  -i=..\..\src\tiff\libtiff -i=..\..\src\jpeg -i=..\..\src\png -i=..\..\src\zlib -i=..\..\src\regex -i=..\..\src\expat\lib -dWXUSINGDLL -dWXMAKINGDLL_PROPGRID $<
+
+$(OBJS)\propgriddll_advprops.obj :  .AUTODEPEND ..\..\src\propgrid\advprops.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgriddll_editors.obj :  .AUTODEPEND ..\..\src\propgrid\editors.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgriddll_manager.obj :  .AUTODEPEND ..\..\src\propgrid\manager.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgriddll_property.obj :  .AUTODEPEND ..\..\src\propgrid\property.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgriddll_propgrid.obj :  .AUTODEPEND ..\..\src\propgrid\propgrid.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgriddll_propgridiface.obj :  .AUTODEPEND ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgriddll_propgridpagestate.obj :  .AUTODEPEND ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgriddll_props.obj :  .AUTODEPEND ..\..\src\propgrid\props.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDDLL_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_dummy.obj :  .AUTODEPEND ..\..\src\common\dummy.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_advprops.obj :  .AUTODEPEND ..\..\src\propgrid\advprops.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_editors.obj :  .AUTODEPEND ..\..\src\propgrid\editors.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_manager.obj :  .AUTODEPEND ..\..\src\propgrid\manager.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_property.obj :  .AUTODEPEND ..\..\src\propgrid\property.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_propgrid.obj :  .AUTODEPEND ..\..\src\propgrid\propgrid.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_propgridiface.obj :  .AUTODEPEND ..\..\src\propgrid\propgridiface.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_propgridpagestate.obj :  .AUTODEPEND ..\..\src\propgrid\propgridpagestate.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
+$(OBJS)\propgridlib_props.obj :  .AUTODEPEND ..\..\src\propgrid\props.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRIDLIB_CXXFLAGS) $<
+
 $(OBJS)\richtextdll_dummy.obj :  .AUTODEPEND ..\..\src\common\dummy.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(RICHTEXTDLL_CXXFLAGS) $<
 
 $(OBJS)\richtextdll_dummy.obj :  .AUTODEPEND ..\..\src\common\dummy.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(RICHTEXTDLL_CXXFLAGS) $<
 
index 1d9a241d7d03e04c27774aa7be74d4b9ab51ed74..9f841d28ec71c4deeade32e317da09770f594ff8 100644 (file)
@@ -206,6 +206,18 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
 \r
 ###############################################################################\r
 \r
+Project: "propgrid"=wx_propgrid.dsp - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
 Project: "richtext"=wx_richtext.dsp - Package Owner=<4>\r
 \r
 Package=<5>\r
 Project: "richtext"=wx_richtext.dsp - Package Owner=<4>\r
 \r
 Package=<5>\r
index 10716937cef1f90306d464f509b21120c44e437f..1fe9214bf9ecfd5e61aac022c055f19d0eabb39f 100644 (file)
@@ -5631,6 +5631,10 @@ SOURCE=..\..\include\wx\access.h
 # End Source File\r
 # Begin Source File\r
 \r
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\include\wx\propgrid\advprops.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\include\wx\anidecod.h\r
 # End Source File\r
 # Begin Source File\r
 SOURCE=..\..\include\wx\anidecod.h\r
 # End Source File\r
 # Begin Source File\r
@@ -5879,6 +5883,10 @@ SOURCE=..\..\include\wx\editlbox.h
 # End Source File\r
 # Begin Source File\r
 \r
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\include\wx\propgrid\editors.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\include\wx\effects.h\r
 # End Source File\r
 # Begin Source File\r
 SOURCE=..\..\include\wx\effects.h\r
 # End Source File\r
 # Begin Source File\r
@@ -6087,6 +6095,10 @@ SOURCE=..\..\include\wx\listctrl.h
 # End Source File\r
 # Begin Source File\r
 \r
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\include\wx\propgrid\manager.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\include\wx\matrix.h\r
 # End Source File\r
 # Begin Source File\r
 SOURCE=..\..\include\wx\matrix.h\r
 # End Source File\r
 # Begin Source File\r
@@ -6199,6 +6211,30 @@ SOURCE=..\..\include\wx\propdlg.h
 # End Source File\r
 # Begin Source File\r
 \r
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\include\wx\propgrid\property.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\propgrid.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\propgriddefs.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\propgridiface.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\propgridpagestate.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\props.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\include\wx\quantize.h\r
 # End Source File\r
 # Begin Source File\r
 SOURCE=..\..\include\wx\quantize.h\r
 # End Source File\r
 # Begin Source File\r
diff --git a/build/msw/wx_propgrid.dsp b/build/msw/wx_propgrid.dsp
new file mode 100644 (file)
index 0000000..e80b0b5
--- /dev/null
@@ -0,0 +1,606 @@
+# Microsoft Developer Studio Project File - Name="wx_propgrid" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+# TARGTYPE "Win32 (x86) Static Library" 0x0104\r
+\r
+CFG=propgrid - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "wx_propgrid.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "wx_propgrid.mak" CFG="propgrid - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "propgrid - Win32 DLL Universal Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "propgrid - Win32 DLL Universal Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "propgrid - Win32 DLL Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "propgrid - Win32 DLL Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "propgrid - Win32 Universal Release" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "propgrid - Win32 Universal Debug" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "propgrid - Win32 Release" (based on "Win32 (x86) Static Library")\r
+!MESSAGE "propgrid - Win32 Debug" (based on "Win32 (x86) Static Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "propgrid - Win32 DLL Universal Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\lib\vc_dll"\r
+# PROP BASE Intermediate_Dir "vc_mswunivudll\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\lib\vc_dll"\r
+# PROP Intermediate_Dir "vc_mswunivudll\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MD /O2 /GR /EHsc /I "..\..\lib\vc_dll\mswunivu" /I "..\..\include" /W4 /Yu"wx/wxprec.h" /Fp"vc_mswunivudll\wxprec_propgriddll.pch" /Zi /Fd..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.pdb /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /c\r
+# ADD CPP /nologo /FD /MD /O2 /GR /EHsc /I "..\..\lib\vc_dll\mswunivu" /I "..\..\include" /W4 /Yu"wx/wxprec.h" /Fp"vc_mswunivudll\wxprec_propgriddll.pch" /Zi /Fd..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.pdb /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i "..\..\lib\vc_dll\mswunivu" /i "..\..\include" /d "WXBUILDING" /d WXDLLNAME=wxmswuniv290u_propgrid_vc_custom /i "..\..\src\tiff\libtiff" /i "..\..\src\jpeg" /i "..\..\src\png" /i "..\..\src\zlib" /i "..\..\src\regex" /i "..\..\src\expat\lib" /d "WXUSINGDLL" /d WXMAKINGDLL_PROPGRID\r
+# ADD RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i "..\..\lib\vc_dll\mswunivu" /i "..\..\include" /d "WXBUILDING" /d WXDLLNAME=wxmswuniv290u_propgrid_vc_custom /i "..\..\src\tiff\libtiff" /i "..\..\src\jpeg" /i "..\..\src\png" /i "..\..\src\zlib" /i "..\..\src\regex" /i "..\..\src\expat\lib" /d "WXUSINGDLL" /d WXMAKINGDLL_PROPGRID\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmswuniv29u_adv.lib ..\..\lib\vc_dll\wxmswuniv29u_core.lib ..\..\lib\vc_dll\wxbase29u.lib /nologo /dll /machine:i386 /out:"..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.dll" /libpath:"..\..\lib\vc_dll" /implib:"..\..\lib\vc_dll\wxmswuniv29u_propgrid.lib" /debug /pdb:"..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.pdb"\r
+# ADD LINK32 wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmswuniv29u_adv.lib ..\..\lib\vc_dll\wxmswuniv29u_core.lib ..\..\lib\vc_dll\wxbase29u.lib /nologo /dll /machine:i386 /out:"..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.dll" /libpath:"..\..\lib\vc_dll" /implib:"..\..\lib\vc_dll\wxmswuniv29u_propgrid.lib" /debug /pdb:"..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.pdb"\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Universal Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\lib\vc_dll"\r
+# PROP BASE Intermediate_Dir "vc_mswunivuddll\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\lib\vc_dll"\r
+# PROP Intermediate_Dir "vc_mswunivuddll\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MDd /Od /Gm /GR /EHsc /I "..\..\lib\vc_dll\mswunivud" /I "..\..\include" /W4 /Yu"wx/wxprec.h" /Fp"vc_mswunivuddll\wxprec_propgriddll.pch" /Zi /Fd..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.pdb /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /c\r
+# ADD CPP /nologo /FD /MDd /Od /Gm /GR /EHsc /I "..\..\lib\vc_dll\mswunivud" /I "..\..\include" /W4 /Yu"wx/wxprec.h" /Fp"vc_mswunivuddll\wxprec_propgriddll.pch" /Zi /Fd..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.pdb /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i "..\..\lib\vc_dll\mswunivud" /i "..\..\include" /d "WXBUILDING" /d WXDLLNAME=wxmswuniv290ud_propgrid_vc_custom /i "..\..\src\tiff\libtiff" /i "..\..\src\jpeg" /i "..\..\src\png" /i "..\..\src\zlib" /i "..\..\src\regex" /i "..\..\src\expat\lib" /d "WXUSINGDLL" /d WXMAKINGDLL_PROPGRID\r
+# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i "..\..\lib\vc_dll\mswunivud" /i "..\..\include" /d "WXBUILDING" /d WXDLLNAME=wxmswuniv290ud_propgrid_vc_custom /i "..\..\src\tiff\libtiff" /i "..\..\src\jpeg" /i "..\..\src\png" /i "..\..\src\zlib" /i "..\..\src\regex" /i "..\..\src\expat\lib" /d "WXUSINGDLL" /d WXMAKINGDLL_PROPGRID\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmswuniv29ud_adv.lib ..\..\lib\vc_dll\wxmswuniv29ud_core.lib ..\..\lib\vc_dll\wxbase29ud.lib /nologo /dll /machine:i386 /out:"..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.dll" /libpath:"..\..\lib\vc_dll" /implib:"..\..\lib\vc_dll\wxmswuniv29ud_propgrid.lib" /debug /pdb:"..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.pdb"\r
+# ADD LINK32 wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmswuniv29ud_adv.lib ..\..\lib\vc_dll\wxmswuniv29ud_core.lib ..\..\lib\vc_dll\wxbase29ud.lib /nologo /dll /machine:i386 /out:"..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.dll" /libpath:"..\..\lib\vc_dll" /implib:"..\..\lib\vc_dll\wxmswuniv29ud_propgrid.lib" /debug /pdb:"..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.pdb"\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\lib\vc_dll"\r
+# PROP BASE Intermediate_Dir "vc_mswudll\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\lib\vc_dll"\r
+# PROP Intermediate_Dir "vc_mswudll\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MD /O2 /GR /EHsc /I "..\..\lib\vc_dll\mswu" /I "..\..\include" /W4 /Yu"wx/wxprec.h" /Fp"vc_mswudll\wxprec_propgriddll.pch" /Zi /Fd..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.pdb /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "__WXMSW__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /c\r
+# ADD CPP /nologo /FD /MD /O2 /GR /EHsc /I "..\..\lib\vc_dll\mswu" /I "..\..\include" /W4 /Yu"wx/wxprec.h" /Fp"vc_mswudll\wxprec_propgriddll.pch" /Zi /Fd..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.pdb /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "__WXMSW__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "__WXMSW__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "__WXMSW__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i "..\..\lib\vc_dll\mswu" /i "..\..\include" /d "WXBUILDING" /d WXDLLNAME=wxmsw290u_propgrid_vc_custom /i "..\..\src\tiff\libtiff" /i "..\..\src\jpeg" /i "..\..\src\png" /i "..\..\src\zlib" /i "..\..\src\regex" /i "..\..\src\expat\lib" /d "WXUSINGDLL" /d WXMAKINGDLL_PROPGRID\r
+# ADD RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i "..\..\lib\vc_dll\mswu" /i "..\..\include" /d "WXBUILDING" /d WXDLLNAME=wxmsw290u_propgrid_vc_custom /i "..\..\src\tiff\libtiff" /i "..\..\src\jpeg" /i "..\..\src\png" /i "..\..\src\zlib" /i "..\..\src\regex" /i "..\..\src\expat\lib" /d "WXUSINGDLL" /d WXMAKINGDLL_PROPGRID\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmsw29u_adv.lib ..\..\lib\vc_dll\wxmsw29u_core.lib ..\..\lib\vc_dll\wxbase29u.lib /nologo /dll /machine:i386 /out:"..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.dll" /libpath:"..\..\lib\vc_dll" /implib:"..\..\lib\vc_dll\wxmsw29u_propgrid.lib" /debug /pdb:"..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.pdb"\r
+# ADD LINK32 wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmsw29u_adv.lib ..\..\lib\vc_dll\wxmsw29u_core.lib ..\..\lib\vc_dll\wxbase29u.lib /nologo /dll /machine:i386 /out:"..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.dll" /libpath:"..\..\lib\vc_dll" /implib:"..\..\lib\vc_dll\wxmsw29u_propgrid.lib" /debug /pdb:"..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.pdb"\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\lib\vc_dll"\r
+# PROP BASE Intermediate_Dir "vc_mswuddll\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\lib\vc_dll"\r
+# PROP Intermediate_Dir "vc_mswuddll\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MDd /Od /Gm /GR /EHsc /I "..\..\lib\vc_dll\mswud" /I "..\..\include" /W4 /Yu"wx/wxprec.h" /Fp"vc_mswuddll\wxprec_propgriddll.pch" /Zi /Fd..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.pdb /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /c\r
+# ADD CPP /nologo /FD /MDd /Od /Gm /GR /EHsc /I "..\..\lib\vc_dll\mswud" /I "..\..\include" /W4 /Yu"wx/wxprec.h" /Fp"vc_mswuddll\wxprec_propgriddll.pch" /Zi /Fd..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.pdb /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "_USRDLL" /D "DLL_EXPORTS" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /D "WXUSINGDLL" /D "WXMAKINGDLL_PROPGRID" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i "..\..\lib\vc_dll\mswud" /i "..\..\include" /d "WXBUILDING" /d WXDLLNAME=wxmsw290ud_propgrid_vc_custom /i "..\..\src\tiff\libtiff" /i "..\..\src\jpeg" /i "..\..\src\png" /i "..\..\src\zlib" /i "..\..\src\regex" /i "..\..\src\expat\lib" /d "WXUSINGDLL" /d WXMAKINGDLL_PROPGRID\r
+# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i "..\..\lib\vc_dll\mswud" /i "..\..\include" /d "WXBUILDING" /d WXDLLNAME=wxmsw290ud_propgrid_vc_custom /i "..\..\src\tiff\libtiff" /i "..\..\src\jpeg" /i "..\..\src\png" /i "..\..\src\zlib" /i "..\..\src\regex" /i "..\..\src\expat\lib" /d "WXUSINGDLL" /d WXMAKINGDLL_PROPGRID\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmsw29ud_adv.lib ..\..\lib\vc_dll\wxmsw29ud_core.lib ..\..\lib\vc_dll\wxbase29ud.lib /nologo /dll /machine:i386 /out:"..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.dll" /libpath:"..\..\lib\vc_dll" /implib:"..\..\lib\vc_dll\wxmsw29ud_propgrid.lib" /debug /pdb:"..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.pdb"\r
+# ADD LINK32 wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmsw29ud_adv.lib ..\..\lib\vc_dll\wxmsw29ud_core.lib ..\..\lib\vc_dll\wxbase29ud.lib /nologo /dll /machine:i386 /out:"..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.dll" /libpath:"..\..\lib\vc_dll" /implib:"..\..\lib\vc_dll\wxmsw29ud_propgrid.lib" /debug /pdb:"..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.pdb"\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\lib\vc_lib"\r
+# PROP BASE Intermediate_Dir "vc_mswunivu\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\lib\vc_lib"\r
+# PROP Intermediate_Dir "vc_mswunivu\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MD /O2 /GR /EHsc /I "..\..\lib\vc_lib\mswunivu" /I "..\..\include" /W4 /Zi /Fd..\..\lib\vc_lib\wxmswuniv29u_propgrid.pdb /Yu"wx/wxprec.h" /Fp"vc_mswunivu\wxprec_propgridlib.pch" /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_LIB" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXBUILDING" /c\r
+# ADD CPP /nologo /FD /MD /O2 /GR /EHsc /I "..\..\lib\vc_lib\mswunivu" /I "..\..\include" /W4 /Zi /Fd..\..\lib\vc_lib\wxmswuniv29u_propgrid.pdb /Yu"wx/wxprec.h" /Fp"vc_mswunivu\wxprec_propgridlib.pch" /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_LIB" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXBUILDING" /c\r
+# ADD BASE RSC /l 0x409\r
+# ADD RSC /l 0x409\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo /out:"..\..\lib\vc_lib\wxmswuniv29u_propgrid.lib"\r
+# ADD LIB32 /nologo /out:"..\..\lib\vc_lib\wxmswuniv29u_propgrid.lib"\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\lib\vc_lib"\r
+# PROP BASE Intermediate_Dir "vc_mswunivud\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\lib\vc_lib"\r
+# PROP Intermediate_Dir "vc_mswunivud\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MDd /Od /Gm /GR /EHsc /I "..\..\lib\vc_lib\mswunivud" /I "..\..\include" /W4 /Zi /Fd..\..\lib\vc_lib\wxmswuniv29ud_propgrid.pdb /Yu"wx/wxprec.h" /Fp"vc_mswunivud\wxprec_propgridlib.pch" /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_LIB" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /c\r
+# ADD CPP /nologo /FD /MDd /Od /Gm /GR /EHsc /I "..\..\lib\vc_lib\mswunivud" /I "..\..\include" /W4 /Zi /Fd..\..\lib\vc_lib\wxmswuniv29ud_propgrid.pdb /Yu"wx/wxprec.h" /Fp"vc_mswunivud\wxprec_propgridlib.pch" /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_LIB" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /c\r
+# ADD BASE RSC /l 0x409\r
+# ADD RSC /l 0x409\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo /out:"..\..\lib\vc_lib\wxmswuniv29ud_propgrid.lib"\r
+# ADD LIB32 /nologo /out:"..\..\lib\vc_lib\wxmswuniv29ud_propgrid.lib"\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\lib\vc_lib"\r
+# PROP BASE Intermediate_Dir "vc_mswu\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\lib\vc_lib"\r
+# PROP Intermediate_Dir "vc_mswu\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MD /O2 /GR /EHsc /I "..\..\lib\vc_lib\mswu" /I "..\..\include" /W4 /Zi /Fd..\..\lib\vc_lib\wxmsw29u_propgrid.pdb /Yu"wx/wxprec.h" /Fp"vc_mswu\wxprec_propgridlib.pch" /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_LIB" /D "__WXMSW__" /D "_UNICODE" /D "WXBUILDING" /c\r
+# ADD CPP /nologo /FD /MD /O2 /GR /EHsc /I "..\..\lib\vc_lib\mswu" /I "..\..\include" /W4 /Zi /Fd..\..\lib\vc_lib\wxmsw29u_propgrid.pdb /Yu"wx/wxprec.h" /Fp"vc_mswu\wxprec_propgridlib.pch" /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_LIB" /D "__WXMSW__" /D "_UNICODE" /D "WXBUILDING" /c\r
+# ADD BASE RSC /l 0x409\r
+# ADD RSC /l 0x409\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo /out:"..\..\lib\vc_lib\wxmsw29u_propgrid.lib"\r
+# ADD LIB32 /nologo /out:"..\..\lib\vc_lib\wxmsw29u_propgrid.lib"\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "..\..\lib\vc_lib"\r
+# PROP BASE Intermediate_Dir "vc_mswud\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "..\..\lib\vc_lib"\r
+# PROP Intermediate_Dir "vc_mswud\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MDd /Od /Gm /GR /EHsc /I "..\..\lib\vc_lib\mswud" /I "..\..\include" /W4 /Zi /Fd..\..\lib\vc_lib\wxmsw29ud_propgrid.pdb /Yu"wx/wxprec.h" /Fp"vc_mswud\wxprec_propgridlib.pch" /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_LIB" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /c\r
+# ADD CPP /nologo /FD /MDd /Od /Gm /GR /EHsc /I "..\..\lib\vc_lib\mswud" /I "..\..\include" /W4 /Zi /Fd..\..\lib\vc_lib\wxmsw29ud_propgrid.pdb /Yu"wx/wxprec.h" /Fp"vc_mswud\wxprec_propgridlib.pch" /I "..\..\src\tiff\libtiff" /I "..\..\src\jpeg" /I "..\..\src\png" /I "..\..\src\zlib" /I "..\..\src\regex" /I "..\..\src\expat\lib" /D "WIN32" /D "_LIB" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXBUILDING" /c\r
+# ADD BASE RSC /l 0x409\r
+# ADD RSC /l 0x409\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo /out:"..\..\lib\vc_lib\wxmsw29ud_propgrid.lib"\r
+# ADD LIB32 /nologo /out:"..\..\lib\vc_lib\wxmsw29ud_propgrid.lib"\r
+\r
+!ENDIF\r
+\r
+# Begin Target\r
+\r
+# Name "propgrid - Win32 DLL Universal Release"\r
+# Name "propgrid - Win32 DLL Universal Debug"\r
+# Name "propgrid - Win32 DLL Release"\r
+# Name "propgrid - Win32 DLL Debug"\r
+# Name "propgrid - Win32 Universal Release"\r
+# Name "propgrid - Win32 Universal Debug"\r
+# Name "propgrid - Win32 Release"\r
+# Name "propgrid - Win32 Debug"\r
+# Begin Group "Common Sources"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\common\dummy.cpp\r
+# ADD BASE CPP /Yc"wx/wxprec.h"\r
+# ADD CPP /Yc"wx/wxprec.h"\r
+# End Source File\r
+# End Group\r
+# Begin Group "MSW Sources"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\msw\version.rc\r
+\r
+!IF  "$(CFG)" == "propgrid - Win32 DLL Universal Release"\r
+\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Universal Debug"\r
+\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Release"\r
+\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Debug"\r
+\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Release"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Debug"\r
+\r
+# PROP Exclude_From_Build 1\r
+\r
+!ENDIF\r
+\r
+# End Source File\r
+# End Group\r
+# Begin Group "Setup Headers"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\univ\setup.h\r
+\r
+!IF  "$(CFG)" == "propgrid - Win32 DLL Universal Release"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_dll\mswunivu\wx\setup.h\r
+InputPath=..\..\include\wx\univ\setup.h\r
+\r
+"..\..\lib\vc_dll\mswunivu\wx\setup.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+       copy "$(InputPath)" ..\..\lib\vc_dll\mswunivu\wx\setup.h\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Universal Debug"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_dll\mswunivud\wx\setup.h\r
+InputPath=..\..\include\wx\univ\setup.h\r
+\r
+"..\..\lib\vc_dll\mswunivud\wx\setup.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+       copy "$(InputPath)" ..\..\lib\vc_dll\mswunivud\wx\setup.h\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Release"\r
+\r
+# Begin Custom Build - \r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Debug"\r
+\r
+# Begin Custom Build - \r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Release"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_lib\mswunivu\wx\setup.h\r
+InputPath=..\..\include\wx\univ\setup.h\r
+\r
+"..\..\lib\vc_lib\mswunivu\wx\setup.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+       copy "$(InputPath)" ..\..\lib\vc_lib\mswunivu\wx\setup.h\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Debug"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_lib\mswunivud\wx\setup.h\r
+InputPath=..\..\include\wx\univ\setup.h\r
+\r
+"..\..\lib\vc_lib\mswunivud\wx\setup.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+       copy "$(InputPath)" ..\..\lib\vc_lib\mswunivud\wx\setup.h\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Release"\r
+\r
+# Begin Custom Build - \r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Debug"\r
+\r
+# Begin Custom Build - \r
+\r
+# End Custom Build\r
+\r
+!ENDIF\r
+\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\msw\setup.h\r
+\r
+!IF  "$(CFG)" == "propgrid - Win32 DLL Universal Release"\r
+\r
+# Begin Custom Build - \r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Universal Debug"\r
+\r
+# Begin Custom Build - \r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Release"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_dll\mswu\wx\setup.h\r
+InputPath=..\..\include\wx\msw\setup.h\r
+\r
+"..\..\lib\vc_dll\mswu\wx\setup.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+       copy "$(InputPath)" ..\..\lib\vc_dll\mswu\wx\setup.h\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Debug"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_dll\mswud\wx\setup.h\r
+InputPath=..\..\include\wx\msw\setup.h\r
+\r
+"..\..\lib\vc_dll\mswud\wx\setup.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+       copy "$(InputPath)" ..\..\lib\vc_dll\mswud\wx\setup.h\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Release"\r
+\r
+# Begin Custom Build - \r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Debug"\r
+\r
+# Begin Custom Build - \r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Release"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_lib\mswu\wx\setup.h\r
+InputPath=..\..\include\wx\msw\setup.h\r
+\r
+"..\..\lib\vc_lib\mswu\wx\setup.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+       copy "$(InputPath)" ..\..\lib\vc_lib\mswu\wx\setup.h\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Debug"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_lib\mswud\wx\setup.h\r
+InputPath=..\..\include\wx\msw\setup.h\r
+\r
+"..\..\lib\vc_lib\mswud\wx\setup.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
+       copy "$(InputPath)" ..\..\lib\vc_lib\mswud\wx\setup.h\r
+\r
+# End Custom Build\r
+\r
+!ENDIF\r
+\r
+# End Source File\r
+# End Group\r
+# Begin Group "MSW Headers"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\msw\genrcdefs.h\r
+\r
+!IF  "$(CFG)" == "propgrid - Win32 DLL Universal Release"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h\r
+InputPath=..\..\include\wx\msw\genrcdefs.h\r
+\r
+"..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h" : "$(SOURCE)" "..\..\lib\vc_dll\mswunivu\wx\msw"\r
+       cl /EP /nologo "$(InputPath)" > "..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Universal Debug"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h\r
+InputPath=..\..\include\wx\msw\genrcdefs.h\r
+\r
+"..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h" : "$(SOURCE)" "..\..\lib\vc_dll\mswunivud\wx\msw"\r
+       cl /EP /nologo "$(InputPath)" > "..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Release"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h\r
+InputPath=..\..\include\wx\msw\genrcdefs.h\r
+\r
+"..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h" : "$(SOURCE)" "..\..\lib\vc_dll\mswu\wx\msw"\r
+       cl /EP /nologo "$(InputPath)" > "..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Debug"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h\r
+InputPath=..\..\include\wx\msw\genrcdefs.h\r
+\r
+"..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h" : "$(SOURCE)" "..\..\lib\vc_dll\mswud\wx\msw"\r
+       cl /EP /nologo "$(InputPath)" > "..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Release"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h\r
+InputPath=..\..\include\wx\msw\genrcdefs.h\r
+\r
+"..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h" : "$(SOURCE)" "..\..\lib\vc_lib\mswunivu\wx\msw"\r
+       cl /EP /nologo "$(InputPath)" > "..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Debug"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h\r
+InputPath=..\..\include\wx\msw\genrcdefs.h\r
+\r
+"..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h" : "$(SOURCE)" "..\..\lib\vc_lib\mswunivud\wx\msw"\r
+       cl /EP /nologo "$(InputPath)" > "..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Release"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h\r
+InputPath=..\..\include\wx\msw\genrcdefs.h\r
+\r
+"..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h" : "$(SOURCE)" "..\..\lib\vc_lib\mswu\wx\msw"\r
+       cl /EP /nologo "$(InputPath)" > "..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h"\r
+\r
+# End Custom Build\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Debug"\r
+\r
+# Begin Custom Build - Creating ..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h\r
+InputPath=..\..\include\wx\msw\genrcdefs.h\r
+\r
+"..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h" : "$(SOURCE)" "..\..\lib\vc_lib\mswud\wx\msw"\r
+       cl /EP /nologo "$(InputPath)" > "..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h"\r
+\r
+# End Custom Build\r
+\r
+!ENDIF\r
+\r
+# End Source File\r
+# End Group\r
+# Begin Group "Common Headers"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\advprops.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\editors.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\manager.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\property.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\propgrid.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\propgriddefs.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\propgridiface.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\propgridpagestate.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\wx\propgrid\props.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\propgrid\advprops.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\propgrid\editors.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\propgrid\manager.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\propgrid\property.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\propgrid\propgrid.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\propgrid\propgridiface.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\propgrid\propgridpagestate.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\src\propgrid\props.cpp\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
+\r
index 5151fa3f91054b085b8688976ef301fd3afe765f..8f7fb2f1beeae398f7493d7bbf214d95a14a8a2c 100644 (file)
@@ -33,6 +33,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "wx_vc7_xrc.vcproj",
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "wx_vc7_aui.vcproj", "{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}"\r
 EndProject\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "wx_vc7_aui.vcproj", "{0937D36F-9EAC-5D3D-B990-44B3F99BFC34}"\r
 EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "propgrid", "wx_vc7_propgrid.vcproj", "{F7A944F0-250D-57CD-8F71-BC38B2513B28}"\r
+EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "wx_vc7_richtext.vcproj", "{52F16F53-E13D-55CA-AD64-ACB0274B0704}"\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc7_stc.vcproj", "{4B498696-42F2-5547-B159-87E4CAF436C1}"\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "wx_vc7_richtext.vcproj", "{52F16F53-E13D-55CA-AD64-ACB0274B0704}"\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc7_stc.vcproj", "{4B498696-42F2-5547-B159-87E4CAF436C1}"\r
@@ -326,6 +328,22 @@ Global
                {0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Release|Win32.Build.0 = Release|Win32\r
                {0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Debug|Win32.Build.0 = Debug|Win32\r
                {0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Release|Win32.Build.0 = Release|Win32\r
                {0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {0937D36F-9EAC-5D3D-B990-44B3F99BFC34}.Debug|Win32.Build.0 = Debug|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.DLL Universal Release|Win32.ActiveCfg = DLL Universal Release|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.DLL Universal Release|Win32.Build.0 = DLL Universal Release|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.DLL Universal Debug|Win32.ActiveCfg = DLL Universal Debug|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.DLL Universal Debug|Win32.Build.0 = DLL Universal Debug|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.DLL Release|Win32.ActiveCfg = DLL Release|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.DLL Release|Win32.Build.0 = DLL Release|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.DLL Debug|Win32.Build.0 = DLL Debug|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.Universal Release|Win32.ActiveCfg = Universal Release|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.Universal Release|Win32.Build.0 = Universal Release|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.Universal Debug|Win32.ActiveCfg = Universal Debug|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.Universal Debug|Win32.Build.0 = Universal Debug|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.Release|Win32.ActiveCfg = Release|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.Release|Win32.Build.0 = Release|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {F7A944F0-250D-57CD-8F71-BC38B2513B28}.Debug|Win32.Build.0 = Debug|Win32\r
                {52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Release|Win32.ActiveCfg = DLL Universal Release|Win32\r
                {52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Release|Win32.Build.0 = DLL Universal Release|Win32\r
                {52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Debug|Win32.ActiveCfg = DLL Universal Debug|Win32\r
                {52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Release|Win32.ActiveCfg = DLL Universal Release|Win32\r
                {52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Release|Win32.Build.0 = DLL Universal Release|Win32\r
                {52F16F53-E13D-55CA-AD64-ACB0274B0704}.DLL Universal Debug|Win32.ActiveCfg = DLL Universal Debug|Win32\r
index 6067294f976bd15040710c592498bb960a42856d..36e26c891178359e21e81136f6f9e409894511f8 100644 (file)
                                RelativePath="..\..\include\wx\accel.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\access.h"/>\r
                                RelativePath="..\..\include\wx\accel.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\access.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\advprops.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\anidecod.h"/>\r
                        <File\r
                        <File\r
                                RelativePath="..\..\include\wx\anidecod.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\dragimag.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\editlbox.h"/>\r
                                RelativePath="..\..\include\wx\dragimag.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\editlbox.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\editors.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\effects.h"/>\r
                        <File\r
                        <File\r
                                RelativePath="..\..\include\wx\effects.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\listbox.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\listctrl.h"/>\r
                                RelativePath="..\..\include\wx\listbox.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\listctrl.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\manager.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\matrix.h"/>\r
                        <File\r
                        <File\r
                                RelativePath="..\..\include\wx\matrix.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\progdlg.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\propdlg.h"/>\r
                                RelativePath="..\..\include\wx\progdlg.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\propdlg.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\property.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgrid.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgriddefs.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgridiface.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgridpagestate.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\props.h"/>\r
                        <File\r
                                RelativePath="..\..\include\wx\quantize.h"/>\r
                        <File\r
                        <File\r
                                RelativePath="..\..\include\wx\quantize.h"/>\r
                        <File\r
diff --git a/build/msw/wx_vc7_propgrid.vcproj b/build/msw/wx_vc7_propgrid.vcproj
new file mode 100644 (file)
index 0000000..68fb39a
--- /dev/null
@@ -0,0 +1,883 @@
+<?xml version="1.0" ?>\r
+<!--\r
+\r
+  This makefile was generated by\r
+  Bakefile 0.2.3 (http://www.bakefile.org)\r
+  Do not modify, all changes will be overwritten!\r
+\r
+-->\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.10"\r
+       Name="propgrid"\r
+       ProjectGUID="{F7A944F0-250D-57CD-8F71-BC38B2513B28}">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="DLL Universal Release|Win32"\r
+                       OutputDirectory="..\..\lib\vc_dll"\r
+                       IntermediateDirectory="vc_mswunivudll\propgrid"\r
+                       ConfigurationType="2"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswunivu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="_USRDLL;DLL_EXPORTS;__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="3"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswunivudll\wxprec_propgriddll.pch"\r
+                               AssemblerListingLocation="vc_mswunivudll\propgrid\"\r
+                               ObjectFile="vc_mswunivudll\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswunivu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXBUILDING;WXDLLNAME=wxmswuniv290u_propgrid_vc_custom;WXUSINGDLL;WXMAKINGDLL_PROPGRID"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmswuniv29u_adv.lib ..\..\lib\vc_dll\wxmswuniv29u_core.lib ..\..\lib\vc_dll\wxbase29u.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.dll"\r
+                               LinkIncremental="2"\r
+                               ImportLibrary="..\..\lib\vc_dll\wxmswuniv29u_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="..\..\lib\vc_dll"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_dll\wx_vc7_propgrid.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Universal Debug|Win32"\r
+                       OutputDirectory="..\..\lib\vc_dll"\r
+                       IntermediateDirectory="vc_mswunivuddll\propgrid"\r
+                       ConfigurationType="2"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswunivud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_USRDLL;DLL_EXPORTS;_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="3"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswunivuddll\wxprec_propgriddll.pch"\r
+                               AssemblerListingLocation="vc_mswunivuddll\propgrid\"\r
+                               ObjectFile="vc_mswunivuddll\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswunivud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXBUILDING;WXDLLNAME=wxmswuniv290ud_propgrid_vc_custom;WXUSINGDLL;WXMAKINGDLL_PROPGRID"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmswuniv29ud_adv.lib ..\..\lib\vc_dll\wxmswuniv29ud_core.lib ..\..\lib\vc_dll\wxbase29ud.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.dll"\r
+                               LinkIncremental="2"\r
+                               ImportLibrary="..\..\lib\vc_dll\wxmswuniv29ud_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="..\..\lib\vc_dll"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_dll\wx_vc7_propgrid.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Release|Win32"\r
+                       OutputDirectory="..\..\lib\vc_dll"\r
+                       IntermediateDirectory="vc_mswudll\propgrid"\r
+                       ConfigurationType="2"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="_USRDLL;DLL_EXPORTS;__WXMSW__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="3"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswudll\wxprec_propgriddll.pch"\r
+                               AssemblerListingLocation="vc_mswudll\propgrid\"\r
+                               ObjectFile="vc_mswudll\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;WXBUILDING;WXDLLNAME=wxmsw290u_propgrid_vc_custom;WXUSINGDLL;WXMAKINGDLL_PROPGRID"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmsw29u_adv.lib ..\..\lib\vc_dll\wxmsw29u_core.lib ..\..\lib\vc_dll\wxbase29u.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.dll"\r
+                               LinkIncremental="2"\r
+                               ImportLibrary="..\..\lib\vc_dll\wxmsw29u_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="..\..\lib\vc_dll"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_dll\wx_vc7_propgrid.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Debug|Win32"\r
+                       OutputDirectory="..\..\lib\vc_dll"\r
+                       IntermediateDirectory="vc_mswuddll\propgrid"\r
+                       ConfigurationType="2"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_USRDLL;DLL_EXPORTS;_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="3"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswuddll\wxprec_propgriddll.pch"\r
+                               AssemblerListingLocation="vc_mswuddll\propgrid\"\r
+                               ObjectFile="vc_mswuddll\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXBUILDING;WXDLLNAME=wxmsw290ud_propgrid_vc_custom;WXUSINGDLL;WXMAKINGDLL_PROPGRID"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmsw29ud_adv.lib ..\..\lib\vc_dll\wxmsw29ud_core.lib ..\..\lib\vc_dll\wxbase29ud.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.dll"\r
+                               LinkIncremental="2"\r
+                               ImportLibrary="..\..\lib\vc_dll\wxmsw29ud_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="..\..\lib\vc_dll"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_dll\wx_vc7_propgrid.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Universal Release|Win32"\r
+                       OutputDirectory="..\..\lib\vc_lib"\r
+                       IntermediateDirectory="vc_mswunivu\propgrid"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswunivu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="_LIB;__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXBUILDING"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="3"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswunivu\wxprec_propgridlib.pch"\r
+                               AssemblerListingLocation="vc_mswunivu\propgrid\"\r
+                               ObjectFile="vc_mswunivu\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_lib\wxmswuniv29u_propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswunivu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXBUILDING"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\..\lib\vc_lib\wxmswuniv29u_propgrid.lib"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_lib\wx_vc7_propgrid.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Universal Debug|Win32"\r
+                       OutputDirectory="..\..\lib\vc_lib"\r
+                       IntermediateDirectory="vc_mswunivud\propgrid"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswunivud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_LIB;_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXBUILDING"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="3"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswunivud\wxprec_propgridlib.pch"\r
+                               AssemblerListingLocation="vc_mswunivud\propgrid\"\r
+                               ObjectFile="vc_mswunivud\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_lib\wxmswuniv29ud_propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswunivud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXBUILDING"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\..\lib\vc_lib\wxmswuniv29ud_propgrid.lib"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_lib\wx_vc7_propgrid.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="..\..\lib\vc_lib"\r
+                       IntermediateDirectory="vc_mswu\propgrid"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="_LIB;__WXMSW__;_UNICODE;WXBUILDING"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="3"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswu\wxprec_propgridlib.pch"\r
+                               AssemblerListingLocation="vc_mswu\propgrid\"\r
+                               ObjectFile="vc_mswu\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_lib\wxmsw29u_propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;WXBUILDING"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\..\lib\vc_lib\wxmsw29u_propgrid.lib"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_lib\wx_vc7_propgrid.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="..\..\lib\vc_lib"\r
+                       IntermediateDirectory="vc_mswud\propgrid"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_LIB;_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXBUILDING"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="3"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswud\wxprec_propgridlib.pch"\r
+                               AssemblerListingLocation="vc_mswud\propgrid\"\r
+                               ObjectFile="vc_mswud\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_lib\wxmsw29ud_propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXBUILDING"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\..\lib\vc_lib\wxmsw29ud_propgrid.lib"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_lib\wx_vc7_propgrid.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+               \r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Common Sources"\r
+                       UniqueIdentifier="{A6A5C30D-BDB6-5050-906D-10A96065136C}">\r
+                       <File\r
+                               RelativePath="..\..\src\common\dummy.cpp">\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="MSW Sources"\r
+                       UniqueIdentifier="{D030D8C2-53EE-5B96-8F89-D78157B06140}">\r
+                       <File\r
+                               RelativePath="..\..\src\msw\version.rc">\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32"\r
+                                       ExcludedFromBuild="true"/>\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32"\r
+                                       ExcludedFromBuild="true"/>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       ExcludedFromBuild="true"/>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       ExcludedFromBuild="true"/>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Setup Headers"\r
+                       UniqueIdentifier="{63537534-1833-5C1F-8DBD-359A84F294C8}">\r
+                       <File\r
+                               RelativePath="..\..\include\wx\univ\setup.h">\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswunivu\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_dll\mswunivu\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_dll\mswunivu\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswunivud\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_dll\mswunivud\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_dll\mswunivud\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Release|Win32"/>\r
+                               <FileConfiguration\r
+                                       Name="DLL Debug|Win32"/>\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswunivu\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_lib\mswunivu\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_lib\mswunivu\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswunivud\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_lib\mswunivud\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_lib\mswunivud\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"/>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"/>\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\msw\setup.h">\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Release|Win32"/>\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Debug|Win32"/>\r
+                               <FileConfiguration\r
+                                       Name="DLL Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswu\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_dll\mswu\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_dll\mswu\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswud\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_dll\mswud\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_dll\mswud\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32"/>\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32"/>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswu\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_lib\mswu\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_lib\mswu\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswud\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_lib\mswud\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_lib\mswud\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="MSW Headers"\r
+                       UniqueIdentifier="{5AFFF20E-29F9-512B-B80A-7DC45976CDAC}">\r
+                       <File\r
+                               RelativePath="..\..\include\wx\msw\genrcdefs.h">\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_dll\mswunivu\wx\msw&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_dll\mswunivud\wx\msw&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_dll\mswu\wx\msw&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_dll\mswud\wx\msw&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_lib\mswunivu\wx\msw&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_lib\mswunivud\wx\msw&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_lib\mswu\wx\msw&quot;"/>\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32">\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_lib\mswud\wx\msw&quot;"/>\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Common Headers"\r
+                       UniqueIdentifier="{8C07E926-65B0-5F00-B0D6-7F40DA69BB25}">\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\advprops.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\editors.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\manager.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\property.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgrid.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgriddefs.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgridiface.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgridpagestate.h"/>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\props.h"/>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx">\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\advprops.cpp"/>\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\editors.cpp"/>\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\manager.cpp"/>\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\property.cpp"/>\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\propgrid.cpp"/>\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\propgridiface.cpp"/>\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\propgridpagestate.cpp"/>\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\props.cpp"/>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+               \r
+       </Globals>\r
+</VisualStudioProject>\r
+\r
index 0a49e46e9472e48a73ede0c37205dd290bc5b72c..7b145af729f79afe9aeb0236db7f4e541591d8f3 100644 (file)
@@ -34,6 +34,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xrc", "wx_vc8_xrc.vcproj",
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "wx_vc8_aui.vcproj", "{B361C000-79E7-5B8A-8F5F-BC0168C7002E}"\r
 EndProject\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aui", "wx_vc8_aui.vcproj", "{B361C000-79E7-5B8A-8F5F-BC0168C7002E}"\r
 EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "propgrid", "wx_vc8_propgrid.vcproj", "{93781718-26B6-5541-84C5-78C6A8226AEC}"\r
+EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "wx_vc8_richtext.vcproj", "{4928FA3B-C258-5E39-AE05-E4BD709955B3}"\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc8_stc.vcproj", "{FA559111-7B08-54E7-BD3B-0B621C819C78}"\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "richtext", "wx_vc8_richtext.vcproj", "{4928FA3B-C258-5E39-AE05-E4BD709955B3}"\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stc", "wx_vc8_stc.vcproj", "{FA559111-7B08-54E7-BD3B-0B621C819C78}"\r
@@ -327,6 +329,22 @@ Global
                {B361C000-79E7-5B8A-8F5F-BC0168C7002E}.Release|Win32.Build.0 = Release|Win32\r
                {B361C000-79E7-5B8A-8F5F-BC0168C7002E}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {B361C000-79E7-5B8A-8F5F-BC0168C7002E}.Debug|Win32.Build.0 = Debug|Win32\r
                {B361C000-79E7-5B8A-8F5F-BC0168C7002E}.Release|Win32.Build.0 = Release|Win32\r
                {B361C000-79E7-5B8A-8F5F-BC0168C7002E}.Debug|Win32.ActiveCfg = Debug|Win32\r
                {B361C000-79E7-5B8A-8F5F-BC0168C7002E}.Debug|Win32.Build.0 = Debug|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.DLL Universal Release|Win32.ActiveCfg = DLL Universal Release|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.DLL Universal Release|Win32.Build.0 = DLL Universal Release|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.DLL Universal Debug|Win32.ActiveCfg = DLL Universal Debug|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.DLL Universal Debug|Win32.Build.0 = DLL Universal Debug|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.DLL Release|Win32.ActiveCfg = DLL Release|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.DLL Release|Win32.Build.0 = DLL Release|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.DLL Debug|Win32.Build.0 = DLL Debug|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.Universal Release|Win32.ActiveCfg = Universal Release|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.Universal Release|Win32.Build.0 = Universal Release|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.Universal Debug|Win32.ActiveCfg = Universal Debug|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.Universal Debug|Win32.Build.0 = Universal Debug|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.Release|Win32.ActiveCfg = Release|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.Release|Win32.Build.0 = Release|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {93781718-26B6-5541-84C5-78C6A8226AEC}.Debug|Win32.Build.0 = Debug|Win32\r
                {4928FA3B-C258-5E39-AE05-E4BD709955B3}.DLL Universal Release|Win32.ActiveCfg = DLL Universal Release|Win32\r
                {4928FA3B-C258-5E39-AE05-E4BD709955B3}.DLL Universal Release|Win32.Build.0 = DLL Universal Release|Win32\r
                {4928FA3B-C258-5E39-AE05-E4BD709955B3}.DLL Universal Debug|Win32.ActiveCfg = DLL Universal Debug|Win32\r
                {4928FA3B-C258-5E39-AE05-E4BD709955B3}.DLL Universal Release|Win32.ActiveCfg = DLL Universal Release|Win32\r
                {4928FA3B-C258-5E39-AE05-E4BD709955B3}.DLL Universal Release|Win32.Build.0 = DLL Universal Release|Win32\r
                {4928FA3B-C258-5E39-AE05-E4BD709955B3}.DLL Universal Debug|Win32.ActiveCfg = DLL Universal Debug|Win32\r
index 53306e32887db6b8629e8d535fb372601272b672..a835dea3332fe9ed4d8ccb1126cce6edcfe15d99 100644 (file)
                        <File\r
                                RelativePath="..\..\include\wx\access.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\access.h"\r
                        />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\advprops.h"\r
+                       />\r
                        <File\r
                                RelativePath="..\..\include\wx\anidecod.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\anidecod.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\editlbox.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\editlbox.h"\r
                        />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\editors.h"\r
+                       />\r
                        <File\r
                                RelativePath="..\..\include\wx\effects.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\effects.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\listctrl.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\listctrl.h"\r
                        />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\manager.h"\r
+                       />\r
                        <File\r
                                RelativePath="..\..\include\wx\matrix.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\matrix.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\propdlg.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\propdlg.h"\r
                        />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\property.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgrid.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgriddefs.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgridiface.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgridpagestate.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\props.h"\r
+                       />\r
                        <File\r
                                RelativePath="..\..\include\wx\quantize.h"\r
                        />\r
                        <File\r
                                RelativePath="..\..\include\wx\quantize.h"\r
                        />\r
diff --git a/build/msw/wx_vc8_propgrid.vcproj b/build/msw/wx_vc8_propgrid.vcproj
new file mode 100644 (file)
index 0000000..979e08e
--- /dev/null
@@ -0,0 +1,1108 @@
+<?xml version="1.0" ?>\r
+<!--\r
+\r
+  This makefile was generated by\r
+  Bakefile 0.2.3 (http://www.bakefile.org)\r
+  Do not modify, all changes will be overwritten!\r
+\r
+-->\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="propgrid"\r
+       ProjectGUID="{93781718-26B6-5541-84C5-78C6A8226AEC}"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+               \r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="DLL Universal Release|Win32"\r
+                       OutputDirectory="..\..\lib\vc_dll"\r
+                       IntermediateDirectory="vc_mswunivudll\propgrid"\r
+                       ConfigurationType="2"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswunivu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="_USRDLL;DLL_EXPORTS;__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswunivudll\wxprec_propgriddll.pch"\r
+                               AssemblerListingLocation="vc_mswunivudll\propgrid\"\r
+                               ObjectFile="vc_mswunivudll\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswunivu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXBUILDING;WXDLLNAME=wxmswuniv290u_propgrid_vc_custom;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmswuniv29u_adv.lib ..\..\lib\vc_dll\wxmswuniv29u_core.lib ..\..\lib\vc_dll\wxbase29u.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.dll"\r
+                               LinkIncremental="2"\r
+                               ImportLibrary="..\..\lib\vc_dll\wxmswuniv29u_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="..\..\lib\vc_dll"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="..\..\lib\vc_dll\wxmswuniv290u_propgrid_vc_custom.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_dll\wx_vc8_propgrid.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Universal Debug|Win32"\r
+                       OutputDirectory="..\..\lib\vc_dll"\r
+                       IntermediateDirectory="vc_mswunivuddll\propgrid"\r
+                       ConfigurationType="2"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswunivud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_USRDLL;DLL_EXPORTS;_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswunivuddll\wxprec_propgriddll.pch"\r
+                               AssemblerListingLocation="vc_mswunivuddll\propgrid\"\r
+                               ObjectFile="vc_mswunivuddll\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswunivud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXBUILDING;WXDLLNAME=wxmswuniv290ud_propgrid_vc_custom;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmswuniv29ud_adv.lib ..\..\lib\vc_dll\wxmswuniv29ud_core.lib ..\..\lib\vc_dll\wxbase29ud.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.dll"\r
+                               LinkIncremental="2"\r
+                               ImportLibrary="..\..\lib\vc_dll\wxmswuniv29ud_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="..\..\lib\vc_dll"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="..\..\lib\vc_dll\wxmswuniv290ud_propgrid_vc_custom.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_dll\wx_vc8_propgrid.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Release|Win32"\r
+                       OutputDirectory="..\..\lib\vc_dll"\r
+                       IntermediateDirectory="vc_mswudll\propgrid"\r
+                       ConfigurationType="2"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="_USRDLL;DLL_EXPORTS;__WXMSW__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswudll\wxprec_propgriddll.pch"\r
+                               AssemblerListingLocation="vc_mswudll\propgrid\"\r
+                               ObjectFile="vc_mswudll\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;WXBUILDING;WXDLLNAME=wxmsw290u_propgrid_vc_custom;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmsw29u_adv.lib ..\..\lib\vc_dll\wxmsw29u_core.lib ..\..\lib\vc_dll\wxbase29u.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.dll"\r
+                               LinkIncremental="2"\r
+                               ImportLibrary="..\..\lib\vc_dll\wxmsw29u_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="..\..\lib\vc_dll"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="..\..\lib\vc_dll\wxmsw290u_propgrid_vc_custom.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_dll\wx_vc8_propgrid.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Debug|Win32"\r
+                       OutputDirectory="..\..\lib\vc_dll"\r
+                       IntermediateDirectory="vc_mswuddll\propgrid"\r
+                       ConfigurationType="2"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_USRDLL;DLL_EXPORTS;_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXBUILDING;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswuddll\wxprec_propgriddll.pch"\r
+                               AssemblerListingLocation="vc_mswuddll\propgrid\"\r
+                               ObjectFile="vc_mswuddll\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_dll\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXBUILDING;WXDLLNAME=wxmsw290ud_propgrid_vc_custom;WXUSINGDLL;WXMAKINGDLL_PROPGRID"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib ..\..\lib\vc_dll\wxmsw29ud_adv.lib ..\..\lib\vc_dll\wxmsw29ud_core.lib ..\..\lib\vc_dll\wxbase29ud.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.dll"\r
+                               LinkIncremental="2"\r
+                               ImportLibrary="..\..\lib\vc_dll\wxmsw29ud_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories="..\..\lib\vc_dll"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="..\..\lib\vc_dll\wxmsw290ud_propgrid_vc_custom.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_dll\wx_vc8_propgrid.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Universal Release|Win32"\r
+                       OutputDirectory="..\..\lib\vc_lib"\r
+                       IntermediateDirectory="vc_mswunivu\propgrid"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswunivu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="_LIB;__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXBUILDING"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswunivu\wxprec_propgridlib.pch"\r
+                               AssemblerListingLocation="vc_mswunivu\propgrid\"\r
+                               ObjectFile="vc_mswunivu\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_lib\wxmswuniv29u_propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswunivu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXBUILDING"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\..\lib\vc_lib\wxmswuniv29u_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_lib\wx_vc8_propgrid.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Universal Debug|Win32"\r
+                       OutputDirectory="..\..\lib\vc_lib"\r
+                       IntermediateDirectory="vc_mswunivud\propgrid"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswunivud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_LIB;_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXBUILDING"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswunivud\wxprec_propgridlib.pch"\r
+                               AssemblerListingLocation="vc_mswunivud\propgrid\"\r
+                               ObjectFile="vc_mswunivud\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_lib\wxmswuniv29ud_propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswunivud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXBUILDING"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\..\lib\vc_lib\wxmswuniv29ud_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_lib\wx_vc8_propgrid.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="..\..\lib\vc_lib"\r
+                       IntermediateDirectory="vc_mswu\propgrid"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="_LIB;__WXMSW__;_UNICODE;WXBUILDING"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswu\wxprec_propgridlib.pch"\r
+                               AssemblerListingLocation="vc_mswu\propgrid\"\r
+                               ObjectFile="vc_mswu\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_lib\wxmsw29u_propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswu;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;WXBUILDING"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\..\lib\vc_lib\wxmsw29u_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_lib\wx_vc8_propgrid.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="..\..\lib\vc_lib"\r
+                       IntermediateDirectory="vc_mswud\propgrid"\r
+                       ConfigurationType="4"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_LIB;_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXBUILDING"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               UsePrecompiledHeader="2"\r
+                               PrecompiledHeaderThrough="wx/wxprec.h"\r
+                               PrecompiledHeaderFile="vc_mswud\wxprec_propgridlib.pch"\r
+                               AssemblerListingLocation="vc_mswud\propgrid\"\r
+                               ObjectFile="vc_mswud\propgrid\"\r
+                               ProgramDataBaseFileName="..\..\lib\vc_lib\wxmsw29ud_propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories="..\..\lib\vc_lib\mswud;..\..\include;..\..\src\tiff\libtiff;..\..\src\jpeg;..\..\src\png;..\..\src\zlib;..\..\src\regex;..\..\src\expat\lib"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXBUILDING"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                               OutputFile="..\..\lib\vc_lib\wxmsw29ud_propgrid.lib"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="..\..\lib\vc_lib\wx_vc8_propgrid.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+               \r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Common Sources"\r
+                       UniqueIdentifier="{A6A5C30D-BDB6-5050-906D-10A96065136C}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\src\common\dummy.cpp"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCLCompilerTool"\r
+                                               UsePrecompiledHeader="1"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="MSW Sources"\r
+                       UniqueIdentifier="{D030D8C2-53EE-5B96-8F89-D78157B06140}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\src\msw\version.rc"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32"\r
+                                       ExcludedFromBuild="true"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32"\r
+                                       ExcludedFromBuild="true"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       ExcludedFromBuild="true"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       ExcludedFromBuild="true"\r
+                               />\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Setup Headers"\r
+                       UniqueIdentifier="{63537534-1833-5C1F-8DBD-359A84F294C8}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\include\wx\univ\setup.h"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswunivu\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_dll\mswunivu\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_dll\mswunivu\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswunivud\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_dll\mswunivud\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_dll\mswunivud\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Release|Win32"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="DLL Debug|Win32"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswunivu\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_lib\mswunivu\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_lib\mswunivu\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswunivud\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_lib\mswunivud\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_lib\mswunivud\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                               />\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\include\wx\msw\setup.h"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Release|Win32"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Debug|Win32"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="DLL Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswu\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_dll\mswu\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_dll\mswu\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswud\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_dll\mswud\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_dll\mswud\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32"\r
+                               />\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswu\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_lib\mswu\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_lib\mswu\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswud\wx\setup.h"\r
+                                               CommandLine="copy &quot;$(InputPath)&quot; ..\..\lib\vc_lib\mswud\wx\setup.h"\r
+                                               Outputs="..\..\lib\vc_lib\mswud\wx\setup.h"\r
+                                               AdditionalDependencies="&quot;$(INTDIR)&quot; &quot;$(OUTDIR)&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="MSW Headers"\r
+                       UniqueIdentifier="{5AFFF20E-29F9-512B-B80A-7DC45976CDAC}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\include\wx\msw\genrcdefs.h"\r
+                               >\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_dll\mswunivu\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_dll\mswunivu\wx\msw&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Universal Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_dll\mswunivud\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_dll\mswunivud\wx\msw&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_dll\mswu\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_dll\mswu\wx\msw&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="DLL Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_dll\mswud\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_dll\mswud\wx\msw&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_lib\mswunivu\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_lib\mswunivu\wx\msw&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Universal Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_lib\mswunivud\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_lib\mswunivud\wx\msw&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Release|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_lib\mswu\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_lib\mswu\wx\msw&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                               <FileConfiguration\r
+                                       Name="Debug|Win32"\r
+                                       >\r
+                                       <Tool\r
+                                               Name="VCCustomBuildTool"\r
+                                               Description="Creating ..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h"\r
+                                               CommandLine="cl /EP /nologo &quot;$(InputPath)&quot; &gt; &quot;..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h&quot;"\r
+                                               Outputs="..\..\lib\vc_lib\mswud\wx\msw\rcdefs.h"\r
+                                               AdditionalDependencies="&quot;..\..\lib\vc_lib\mswud\wx\msw&quot;"\r
+                                       />\r
+                               </FileConfiguration>\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Common Headers"\r
+                       UniqueIdentifier="{8C07E926-65B0-5F00-B0D6-7F40DA69BB25}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\advprops.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\editors.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\manager.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\property.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgrid.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgriddefs.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgridiface.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\propgridpagestate.h"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\include\wx\propgrid\props.h"\r
+                       />\r
+               </Filter>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\advprops.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\editors.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\manager.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\property.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\propgrid.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\propgridiface.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\propgridpagestate.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath="..\..\src\propgrid\props.cpp"\r
+                       />\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+               \r
+       </Globals>\r
+</VisualStudioProject>\r
+\r
index 240ab5588e582a29579f35910adc837f043a139a..ba232baee2e685a610394c82462f24b8acbe6295 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
 #! /bin/sh
-# From configure.in Id: configure.in 55464 2008-09-05 08:03:35Z RR .
+# From configure.in Id: configure.in 55511 2008-09-07 16:54:21Z SC .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61 for wxWidgets 2.9.0.
 #
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61 for wxWidgets 2.9.0.
 #
@@ -832,6 +832,7 @@ COND_MONOLITHIC_0_SHARED_0_USE_GUI_1
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_HTML_1
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_MEDIA_1
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_HTML_1
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_MEDIA_1
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1
+COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1
 COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1
 COND_MONOLITHIC_0_SHARED_0_USE_STC_1
 COND_MONOLITHIC_0_SHARED_0_USE_XRC_1
 COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1
 COND_MONOLITHIC_0_SHARED_0_USE_STC_1
 COND_MONOLITHIC_0_SHARED_0_USE_XRC_1
@@ -841,6 +842,7 @@ COND_MONOLITHIC_0_SHARED_1_USE_GUI_1
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_MEDIA_1
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_MEDIA_1
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1
+COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1
 COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1
 COND_MONOLITHIC_0_SHARED_1_USE_STC_1
 COND_MONOLITHIC_0_SHARED_1_USE_XRC_1
 COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1
 COND_MONOLITHIC_0_SHARED_1_USE_STC_1
 COND_MONOLITHIC_0_SHARED_1_USE_XRC_1
@@ -849,6 +851,7 @@ COND_MONOLITHIC_0_USE_GUI_1
 COND_MONOLITHIC_0_USE_GUI_1_USE_MEDIA_1
 COND_MONOLITHIC_0_USE_HTML_1
 COND_MONOLITHIC_0_USE_MEDIA_1
 COND_MONOLITHIC_0_USE_GUI_1_USE_MEDIA_1
 COND_MONOLITHIC_0_USE_HTML_1
 COND_MONOLITHIC_0_USE_MEDIA_1
+COND_MONOLITHIC_0_USE_PROPGRID_1
 COND_MONOLITHIC_0_USE_QA_1
 COND_MONOLITHIC_0_USE_RICHTEXT_1
 COND_MONOLITHIC_0_USE_STC_1
 COND_MONOLITHIC_0_USE_QA_1
 COND_MONOLITHIC_0_USE_RICHTEXT_1
 COND_MONOLITHIC_0_USE_STC_1
@@ -1739,6 +1742,7 @@ Optional Features:
   --enable-htmlhelp       use wxHTML-based help
   --enable-xrc            use XRC resources sub-library
   --enable-aui            use AUI docking library
   --enable-htmlhelp       use wxHTML-based help
   --enable-xrc            use XRC resources sub-library
   --enable-aui            use AUI docking library
+  --enable-propgrid       use wxPropertyGrid library
   --enable-stc            use wxStyledTextCtrl library
   --enable-constraints    use layout-constraints system
   --enable-loggui         use standard GUI logger
   --enable-stc            use wxStyledTextCtrl library
   --enable-constraints    use layout-constraints system
   --enable-loggui         use standard GUI logger
@@ -8558,6 +8562,50 @@ fi
 echo "${ECHO_T}$result" >&6; }
 
 
 echo "${ECHO_T}$result" >&6; }
 
 
+          enablestring=
+          defaultval=$wxUSE_ALL_FEATURES
+          if test -z "$defaultval"; then
+              if test x"$enablestring" = xdisable; then
+                  defaultval=yes
+              else
+                  defaultval=no
+              fi
+          fi
+
+          { echo "$as_me:$LINENO: checking for --${enablestring:-enable}-propgrid" >&5
+echo $ECHO_N "checking for --${enablestring:-enable}-propgrid... $ECHO_C" >&6; }
+          # Check whether --enable-propgrid was given.
+if test "${enable_propgrid+set}" = set; then
+  enableval=$enable_propgrid;
+                          if test "$enableval" = yes; then
+                            wx_cv_use_propgrid='wxUSE_PROPGRID=yes'
+                          else
+                            wx_cv_use_propgrid='wxUSE_PROPGRID=no'
+                          fi
+
+else
+
+                          wx_cv_use_propgrid='wxUSE_PROPGRID=${'DEFAULT_wxUSE_PROPGRID":-$defaultval}"
+
+fi
+
+
+          eval "$wx_cv_use_propgrid"
+
+          if test x"$enablestring" = xdisable; then
+            if test $wxUSE_PROPGRID = yes; then
+              result=no
+            else
+              result=yes
+            fi
+          else
+            result=$wxUSE_PROPGRID
+          fi
+
+          { echo "$as_me:$LINENO: result: $result" >&5
+echo "${ECHO_T}$result" >&6; }
+
+
           enablestring=
           defaultval=$wxUSE_ALL_FEATURES
           if test -z "$defaultval"; then
           enablestring=
           defaultval=$wxUSE_ALL_FEATURES
           if test -z "$defaultval"; then
@@ -46209,6 +46257,16 @@ _ACEOF
    SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS aui"
 fi
 
    SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS aui"
 fi
 
+USE_PROPGRID=0
+if test "$wxUSE_PROPGRID" = "yes"; then
+   cat >>confdefs.h <<\_ACEOF
+#define wxUSE_PROPGRID 1
+_ACEOF
+
+   USE_PROPGRID=1
+   SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS propgrid"
+fi
+
 USE_STC=0
 if test "$wxUSE_STC" = "yes"; then
    cat >>confdefs.h <<\_ACEOF
 USE_STC=0
 if test "$wxUSE_STC" = "yes"; then
    cat >>confdefs.h <<\_ACEOF
@@ -46898,6 +46956,9 @@ if test "$wxUSE_GUI" = "yes"; then
     if test "$wxUSE_AUI" = "yes" ; then
         BUILT_WX_LIBS="aui $BUILT_WX_LIBS"
     fi
     if test "$wxUSE_AUI" = "yes" ; then
         BUILT_WX_LIBS="aui $BUILT_WX_LIBS"
     fi
+    if test "$wxUSE_PROPGRID" = "yes" ; then
+        BUILT_WX_LIBS="propgrid $BUILT_WX_LIBS"
+    fi
     if test "$wxUSE_STC" = "yes" ; then
         BUILT_WX_LIBS="stc $BUILT_WX_LIBS"
     fi
     if test "$wxUSE_STC" = "yes" ; then
         BUILT_WX_LIBS="stc $BUILT_WX_LIBS"
     fi
@@ -49562,6 +49623,11 @@ EOF
         COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1=""
     fi
 
         COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1=""
     fi
 
+    COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1="#"
+    if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x0" -a "x$USE_PROPGRID" = "x1" ; then
+        COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1=""
+    fi
+
     COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x0" -a "x$USE_RICHTEXT" = "x1" ; then
         COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1=""
     COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x0" -a "x$USE_RICHTEXT" = "x1" ; then
         COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1=""
@@ -49607,6 +49673,11 @@ EOF
         COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1=""
     fi
 
         COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1=""
     fi
 
+    COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1="#"
+    if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x1" -a "x$USE_PROPGRID" = "x1" ; then
+        COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1=""
+    fi
+
     COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x1" -a "x$USE_RICHTEXT" = "x1" ; then
         COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1=""
     COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$SHARED" = "x1" -a "x$USE_RICHTEXT" = "x1" ; then
         COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1=""
@@ -49647,6 +49718,11 @@ EOF
         COND_MONOLITHIC_0_USE_MEDIA_1=""
     fi
 
         COND_MONOLITHIC_0_USE_MEDIA_1=""
     fi
 
+    COND_MONOLITHIC_0_USE_PROPGRID_1="#"
+    if test "x$MONOLITHIC" = "x0" -a "x$USE_PROPGRID" = "x1" ; then
+        COND_MONOLITHIC_0_USE_PROPGRID_1=""
+    fi
+
     COND_MONOLITHIC_0_USE_QA_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$USE_QA" = "x1" ; then
         COND_MONOLITHIC_0_USE_QA_1=""
     COND_MONOLITHIC_0_USE_QA_1="#"
     if test "x$MONOLITHIC" = "x0" -a "x$USE_QA" = "x1" ; then
         COND_MONOLITHIC_0_USE_QA_1=""
@@ -51693,6 +51769,7 @@ COND_MONOLITHIC_0_SHARED_0_USE_GUI_1!$COND_MONOLITHIC_0_SHARED_0_USE_GUI_1$ac_de
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_HTML_1!$COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_HTML_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_MEDIA_1!$COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_MEDIA_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1!$COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_HTML_1!$COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_HTML_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_MEDIA_1!$COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_MEDIA_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1!$COND_MONOLITHIC_0_SHARED_0_USE_GUI_1_USE_QA_1$ac_delim
+COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1!$COND_MONOLITHIC_0_SHARED_0_USE_PROPGRID_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1!$COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_STC_1!$COND_MONOLITHIC_0_SHARED_0_USE_STC_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_XRC_1!$COND_MONOLITHIC_0_SHARED_0_USE_XRC_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1!$COND_MONOLITHIC_0_SHARED_0_USE_RICHTEXT_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_STC_1!$COND_MONOLITHIC_0_SHARED_0_USE_STC_1$ac_delim
 COND_MONOLITHIC_0_SHARED_0_USE_XRC_1!$COND_MONOLITHIC_0_SHARED_0_USE_XRC_1$ac_delim
@@ -51702,6 +51779,7 @@ COND_MONOLITHIC_0_SHARED_1_USE_GUI_1!$COND_MONOLITHIC_0_SHARED_1_USE_GUI_1$ac_de
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1!$COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_MEDIA_1!$COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_MEDIA_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1!$COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1!$COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_HTML_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_MEDIA_1!$COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_MEDIA_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1!$COND_MONOLITHIC_0_SHARED_1_USE_GUI_1_USE_QA_1$ac_delim
+COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1!$COND_MONOLITHIC_0_SHARED_1_USE_PROPGRID_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1!$COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_STC_1!$COND_MONOLITHIC_0_SHARED_1_USE_STC_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_XRC_1!$COND_MONOLITHIC_0_SHARED_1_USE_XRC_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1!$COND_MONOLITHIC_0_SHARED_1_USE_RICHTEXT_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_STC_1!$COND_MONOLITHIC_0_SHARED_1_USE_STC_1$ac_delim
 COND_MONOLITHIC_0_SHARED_1_USE_XRC_1!$COND_MONOLITHIC_0_SHARED_1_USE_XRC_1$ac_delim
@@ -51710,6 +51788,7 @@ COND_MONOLITHIC_0_USE_GUI_1!$COND_MONOLITHIC_0_USE_GUI_1$ac_delim
 COND_MONOLITHIC_0_USE_GUI_1_USE_MEDIA_1!$COND_MONOLITHIC_0_USE_GUI_1_USE_MEDIA_1$ac_delim
 COND_MONOLITHIC_0_USE_HTML_1!$COND_MONOLITHIC_0_USE_HTML_1$ac_delim
 COND_MONOLITHIC_0_USE_MEDIA_1!$COND_MONOLITHIC_0_USE_MEDIA_1$ac_delim
 COND_MONOLITHIC_0_USE_GUI_1_USE_MEDIA_1!$COND_MONOLITHIC_0_USE_GUI_1_USE_MEDIA_1$ac_delim
 COND_MONOLITHIC_0_USE_HTML_1!$COND_MONOLITHIC_0_USE_HTML_1$ac_delim
 COND_MONOLITHIC_0_USE_MEDIA_1!$COND_MONOLITHIC_0_USE_MEDIA_1$ac_delim
+COND_MONOLITHIC_0_USE_PROPGRID_1!$COND_MONOLITHIC_0_USE_PROPGRID_1$ac_delim
 COND_MONOLITHIC_0_USE_QA_1!$COND_MONOLITHIC_0_USE_QA_1$ac_delim
 COND_MONOLITHIC_0_USE_RICHTEXT_1!$COND_MONOLITHIC_0_USE_RICHTEXT_1$ac_delim
 COND_MONOLITHIC_0_USE_STC_1!$COND_MONOLITHIC_0_USE_STC_1$ac_delim
 COND_MONOLITHIC_0_USE_QA_1!$COND_MONOLITHIC_0_USE_QA_1$ac_delim
 COND_MONOLITHIC_0_USE_RICHTEXT_1!$COND_MONOLITHIC_0_USE_RICHTEXT_1$ac_delim
 COND_MONOLITHIC_0_USE_STC_1!$COND_MONOLITHIC_0_USE_STC_1$ac_delim
@@ -51765,9 +51844,6 @@ COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0!$COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0$ac_
 COND_TOOLKIT_DFB!$COND_TOOLKIT_DFB$ac_delim
 COND_TOOLKIT_DFB_USE_GUI_1!$COND_TOOLKIT_DFB_USE_GUI_1$ac_delim
 COND_TOOLKIT_GTK!$COND_TOOLKIT_GTK$ac_delim
 COND_TOOLKIT_DFB!$COND_TOOLKIT_DFB$ac_delim
 COND_TOOLKIT_DFB_USE_GUI_1!$COND_TOOLKIT_DFB_USE_GUI_1$ac_delim
 COND_TOOLKIT_GTK!$COND_TOOLKIT_GTK$ac_delim
-COND_TOOLKIT_GTK_TOOLKIT_VERSION_!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_$ac_delim
-COND_TOOLKIT_GTK_TOOLKIT_VERSION_2!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2$ac_delim
-COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1$ac_delim
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -51809,6 +51885,9 @@ _ACEOF
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
+COND_TOOLKIT_GTK_TOOLKIT_VERSION_!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_$ac_delim
+COND_TOOLKIT_GTK_TOOLKIT_VERSION_2!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2$ac_delim
+COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1$ac_delim
 COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0$ac_delim
 COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_WXUNIV_0!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_WXUNIV_0$ac_delim
 COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1!$COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1$ac_delim
 COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0$ac_delim
 COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_WXUNIV_0!$COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_WXUNIV_0$ac_delim
 COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1!$COND_TOOLKIT_GTK_TOOLKIT_VERSION__USE_GUI_1$ac_delim
@@ -51903,9 +51982,6 @@ WXCONFIG_RESFLAGS!$WXCONFIG_RESFLAGS$ac_delim
 GUIDIST!$GUIDIST$ac_delim
 DISTDIR!$DISTDIR$ac_delim
 SAMPLES_SUBDIRS!$SAMPLES_SUBDIRS$ac_delim
 GUIDIST!$GUIDIST$ac_delim
 DISTDIR!$DISTDIR$ac_delim
 SAMPLES_SUBDIRS!$SAMPLES_SUBDIRS$ac_delim
-LDFLAGS_GL!$LDFLAGS_GL$ac_delim
-OPENGL_LIBS!$OPENGL_LIBS$ac_delim
-DMALLOC_LIBS!$DMALLOC_LIBS$ac_delim
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -51947,6 +52023,9 @@ _ACEOF
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
+LDFLAGS_GL!$LDFLAGS_GL$ac_delim
+OPENGL_LIBS!$OPENGL_LIBS$ac_delim
+DMALLOC_LIBS!$DMALLOC_LIBS$ac_delim
 WX_VERSION_TAG!$WX_VERSION_TAG$ac_delim
 RESCOMP!$RESCOMP$ac_delim
 RESFLAGS!$RESFLAGS$ac_delim
 WX_VERSION_TAG!$WX_VERSION_TAG$ac_delim
 RESCOMP!$RESCOMP$ac_delim
 RESFLAGS!$RESFLAGS$ac_delim
@@ -51963,7 +52042,7 @@ LIBOBJS!$LIBOBJS$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 14; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 17; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
index db93bd37542fb4d9d5a9db588d9f075e66ea05a9..dd28b3b47d1185d34fe7a7d2ec682e4ec01994a5 100644 (file)
@@ -767,6 +767,7 @@ WX_ARG_FEATURE(html,        [  --enable-html           use wxHTML sub-library],
 WX_ARG_FEATURE(htmlhelp,    [  --enable-htmlhelp       use wxHTML-based help], wxUSE_WXHTML_HELP)
 WX_ARG_FEATURE(xrc,         [  --enable-xrc            use XRC resources sub-library], wxUSE_XRC)
 WX_ARG_FEATURE(aui,         [  --enable-aui            use AUI docking library], wxUSE_AUI)
 WX_ARG_FEATURE(htmlhelp,    [  --enable-htmlhelp       use wxHTML-based help], wxUSE_WXHTML_HELP)
 WX_ARG_FEATURE(xrc,         [  --enable-xrc            use XRC resources sub-library], wxUSE_XRC)
 WX_ARG_FEATURE(aui,         [  --enable-aui            use AUI docking library], wxUSE_AUI)
+WX_ARG_FEATURE(propgrid,    [  --enable-propgrid       use wxPropertyGrid library], wxUSE_PROPGRID)
 WX_ARG_FEATURE(stc,         [  --enable-stc            use wxStyledTextCtrl library], wxUSE_STC)
 WX_ARG_FEATURE(constraints, [  --enable-constraints    use layout-constraints system], wxUSE_CONSTRAINTS)
 WX_ARG_FEATURE(loggui,      [  --enable-loggui         use standard GUI logger], wxUSE_LOGGUI)
 WX_ARG_FEATURE(stc,         [  --enable-stc            use wxStyledTextCtrl library], wxUSE_STC)
 WX_ARG_FEATURE(constraints, [  --enable-constraints    use layout-constraints system], wxUSE_CONSTRAINTS)
 WX_ARG_FEATURE(loggui,      [  --enable-loggui         use standard GUI logger], wxUSE_LOGGUI)
@@ -6939,6 +6940,13 @@ if test "$wxUSE_AUI" = "yes"; then
    SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS aui"
 fi
 
    SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS aui"
 fi
 
+USE_PROPGRID=0
+if test "$wxUSE_PROPGRID" = "yes"; then
+   AC_DEFINE(wxUSE_PROPGRID)
+   USE_PROPGRID=1
+   SAMPLES_SUBDIRS="$SAMPLES_SUBDIRS propgrid"
+fi
+
 USE_STC=0
 if test "$wxUSE_STC" = "yes"; then
    AC_DEFINE(wxUSE_STC)
 USE_STC=0
 if test "$wxUSE_STC" = "yes"; then
    AC_DEFINE(wxUSE_STC)
@@ -7320,6 +7328,9 @@ if test "$wxUSE_GUI" = "yes"; then
     if test "$wxUSE_AUI" = "yes" ; then
         BUILT_WX_LIBS="aui $BUILT_WX_LIBS"
     fi
     if test "$wxUSE_AUI" = "yes" ; then
         BUILT_WX_LIBS="aui $BUILT_WX_LIBS"
     fi
+    if test "$wxUSE_PROPGRID" = "yes" ; then
+        BUILT_WX_LIBS="propgrid $BUILT_WX_LIBS"
+    fi
     if test "$wxUSE_STC" = "yes" ; then
         BUILT_WX_LIBS="stc $BUILT_WX_LIBS"
     fi
     if test "$wxUSE_STC" = "yes" ; then
         BUILT_WX_LIBS="stc $BUILT_WX_LIBS"
     fi
index 730767ce7232daff70c1bf07bc9361d93ad8edfd..75a3d0be61d72b8d7f55337202c234cc39a524dc 100644 (file)
@@ -102,6 +102,8 @@ src/richtext/*.cpp
 
 src/aui/*.cpp
 
 
 src/aui/*.cpp
 
+src/propgrid/*.cpp
+
 src/unix/*.cpp
 src/unix/*.c
 
 src/unix/*.cpp
 src/unix/*.c
 
@@ -159,6 +161,7 @@ include/wx/html/msw/*.ico
 include/wx/html/msw/*.rc
 include/wx/richtext/*.h
 include/wx/aui/*.h
 include/wx/html/msw/*.rc
 include/wx/richtext/*.h
 include/wx/aui/*.h
+include/wx/propgrid/*.h
 lib/dummy
 
 tools/gettext/*.*
 lib/dummy
 
 tools/gettext/*.*
index 198d01c294aa0783745fddddc1e153ead19a3ae6..55fa88a60f1a5d8e655afdbb499734696b7e1bbf 100644 (file)
@@ -64,6 +64,7 @@ samples/ownerdrw/Makefile.in
 samples/png/Makefile.in
 samples/popup/Makefile.in
 samples/printing/Makefile.in
 samples/png/Makefile.in
 samples/popup/Makefile.in
 samples/printing/Makefile.in
+samples/propgrid/Makefile.in
 samples/propsize/Makefile.in
 samples/regtest/Makefile.in
 samples/render/Makefile.in
 samples/propsize/Makefile.in
 samples/regtest/Makefile.in
 samples/render/Makefile.in
index 2dc4ab8c21973868a1072966cbe7200f3df89e1d..bb2c48d200da7d1c640671a9c05e60e06d6a634d 100644 (file)
@@ -149,6 +149,8 @@ samples/popup/popup.dsp
 
 samples/printing/printing.dsp
 
 
 samples/printing/printing.dsp
 
+samples/propgrid/propgrid.dsp
+
 samples/propsize/propsize.dsp
 
 samples/regtest/regtest.dsp
 samples/propsize/propsize.dsp
 
 samples/regtest/regtest.dsp
index 427237abb6f8323974c0fa51d4bafe0844f513fb..974e2a7c8e3a8f2315047431efc254151ac852ae 100644 (file)
@@ -160,6 +160,8 @@ samples/power/makefile.dmc
 samples/power/makefile.dms
 samples/printing/makefile.dmc
 samples/printing/makefile.dms
 samples/power/makefile.dms
 samples/printing/makefile.dmc
 samples/printing/makefile.dms
+samples/propgrid/makefile.dmc
+samples/propgrid/makefile.dms
 samples/propsize/makefile.dmc
 samples/propsize/makefile.dms
 samples/regtest/makefile.dmc
 samples/propsize/makefile.dmc
 samples/propsize/makefile.dms
 samples/regtest/makefile.dmc
index 6a6b85a940be7c658ae888588ca8a8d83e1f77fe..da91705164bcce47b49c43304dc145f5b087632e 100644 (file)
@@ -80,6 +80,8 @@ src/richtext/*.cpp
 
 src/aui/*.cpp
 
 
 src/aui/*.cpp
 
+src/propgrid/*.cpp
+
 src/png/*.c
 src/png/*.h
 src/png/makefile*
 src/png/*.c
 src/png/*.h
 src/png/makefile*
@@ -103,6 +105,7 @@ include/wx/generic/*.xpm
 include/wx/html/*.h
 include/wx/richtext/*.h
 include/wx/aui/*.h
 include/wx/html/*.h
 include/wx/richtext/*.h
 include/wx/aui/*.h
+include/wx/propgrid/*.h
 lib/dummy
 
 utils/*.bkl
 lib/dummy
 
 utils/*.bkl
index d81957d3823ef1a6bb4ce0273631d0d817f1f2aa..d6c551f5d0821afdeb599121962e1e6983568e69 100644 (file)
@@ -1007,6 +1007,17 @@ samples/printing/makefile.unx
 samples/printing/makefile.wat
 samples/printing/makefile.vc
 samples/printing/printing.cpp
 samples/printing/makefile.wat
 samples/printing/makefile.vc
 samples/printing/printing.cpp
+samples/propgrid/propgrid.bkl
+samples/propgrid/propgrid.dsp
+samples/propgrid/Makefile.in
+samples/propgrid/makefile.bcc
+samples/propgrid/makefile.gcc
+samples/propgrid/propgrid.cpp
+samples/propgrid/propgrid.h
+samples/propgrid/propgrid_minimal.cpp
+samples/propgrid/sampleprops.cpp
+samples/propgrid/sampleprops.h
+samples/propgrid/tests.cpp
 samples/regtest/key1.ico
 samples/regtest/key2.ico
 samples/regtest/key3.ico
 samples/regtest/key1.ico
 samples/regtest/key2.ico
 samples/regtest/key3.ico
index 3d863fad343afd96402544762e9d366178e51f0e..ae02497cc0778fdc51881f249f8800ceee5e4bad 100644 (file)
@@ -79,6 +79,7 @@ samples/png/Makefile.in
 samples/popup/Makefile.in
 samples/power/Makefile.in
 samples/printing/Makefile.in
 samples/popup/Makefile.in
 samples/power/Makefile.in
 samples/printing/Makefile.in
+samples/propgrid/Makefile.in
 samples/propsize/Makefile.in
 samples/regtest/Makefile.in
 samples/render/Makefile.in
 samples/propsize/Makefile.in
 samples/regtest/Makefile.in
 samples/render/Makefile.in
index ceb7b9321e3d62f55d46b320c43fa646e9ea9b46..11e70b8c5047036530ea7c83ee8fa85c40ec429e 100644 (file)
@@ -171,6 +171,8 @@ samples/power/power.dsp
 samples/power/power.dsw
 samples/printing/printing.dsp
 samples/printing/printing.dsw
 samples/power/power.dsw
 samples/printing/printing.dsp
 samples/printing/printing.dsw
+samples/propgrid/propgrid.dsp
+samples/propgrid/propgrid.dsw
 samples/propsize/propsize.dsp
 samples/propsize/propsize.dsw
 samples/regtest/regtest.dsp
 samples/propsize/propsize.dsp
 samples/propsize/propsize.dsw
 samples/regtest/regtest.dsp
index 114b4b20001041725bce25034e6c797e8397ad9d..1bcb97e7f320456de7966beb42ed16c17bbbd927 100644 (file)
@@ -242,6 +242,9 @@ Major new features in this release
 - wxWidgets may now use either wchar_t (UTF-16/32) or UTF-8 internally,
   depending on what is optimal for the target platform.
 
 - wxWidgets may now use either wchar_t (UTF-16/32) or UTF-8 internally,
   depending on what is optimal for the target platform.
 
+- New propgrid library containing wxPropertyGrid and related classes, many
+  enhancements to wxDataViewCtrl.
+
 - Events loops, timers and sockets can now be used in wxBase, without GUI.
 
 
 - Events loops, timers and sockets can now be used in wxBase, without GUI.
 
 
@@ -300,32 +303,33 @@ All (Unix):
 
 All (GUI):
 
 
 All (GUI):
 
-- Added wxDataViewCtrl class and helper classes
-- Provide native implementation of wxCalendarCtrl under wxMSW and wxGTK
-- Added {wxTextCtrl,wxComboBox}::AutoComplete() and AutoCompleteFileNames()
+- Added wxDataViewCtrl class and helper classes.
+- Integrated wxPropertyGrid in wxWidgets itself (Jaakko Salli).
+- Provide native implementation of wxCalendarCtrl under wxMSW and wxGTK.
+- Added {wxTextCtrl,wxComboBox}::AutoComplete() and AutoCompleteFileNames().
 - Added wxH[V]ScrolledWindow (Brad Anderson, Bryan Petty).
 - Added wxH[V]ScrolledWindow (Brad Anderson, Bryan Petty).
-- Added wxNotificationMessage class for non-intrusive notifications
-- Added wxWindow::Show/HideWithEffect()
-- Added wxWrapSizer (Arne Steinarson)
-- Added wxSpinCtrlDouble (John Labenski)
+- Added wxNotificationMessage class for non-intrusive notifications.
+- Added wxWindow::Show/HideWithEffect().
+- Added wxWrapSizer (Arne Steinarson).
+- Added wxSpinCtrlDouble (John Labenski).
 - Support custom labels in wxMessageDialog (Gareth Simpson for wxMac version).
 - Also added wxCANCEL_DEFAULT to wxMessageDialog.
 - Allow copying text in the log dialogs.
 - Added multisample (anti-aliasing) support to wxGLCanvas (Olivier Playez).
 - Initialize wx{Client,Paint,Window}DC with fonts/colours of its window.
 - Support custom labels in wxMessageDialog (Gareth Simpson for wxMac version).
 - Also added wxCANCEL_DEFAULT to wxMessageDialog.
 - Allow copying text in the log dialogs.
 - Added multisample (anti-aliasing) support to wxGLCanvas (Olivier Playez).
 - Initialize wx{Client,Paint,Window}DC with fonts/colours of its window.
-- Added wxNativeContainerWindow to allow embedding wx into native windows
-- Added custom controls support to wxFileDialog (Diaa Sami and Marcin Wojdyr)
+- Added wxNativeContainerWindow to allow embedding wx into native windows.
+- Added custom controls support to wxFileDialog (Diaa Sami and Marcin Wojdyr).
 - Added wxDC::StretchBlit() for wxMac and wxMSW (Vince Harron).
 - Added support for drop down toolbar buttons (Tim Kosse).
 - Added support for labels for toolbar controls (Vince Harron).
 - Added wxMessageDialog::SetMessage() and SetExtendedMessage().
 - Added wxDC::StretchBlit() for wxMac and wxMSW (Vince Harron).
 - Added support for drop down toolbar buttons (Tim Kosse).
 - Added support for labels for toolbar controls (Vince Harron).
 - Added wxMessageDialog::SetMessage() and SetExtendedMessage().
-- Added wxListCtrl::Set/GetColumnsOrder() (Yury Voronov)
+- Added wxListCtrl::Set/GetColumnsOrder() (Yury Voronov).
 - Made wxLogWindow thread-safe (Barbara Maren Winkler).
 - Made wxLogWindow thread-safe (Barbara Maren Winkler).
-- Added wxWindow::AlwaysShowScrollbars() (Julian Scheid)
-- Added wxMouseEvent::GetClickCount() (Julian Scheid)
-- Added wxBG_STYLE_TRANSPARENT background style (Julian Scheid)
-- Added XRCSIZERITEM() macro for obtaining sizers from XRC (Brian Vanderburg II)
-- New and improved wxFileCtrl (Diaa Sami and Marcin Wojdyr)
+- Added wxWindow::AlwaysShowScrollbars() (Julian Scheid).
+- Added wxMouseEvent::GetClickCount() (Julian Scheid).
+- Added wxBG_STYLE_TRANSPARENT background style (Julian Scheid).
+- Added XRCSIZERITEM() macro for obtaining sizers from XRC (Brian Vanderburg II).
+- New and improved wxFileCtrl (Diaa Sami and Marcin Wojdyr).
 - Added wxEventBlocker class (Francesco Montorsi).
 - Added wxFile/DirPickerCtrl::Get/SetFile/DirName() (Francesco Montorsi).
 - Added wxSizerFlags::Top() and Bottom().
 - Added wxEventBlocker class (Francesco Montorsi).
 - Added wxFile/DirPickerCtrl::Get/SetFile/DirName() (Francesco Montorsi).
 - Added wxSizerFlags::Top() and Bottom().
diff --git a/docs/doxygen/groups/class_propgrid.h b/docs/doxygen/groups/class_propgrid.h
new file mode 100644 (file)
index 0000000..d850e5e
--- /dev/null
@@ -0,0 +1,20 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        class_propgrid.h
+// Purpose:     wxPropertyGrid classes group docs
+// Author:      wxWidgets team
+// RCS-ID:      $Id:
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+
+@defgroup group_class_propgrid wxPropertyGrid
+@ingroup group_class
+
+wxPropertyGrid is a specialized grid for editing properties (that is,
+name=value pairs).
+
+Related Overviews: @ref overview_propgrid
+
+*/
+
index ea42b6da35209ee4643c0f78fac3a33c3aaf16a3..28f225d2dba31c66b92b0b98c7f5fdbed4ba99d5 100644 (file)
@@ -27,6 +27,7 @@ This page contains a summarized listing of classes, please see the
 @li @ref page_class_cat_richtext
 @li @ref page_class_cat_grid
 @li @ref page_class_cat_miscwnd
 @li @ref page_class_cat_richtext
 @li @ref page_class_cat_grid
 @li @ref page_class_cat_miscwnd
+@li @ref page_class_cat_propgrid
 </td><td>
 @li @ref page_class_cat_dc
 @li @ref page_class_cat_gdi
 </td><td>
 @li @ref page_class_cat_dc
 @li @ref page_class_cat_gdi
@@ -372,6 +373,12 @@ data.
 @li wxGridTypeRegistry: Contains information about the data types supported by
     the grid.
 
 @li wxGridTypeRegistry: Contains information about the data types supported by
     the grid.
 
+@section page_class_cat_propgrid Property Grid
+
+wxPropertyGrid is a property sheet control, which API consists of
+various classes listed here.
+
+
 @section page_class_cat_dc Device Contexts
 
 Device contexts are surfaces that may be drawn on, and provide an abstraction
 @section page_class_cat_dc Device Contexts
 
 Device contexts are surfaces that may be drawn on, and provide an abstraction
index 86c85e2c27340b9bb7d987c37bc3e7f3435087e0..3de6c8b68f9d9ee9bd4670ce5a8a7b4d4c0c97ac 100644 (file)
@@ -220,6 +220,7 @@ with the corresponding library. The following symbols are honoured:
     - wxNO_HTML_LIB
     - wxNO_MEDIA_LIB
     - wxNO_NET_LIB
     - wxNO_HTML_LIB
     - wxNO_MEDIA_LIB
     - wxNO_NET_LIB
+    - wxNO_PROPGRID_LIB
     - wxNO_QA_LIB
     - wxNO_RICHTEXT_LIB
     - wxNO_XML_LIB
     - wxNO_QA_LIB
     - wxNO_RICHTEXT_LIB
     - wxNO_XML_LIB
index d80ac6aa8951ecd8881399923717f75bc2b50008..c1799d1f7b2217ed6d903784808ba4bf2ed4ab6d 100644 (file)
@@ -191,6 +191,7 @@ library:
 @itemdef{wxUSE_PRINTF_POS_PARAMS, Use wxVsnprintf which supports positional parameters.}
 @itemdef{wxUSE_PRINTING_ARCHITECTURE, Enable printer classes.}
 @itemdef{wxUSE_PROGRESSDLG, Enables progress dialog classes.}
 @itemdef{wxUSE_PRINTF_POS_PARAMS, Use wxVsnprintf which supports positional parameters.}
 @itemdef{wxUSE_PRINTING_ARCHITECTURE, Enable printer classes.}
 @itemdef{wxUSE_PROGRESSDLG, Enables progress dialog classes.}
+@itemdef{wxUSE_PROPGRID, Use wxPropertyGrid library.}
 @itemdef{wxUSE_PROTOCOL, Use wxProtocol and derived classes.}
 @itemdef{wxUSE_PROTOCOL_FILE, Use wxFileProto class. (requires wxProtocol)}
 @itemdef{wxUSE_PROTOCOL_FTP, Use wxFTP class. (requires wxProtocol)}
 @itemdef{wxUSE_PROTOCOL, Use wxProtocol and derived classes.}
 @itemdef{wxUSE_PROTOCOL_FILE, Use wxFileProto class. (requires wxProtocol)}
 @itemdef{wxUSE_PROTOCOL_FTP, Use wxFTP class. (requires wxProtocol)}
index 7806b6dedf4e1f75f45636b77fa236ff1189e5cb..eb61bbe28923d0c92bd4ee8fe3f5ce0a54d00ba5 100644 (file)
@@ -33,6 +33,7 @@ digraph Dependancies
     wxGL       [fillcolor = green, URL = "\ref page_libs_wxgl"];
     wxHTML     [fillcolor = green, URL = "\ref page_libs_wxhtml"];
     wxMedia    [fillcolor = green, URL = "\ref page_libs_wxmedia"];
     wxGL       [fillcolor = green, URL = "\ref page_libs_wxgl"];
     wxHTML     [fillcolor = green, URL = "\ref page_libs_wxhtml"];
     wxMedia    [fillcolor = green, URL = "\ref page_libs_wxmedia"];
+    wxPropertyGrid [fillcolor = green, URL = "\ref page_libs_wxpropgrid"];
     wxQA       [fillcolor = green, URL = "\ref page_libs_wxqa"];
     wxRichText [fillcolor = green, URL = "\ref page_libs_wxrichtext"];
     wxSTC      [fillcolor = green, URL = "\ref page_libs_wxstc"];
     wxQA       [fillcolor = green, URL = "\ref page_libs_wxqa"];
     wxRichText [fillcolor = green, URL = "\ref page_libs_wxrichtext"];
     wxSTC      [fillcolor = green, URL = "\ref page_libs_wxstc"];
@@ -47,6 +48,7 @@ digraph Dependancies
     wxGL -> wxCore;
     wxHTML -> wxCore;
     wxMedia -> wxCore;
     wxGL -> wxCore;
     wxHTML -> wxCore;
     wxMedia -> wxCore;
+    wxPropertyGrid -> wxAdvanced;
     wxQA -> wxCore; wxQA -> wxXML;
     wxRichText -> wxAdvanced; wxRichText -> wxHTML; wxRichText -> wxXML;
     wxSTC -> wxCore;
     wxQA -> wxCore; wxQA -> wxXML;
     wxRichText -> wxAdvanced; wxRichText -> wxHTML; wxRichText -> wxXML;
     wxSTC -> wxCore;
@@ -99,6 +101,13 @@ Classes for network access:
 Requires @ref page_libs_wxbase.
 
 
 Requires @ref page_libs_wxbase.
 
 
+@section page_libs_wxpropgrid wxPropertyGrid
+
+This contains the wxPropertyGrid control.
+
+Requires @ref page_libs_wxadv, @ref page_libs_wxcore, @ref page_libs_wxbase.
+
+
 @section page_libs_wxrichtext wxRichText
 
 This contains generic rich text control functionality.
 @section page_libs_wxrichtext wxRichText
 
 This contains generic rich text control functionality.
index 366018b15fef089309074f55dbded9a0af590e1b..7334903ff70258db4ac465152f76071cb0dac329 100644 (file)
@@ -107,6 +107,7 @@ TODO: Organize them in a more human-readable way.
 @li @sample{popup}
 @li @sample{power}
 @li @sample{printing}
 @li @sample{popup}
 @li @sample{power}
 @li @sample{printing}
+@li @sample{propgrid}
 </td><td>
 @li @sample{regtest}
 @li @sample{render}
 </td><td>
 @li @sample{regtest}
 @li @sample{render}
@@ -688,6 +689,21 @@ commands through menu.
 
 @sampledir{printing}
 
 
 @sampledir{printing}
 
+@section page_samples_propgrid wxPropertyGrid Sample
+
+Sample application has following additional examples of custom properties:
+- wxFontDataProperty ( edits wxFontData )
+- wxPointProperty ( edits wxPoint )
+- wxSizeProperty ( edits wxSize )
+- wxAdvImageFileProperty ( like wxImageFileProperty, but also has a drop-down
+  for recent image selection )
+- wxDirsProperty ( edits a wxArrayString consisting of directory strings)
+- wxArrayDoubleProperty ( edits wxArrayDouble )
+
+@sampleabout{wxPropertyGrid}
+
+@sampledir{propgrid}
+
 @section page_samples_regtest Registry Sample
 
 @sampleabout{wxRegKey}
 @section page_samples_regtest Registry Sample
 
 @sampleabout{wxRegKey}
index c00ab438c421b52d3ce48118de015f902af456d6..69fd3ec7a147b330b12bf6739f8359639559b5d5 100644 (file)
@@ -91,6 +91,7 @@ The following is a basic categorization of them:
 @li @subpage overview_html
 @li @subpage overview_richtextctrl
 @li @subpage overview_aui
 @li @subpage overview_html
 @li @subpage overview_richtextctrl
 @li @subpage overview_aui
+@li @subpage overview_propgrid
 @li @subpage overview_cmndlg
 @li @subpage overview_toolbar
 @li @subpage overview_grid
 @li @subpage overview_cmndlg
 @li @subpage overview_toolbar
 @li @subpage overview_grid
diff --git a/docs/doxygen/overviews/propgrid.h b/docs/doxygen/overviews/propgrid.h
new file mode 100644 (file)
index 0000000..f78b7e8
--- /dev/null
@@ -0,0 +1,1101 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        propgrid.h
+// Purpose:     topic overview
+// Author:      wxWidgets team
+// RCS-ID:      $Id:
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+
+@page overview_propgrid wxPropertyGrid Overview
+
+Key Classes:
+@li wxPGProperty
+@li wxPropertyGrid
+@li wxPropertyGridEvent
+@li wxPropertyGridManager
+@li wxPropertyGridPage
+
+  wxPropertyGrid is a specialized grid for editing properties such as strings,
+numbers, flagsets, fonts, and colours. It is possible, for example, to categorize
+properties, set up a complete tree-hierarchy, add multiple columns, and set
+arbitrary per-property attributes.
+
+@li @ref basics
+@li @ref categories
+@li @ref parentprops
+@li @ref enumandflags
+@li @ref advprops
+@li @ref iterating
+@li @ref operations
+@li @ref events
+@li @ref validating
+@li @ref populating
+@li @ref cellrender
+@li @ref customizing
+@li @ref usage2
+@li @ref subclassing
+@li @ref misc
+@li @ref proplist
+@li @ref userhelp
+@li @ref notes
+@li @ref newprops
+@li @ref neweditors
+
+@section basics Creating and Populating wxPropertyGrid
+
+As seen here, wxPropertyGrid is constructed in the same way as
+other wxWidgets controls:
+
+@code
+
+// Necessary header file
+#include <wx/propgrid/propgrid.h>
+
+...
+
+    // Assumes code is in frame/dialog constructor
+
+    // Construct wxPropertyGrid control
+    wxPropertyGrid* pg = new wxPropertyGrid(
+        this, // parent
+        PGID, // id
+        wxDefaultPosition, // position
+        wxDefaultSize, // size
+        // Here are just some of the supported window styles
+        wxPG_AUTO_SORT | // Automatic sorting after items added
+        wxPG_SPLITTER_AUTO_CENTER | // Automatically center splitter until user manually adjusts it
+        // Default style
+        wxPG_DEFAULT_STYLE );
+
+    // Window style flags are at premium, so some less often needed ones are
+    // available as extra window styles (wxPG_EX_xxx) which must be set using
+    // SetExtraStyle member function. wxPG_EX_HELP_AS_TOOLTIPS, for instance,
+    // allows displaying help strings as tooltips.
+    pg->SetExtraStyle( wxPG_EX_HELP_AS_TOOLTIPS );
+
+@endcode
+
+  (for complete list of new window styles: @link wndflags Additional Window Styles@endlink)
+
+  wxPropertyGrid is usually populated with lines like this:
+
+@code
+    pg->Append( new wxStringProperty(wxT("Label"),wxT("Name"),wxT("Initial Value")) );
+@endcode
+
+Naturally, wxStringProperty is a property class. Only the first function argument (label)
+is mandatory. Second one, name, defaults to label and, third, the initial value, to
+default value. If constant wxPG_LABEL is used as the name argument, then the label is
+automatically used as a name as well (this is more efficient than manually
+defining both as the same). Empty name is also allowed, but in this case the
+property cannot be accessed by its name. Note that all property class constructors have
+quite similar constructor argument list.
+
+To demonstrate other common property classes, here's another code snippet:
+
+@code
+
+    // Add int property
+    pg->Append( new wxIntProperty(wxT("IntProperty"), wxPG_LABEL, 12345678) );
+
+    // Add float property (value type is actually double)
+    pg->Append( new wxFloatProperty(wxT("FloatProperty"), wxPG_LABEL, 12345.678) );
+
+    // Add a bool property
+    pg->Append( new wxBoolProperty(wxT("BoolProperty"), wxPG_LABEL, false) );
+
+    // A string property that can be edited in a separate editor dialog.
+    pg->Append( new wxLongStringProperty(wxT("LongStringProperty"),
+                                         wxPG_LABEL,
+                                         wxT("This is much longer string than the ")
+                                         wxT("first one. Edit it by clicking the button.")));
+
+    // String editor with dir selector button.
+    pg->Append( new wxDirProperty(wxT("DirProperty"), wxPG_LABEL, ::wxGetUserHome()) );
+
+    // wxArrayStringProperty embeds a wxArrayString.
+    pg->Append( new wxArrayStringProperty(wxT("Label of ArrayStringProperty"),
+                                          wxT("NameOfArrayStringProp")));
+
+    // A file selector property.
+    pg->Append( new wxFileProperty(wxT("FileProperty"), wxPG_LABEL, wxEmptyString) );
+
+    // Extra: set wildcard for file property (format same as in wxFileDialog).
+    pg->SetPropertyAttribute( wxT("FileProperty"),
+                              wxPG_FILE_WILDCARD,
+                              wxT("All files (*.*)|*.*") );
+
+@endcode
+
+  Operations on properties should be done either via wxPropertyGrid's
+(or wxPropertyGridManager's) methods, or by acquiring pointer to a property
+(Append returns a wxPGProperty* or wxPGId, which is typedef for same), and then
+calling its method. Note however that property's methods generally do not
+automatically update grid graphics.
+
+  Property container functions operating on properties, such as SetPropertyValue or
+DisableProperty, all accept a special wxPGPropArg, argument which can automatically
+convert name of a property to a pointer. For instance:
+
+@code
+    // A file selector property.
+    wxPGPropety* p = pg->Append( new wxFileProperty(wxT("FileProperty"), wxPG_LABEL, wxEmptyString) );
+
+    // Valid: Set wildcard by name
+    pg->SetPropertyAttribute( wxT("FileProperty"),
+                              wxPG_FILE_WILDCARD,
+                              wxT("All files (*.*)|*.*") );
+
+    // Also Valid: Set wildcard by ptr
+    pg->SetPropertyAttribute( p,
+                              wxPG_FILE_WILDCARD,
+                              wxT("All files (*.*)|*.*") );
+@endcode
+
+Using pointer is faster, since it doesn't require hash map lookup. Anyway, you can allways
+get property pointer (wxPGProperty*) as Append/Insert return value, or by calling
+GetPropertyByName.
+
+  Below are samples for using some of the more commong operations. See 
+wxPropertyGridInterface and wxPropertyGrid class references for complete list.
+
+@code
+
+    // wxPGId is a short-hand for wxPGProperty*. Let's use it this time.
+    wxPGId id = pg->GetPropertyByName( wxT("MyProperty") );
+
+    // There are many overloaded versions of this method, of which each accept
+    // different type of value.
+    pg->SetPropertyValue( wxT("MyProperty"), 200 );
+
+    // Setting a string works for all properties - conversion is done
+    // automatically.
+    pg->SetPropertyValue( id, wxT("400") );
+
+    // Getting property value as wxVariant.
+    wxVariant value = pg->GetPropertyValue( wxT("MyProperty") );
+
+    // Getting property value as String (again, works for all typs).
+    wxString value = pg->GetPropertyValueAsString( id );
+
+    // Getting property value as int. Provokes a run-time error
+    // if used with property which value type is not "long".
+    long value = pg->GetPropertyValueAsLong( wxT("MyProperty") );
+
+    // Set new name.
+    pg->SetPropertyName( wxT("MyProperty"), wxT("X") );
+
+    // Set new label - we need to use the new name.
+    pg->SetPropertyLabel( wxT("X"), wxT("New Label") );
+
+    // Disable the property. It's text will appear greyed.
+    // This is probably the closest you can get if you want
+    // a "read-only" property.
+    pg->DisableProperty( id );
+
+@endcode
+
+
+@section categories Categories
+
+  wxPropertyGrid has a hierarchial property storage and display model, which
+allows property categories to hold child properties and even other
+categories. Other than that, from the programmer's point of view, categories
+can be treated exactly the same as "other" properties. For example, despite
+its name, GetPropertyByName also returns a category by name, and SetPropertyLabel
+also sets label of a category. Note however that sometimes the label of a
+property category may be referred as caption (for example, there is
+SetCaptionForegroundColour method that sets text colour of a property category's label).
+
+  When category is added at the top (i.e. root) level of the hierarchy,
+it becomes a *current category*. This means that all other (non-category)
+properties after it are automatically added to it. You may add
+properties to specific categories by using wxPropertyGrid::Insert or wxPropertyGrid::AppendIn.
+
+  Category code sample:
+
+@code
+
+    // One way to add category (similar to how other properties are added)
+    pg->Append( new wxPropertyCategory(wxT("Main")) );
+
+    // All these are added to "Main" category
+    pg->Append( new wxStringProperty(wxT("Name")) );
+    pg->Append( new wxIntProperty(wxT("Age"),wxPG_LABEL,25) );
+    pg->Append( new wxIntProperty(wxT("Height"),wxPG_LABEL,180) );
+    pg->Append( new wxIntProperty(wxT("Weight")) );
+
+    // Another one
+    pg->Append( new wxPropertyCategory(wxT("Attrikbutes")) );
+
+    // All these are added to "Attributes" category
+    pg->Append( new wxIntProperty(wxT("Intelligence")) );
+    pg->Append( new wxIntProperty(wxT("Agility")) );
+    pg->Append( new wxIntProperty(wxT("Strength")) );
+
+@endcode
+
+
+@section parentprops Tree-like Property Structure
+
+  As a new feature in version 1.3.1, basicly any property can have children. There
+are few limitations, however.
+
+@remarks
+- Names of properties with non-category, non-root parents are not stored in hash map.
+  Instead, they can be accessed with strings like "Parent.Child". For instance, in
+  the sample below, child property named "Max. Speed (mph)" can be accessed by global
+  name "Car.Speeds.Max Speed (mph)".
+- If you want to property's value to be a string composed based on the values of
+  child properties, you must use wxStringProperty as parent and use value "<composed>".
+- Events (eg. change of value) that occur in parent do not propagate to children. Events
+  that occur in children will propagate to parents, but only if they are wxStringProperties
+  with "<composed>" value.
+- Old wxParentProperty class is deprecated, and remains as a typedef of wxStringProperty.
+  If you want old value behavior, you must specify "<composed>" as wxStringProperty's
+  value.
+
+Sample:
+
+@code
+    wxPGId pid = pg->Append( new wxStringProperty(wxT("Car"),wxPG_LABEL,wxT("<composed>")) );
+
+    pg->AppendIn( pid, new wxStringProperty(wxT("Model"),
+                                            wxPG_LABEL,
+                                            wxT("Lamborghini Diablo SV")) );
+
+    pg->AppendIn( pid, new wxIntProperty(wxT("Engine Size (cc)"),
+                                         wxPG_LABEL,
+                                         5707) );
+
+    wxPGId speedId = pg->AppendIn( pid, new wxStringProperty(wxT("Speeds"),wxPG_LABEL,wxT("<composed>")) );
+    pg->AppendIn( speedId, new wxIntProperty(wxT("Max. Speed (mph)"),wxPG_LABEL,290) );
+    pg->AppendIn( speedId, new wxFloatProperty(wxT("0-100 mph (sec)"),wxPG_LABEL,3.9) );
+    pg->AppendIn( speedId, new wxFloatProperty(wxT("1/4 mile (sec)"),wxPG_LABEL,8.6) );
+
+    // Make sure the child properties can be accessed correctly
+    pg->SetPropertyValue( wxT("Car.Speeds.Max. Speed (mph)"), 300 );
+
+    pg->AppendIn( pid, new wxIntProperty(wxT("Price ($)"),
+                                         wxPG_LABEL,
+                                         300000) );
+    // Displayed value of "Car" property is now:
+    // "Lamborghini Diablo SV; [300; 3.9; 8.6]; 300000"
+
+@endcode
+
+@section enumandflags wxEnumProperty and wxFlagsProperty
+
+  wxEnumProperty is used when you want property's (integer or string) value
+to be selected from a popup list of choices.
+
+  Creating wxEnumProperty is more complex than those described earlier.
+You have to provide list of constant labels, and optionally relevant values
+(if label indexes are not sufficient).
+
+@remarks
+
+- Value wxPG_INVALID_VALUE (equals 2147483647 which usually equals INT_MAX) is not
+  allowed as value.
+
+A very simple example:
+
+@code
+
+    //
+    // Using wxArrayString
+    //
+    wxArrayString arrDiet;
+    arr.Add(wxT("Herbivore"));
+    arr.Add(wxT("Carnivore"));
+    arr.Add(wxT("Omnivore"));
+
+    pg->Append( new wxEnumProperty(wxT("Diet"),
+                                   wxPG_LABEL,
+                                   arrDiet) );
+
+
+
+    //
+    // Using wxChar* array
+    //
+    const wxChar* arrayDiet[] =
+    { wxT("Herbivore"), wxT("Carnivore"), wxT("Omnivore"), NULL };
+
+    pg->Append( new wxEnumProperty(wxT("Diet"),
+                                   wxPG_LABEL,
+                                   arrayDiet) );
+
+
+@endcode
+
+Here's extended example using values as well:
+
+@code
+
+    //
+    // Using wxArrayString and wxArrayInt
+    //
+    wxArrayString arrDiet;
+    arr.Add(wxT("Herbivore"));
+    arr.Add(wxT("Carnivore"));
+    arr.Add(wxT("Omnivore"));
+
+    wxArrayInt arrIds;
+    arrIds.Add(40);
+    arrIds.Add(45);
+    arrIds.Add(50);
+
+    // Note that the initial value (the last argument) is the actual value,
+    // not index or anything like that. Thus, our value selects "Omnivore".
+    pg->Append( new wxEnumProperty(wxT("Diet"),
+                                   wxPG_LABEL,
+                                   arrDiet,
+                                   arrIds,
+                                   50));
+
+
+    //
+    // Using wxChar* and long arrays
+    //
+    const wxChar* array_diet[] =
+    { wxT("Herbivore"), wxT("Carnivore"), wxT("Omnivore"), NULL };
+
+    long array_diet_ids[] =
+    { 40, 45, 50 };
+
+    // Value can be set from string as well
+    pg->Append( new wxEnumProperty(wxT("Diet"),
+                                   wxPG_LABEL,
+                                   array_diet,
+                                   array_diet_ids);
+
+@endcode
+
+  wxPGChoices is a class where wxEnumProperty, and other properties which
+  require label storage, actually stores strings and values. It is used
+  to facilitiate reference counting, and therefore recommended way of
+  adding items when multiple properties share the same set.
+
+  You can use wxPGChoices directly as well, filling it and then passing it
+  to the constructor. Infact, if you wish to display bitmaps next to labels,
+  your best choice is to use this approach.
+
+@code
+
+    wxPGChoices chs;
+    chs.Add(wxT("Herbivore"),40);
+    chs.Add(wxT("Carnivore"),45);
+    chs.Add(wxT("Omnivore"),50);
+
+    // Let's add an item with bitmap, too
+    chs.Add(wxT("None of the above"), wxBitmap(), 60);
+
+    // Note: you can add even whole arrays to wxPGChoices
+
+    pg->Append( new wxEnumProperty(wxT("Diet"),
+                                   wxPG_LABEL,
+                                   chs) );
+
+    // Add same choices to another property as well - this is efficient due
+    // to reference counting
+    pg->Append( new wxEnumProperty(wxT("Diet 2"),
+                                   wxPG_LABEL,
+                                   chs) );
+
+ @endcode
+
+If you later need to change choices used by a property, there is function
+for that as well.
+
+@code
+
+    //
+    // Example 1: Add one extra item
+    wxPGChoices& choices = pg->GetPropertyChoices(wxT("Diet"));
+    choices.Add(wxT("Custom"),55);
+
+    //
+    // Example 2: Replace all the choices
+    wxPGChoices chs;
+    chs.Add(wxT("<No valid items yet>"),0);
+    pg->SetPropertyChoices(wxT("Diet"),chs);
+
+@endcode
+
+If you want to create your enum properties with simple (label,name,value)
+constructor, then you need to create a new property class using one of the
+supplied macro pairs. See @ref newprops for details.
+
+<b>wxEditEnumProperty</b> is works exactly like wxEnumProperty, except
+is uses non-readonly combobox as default editor, and value is stored as
+string when it is not any of the choices.
+
+wxFlagsProperty is similar:
+
+@code
+
+    const wxChar* flags_prop_labels[] = { wxT("wxICONIZE"),
+        wxT("wxCAPTION"), wxT("wxMINIMIZE_BOX"), wxT("wxMAXIMIZE_BOX"), NULL };
+
+    // this value array would be optional if values matched string indexes
+    long flags_prop_values[] = { wxICONIZE, wxCAPTION, wxMINIMIZE_BOX,
+        wxMAXIMIZE_BOX };
+
+    pg->Append( new wxFlagsProperty(wxT("Window Style"),
+                                    wxPG_LABEL,
+                                    flags_prop_labels,
+                                    flags_prop_values,
+                                    wxDEFAULT_FRAME_STYLE) );
+
+@endcode
+
+wxFlagsProperty can use wxPGChoices just the same way as wxEnumProperty
+(and also custom property classes can be created with similar macro pairs).
+<b>Note: </b> When changing "choices" (ie. flag labels) of wxFlagsProperty,
+you will need to use SetPropertyChoices - otherwise they will not get updated
+properly.
+
+@section advprops Specialized Properties
+
+  This section describes the use of less often needed property classes.
+To use them, you have to include <wx/propgrid/advprops.h>.
+
+@code
+
+// Necessary extra header file
+#include <wx/propgrid/advprops.h>
+
+...
+
+    // Date property.
+    pg->Append( new wxDateProperty(wxT("MyDateProperty"),
+                                   wxPG_LABEL,
+                                   wxDateTime::Now()) );
+
+    // Image file property. Wildcard is auto-generated from available
+    // image handlers, so it is not set this time.
+    pg->Append( new wxImageFileProperty(wxT("Label of ImageFileProperty"),
+                                        wxT("NameOfImageFileProp")) );
+
+    // Font property has sub-properties. Note that we give window's font as
+    // initial value.
+    pg->Append( new wxFontProperty(wxT("Font"),
+                                   wxPG_LABEL,
+                                   GetFont()) );
+
+    // Colour property with arbitrary colour.
+    pg->Append( new wxColourProperty(wxT("My Colour 1"),
+                                     wxPG_LABEL,
+                                     wxColour(242,109,0) ) );
+
+    // System colour property.
+    pg->Append( new wxSystemColourProperty(wxT("My SysColour 1"),
+                                           wxPG_LABEL,
+                                           wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)) );
+
+    // System colour property with custom colour.
+    pg->Append( new wxSystemColourProperty(wxT("My SysColour 2"),
+                                           wxPG_LABEL,
+                                           wxColour(0,200,160) ) );
+
+    // Cursor property
+    pg->Append( new wxCursorProperty(wxT("My Cursor"),
+                                     wxPG_LABEL,
+                                     wxCURSOR_ARROW));
+
+@endcode
+
+
+@section iterating Iterating through a property container
+
+You can use somewhat STL'ish iterator classes to iterate through the grid.
+Here is a simple example of forward iterating through all individual
+properties (not categories or sub-propeties that are normally 'transparent'
+to application code):
+
+@code
+
+    wxPropertyGridIterator it;
+
+    for ( it = pg->GetIterator();
+          !it.AtEnd();
+          it++ )
+    {
+        wxPGProperty* p = *it;
+        // Do something with the property
+    }
+
+@endcode
+
+As expected there is also a const iterator:
+
+@code
+
+    wxPropertyGridConstIterator it;
+
+    for ( it = pg->GetIterator();
+          !it.AtEnd();
+          it++ )
+    {
+        const wxPGProperty* p = *it;
+        // Do something with the property
+    }
+
+@endcode
+
+You can give some arguments to GetIterator to determine which properties
+get automatically filtered out. For complete list of options, see
+@link iteratorflags List of Property Iterator Flags@endlink. GetIterator()
+also accepts other arguments. See wxPropertyGridInterface::GetIterator()
+for details.
+
+This example reverse-iterates through all visible items:
+
+@code
+
+    wxPropertyGridIterator it;
+
+    for ( it = pg->GetIterator(wxPG_ITERATE_VISIBLE, wxBOTTOM);
+          !it.AtEnd();
+          it-- )
+    {
+        wxPGProperty* p = *it;
+        // Do something with the property
+    }
+
+@endcode
+
+<b>wxPython Note:</b> Instead of ++ operator, use Next() method, and instead of
+* operator, use GetProperty() method.
+
+GetIterator() only works with wxPropertyGrid and the individual pages
+of wxPropertyGridManager. In order to iterate through an arbitrary
+property container, you need to use wxPropertyGridInterface::GetVIterator().
+Note however that this virtual iterater is limited to forward iteration.
+
+@code
+
+    wxPGVIterator it;
+
+    for ( it = manager->GetVIterator();
+          !it.AtEnd();
+          it.Next() )
+    {
+        wxPGProperty* p = it.GetProperty();
+        // Do something with the property
+    }
+
+@endcode
+
+
+@section operations More About Operating with Properties
+
+Getting value of selected wxSystemColourProperty (which value type is derived
+from wxObject):
+
+@code
+
+    wxPGId id = pg->GetSelection();
+
+    if ( id )
+    {
+        // Get name of property
+        const wxString& name = pg->GetPropertyName( id );
+
+        // If type is not correct, GetColour() method will produce run-time error
+        if ( pg->GetPropertyValueType() == wxT("wxColourPropertyValue") ) )
+        {
+            wxColourPropertyValue* pcolval =
+                wxDynamicCast(pg->GetPropertyValueAsWxObjectPtr(id),
+                              wxColourPropertyValue);
+
+            // Report value
+            wxString text;
+            if ( pcolval->m_type == wxPG_CUSTOM_COLOUR )
+                text.Printf( wxT("It is custom colour: (%i,%i,%i)"),
+                    (int)pcolval->m_colour.Red(),
+                    (int)pcolval->m_colour.Green(),
+                    (int)pcolval->m_colour.Blue());
+            else
+                text.Printf( wxT("It is wx system colour (number=%i): (%i,%i,%i)"),
+                    (int)pcolval->m_type,
+                    (int)pcolval->m_colour.Red(),
+                    (int)pcolval->m_colour.Green(),
+                    (int)pcolval->m_colour.Blue());
+
+            wxMessageBox( text );
+        }
+    }
+
+@endcode
+
+@section populating Populating wxPropertyGrid Automatically
+
+@subsection fromvariants Populating from List of wxVariants
+
+Example of populating an empty wxPropertyGrid from a values stored
+in an arbitrary list of wxVariants.
+
+@code
+
+    // This is a static method that initializes *all* builtin type handlers
+    // available, including those for wxColour and wxFont. Refers to *all*
+    // included properties, so when compiling with static library, this
+    // method may increase the executable size significantly.
+    pg->InitAllTypeHandlers();
+
+    // Get contents of the grid as a wxVariant list
+    wxVariant all_values = pg->GetPropertyValues();
+
+    // Populate the list with values. If a property with appropriate
+    // name is not found, it is created according to the type of variant.
+    pg->SetPropertyValues( my_list_variant );
+
+    // In order to get wxObject ptr from a variant value,
+    // wxGetVariantCast(VARIANT,CLASSNAME) macro has to be called.
+    // Like this:
+    wxVariant v_txcol = pg->GetPropertyValue(wxT("Text Colour"));
+    const wxColour& txcol = wxGetVariantCast(v_txcol,wxColour);
+
+@endcode
+
+@subsection fromfile Loading Population from a Text-based Storage
+
+Class wxPropertyGridPopulator may be helpful when writing code that
+loads properties from a text-source. In fact, the supplied xrc handler
+(src/xh_propgrid.cpp) uses it. See that code for more info.
+NOTE: src/xh_propgrid.cpp is not included in the library by default,
+to avoid dependency to wxXRC. You will need to add it to your application
+separately.
+
+@subsection editablestate Saving and Restoring User-Editable State
+
+You can use wxPGEditableState and wxPGMEditableState classes, and
+wxPropertyGrid::SaveEditableState() and wxPropertyGrid::RestoreEditableState()
+to save and restore user-editable state (selected property, expanded/
+collapsed properties, and scrolled position). For convience with
+program configuration, wxPGEditableState has functions to save/load
+its value in wxString. For instance:
+
+@code
+    // Save state into config
+    wxPGEditableState edState;
+    pg->SaveEditableState(&edState);
+    programConfig->Store(wxT("PropertyGridState"), edState.GetAsString());
+
+    // Restore state from config
+    wxPGEditableState edState;
+    edState.SetFromString(programConfig->Load(wxT("PropertyGridState")));
+    pg->RestoreEditableState(edState);
+@endcode
+
+
+@section events Event Handling
+
+Probably the most important event is the Changed event which occurs when
+value of any property is changed by the user. Use EVT_PG_CHANGED(id,func)
+in your event table to use it.
+
+For complete list of event types, see wxPropertyGrid class reference.
+
+The custom event class, wxPropertyGridEvent, has methods to directly
+access the property that triggered the event.
+
+Here's a small sample:
+
+@code
+
+// Portion of an imaginary event table
+BEGIN_EVENT_TABLE(MyForm, wxFrame)
+
+    ...
+
+    // This occurs when a property value changes
+    EVT_PG_CHANGED( PGID, MyForm::OnPropertyGridChange )
+
+    ...
+
+END_EVENT_TABLE()
+
+void MyForm::OnPropertyGridChange( wxPropertyGridEvent& event )
+{
+    wxPGProperty *property = event.GetProperty();
+
+    // It may be NULL
+    if ( !property )
+        return;
+
+    // Get name of changed property
+    const wxString& name = property->GetName();
+
+    // Get resulting value
+    wxVariant value = property->GetValue();
+}
+
+@endcode
+
+Another event type you might find useful is EVT_PG_CHANGING, which occurs
+just prior property value is being changed by user. You can acquire pending
+value using wxPropertyGridEvent::GetValue(), and if it is not acceptable,
+call wxPropertyGridEvent::Veto() to prevent the value change from taking
+place.
+
+@code
+
+// Portion of an imaginary event table
+BEGIN_EVENT_TABLE(MyForm, wxFrame)
+
+    ...
+
+    // This occurs when a property value changes
+    EVT_PG_CHANGING( PGID, MyForm::OnPropertyGridChanging )
+
+    ...
+
+END_EVENT_TABLE()
+
+void MyForm::OnPropertyGridChanging( wxPropertyGridEvent& event )
+{
+    wxPGProperty* property = event.GetProperty();
+
+    if ( property == m_pWatchThisProperty )
+    {
+        // GetValue() returns the pending value, but is only
+        // supported by wxEVT_PG_CHANGING.
+        if ( event.GetValue().GetString() == g_pThisTextIsNotAllowed )
+        {
+            event.Veto();
+            return;
+        }
+    }
+}
+
+@endcode
+
+@remarks On Sub-property Event Handling
+- For aggregate type properties (wxFontProperty, wxFlagsProperty, etc), events
+  occur for the main parent property only. For other properties events occur
+  for the children themselves..
+
+- When property's child gets changed, you can use wxPropertyGridEvent::GetMainParent
+  to obtain its topmost non-category parent (useful, if you have deeply nested
+  properties).
+
+
+@section validating Validating Property Values
+
+There are various ways to make sure user enters only correct values. First, you
+can use wxValidators similar to as you would with ordinary controls. Use
+wxPropertyGridInterface::SetPropertyValidator() to assign wxValidator to 
+property.
+
+Second, you can subclass a property and override wxPGProperty::ValidateValue(),
+or handle wxEVT_PG_CHANGING for the same effect. Both of these methods do not
+actually prevent user from temporarily entering invalid text, but they do give
+you an opportunity to warn the user and block changed value from being committed
+in a property.
+
+Various validation failure options can be controlled globally with
+wxPropertyGrid::SetValidationFailureBehavior(), or on an event basis by
+calling wxEvent::SetValidationFailureBehavior(). Here's a code snippet of
+how to handle wxEVT_PG_CHANGING, and to set custom failure behaviour and
+message.
+
+@code
+    void MyFrame::OnPropertyGridChanging(wxPropertyGridEvent& event)
+    {
+        wxPGProperty* property = event.GetProperty();
+
+        // You must use wxPropertyGridEvent::GetValue() to access
+        // the value to be validated.
+        wxVariant pendingValue = event.GetValue();
+
+        if ( property->GetName() == wxT("Font") )
+        {
+            // Make sure value is not unspecified
+            if ( !pendingValue.IsNull() )
+            {
+                wxFont font << pendingValue;
+
+                // Let's just allow Arial font
+                if ( font.GetFaceName() != wxT("Arial") )
+                {
+                    event.Veto();
+                    event.SetValidationFailureBehavior(wxPG_VFB_STAY_IN_PROPERTY |
+                                                       wxPG_VFB_BEEP |
+                                                       wxPG_VFB_SHOW_MESSAGE);
+                }
+            }
+        }
+    }
+@endcode
+
+
+@section cellrender Customizing Individual Cell Appearance
+
+You can control text colour, background colour, and attached image of
+each cell in the property grid. Use wxPropertyGridInterface::SetPropertyCell() or
+wxPGProperty::SetCell() for this purpose.
+
+In addition, it is possible to control these characteristics for
+wxPGChoices list items. See wxPGChoices::Item() and wxPGChoiceEntry class
+reference for more info.
+
+
+@section customizing Customizing Properties (without sub-classing)
+
+In this section are presented miscellaneous ways to have custom appearance
+and behavior for your properties without all the necessary hassle
+of sub-classing a property class etc.
+
+@subsection customimage Setting Value Image
+
+Every property can have a small value image placed in front of the
+actual value text. Built-in example of this can be seen with
+wxColourProperty and wxImageFileProperty, but for others it can
+be set using wxPropertyGrid::SetPropertyImage method.
+
+@subsection customvalidator Setting Validator
+
+You can set wxValidator for a property using wxPropertyGrid::SetPropertyValidator.
+
+Validator will work just like in wxWidgets (ie. editorControl->SetValidator(validator)
+is called).
+
+@subsection customeditor Setting Property's Editor Control(s)
+
+You can set editor control (or controls, in case of a control and button),
+of any property using wxPropertyGrid::SetPropertyEditor. Editors are passed
+using wxPG_EDITOR(EditorName) macro, and valid built-in EditorNames are
+TextCtrl, Choice, ComboBox, CheckBox, TextCtrlAndButton, ChoiceAndButton,
+SpinCtrl, and DatePickerCtrl. Two last mentioned ones require call to
+static member function wxPropertyGrid::RegisterAdditionalEditors().
+
+Following example changes wxColourProperty's editor from default Choice
+to TextCtrlAndButton. wxColourProperty has its internal event handling set
+up so that button click events of the button will be used to trigger
+colour selection dialog.
+
+@code
+
+    wxPGId colProp = pg->Append(wxColourProperty(wxT("Text Colour")));
+
+    pg->SetPropertyEditor(colProp,wxPG_EDITOR(TextCtrlAndButton));
+
+@endcode
+
+Naturally, creating and setting custom editor classes is a possibility as
+well. For more information, see wxPGEditor class reference.
+
+@subsection editorattrs Property Attributes Recognized by Editors
+
+<b>SpinCtrl</b> editor can make use of property's "Min", "Max", "Step" and "Wrap" attributes.
+
+@subsection multiplebuttons Adding Multiple Buttons Next to an Editor
+
+See wxPGMultiButton class reference.
+
+@subsection customeventhandling Handling Events Passed from Properties
+
+<b>wxEVT_COMMAND_BUTTON_CLICKED </b>(corresponds to event table macro EVT_BUTTON):
+Occurs when editor button click is not handled by the property itself
+(as is the case, for example, if you set property's editor to TextCtrlAndButton
+from the original TextCtrl).
+
+@subsection attributes Property Attributes
+
+Miscellaneous values, often specific to a property type, can be set
+using wxPropertyGrid::SetPropertyAttribute and wxPropertyGrid::SetPropertyAttributeAll
+methods.
+
+Attribute names are strings and values wxVariant. Arbitrary names are allowed
+inorder to store user values. Constant equivalents of all attribute string names are
+provided. Some of them are defined as cached strings, so using constants can provide
+for smaller binary size.
+
+For complete list of attributes, see @link attrids Property Attributes@endlink.
+
+@subsection boolcheckbox Setting wxBoolProperties to Use Check Box
+
+To have all wxBoolProperties to use CheckBox editor instead of Choice, use
+following (call after bool properties have been added):
+
+@code
+    pg->SetPropertyAttributeAll(wxPG_BOOL_USE_CHECKBOX,true);
+@endcode
+
+
+@section usage2 Using wxPropertyGridManager
+
+wxPropertyGridManager is an efficient multi-page version of wxPropertyGrid,
+which can optionally have toolbar for mode and page selection, and a help text
+box.
+
+wxPropertyGridManager inherits from wxPropertyGridInterface, and as such
+it has most property manipulation functions. However, only some of them affect
+properties on all pages (eg. GetPropertyByName() and ExpandAll()), while some
+(eg. Append()) only apply to the currently selected page.
+
+To operate explicitly on properties on specific page, use wxPropertyGridManager::GetPage()
+to obtain pointer to page's wxPropertyGridPage object.
+
+Visual methods, such as SetCellBackgroundColour and GetNextVisible are only
+available in wxPropertyGrid. Use wxPropertyGridManager::GetGrid() to obtain
+pointer to it.
+
+Iteration methods will not work in wxPropertyGridManager. Instead, you must acquire
+the internal grid (GetGrid()) or wxPropertyGridPage object (GetPage()).
+
+wxPropertyGridManager constructor has exact same format as wxPropertyGrid
+constructor, and basicly accepts same extra window style flags (albeit also
+has some extra ones).
+
+Here's some example code for creating and populating a wxPropertyGridManager:
+
+@code
+
+    wxPropertyGridManager* pgMan = new wxPropertyGridManager(this, PGID,
+        wxDefaultPosition, wxDefaultSize,
+        // These and other similar styles are automatically
+        // passed to the embedded wxPropertyGrid.
+        wxPG_BOLD_MODIFIED|wxPG_SPLITTER_AUTO_CENTER|
+        // Include toolbar.
+        wxPG_TOOLBAR |
+        // Include description box.
+        wxPG_DESCRIPTION |
+        // Include compactor.
+        wxPG_COMPACTOR |
+        // Plus defaults.
+        wxPGMAN_DEFAULT_STYLE
+       );
+
+    wxPropertyGridPage* page;
+
+    // Adding a page sets target page to the one added, so
+    // we don't have to call SetTargetPage if we are filling
+    // it right after adding.
+    pgMan->AddPage(wxT("First Page"));
+    page = pgMan->GetLastPage();
+
+    page->Append( new wxPropertyCategory(wxT("Category A1")) );
+
+    page->Append( new wxIntProperty(wxT("Number"),wxPG_LABEL,1) );
+
+    page->Append( new wxColourProperty(wxT("Colour"),wxPG_LABEL,*wxWHITE) );
+
+    pgMan->AddPage(wxT("Second Page"));
+    page = pgMan->GetLastPage();
+
+    page->Append( wxT("Text"),wxPG_LABEL,wxT("(no text)") );
+
+    page->Append( new wxFontProperty(wxT("Font"),wxPG_LABEL) );
+
+@endcode
+
+@subsection propgridpage wxPropertyGridPage
+
+wxPropertyGridPage is holder of properties for one page in manager. It is derived from
+wxEvtHandler, so you can subclass it to process page-specific property grid events. Hand
+over your page instance in wxPropertyGridManager::AddPage.
+
+Please note that the wxPropertyGridPage itself only sports subset of wxPropertyGrid API
+(but unlike manager, this include item iteration). Naturally it inherits from
+wxPropertyGridMethods and wxPropertyGridPageState.
+
+
+@section subclassing Subclassing wxPropertyGrid and wxPropertyGridManager
+
+Few things to note:
+
+- Only a small percentage of member functions are virtual. If you need more,
+  just e-mail to wx-dev mailing list.
+
+- Data manipulation is done in wxPropertyGridPageState class. So, instead of
+  overriding wxPropertyGrid::Insert, you'll probably want to override wxPropertyGridPageState::DoInsert.
+
+- Override wxPropertyGrid::CreateState to instantiate your derivate wxPropertyGridPageState.
+  For wxPropertyGridManager, you'll need to subclass wxPropertyGridPage instead (since it
+  is derived from wxPropertyGridPageState), and hand over instances in wxPropertyGridManager::AddPage
+  calls.
+
+- You can use a derivate wxPropertyGrid with manager by overriding wxPropertyGridManager::CreatePropertyGrid
+  member function.
+
+
+@section misc Miscellaneous Topics
+
+@subsection namescope Property Name Scope
+
+- All properties which parent is category or root have their names
+  globally accessible.
+
+- Sub-properties (i.e. private child properties which have parent that is not category or
+  root or non-aggregate property) can not be accessed globally by their name. Instead, use
+  "<property>.<subproperty>".
+
+@subsection boolproperty wxBoolProperty
+
+  There are few points about wxBoolProperty that require futher discussion:
+  - wxBoolProperty can be shown as either normal combobox or as a checkbox.
+    Property attribute wxPG_BOOL_USE_CHECKBOX is used to change this.
+    For example, if you have a wxFlagsProperty, you can
+    set its all items to use check box using the following:
+    @code
+        pg->SetPropertyAttribute(wxT("MyFlagsProperty"),wxPG_BOOL_USE_CHECKBOX,true,wxPG_RECURSE);
+    @endcode
+
+  - Default item names for wxBoolProperty are [wxT("False"),wxT("True")]. This can be
+    changed using wxPropertyGrid::SetBoolChoices(trueChoice,falseChoice).
+
+@subsection textctrlupdates Updates from wxTextCtrl Based Editor
+
+  Changes from wxTextCtrl based property editors are committed (ie.
+wxEVT_PG_CHANGED is sent etc.) *only* when (1) user presser enter, (2)
+user moves to edit another property, or (3) when focus leaves
+the grid.
+
+  Because of this, you may find it useful, in some apps, to call
+wxPropertyGrid::CommitChangesFromEditor() just before you need to do any
+computations based on property grid values. Note that CommitChangesFromEditor()
+will dispatch wxEVT_PG_CHANGED with ProcessEvent, so any of your event handlers
+will be called immediately.
+
+@subsection splittercentering Centering the Splitter
+
+  If you need to center the splitter, but only once when the program starts,
+then do <b>not</b> use the wxPG_SPLITTER_AUTO_CENTER window style, but the
+wxPropertyGrid::CenterSplitter() method. <b>However, be sure to call it after
+the sizer setup and SetSize calls!</b> (ie. usually at the end of the
+frame/dialog constructor)
+
+@subsection splittersetting Setting Splitter Position When Creating Property Grid
+
+Splitter position cannot exceed grid size, and therefore setting it during
+form creation may fail as initial grid size is often smaller than desired
+splitter position, especially when sizers are being used.
+
+@subsection colourproperty wxColourProperty and wxSystemColourProperty
+
+Through subclassing, these two property classes provide substantial customization
+features. Subclass wxSystemColourProperty if you want to use wxColourPropertyValue
+(which features colour type in addition to wxColour), and wxColourProperty if plain
+wxColour is enough.
+
+Override wxSystemColourProperty::ColourToString() to redefine how colours are
+printed as strings.
+
+Override wxSystemColourProperty::GetCustomColourIndex() to redefine location of
+the item that triggers colour picker dialog (default is last).
+
+Override wxSystemColourProperty::GetColour() to determine which colour matches
+which choice entry.
+
+@section proplist Property Class Descriptions
+
+See @ref pgproperty_properties
+
+*/
+
index d5e295a6a39395ded6d728afb1549bcbe57f4478..77054b6db704aee4387e53183fb7974eb2845332 100644 (file)
@@ -140,8 +140,8 @@ Using project files (VC++ 6 and later):
 
    If you want to build DLL configurations in wx.dsw project you unfortunately
    need to build them in the proper order (jpeg, png, tiff, zlib, regex, expat,
 
    If you want to build DLL configurations in wx.dsw project you unfortunately
    need to build them in the proper order (jpeg, png, tiff, zlib, regex, expat,
-   base, net, odbc, core, gl, html, media, qa, adv, dbgrid, xrc, aui, richtext)
-   manually because VC6 doesn't always respect the correct build order.
+   base, net, odbc, core, gl, html, media, qa, adv, dbgrid, xrc, aui, richtext,
+   propgrid) manually because VC6 doesn't always respect the correct build order.
 
    Alternatively, use the special wx_dll.dsw project which adds the
    dependencies to force the correct order (but, because of this, doesn't work
 
    Alternatively, use the special wx_dll.dsw project which adds the
    dependencies to force the correct order (but, because of this, doesn't work
index 8b88602f04d2f049e864dad4542ab3056d4fd483..9c120f99b6a9c5058b51264623c085425245277e 100644 (file)
 #    define WXDLLIMPEXP_AUI
 #endif
 
 #    define WXDLLIMPEXP_AUI
 #endif
 
+#ifdef WXMAKINGDLL_PROPGRID
+#    define WXDLLIMPEXP_PROPGRID WXEXPORT
+#elif defined(WXUSINGDLL)
+#    define WXDLLIMPEXP_PROPGRID WXIMPORT
+#else /* not making nor using DLL */
+#    define WXDLLIMPEXP_PROPGRID
+#endif
+
 #ifdef WXMAKINGDLL_RICHTEXT
 #    define WXDLLIMPEXP_RICHTEXT WXEXPORT
 #elif defined(WXUSINGDLL)
 #ifdef WXMAKINGDLL_RICHTEXT
 #    define WXDLLIMPEXP_RICHTEXT WXEXPORT
 #elif defined(WXUSINGDLL)
index 41bddf14355305c47a46909e9bd1ba01c323b98f..9fe1df35cd68b899e61c62831c1ce49ece0da0b8 100644 (file)
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
-// Use GStreamer for Unix (req a lot of dependancies)
+// Use GStreamer for Unix.
 //
 //
-// Default is 0
+// Default is 0 as this requires a lot of dependencies which might not be
+// available.
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
-// to create fiels in SVG (Scalable Vector Graphics) format.
+// to create files in SVG (Scalable Vector Graphics) format.
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
index 2c78ac864c15e9e312b3e6b708c13d7971b20aae..90f4a097cd77c254bb416cebb562429e272cb12e 100644 (file)
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
-// Use GStreamer for Unix (req a lot of dependancies)
+// Use GStreamer for Unix.
 //
 //
-// Default is 0
+// Default is 0 as this requires a lot of dependencies which might not be
+// available.
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
-// to create fiels in SVG (Scalable Vector Graphics) format.
+// to create files in SVG (Scalable Vector Graphics) format.
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
index a5b561330f73699fd625654f466a671cd83d4937..f6457c1fab3f9729f663368365ebca0dc2a3229d 100644 (file)
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
-// Use GStreamer for Unix (req a lot of dependancies)
+// Use GStreamer for Unix.
 //
 //
-// Default is 0
+// Default is 0 as this requires a lot of dependencies which might not be
+// available.
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
-// to create fiels in SVG (Scalable Vector Graphics) format.
+// to create files in SVG (Scalable Vector Graphics) format.
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
index d9604eb55207e39f269f53b8ee1b19bbfd864794..95a7152fedf4bba584aae1c297c11679e32e3c82 100644 (file)
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
-// Use GStreamer for Unix (req a lot of dependancies)
+// Use GStreamer for Unix.
 //
 //
-// Default is 0
+// Default is 0 as this requires a lot of dependencies which might not be
+// available.
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
-// to create fiels in SVG (Scalable Vector Graphics) format.
+// to create files in SVG (Scalable Vector Graphics) format.
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
index 6eef938057b45b44c8425a747e2b6689b41977ff..7a0d0a5804e9e60a1895731d99368a9a586d1e49 100644 (file)
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
-// Use GStreamer for Unix (req a lot of dependancies)
+// Use GStreamer for Unix.
 //
 //
-// Default is 0
+// Default is 0 as this requires a lot of dependencies which might not be
+// available.
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 
 
 // Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced
 
 
 // Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced
-// 2D drawing API.  (Default on OSX, on other platforms still somewhat experimental)
+// 2D drawing API.  (Still somewhat experimental)
 //
 // Please note that on Windows you will need to link with gdiplus.lib (use
 // USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your
 //
 // Please note that on Windows you will need to link with gdiplus.lib (use
 // USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
-// to create fiels in SVG (Scalable Vector Graphics) format.
+// to create files in SVG (Scalable Vector Graphics) format.
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
index 0433d57944a1c0294778556443d38da094623ce8..d25999c06777a658bb95c7a0db972554d2bdb3b5 100644 (file)
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
-// Use GStreamer for Unix (req a lot of dependancies)
+// Use GStreamer for Unix.
 //
 //
-// Default is 0
+// Default is 0 as this requires a lot of dependencies which might not be
+// available.
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
-// to create fiels in SVG (Scalable Vector Graphics) format.
+// to create files in SVG (Scalable Vector Graphics) format.
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
diff --git a/include/wx/propgrid/advprops.h b/include/wx/propgrid/advprops.h
new file mode 100644 (file)
index 0000000..98c47c0
--- /dev/null
@@ -0,0 +1,510 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgrid/advprops.h
+// Purpose:     wxPropertyGrid Advanced Properties (font, colour, etc.)
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2004-09-25
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PROPGRID_ADVPROPS_H_
+#define _WX_PROPGRID_ADVPROPS_H_
+
+#include "wx/propgrid/props.h"
+
+// -----------------------------------------------------------------------
+
+
+//
+// Additional Value Type Handlers
+//
+#ifndef SWIG
+bool WXDLLIMPEXP_PROPGRID operator==(const wxFont&, const wxFont&);
+
+bool WXDLLIMPEXP_PROPGRID
+operator==(const wxArrayInt& array1, const wxArrayInt& array2);
+#endif
+
+
+//
+// Additional Property Editors
+//
+#if wxUSE_SPINBTN
+WX_PG_DECLARE_EDITOR_WITH_DECL(SpinCtrl,WXDLLIMPEXP_PROPGRID)
+#endif
+
+#if wxUSE_DATEPICKCTRL
+WX_PG_DECLARE_EDITOR_WITH_DECL(DatePickerCtrl,WXDLLIMPEXP_PROPGRID)
+#endif
+
+// -----------------------------------------------------------------------
+
+
+// Web colour is currently unsupported
+#define wxPG_COLOUR_WEB_BASE        0x10000
+//#define wxPG_TO_WEB_COLOUR(A)   ((wxUint32)(A+wxPG_COLOUR_WEB_BASE))
+
+
+#define wxPG_COLOUR_CUSTOM      0xFFFFFF
+#define wxPG_COLOUR_UNSPECIFIED (wxPG_COLOUR_CUSTOM+1)
+
+/** @class wxColourPropertyValue
+
+    Because text, background and other colours tend to differ between
+    platforms, wxSystemColourProperty must be able to select between system
+    colour and, when necessary, to pick a custom one. wxSystemColourProperty
+    value makes this possible.
+*/
+class WXDLLIMPEXP_PROPGRID wxColourPropertyValue : public wxObject
+{
+public:
+    /** An integer value relating to the colour, and which exact
+        meaning depends on the property with which it is used.
+
+        For wxSystemColourProperty:
+
+        Any of wxSYS_COLOUR_XXX, or any web-colour ( use wxPG_TO_WEB_COLOUR
+        macro - (currently unsupported) ), or wxPG_COLOUR_CUSTOM.
+
+        For custom colour properties without values array specified:
+
+        index or wxPG_COLOUR_CUSTOM
+
+        For custom colour properties <b>with</b> values array specified:
+
+        m_arrValues[index] or wxPG_COLOUR_CUSTOM
+    */
+    wxUint32    m_type;
+
+    /** Resulting colour. Should be correct regardless of type. */
+    wxColour    m_colour;
+
+    wxColourPropertyValue()
+    {
+        m_type = 0;
+    }
+
+    virtual ~wxColourPropertyValue()
+    {
+    }
+
+    wxColourPropertyValue( const wxColourPropertyValue& v )
+    {
+        m_type = v.m_type;
+        m_colour = v.m_colour;
+    }
+
+    void Init( wxUint32 type, const wxColour& colour )
+    {
+        m_type = type;
+        m_colour = colour;
+    }
+
+    wxColourPropertyValue( const wxColour& colour )
+    {
+        m_type = wxPG_COLOUR_CUSTOM;
+        m_colour = colour;
+    }
+
+    wxColourPropertyValue( wxUint32 type )
+    {
+        m_type = type;
+    }
+
+    wxColourPropertyValue( wxUint32 type, const wxColour& colour )
+    {
+        Init( type, colour );
+    }
+
+#ifndef SWIG
+    void operator=(const wxColourPropertyValue& cpv)
+    {
+        Init( cpv.m_type, cpv.m_colour );
+    }
+
+private:
+    DECLARE_DYNAMIC_CLASS(wxColourPropertyValue)
+#endif
+};
+
+
+#ifndef SWIG
+bool WXDLLIMPEXP_PROPGRID
+operator==(const wxColourPropertyValue&, const wxColourPropertyValue&);
+
+WX_PG_DECLARE_WXOBJECT_VARIANT_DATA(wxPGVariantDataColourPropertyValue,
+                                    wxColourPropertyValue, WXDLLIMPEXP_PROPGRID)
+#endif
+
+#ifndef SWIG
+    #define wxPG_EMPTY_CPV          (*((wxColourPropertyValue*)NULL))
+    #define wxPG_NORMAL_FONT        (*wxNORMAL_FONT)
+#else
+    #define wxPG_EMPTY_CPV          wxCPV_wxPG_EMPTY
+    #define wxPG_NORMAL_FONT        wxFONT_wxPG_NORMAL_FONT
+#endif
+
+
+// -----------------------------------------------------------------------
+// Declare part of custom colour property macro pairs.
+
+#if wxUSE_IMAGE || defined(SWIG)
+    #include "wx/image.h"
+#endif
+
+// -----------------------------------------------------------------------
+
+// Exclude class from wxPython bindings
+#ifndef SWIG
+
+/** @class wxFontProperty
+    @ingroup classes
+    Property representing wxFont.
+*/
+class WXDLLIMPEXP_PROPGRID wxFontProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxFontProperty)
+public:
+
+    wxFontProperty(const wxString& label = wxPG_LABEL,
+                   const wxString& name = wxPG_LABEL,
+                   const wxFont& value = wxFont());
+    virtual ~wxFontProperty();
+    virtual void OnSetValue();
+    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+
+    WX_PG_DECLARE_EVENT_METHODS()
+    WX_PG_DECLARE_PARENTAL_METHODS()
+    //WX_PG_DECLARE_CUSTOM_PAINT_METHODS()
+
+protected:
+};
+
+#endif  // !SWIG
+
+// -----------------------------------------------------------------------
+
+
+/** If set, then match from list is searched for a custom colour. */
+#define wxPG_PROP_TRANSLATE_CUSTOM      wxPG_PROP_CLASS_SPECIFIC_1
+
+
+/** @class wxSystemColourProperty
+    @ingroup classes
+    Has dropdown list of wxWidgets system colours. Value used is
+    of wxColourPropertyValue type.
+*/
+class WXDLLIMPEXP_PROPGRID wxSystemColourProperty : public wxEnumProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxSystemColourProperty)
+public:
+
+    wxSystemColourProperty( const wxString& label = wxPG_LABEL,
+                            const wxString& name = wxPG_LABEL,
+                            const wxColourPropertyValue&
+                                value = wxColourPropertyValue() );
+    virtual ~wxSystemColourProperty();
+
+    virtual void OnSetValue();
+    virtual bool IntToValue(wxVariant& variant,
+                            int number,
+                            int argFlags = 0) const;
+
+    /**
+        Override in derived class to customize how colours are printed as
+        strings.
+    */
+    virtual wxString ColourToString( const wxColour& col, int index ) const;
+
+    /** Returns index of entry that triggers colour picker dialog
+        (default is last).
+    */
+    virtual int GetCustomColourIndex() const;
+
+    WX_PG_DECLARE_BASIC_TYPE_METHODS()
+    WX_PG_DECLARE_EVENT_METHODS()
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+
+    WX_PG_DECLARE_CUSTOM_PAINT_METHODS()
+    //virtual wxSize GetImageSize( int item ) const;
+    //virtual wxPGCellRenderer* GetCellRenderer( int column ) const;
+
+    // Helper function to show the colour dialog
+    bool QueryColourFromUser( wxVariant& variant ) const;
+
+    /** Default is to use wxSystemSettings::GetColour(index). Override to use
+        custom colour tables etc.
+    */
+    virtual wxColour GetColour( int index ) const;
+
+    wxColourPropertyValue GetVal( const wxVariant* pVariant = NULL ) const;
+
+protected:
+
+    // Special constructors to be used by derived classes.
+    wxSystemColourProperty( const wxString& label, const wxString& name,
+        const wxChar** labels, const long* values, wxPGChoices* choicesCache,
+        const wxColourPropertyValue& value );
+    wxSystemColourProperty( const wxString& label, const wxString& name,
+        const wxChar** labels, const long* values, wxPGChoices* choicesCache,
+        const wxColour& value );
+
+    void Init( int type, const wxColour& colour );
+
+    // Utility functions for internal use
+    virtual wxVariant DoTranslateVal( wxColourPropertyValue& v ) const;
+    wxVariant TranslateVal( wxColourPropertyValue& v ) const
+    {
+        return DoTranslateVal( v );
+    }
+    wxVariant TranslateVal( int type, const wxColour& colour ) const
+    {
+        wxColourPropertyValue v(type, colour);
+        return DoTranslateVal( v );
+    }
+
+    // Translates colour to a int value, return wxNOT_FOUND if no match.
+    int ColToInd( const wxColour& colour ) const;
+};
+
+// -----------------------------------------------------------------------
+
+WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR_WITH_DECL(
+    wxColourProperty, class WXDLLIMPEXP_PROPGRID)
+
+// Exclude classes from wxPython bindings
+#ifndef SWIG
+
+// -----------------------------------------------------------------------
+
+/** @class wxCursorProperty
+    @ingroup classes
+    Property representing wxCursor.
+*/
+class WXDLLIMPEXP_PROPGRID wxCursorProperty : public wxEnumProperty
+{
+    DECLARE_DYNAMIC_CLASS(wxCursorProperty)
+
+    wxCursorProperty( const wxString& label= wxPG_LABEL,
+                      const wxString& name= wxPG_LABEL,
+                      int value = 0 );
+    virtual ~wxCursorProperty();
+
+    WX_PG_DECLARE_CUSTOM_PAINT_METHODS()
+    //virtual wxSize GetImageSize( int item ) const;
+    //virtual wxPGCellRenderer* GetCellRenderer( int column ) const;
+};
+
+// -----------------------------------------------------------------------
+
+#if wxUSE_IMAGE
+
+WXDLLIMPEXP_PROPGRID const wxString& wxPGGetDefaultImageWildcard();
+
+/** @class wxImageFileProperty
+    @ingroup classes
+    Property representing image file(name).
+*/
+class WXDLLIMPEXP_PROPGRID wxImageFileProperty : public wxFileProperty
+{
+    DECLARE_DYNAMIC_CLASS(wxImageFileProperty)
+public:
+
+    wxImageFileProperty( const wxString& label= wxPG_LABEL,
+                         const wxString& name = wxPG_LABEL,
+                         const wxString& value = wxEmptyString);
+    virtual ~wxImageFileProperty();
+
+    virtual void OnSetValue();
+
+    WX_PG_DECLARE_CUSTOM_PAINT_METHODS()
+
+protected:
+    wxBitmap*   m_pBitmap; // final thumbnail area
+    wxImage*    m_pImage; // intermediate thumbnail area
+};
+
+#endif
+
+#if wxUSE_CHOICEDLG || defined(SWIG)
+
+/** @class wxMultiChoiceProperty
+    @ingroup classes
+    Property that manages a value resulting from wxMultiChoiceDialog. Value is
+    array of strings. You can get value as array of choice values/indices by
+    calling wxMultiChoiceProperty::GetValueAsArrayInt().
+
+    <b>Supported special attributes:</b>
+    - "UserStringMode": If > 0, allow user to manually enter strings that are
+      not in the list of choices. If this value is 1, user strings are
+      preferably placed in front of valid choices. If value is 2, then those
+      strings will placed behind valid choices.
+*/
+class WXDLLIMPEXP_PROPGRID wxMultiChoiceProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxMultiChoiceProperty)
+public:
+
+    wxMultiChoiceProperty( const wxString& label,
+                           const wxString& name,
+                           const wxArrayString& strings,
+                           const wxArrayString& value );
+#ifndef SWIG
+    wxMultiChoiceProperty( const wxString& label,
+                           const wxString& name,
+                           const wxPGChoices& choices,
+                           const wxArrayString& value = wxArrayString() );
+
+    wxMultiChoiceProperty( const wxString& label = wxPG_LABEL,
+                           const wxString& name = wxPG_LABEL,
+                           const wxArrayString& value = wxArrayString() );
+#endif
+    virtual ~wxMultiChoiceProperty();
+
+    virtual void OnSetValue();
+    virtual wxString GetValueAsString( int flags = 0 ) const;
+    virtual bool StringToValue(wxVariant& variant,
+                               const wxString& text,
+                               int argFlags = 0) const;
+    WX_PG_DECLARE_EVENT_METHODS()
+
+    virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo );
+
+    wxArrayInt GetValueAsArrayInt() const
+    {
+        return m_choices.GetValuesForStrings(m_value.GetArrayString());
+    }
+
+protected:
+
+    void GenerateValueAsString();
+
+    // Returns translation of values into string indices.
+    wxArrayInt GetValueAsIndices() const;
+
+    wxArrayString       m_valueAsStrings;  // Value as array of strings
+
+    wxPGChoices         m_choices;
+
+    // Cache displayed text since generating it is relatively complicated.
+    wxString            m_display;
+};
+
+#endif // wxUSE_CHOICEDLG
+
+// -----------------------------------------------------------------------
+
+#if wxUSE_DATETIME
+
+/** @class wxDateProperty
+    @ingroup classes
+    Property representing wxDateTime.
+
+    <b>Supported special attributes:</b>
+    - "DateFormat": Determines displayed date format.
+    - "PickerStyle": Determines window style used with wxDatePickerCtrl.
+       Default is wxDP_DEFAULT | wxDP_SHOWCENTURY.
+*/
+class WXDLLIMPEXP_PROPGRID wxDateProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxDateProperty)
+public:
+
+    wxDateProperty( const wxString& label = wxPG_LABEL,
+                    const wxString& name = wxPG_LABEL,
+                    const wxDateTime& value = wxDateTime() );
+    virtual ~wxDateProperty();
+
+    virtual wxString GetValueAsString( int flags = 0 ) const;
+    virtual bool StringToValue(wxVariant& variant,
+                               const wxString& text,
+                               int argFlags = 0) const;
+
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+
+    void SetFormat( const wxString& format )
+    {
+        m_format = format;
+    }
+
+    const wxString& GetFormat() const
+    {
+        return m_format;
+    }
+
+    void SetDateValue( const wxDateTime& dt )
+    {
+        //m_valueDateTime = dt;
+        m_value = dt;
+    }
+
+    wxDateTime GetDateValue() const
+    {
+        //return m_valueDateTime;
+        return m_value;
+    }
+
+    long GetDatePickerStyle() const
+    {
+        return m_dpStyle;
+    }
+
+protected:
+    wxString        m_format;
+    long            m_dpStyle;  // DatePicker style
+
+    static wxString ms_defaultDateFormat;
+    static wxString DetermineDefaultDateFormat( bool showCentury );
+};
+
+#endif // wxUSE_DATETIME
+
+#endif // !SWIG
+
+// -----------------------------------------------------------------------
+
+#if wxUSE_SPINBTN
+
+//
+// Implement an editor control that allows using wxSpinCtrl (actually, a
+// combination of wxTextCtrl and wxSpinButton) to edit value of wxIntProperty
+// and wxFloatProperty (and similar).
+//
+// Note that new editor classes needs to be registered before use. This can be
+// accomplished using wxPGRegisterEditorClass macro, which is used for SpinCtrl
+// in wxPropertyGridInterface::RegisterAdditionalEditors (see below).
+// Registration can also be performed in a constructor of a property that is
+// likely to require the editor in question.
+//
+
+
+#include "wx/spinbutt.h"
+#include "wx/propgrid/editors.h"
+
+
+// NOTE: Regardless that this class inherits from a working editor, it has
+//   all necessary methods to work independently. wxTextCtrl stuff is only
+//   used for event handling here.
+class WXDLLIMPEXP_PROPGRID wxPGSpinCtrlEditor : public wxPGTextCtrlEditor
+{
+    WX_PG_DECLARE_EDITOR_CLASS(wxPGSpinCtrlEditor)
+public:
+    virtual ~wxPGSpinCtrlEditor();
+
+    // See below for short explanations of what these are suppposed to do.
+    wxPG_DECLARE_CREATECONTROLS
+
+    virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
+        wxWindow* wnd, wxEvent& event ) const;
+
+private:
+    mutable wxString m_tempString;
+};
+
+#endif // wxUSE_SPINBTN
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_ADVPROPS_H_
diff --git a/include/wx/propgrid/editors.h b/include/wx/propgrid/editors.h
new file mode 100644 (file)
index 0000000..1fb6a09
--- /dev/null
@@ -0,0 +1,651 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgrid/editors.h
+// Purpose:     wxPropertyGrid editors
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2007-04-14
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PROPGRID_EDITORS_H_
+#define _WX_PROPGRID_EDITORS_H_
+
+// -----------------------------------------------------------------------
+// wxPGWindowList contains list of editor windows returned by CreateControls.
+
+class wxPGWindowList
+{
+public:
+    wxPGWindowList()
+    {
+        m_primary = m_secondary = NULL;
+    }
+
+    void SetSecondary( wxWindow* secondary ) { m_secondary = secondary; }
+
+    wxWindow*   m_primary;
+    wxWindow*   m_secondary;
+
+#ifndef SWIG
+    wxPGWindowList( wxWindow* a )
+    {
+        m_primary = a;
+        m_secondary = NULL;
+    };
+    wxPGWindowList( wxWindow* a, wxWindow* b )
+    {
+        m_primary = a;
+        m_secondary = b;
+    };
+#endif
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGEditor
+
+    Base class for custom wxPropertyGrid editors.
+
+    @remarks
+    - Names of builtin property editors are: TextCtrl, Choice,
+      ComboBox, CheckBox, TextCtrlAndButton, and ChoiceAndButton. Additional
+      editors include SpinCtrl and DatePickerCtrl, but using them requires
+      calling wxPropertyGrid::RegisterAdditionalEditors() prior use.
+
+    - Pointer to builtin editor is available as wxPGEditor_EditorName
+      (eg. wxPGEditor_TextCtrl).
+
+    - To add new editor you need to register it first using static function
+      wxPropertyGrid::RegisterEditorClass(), with code like this:
+        @code
+            wxPGEditor *editorPointer = wxPropertyGrid::RegisterEditorClass(
+                                            new MyEditorClass(), "MyEditor");
+        @endcode
+      After that, wxPropertyGrid will take ownership of the given object, but
+      you should still store editorPointer somewhere, so you can pass it to
+      wxPGProperty::SetEditor(), or return it from
+      wxPGEditor::DoGetEditorClass().
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPGEditor : public wxObject
+{
+#ifndef SWIG
+    DECLARE_ABSTRACT_CLASS(wxPGEditor)
+#endif
+public:
+
+    /** Constructor. */
+    wxPGEditor()
+        : wxObject()
+    {
+        m_clientData = NULL;
+    }
+
+    /** Destructor. */
+    virtual ~wxPGEditor();
+
+    /**
+        Returns pointer to the name of the editor. For example,
+        wxPG_EDITOR(TextCtrl) has name "TextCtrl". This method is autogenerated
+        for custom editors.
+    */
+    virtual wxString GetName() const = 0;
+
+    /**
+        Instantiates editor controls.
+
+        @param propgrid
+            wxPropertyGrid to which the property belongs (use as parent for
+            control).
+        @param property
+            Property for which this method is called.
+        @param pos
+            Position, inside wxPropertyGrid, to create control(s) to.
+        @param size
+            Initial size for control(s).
+
+        @remarks
+        - Primary control shall use id wxPG_SUBID1, and secondary (button)
+          control shall use wxPG_SUBID2.
+        - Implementation shoud use connect all necessary events to the
+          wxPropertyGrid::OnCustomEditorEvent. For Example:
+            @code
+                // Relays wxEVT_COMMAND_TEXT_UPDATED events of primary editor
+                // control to the OnEvent.
+                // NOTE: This event in particular is actually automatically
+                // conveyed, but it is just used as an example.
+                propgrid->Connect(wxPG_SUBID1, wxEVT_COMMAND_TEXT_UPDATED,
+                                  wxCommandEventHandler(
+                                    wxPropertyGrid::OnCustomEditorEvent));
+            @endcode
+            OnCustomEditorEvent will then forward events, first to
+            wxPGEditor::OnEvent and then to wxPGProperty::OnEvent.
+
+    */
+    virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid,
+                                          wxPGProperty* property,
+                                          const wxPoint& pos,
+                                          const wxSize& size) const = 0;
+    #define wxPG_DECLARE_CREATECONTROLS \
+        virtual wxPGWindowList \
+            CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property, \
+        const wxPoint& pos, const wxSize& sz ) const;
+
+    /** Loads value from property to the control. */
+    virtual void UpdateControl( wxPGProperty* property,
+                                wxWindow* ctrl ) const = 0;
+
+    /**
+        Used to get the renderer to draw the value with when the control is
+        hidden.
+
+        Default implementation returns g_wxPGDefaultRenderer.
+    */
+    //virtual wxPGCellRenderer* GetCellRenderer() const;
+
+    /** Draws value for given property.
+    */
+    virtual void DrawValue( wxDC& dc,
+                            const wxRect& rect,
+                            wxPGProperty* property,
+                            const wxString& text ) const;
+
+    /** Handles events. Returns true if value in control was modified
+        (see wxPGProperty::OnEvent for more information).
+    */
+    virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
+        wxWindow* wnd_primary, wxEvent& event ) const = 0;
+
+#if !defined(SWIG) || defined(CREATE_VCW)
+    /** Returns value from control, via parameter 'variant'.
+        Usually ends up calling property's StringToValue or IntToValue.
+        Returns true if value was different.
+    */
+    virtual bool GetValueFromControl( wxVariant& variant,
+                                      wxPGProperty* property,
+                                      wxWindow* ctrl ) const;
+#endif
+
+    /** Sets value in control to unspecified. */
+    virtual void SetValueToUnspecified( wxPGProperty* property,
+                                        wxWindow* ctrl ) const = 0;
+
+    /** Sets control's value specifically from string. */
+    virtual void SetControlStringValue( wxPGProperty* property,
+                                        wxWindow* ctrl,
+                                        const wxString& txt ) const;
+
+    /** Sets control's value specifically from int (applies to choice etc.). */
+    virtual void SetControlIntValue( wxPGProperty* property,
+                                     wxWindow* ctrl,
+                                     int value ) const;
+
+    /** Inserts item to existing control. Index -1 means appending.
+        Default implementation does nothing. Returns index of item added.
+    */
+    virtual int InsertItem( wxWindow* ctrl,
+                            const wxString& label,
+                            int index ) const;
+
+    /** Deletes item from existing control.
+        Default implementation does nothing.
+    */
+    virtual void DeleteItem( wxWindow* ctrl, int index ) const;
+
+    /** Extra processing when control gains focus. For example, wxTextCtrl
+        based controls should select all text.
+    */
+    virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
+
+    /** Returns true if control itself can contain the custom image. Default is
+        to return false.
+    */
+    virtual bool CanContainCustomImage() const;
+
+    //
+    // This member is public so scripting language bindings
+    // wrapper code can access it freely.
+    void*       m_clientData;
+};
+
+
+//
+// Note that we don't use this macro in this file because
+// otherwise doxygen gets confused.
+//
+#define WX_PG_DECLARE_EDITOR_CLASS(CLASSNAME) \
+    DECLARE_DYNAMIC_CLASS(CLASSNAME) \
+public: \
+    virtual wxString GetName() const; \
+private:
+
+
+#define WX_PG_IMPLEMENT_EDITOR_CLASS(EDITOR,CLASSNAME,BASECLASS) \
+IMPLEMENT_DYNAMIC_CLASS(CLASSNAME, BASECLASS) \
+wxString CLASSNAME::GetName() const \
+{ \
+    return wxS(#EDITOR); \
+} \
+wxPGEditor* wxPGEditor_##EDITOR = (wxPGEditor*) NULL; \
+wxPGEditor* wxPGConstruct##EDITOR##EditorClass() \
+{ \
+    wxASSERT( !wxPGEditor_##EDITOR ); \
+    return new CLASSNAME(); \
+}
+
+
+#define WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS() \
+wxPG_DECLARE_CREATECONTROLS \
+virtual void UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const; \
+virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property, \
+    wxWindow* primary, wxEvent& event ) const; \
+virtual bool GetValueFromControl( wxVariant& variant, \
+                                  wxPGProperty* property, \
+                                  wxWindow* ctrl ) const; \
+virtual void SetValueToUnspecified( wxPGProperty* property, \
+                                    wxWindow* ctrl ) const;
+
+
+//
+// Following are the built-in editor classes.
+//
+
+class WXDLLIMPEXP_PROPGRID wxPGTextCtrlEditor : public wxPGEditor
+{
+#ifndef SWIG
+    DECLARE_DYNAMIC_CLASS(wxPGTextCtrlEditor)
+#endif
+public:
+    wxPGTextCtrlEditor() {}
+    virtual ~wxPGTextCtrlEditor();
+
+    WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS()
+    virtual wxString GetName() const;
+
+    //virtual wxPGCellRenderer* GetCellRenderer() const;
+    virtual void SetControlStringValue( wxPGProperty* property,
+                                        wxWindow* ctrl,
+                                        const wxString& txt ) const;
+    virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
+
+    // Provided so that, for example, ComboBox editor can use the same code
+    // (multiple inheritance would get way too messy).
+    static bool OnTextCtrlEvent( wxPropertyGrid* propgrid,
+                                 wxPGProperty* property,
+                                 wxWindow* ctrl,
+                                 wxEvent& event );
+
+    static bool GetTextCtrlValueFromControl( wxVariant& variant,
+                                             wxPGProperty* property,
+                                             wxWindow* ctrl );
+
+};
+
+
+class WXDLLIMPEXP_PROPGRID wxPGChoiceEditor : public wxPGEditor
+{
+#ifndef SWIG
+    DECLARE_DYNAMIC_CLASS(wxPGChoiceEditor)
+#endif
+public:
+    wxPGChoiceEditor() {}
+    virtual ~wxPGChoiceEditor();
+
+    WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS()
+    virtual wxString GetName() const;
+
+    virtual void SetControlIntValue( wxPGProperty* property,
+                                     wxWindow* ctrl,
+                                     int value ) const;
+    virtual void SetControlStringValue( wxPGProperty* property,
+                                        wxWindow* ctrl,
+                                        const wxString& txt ) const;
+
+    virtual int InsertItem( wxWindow* ctrl,
+                            const wxString& label,
+                            int index ) const;
+    virtual void DeleteItem( wxWindow* ctrl, int index ) const;
+    virtual bool CanContainCustomImage() const;
+
+    // CreateControls calls this with CB_READONLY in extraStyle
+    wxWindow* CreateControlsBase( wxPropertyGrid* propgrid,
+                                  wxPGProperty* property,
+                                  const wxPoint& pos,
+                                  const wxSize& sz,
+                                  long extraStyle ) const;
+
+};
+
+
+class WXDLLIMPEXP_PROPGRID wxPGComboBoxEditor : public wxPGChoiceEditor
+{
+#ifndef SWIG
+    DECLARE_DYNAMIC_CLASS(wxPGComboBoxEditor)
+#endif
+public:
+    wxPGComboBoxEditor() {}
+    virtual ~wxPGComboBoxEditor();
+
+    // Macro is used for convenience due to different signature with wxPython
+    wxPG_DECLARE_CREATECONTROLS
+
+    virtual wxString GetName() const;
+
+    virtual void UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const;
+
+    virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
+        wxWindow* ctrl, wxEvent& event ) const;
+
+    virtual bool GetValueFromControl( wxVariant& variant,
+                                      wxPGProperty* property,
+                                      wxWindow* ctrl ) const;
+
+    virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
+
+};
+
+
+// Exclude classes from being able to be derived from in wxPython bindings
+#ifndef SWIG
+
+class WXDLLIMPEXP_PROPGRID wxPGChoiceAndButtonEditor : public wxPGChoiceEditor
+{
+public:
+    wxPGChoiceAndButtonEditor() {}
+    virtual ~wxPGChoiceAndButtonEditor();
+    virtual wxString GetName() const;
+
+    // Macro is used for convenience due to different signature with wxPython
+    wxPG_DECLARE_CREATECONTROLS
+
+    DECLARE_DYNAMIC_CLASS(wxPGChoiceAndButtonEditor)
+};
+
+class WXDLLIMPEXP_PROPGRID
+wxPGTextCtrlAndButtonEditor : public wxPGTextCtrlEditor
+{
+public:
+    wxPGTextCtrlAndButtonEditor() {}
+    virtual ~wxPGTextCtrlAndButtonEditor();
+    virtual wxString GetName() const;
+    wxPG_DECLARE_CREATECONTROLS
+
+    DECLARE_DYNAMIC_CLASS(wxPGTextCtrlAndButtonEditor)
+};
+
+#endif  // !SWIG
+
+
+#if wxPG_INCLUDE_CHECKBOX || defined(DOXYGEN)
+
+//
+// Use custom check box code instead of native control
+// for cleaner (ie. more integrated) look.
+//
+class WXDLLIMPEXP_PROPGRID wxPGCheckBoxEditor : public wxPGEditor
+{
+#ifndef SWIG
+    DECLARE_DYNAMIC_CLASS(wxPGCheckBoxEditor)
+#endif
+public:
+    wxPGCheckBoxEditor() {}
+    virtual ~wxPGCheckBoxEditor();
+
+    virtual wxString GetName() const;
+    WX_PG_IMPLEMENT_EDITOR_CLASS_STD_METHODS()
+
+    virtual void DrawValue( wxDC& dc,
+                            const wxRect& rect,
+                            wxPGProperty* property,
+                            const wxString& text ) const;
+    //virtual wxPGCellRenderer* GetCellRenderer() const;
+
+    virtual void SetControlIntValue( wxPGProperty* property,
+                                     wxWindow* ctrl,
+                                     int value ) const;
+};
+
+#endif
+
+
+// -----------------------------------------------------------------------
+// Editor class registeration macros
+
+#define wxPGRegisterEditorClass(EDITOR) \
+    if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \
+    { \
+        wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \
+                wxPGConstruct##EDITOR##EditorClass(), wxS(#EDITOR) ); \
+    }
+
+// Use this in RegisterDefaultEditors.
+#define wxPGRegisterDefaultEditorClass(EDITOR) \
+if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \
+    { \
+        wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \
+                wxPGConstruct##EDITOR##EditorClass(), wxS(#EDITOR), true ); \
+    }
+
+#define wxPG_INIT_REQUIRED_EDITOR(T) \
+    wxPGRegisterEditorClass(T)
+
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGEditorDialogAdapter
+
+    Derive a class from this to adapt an existing editor dialog or function to
+    be used when editor button of a property is pushed.
+
+    You only need to derive class and implement DoShowDialog() to create and
+    show the dialog, and finally submit the value returned by the dialog
+    via SetValue().
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPGEditorDialogAdapter : public wxObject
+{
+#ifndef SWIG
+    DECLARE_ABSTRACT_CLASS(wxPGEditorDialogAdapter)
+#endif
+public:
+    wxPGEditorDialogAdapter()
+        : wxObject()
+    {
+        m_clientData = NULL;
+    }
+
+    virtual ~wxPGEditorDialogAdapter() { }
+
+    bool ShowDialog( wxPropertyGrid* propGrid, wxPGProperty* property );
+
+    virtual bool DoShowDialog( wxPropertyGrid* propGrid,
+                               wxPGProperty* property ) = 0;
+
+    void SetValue( wxVariant value )
+    {
+        m_value = value;
+    }
+
+    /**
+        This method is typically only used if deriving class from existing
+        adapter with value conversion purposes.
+    */
+    wxVariant& GetValue() { return m_value; }
+
+    //
+    // This member is public so scripting language bindings
+    // wrapper code can access it freely.
+    void*               m_clientData;
+
+private:
+    wxVariant           m_value;
+};
+
+// -----------------------------------------------------------------------
+
+
+/** @class wxPGMultiButton
+
+    This class can be used to have multiple buttons in a property editor.
+    You will need to create a new property editor class, override
+    CreateControls, and have it return wxPGMultiButton instance in
+    wxPGWindowList::SetSecondary(). For instance, here we add three buttons to
+    a textctrl editor:
+
+    @code
+
+    #include <wx/propgrid/editors.h>
+
+    class wxMultiButtonTextCtrlEditor : public wxPGTextCtrlEditor
+    {
+        WX_PG_DECLARE_EDITOR_CLASS(wxMultiButtonTextCtrlEditor)
+    public:
+        wxMultiButtonTextCtrlEditor() {}
+        virtual ~wxMultiButtonTextCtrlEditor() {}
+
+        wxPG_DECLARE_CREATECONTROLS
+        virtual bool OnEvent( wxPropertyGrid* propGrid,
+                              wxPGProperty* property,
+                              wxWindow* ctrl,
+                              wxEvent& event ) const;
+
+    };
+
+    WX_PG_IMPLEMENT_EDITOR_CLASS(MultiButtonTextCtrlEditor,
+                                 wxMultiButtonTextCtrlEditor,
+                                 wxPGTextCtrlEditor)
+
+    wxPGWindowList
+    wxMultiButtonTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid,
+                                                 wxPGProperty* property,
+                                                 const wxPoint& pos,
+                                                 const wxSize& sz ) const
+    {
+        // Create and populate buttons-subwindow
+        wxPGMultiButton* buttons = new wxPGMultiButton( propGrid, sz );
+
+        // Add two regular buttons
+        buttons->Add( "..." );
+        buttons->Add( "A" );
+        // Add a bitmap button
+        buttons->Add( wxArtProvider::GetBitmap(wxART_FOLDER) );
+
+        // Create the 'primary' editor control (textctrl in this case)
+        wxPGWindowList wndList = wxPGTextCtrlEditor::CreateControls(
+                                    propGrid,
+                                    property,
+                                    pos,
+                                    buttons->GetPrimarySize()
+                                 );
+
+        // Finally, move buttons-subwindow to correct position and make sure
+        // returned wxPGWindowList contains our custom button list.
+        buttons->FinalizePosition(pos);
+
+        wndList.SetSecondary( buttons );
+        return wndList;
+    }
+
+    bool wxMultiButtonTextCtrlEditor::OnEvent( wxPropertyGrid* propGrid,
+                                               wxPGProperty* property,
+                                               wxWindow* ctrl,
+                                               wxEvent& event ) const
+    {
+        if ( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED )
+        {
+            wxPGMultiButton* buttons = (wxPGMultiButton*)
+                propGrid->GetEditorControlSecondary();
+
+            if ( event.GetId() == buttons->GetButtonId(0) )
+            {
+                // Do something when first button is pressed
+                return true;
+            }
+            if ( event.GetId() == buttons->GetButtonId(1) )
+            {
+                // Do something when first button is pressed
+                return true;
+            }
+            if ( event.GetId() == buttons->GetButtonId(2) )
+            {
+                // Do something when second button is pressed
+                return true;
+            }
+        }
+        return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event);
+    }
+
+    @endcode
+
+    Further to use this editor, code like this can be used:
+
+    @code
+
+        // Register editor class - needs only to be called once
+        wxPGRegisterEditorClass( MultiButtonTextCtrlEditor );
+
+        // Insert the property that will have multiple buttons
+        propGrid->Append( new wxLongStringProperty("MultipleButtons",
+                                                    wxPG_LABEL) );
+
+        // Change property to use editor created in the previous code segment
+        propGrid->SetPropertyEditor( "MultipleButtons",
+                                     wxPG_EDITOR(MultiButtonTextCtrlEditor) );
+
+    @endcode
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPGMultiButton : public wxWindow
+{
+public:
+    wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz );
+
+    wxWindow* GetButton( unsigned int i ) { return (wxWindow*) m_buttons[i]; }
+    const wxWindow* GetButton( unsigned int i ) const
+        { return (const wxWindow*) m_buttons[i]; }
+
+    /** Utility function to be used in event handlers.
+    */
+    int GetButtonId( unsigned int i ) const { return GetButton(i)->GetId(); }
+
+    /** Returns number of buttons.
+    */
+    int GetCount() const { return m_buttons.Count(); }
+
+    void Add( const wxString& label, int id = -2 );
+#if wxUSE_BMPBUTTON
+    void Add( const wxBitmap& bitmap, int id = -2 );
+#endif
+
+    wxSize GetPrimarySize() const
+    {
+        return wxSize(m_fullEditorSize.x - m_buttonsWidth, m_fullEditorSize.y);
+    }
+
+    void FinalizePosition( const wxPoint& pos )
+    {
+        Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y );
+    }
+
+#ifndef DOXYGEN
+protected:
+
+    int GenId( int id ) const;
+
+    wxArrayPtrVoid  m_buttons;
+    wxSize          m_fullEditorSize;
+    int             m_buttonsWidth;
+#endif // !DOXYGEN
+};
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_EDITORS_H_
diff --git a/include/wx/propgrid/manager.h b/include/wx/propgrid/manager.h
new file mode 100644 (file)
index 0000000..42c44b8
--- /dev/null
@@ -0,0 +1,792 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgrid/manager.h
+// Purpose:     wxPropertyGridManager
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2005-01-14
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PROPGRID_MANAGER_H_
+#define _WX_PROPGRID_MANAGER_H_
+
+#include "wx/propgrid/propgrid.h"
+
+#include "wx/dcclient.h"
+#include "wx/scrolwin.h"
+#include "wx/toolbar.h"
+#include "wx/stattext.h"
+#include "wx/button.h"
+#include "wx/textctrl.h"
+#include "wx/dialog.h"
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+extern WXDLLIMPEXP_PROPGRID const wxChar *wxPropertyGridManagerNameStr;
+#endif
+
+/** @class wxPropertyGridPage
+
+    Holder of property grid page information. You can subclass this and
+    give instance in wxPropertyGridManager::AddPage. It inherits from
+    wxEvtHandler and can be used to process events specific to this
+    page (id of events will still be same as manager's). If you don't
+    want to use it to process all events of the page, you need to
+    return false in the derived wxPropertyGridPage::IsHandlingAllEvents.
+
+    Please note that wxPropertyGridPage lacks many non-const property
+    manipulation functions found in wxPropertyGridManager. Please use
+    parent manager (m_manager member variable) when needed.
+
+    Please note that most member functions are inherited and as such not
+    documented on this page. This means you will probably also want to read
+    wxPropertyGridInterface class reference.
+
+    @section propgridpage_event_handling Event Handling
+
+    wxPropertyGridPage receives events emitted by its wxPropertyGridManager, but
+    only those events that are specific to that page. If
+    wxPropertyGridPage::IsHandlingAllEvents returns false, then unhandled
+    events are sent to the manager's parent, as usual.
+
+    See @ref propgrid_event_handling "wxPropertyGrid Event Handling"
+    for more information.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPropertyGridPage : public wxEvtHandler,
+                                                public wxPropertyGridInterface,
+                                                public wxPropertyGridPageState
+{
+    friend class wxPropertyGridManager;
+#ifndef SWIG
+    DECLARE_CLASS(wxPropertyGridPage)
+#endif
+public:
+
+    wxPropertyGridPage();
+    virtual ~wxPropertyGridPage();
+
+    /** Deletes all properties on page.
+    */
+    virtual void Clear();
+
+    /**
+        Reduces column sizes to minimum possible that contents are still
+        visibly (naturally some margin space will be applied as well).
+
+        @return
+        Minimum size for the page to still display everything.
+
+        @remarks
+        This function only works properly if size of containing grid was
+        already fairly large.
+
+        Note that you can also get calculated column widths by calling
+        GetColumnWidth() immediately after this function returns.
+    */
+    wxSize FitColumns();
+
+    /** Returns page index in manager;
+    */
+    inline int GetIndex() const;
+
+    /** Returns x-coordinate position of splitter on a page.
+    */
+    int GetSplitterPosition( int col = 0 ) const
+        { return GetStatePtr()->DoGetSplitterPosition(col); }
+
+    /** Returns "root property". It does not have name, etc. and it is not
+        visible. It is only useful for accessing its children.
+    */
+    wxPGProperty* GetRoot() const { return GetStatePtr()->DoGetRoot(); }
+
+    /** Return pointer to contained property grid state.
+    */
+    wxPropertyGridPageState* GetStatePtr()
+    {
+        return this;
+    }
+
+    /** Return pointer to contained property grid state.
+    */
+    const wxPropertyGridPageState* GetStatePtr() const
+    {
+        return this;
+    }
+
+    /**
+        Returns id of the tool bar item that represents this page on
+        wxPropertyGridManager's wxToolBar.
+    */
+    int GetToolId() const
+    {
+        return m_id;
+    }
+
+    /** Do any member initialization in this method.
+        @remarks
+        - Called every time the page is added into a manager.
+        - You can add properties to the page here.
+    */
+    virtual void Init() {}
+
+    /** Return false here to indicate unhandled events should be
+        propagated to manager's parent, as normal.
+    */
+    virtual bool IsHandlingAllEvents() const { return true; }
+
+    /** Called every time page is about to be shown.
+        Useful, for instance, creating properties just-in-time.
+    */
+    virtual void OnShow();
+
+    virtual void RefreshProperty( wxPGProperty* p );
+
+    /** Sets splitter position on page.
+        @remarks
+        Splitter position cannot exceed grid size, and therefore setting it
+        during form creation may fail as initial grid size is often smaller
+        than desired splitter position, especially when sizers are being used.
+    */
+    void SetSplitterPosition( int splitterPos, int col = 0 );
+
+protected:
+
+    /** Propagate to other pages.
+    */
+    virtual void DoSetSplitterPosition( int pos,
+                                        int splitterColumn = 0,
+                                        bool allPages = false );
+
+    /** Propagate to other pages.
+    */
+    void DoSetSplitterPositionThisPage( int pos, int splitterColumn = 0 )
+    {
+        wxPropertyGridPageState::DoSetSplitterPosition( pos, splitterColumn );
+    }
+
+    /** Page label (may be referred as name in some parts of documentation).
+        Can be set in constructor, or passed in
+        wxPropertyGridManager::AddPage(), but *not* in both.
+    */
+    wxString                m_label;
+
+#ifndef SWIG
+
+    //virtual bool ProcessEvent( wxEvent& event );
+
+    wxPropertyGridManager*  m_manager;
+
+    int                     m_id;  // toolbar index
+
+private:
+    bool                    m_isDefault; // is this base page object?
+
+private:
+    DECLARE_EVENT_TABLE()
+#endif
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxPropertyGridManager
+
+    wxPropertyGridManager is an efficient multi-page version of wxPropertyGrid,
+    which can optionally have toolbar for mode and page selection, and help
+    text box.
+    Use window flags to select components to include.
+
+    @section propgridmanager_window_styles_ Window Styles
+
+    See @ref propgrid_window_styles.
+
+    @section propgridmanager_event_handling Event Handling
+
+    See @ref propgrid_event_handling "wxPropertyGrid Event Handling"
+    for more information.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID
+    wxPropertyGridManager : public wxPanel, public wxPropertyGridInterface
+{
+#ifndef SWIG
+    DECLARE_CLASS(wxPropertyGridManager)
+#endif
+    friend class wxPropertyGridPage;
+public:
+
+#ifdef SWIG
+    %pythonAppend wxPropertyGridManager {
+        self._setOORInfo(self)
+        self.DoDefaultTypeMappings()
+        self.edited_objects = {}
+        self.DoDefaultValueTypeMappings()
+        if not hasattr(self.__class__,'_vt2setter'):
+            self.__class__._vt2setter = {}
+    }
+    %pythonAppend wxPropertyGridManager() ""
+
+    wxPropertyGridManager( wxWindow *parent, wxWindowID id = wxID_ANY,
+                           const wxPoint& pos = wxDefaultPosition,
+                           const wxSize& size = wxDefaultSize,
+                           long style = wxPGMAN_DEFAULT_STYLE,
+                           const wxChar* name =
+                                wxPyPropertyGridManagerNameStr );
+    %RenameCtor(PrePropertyGridManager,  wxPropertyGridManager());
+
+#else
+
+    /**
+        Two step constructor.
+        Call Create when this constructor is called to build up the
+        wxPropertyGridManager.
+      */
+    wxPropertyGridManager();
+
+    /** The default constructor. The styles to be used are styles valid for
+        the wxWindow.
+        @see @link wndflags Additional Window Styles@endlink
+    */
+    wxPropertyGridManager( wxWindow *parent, wxWindowID id = wxID_ANY,
+                           const wxPoint& pos = wxDefaultPosition,
+                           const wxSize& size = wxDefaultSize,
+                           long style = wxPGMAN_DEFAULT_STYLE,
+                           const wxChar* name = wxPropertyGridManagerNameStr );
+
+    /** Destructor */
+    virtual ~wxPropertyGridManager();
+
+#endif
+
+    /** Creates new property page. Note that the first page is not created
+        automatically.
+        @param label
+        A label for the page. This may be shown as a toolbar tooltip etc.
+        @param bmp
+        Bitmap image for toolbar. If wxNullBitmap is used, then a built-in
+        default image is used.
+        @param pageObj
+        wxPropertyGridPage instance. Manager will take ownership of this object.
+        NULL indicates that a default page instance should be created.
+        @return
+        Returns index to the page created.
+        @remarks
+        If toolbar is used, it is highly recommended that the pages are
+        added when the toolbar is not turned off using window style flag
+        switching.
+    */
+    int AddPage( const wxString& label = wxEmptyString,
+                 const wxBitmap& bmp = wxPG_NULL_BITMAP,
+                 wxPropertyGridPage* pageObj = (wxPropertyGridPage*) NULL )
+    {
+        return InsertPage(-1,label,bmp,pageObj);
+    }
+
+    void ClearModifiedStatus ( wxPGPropArg id );
+
+    void ClearModifiedStatus ()
+    {
+        m_pPropGrid->ClearModifiedStatus();
+    }
+
+    /** Deletes all all properties and all pages.
+    */
+    virtual void Clear();
+
+    /** Deletes all properties on given page.
+    */
+    void ClearPage( int page );
+
+    /** Forces updating the value of property from the editor control.
+        Returns true if DoPropertyChanged was actually called.
+    */
+    bool CommitChangesFromEditor( wxUint32 flags = 0 )
+    {
+        return m_pPropGrid->CommitChangesFromEditor(flags);
+    }
+
+    /**
+        Two step creation.
+        Whenever the control is created without any parameters, use Create to
+        actually create it. Don't access the control's public methods before
+        this is called.
+        @see @link wndflags Additional Window Styles@endlink
+    */
+    bool Create( wxWindow *parent, wxWindowID id = wxID_ANY,
+                 const wxPoint& pos = wxDefaultPosition,
+                 const wxSize& size = wxDefaultSize,
+                 long style = wxPGMAN_DEFAULT_STYLE,
+                 const wxChar* name = wxPropertyGridManagerNameStr );
+
+    /**
+        Enables or disables (shows/hides) categories according to parameter
+        enable.
+
+        WARNING: Not tested properly, use at your own risk.
+    */
+    bool EnableCategories( bool enable )
+    {
+        long fl = m_windowStyle | wxPG_HIDE_CATEGORIES;
+        if ( enable ) fl = m_windowStyle & ~(wxPG_HIDE_CATEGORIES);
+        SetWindowStyleFlag(fl);
+        return true;
+    }
+
+    /** Selects page, scrolls and/or expands items to ensure that the
+        given item is visible. Returns true if something was actually done.
+    */
+    bool EnsureVisible( wxPGPropArg id );
+
+    /** Returns number of children of the root property of the selected page. */
+    size_t GetChildrenCount()
+    {
+        return GetChildrenCount( m_pPropGrid->m_pState->m_properties );
+    }
+
+    /** Returns number of children of the root property of given page. */
+    size_t GetChildrenCount( int pageIndex );
+
+    /** Returns number of children for the property.
+
+        NB: Cannot be in container methods class due to name hiding.
+    */
+    size_t GetChildrenCount( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(0)
+        return p->GetChildCount();
+    }
+
+    /** Returns number of columns on given page. By the default,
+        returns number of columns on current page. */
+    int GetColumnCount( int page = -1 ) const;
+
+    /** Returns height of the description text box. */
+    int GetDescBoxHeight() const;
+
+    /** Returns pointer to the contained wxPropertyGrid. This does not change
+        after wxPropertyGridManager has been created, so you can safely obtain
+        pointer once and use it for the entire lifetime of the instance.
+    */
+    wxPropertyGrid* GetGrid()
+    {
+        wxASSERT(m_pPropGrid);
+        return m_pPropGrid;
+    };
+
+    const wxPropertyGrid* GetGrid() const
+    {
+        wxASSERT(m_pPropGrid);
+        return (const wxPropertyGrid*)m_pPropGrid;
+    };
+
+    /** Returns iterator class instance.
+        @remarks
+        Calling this method in wxPropertyGridManager causes run-time assertion
+        failure. Please only iterate through individual pages or use
+        CreateVIterator().
+    */
+    wxPropertyGridIterator GetIterator( int flags = wxPG_ITERATE_DEFAULT,
+                                        wxPGProperty* firstProp = NULL )
+    {
+        wxFAIL_MSG( "Please only iterate through individual pages "
+                    "or use CreateVIterator()" );
+        return wxPropertyGridInterface::GetIterator( flags, firstProp );
+    }
+
+    wxPropertyGridConstIterator
+    GetIterator(int flags = wxPG_ITERATE_DEFAULT,
+                wxPGProperty* firstProp = NULL) const
+    {
+        wxFAIL_MSG( "Please only iterate through individual pages "
+                    " or use CreateVIterator()" );
+        return wxPropertyGridInterface::GetIterator( flags, firstProp );
+    }
+
+    /** Returns iterator class instance.
+        @remarks
+        Calling this method in wxPropertyGridManager causes run-time assertion
+        failure. Please only iterate through individual pages or use
+        CreateVIterator().
+    */
+    wxPropertyGridIterator GetIterator( int flags, int startPos )
+    {
+        wxFAIL_MSG( "Please only iterate through individual pages "
+                    "or use CreateVIterator()" );
+
+        return wxPropertyGridInterface::GetIterator( flags, startPos );
+    }
+
+    wxPropertyGridConstIterator GetIterator( int flags, int startPos ) const
+    {
+        wxFAIL_MSG( "Please only iterate through individual pages "
+                    "or use CreateVIterator()" );
+        return wxPropertyGridInterface::GetIterator( flags, startPos );
+    }
+
+    /** Similar to GetIterator, but instead returns wxPGVIterator instance,
+        which can be useful for forward-iterating through arbitrary property
+        containers.
+    */
+    virtual wxPGVIterator GetVIterator( int flags ) const;
+
+    /** Returns currently selected page.
+    */
+    wxPropertyGridPage* GetCurrentPage() const
+    {
+        return GetPage(m_selPage);
+    }
+
+    /** Returns last page.
+    */
+    wxPropertyGridPage* GetLastPage() const
+    {
+        return GetPage(m_arrPages.size()-1);
+    }
+
+    /** Returns page object for given page index.
+    */
+    wxPropertyGridPage* GetPage( unsigned int ind ) const
+    {
+        return (wxPropertyGridPage*)m_arrPages.Item(ind);
+    }
+
+    /** Returns page object for given page name.
+    */
+    wxPropertyGridPage* GetPage( const wxString& name ) const
+    {
+        return GetPage(GetPageByName(name));
+    }
+
+    /**
+        Returns index for a page name.
+
+        If no match is found, wxNOT_FOUND is returned.
+     */
+    int GetPageByName( const wxString& name ) const;
+
+    /** Returns index for a relevant propertygrid state.
+
+        If no match is found, wxNOT_FOUND is returned.
+    */
+    int GetPageByState( const wxPropertyGridPageState* pstate ) const;
+
+    /** Returns wxPropertyGridPageState of given page, current page's for -1.
+    */
+    virtual wxPropertyGridPageState* GetPageState( int page ) const;
+
+    /** Returns number of managed pages. */
+    size_t GetPageCount() const;
+
+    /** Returns name of given page. */
+    const wxString& GetPageName( int index ) const;
+
+    /** Returns "root property" of the given page. It does not have name, etc.
+        and it is not visible. It is only useful for accessing its children.
+    */
+    wxPGProperty* GetPageRoot( int index ) const;
+
+    /** Returns index to currently selected page. */
+    int GetSelectedPage() const { return m_selPage; }
+
+    /** Shortcut for GetGrid()->GetSelection(). */
+    wxPGProperty* GetSelectedProperty() const
+    {
+        return m_pPropGrid->GetSelection();
+    }
+
+    /** Synonyme for GetSelectedPage. */
+    int GetSelection() const { return m_selPage; }
+
+    /** Returns a pointer to the toolbar currently associated with the
+        wxPropertyGridManager (if any). */
+    wxToolBar* GetToolBar() const { return m_pToolbar; }
+
+    /** Creates new property page. Note that the first page is not created
+        automatically.
+        @param index
+        Add to this position. -1 will add as the last item.
+        @param label
+        A label for the page. This may be shown as a toolbar tooltip etc.
+        @param bmp
+        Bitmap image for toolbar. If wxNullBitmap is used, then a built-in
+        default image is used.
+        @param pageObj
+        wxPropertyGridPage instance. Manager will take ownership of this object.
+        If NULL, default page object is constructed.
+        @return
+        Returns index to the page created.
+    */
+    virtual int InsertPage( int index,
+                            const wxString& label,
+                            const wxBitmap& bmp = wxNullBitmap,
+                            wxPropertyGridPage* pageObj = NULL );
+
+    /**
+        Returns true if any property on any page has been modified by the user.
+    */
+    bool IsAnyModified() const;
+
+    /**
+        Returns true if updating is frozen (ie Freeze() called but not yet
+        Thaw() ).
+     */
+    bool IsFrozen() const { return m_pPropGrid->m_frozen > 0; }
+
+    /**
+        Returns true if any property on given page has been modified by the
+        user.
+     */
+    bool IsPageModified( size_t index ) const;
+
+    virtual void Refresh( bool eraseBackground = true,
+                          const wxRect* rect = (const wxRect*) NULL );
+
+    /** Removes a page.
+        @return
+        Returns false if it was not possible to remove page in question.
+    */
+    virtual bool RemovePage( int page );
+
+    /** Select and displays a given page. Also makes it target page for
+        insert operations etc.
+        @param index
+        Index of page being seleced. Can be -1 to select nothing.
+    */
+    void SelectPage( int index );
+
+    /** Select and displays a given page (by label). */
+    void SelectPage( const wxString& label )
+    {
+        int index = GetPageByName(label);
+        wxCHECK_RET( index >= 0, wxT("No page with such name") );
+        SelectPage( index );
+    }
+
+    /** Select and displays a given page. */
+    void SelectPage( wxPropertyGridPage* ptr )
+    {
+        SelectPage( GetPageByState(ptr) );
+    }
+
+    /** Select a property. */
+    bool SelectProperty( wxPGPropArg id, bool focus = false )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return p->GetParentState()->DoSelectProperty(p, focus);
+    }
+
+    /** Sets number of columns on given page (default is current page).
+    */
+    void SetColumnCount( int colCount, int page = -1 );
+
+    /** Sets label and text in description box.
+    */
+    void SetDescription( const wxString& label, const wxString& content );
+
+    /** Sets y coordinate of the description box splitter. */
+    void SetDescBoxHeight( int ht, bool refresh = true );
+
+    /** Sets property attribute for all applicapple properties.
+        Be sure to use this method after all properties have been
+        added to the grid.
+    */
+    void SetPropertyAttributeAll( const wxString& name, wxVariant value );
+
+    /** Moves splitter as left as possible, while still allowing all
+        labels to be shown in full.
+        @param subProps
+        If false, will still allow sub-properties (ie. properties which
+        parent is not root or category) to be cropped.
+        @param allPages
+        If true, takes labels on all pages into account.
+    */
+    void SetSplitterLeft( bool subProps = false, bool allPages = true );
+
+    /** Sets splitter position on individual page. */
+    void SetPageSplitterPosition( int page, int pos, int column = 0 )
+    {
+        GetPage(page)->DoSetSplitterPosition( pos, column );
+    }
+
+    /** Sets splitter position for all pages.
+        @remarks
+        Splitter position cannot exceed grid size, and therefore setting it
+        during form creation may fail as initial grid size is often smaller
+        than desired splitter position, especially when sizers are being used.
+    */
+    void SetSplitterPosition( int pos, int column = 0 );
+
+    /** Synonyme for SelectPage(name). */
+    void SetStringSelection( const wxChar* name )
+    {
+        SelectPage( GetPageByName(name) );
+    }
+
+#ifdef SWIG
+    %pythoncode {
+        def GetValuesFromPage(self,
+                              page,
+                              dict_=None,
+                              as_strings=False,
+                              inc_attributes=False):
+            """
+            Same as GetValues, but returns values from specific page only.
+            For argument descriptions, see GetValues.
+            """
+            return page.GetPropertyValues(dict_, as_strings, inc_attributes)
+    }
+#endif
+
+protected:
+
+    //
+    // Subclassing helpers
+    //
+
+    /** Creates property grid for the manager. Override to use subclassed
+        wxPropertyGrid.
+    */
+    virtual wxPropertyGrid* CreatePropertyGrid() const;
+
+    virtual void RefreshProperty( wxPGProperty* p );
+
+public:
+
+#ifndef DOXYGEN
+
+    //
+    // Overridden functions - no documentation required.
+    //
+
+    virtual wxSize DoGetBestSize() const;
+    void SetId( wxWindowID winid );
+
+    virtual void Freeze();
+    virtual void Thaw();
+    virtual void SetExtraStyle ( long exStyle );
+    virtual bool SetFont ( const wxFont& font );
+    virtual void SetWindowStyleFlag ( long style );
+
+protected:
+
+public:
+
+#ifndef SWIG
+
+    //
+    // Event handlers
+    //
+    void OnMouseMove( wxMouseEvent &event );
+    void OnMouseClick( wxMouseEvent &event );
+    void OnMouseUp( wxMouseEvent &event );
+    void OnMouseEntry( wxMouseEvent &event );
+
+    void OnPaint( wxPaintEvent &event );
+
+    void OnToolbarClick( wxCommandEvent &event );
+    void OnResize( wxSizeEvent& event );
+    void OnPropertyGridSelect( wxPropertyGridEvent& event );
+
+protected:
+
+    wxPropertyGrid* m_pPropGrid;
+
+    wxArrayPtrVoid  m_arrPages;
+
+#if wxUSE_TOOLBAR
+    wxToolBar*      m_pToolbar;
+#endif
+    wxStaticText*   m_pTxtHelpCaption;
+    wxStaticText*   m_pTxtHelpContent;
+
+    wxPropertyGridPage*     m_emptyPage;
+
+    long            m_iFlags;
+
+    // Selected page index.
+    int             m_selPage;
+
+    int             m_width;
+
+    int             m_height;
+
+    int             m_extraHeight;
+
+    int             m_splitterY;
+
+    int             m_splitterHeight;
+
+    int             m_nextTbInd;
+
+    int             m_dragOffset;
+
+    wxCursor        m_cursorSizeNS;
+
+    int             m_nextDescBoxSize;
+
+    wxWindowID      m_baseId;
+
+    unsigned char   m_dragStatus;
+
+    unsigned char   m_onSplitter;
+
+    virtual wxPGProperty* DoGetPropertyByName( const wxString& name ) const;
+
+    /** Select and displays a given page. */
+    virtual bool DoSelectPage( int index );
+
+    // Sets some members to defaults.
+    void Init1();
+
+    // Initializes some members.
+    void Init2( int style );
+
+/*#ifdef __WXMSW__
+    virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle) const;
+#endif*/
+
+    /** Recalculates new positions for components, according to the
+        given size.
+    */
+    void RecalculatePositions( int width, int height );
+
+    /** (Re)creates/destroys controls, according to the window style bits. */
+    void RecreateControls();
+
+    void RefreshHelpBox( int new_splittery, int new_width, int new_height );
+
+    void RepaintSplitter( wxDC& dc,
+                          int new_splittery,
+                          int new_width,
+                          int new_height,
+                          bool desc_too );
+
+    void SetDescribedProperty( wxPGProperty* p );
+
+    virtual bool ProcessEvent( wxEvent& event );
+
+private:
+    DECLARE_EVENT_TABLE()
+#endif // #ifndef SWIG
+#endif // #ifndef DOXYGEN
+};
+
+// -----------------------------------------------------------------------
+
+inline int wxPropertyGridPage::GetIndex() const
+{
+    if ( !m_manager )
+        return wxNOT_FOUND;
+    return m_manager->GetPageByState(this);
+}
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_MANAGER_H_
diff --git a/include/wx/propgrid/property.h b/include/wx/propgrid/property.h
new file mode 100644 (file)
index 0000000..4fa1488
--- /dev/null
@@ -0,0 +1,2455 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgrid/property.h
+// Purpose:     wxPGProperty and related support classes
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2008-08-23
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PROPGRID_PROPERTY_H_
+#define _WX_PROPGRID_PROPERTY_H_
+
+#include "wx/propgrid/propgriddefs.h"
+
+// -----------------------------------------------------------------------
+
+#define wxNullProperty  ((wxPGProperty*)NULL)
+
+
+/** @class wxPGPaintData
+
+    Contains information relayed to property's OnCustomPaint.
+*/
+struct wxPGPaintData
+{
+    /** wxPropertyGrid. */
+    const wxPropertyGrid*   m_parent;
+
+    /**
+        Normally -1, otherwise index to drop-down list item that has to be
+        drawn.
+     */
+    int                     m_choiceItem;
+
+    /** Set to drawn width in OnCustomPaint (optional). */
+    int                     m_drawnWidth;
+
+    /**
+        In a measure item call, set this to the height of item at m_choiceItem
+        index.
+     */
+    int                     m_drawnHeight;
+};
+
+
+// Structure for relaying choice/list info.
+struct wxPGChoiceInfo
+{
+    wxPGChoices*    m_choices;
+};
+
+
+#ifndef SWIG
+
+
+// space between vertical sides of a custom image
+#define wxPG_CUSTOM_IMAGE_SPACINGY      1
+
+// space between caption and selection rectangle,
+#define wxPG_CAPRECTXMARGIN             2
+
+// horizontally and vertically
+#define wxPG_CAPRECTYMARGIN             1
+
+
+/** @class wxPGCellRenderer
+
+    Base class for wxPropertyGrid cell renderers.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGCellRenderer
+{
+public:
+
+    wxPGCellRenderer( unsigned int refCount = 1 )
+        : m_refCount(refCount) { }
+    virtual ~wxPGCellRenderer() { }
+
+    // Render flags
+    enum
+    {
+        Selected        = 0x00010000,
+        Control         = 0x00020000
+    };
+
+    virtual void Render( wxDC& dc,
+                         const wxRect& rect,
+                         const wxPropertyGrid* propertyGrid,
+                         wxPGProperty* property,
+                         int column,
+                         int item,
+                         int flags ) const = 0;
+
+    /** Returns size of the image in front of the editable area.
+        @remarks
+        If property is NULL, then this call is for a custom value. In that case
+        the item is index to wxPropertyGrid's custom values.
+    */
+    virtual wxSize GetImageSize( const wxPGProperty* property,
+                                 int column,
+                                 int item ) const;
+
+    /** Paints property category selection rectangle.
+    */
+    virtual void DrawCaptionSelectionRect( wxDC& dc,
+                                           int x, int y,
+                                           int w, int h ) const;
+
+    /** Utility to draw vertically centered text.
+    */
+    void DrawText( wxDC& dc,
+                   const wxRect& rect,
+                   int imageWidth,
+                   const wxString& text ) const;
+
+    /**
+        Utility to draw editor's value, or vertically aligned text if editor is
+        NULL.
+    */
+    void DrawEditorValue( wxDC& dc, const wxRect& rect,
+                          int xOffset, const wxString& text,
+                          wxPGProperty* property,
+                          const wxPGEditor* editor ) const;
+
+    /** Utility to render cell bitmap and set text colour plus bg brush colour.
+
+        Returns image width that, for instance, can be passed to DrawText.
+    */
+    int PreDrawCell( wxDC& dc,
+                     const wxRect& rect,
+                     const wxPGCell& cell,
+                     int flags ) const;
+
+    void IncRef()
+    {
+        m_refCount++;
+    }
+
+    void DecRef()
+    {
+        m_refCount--;
+        if ( !m_refCount )
+            delete this;
+    }
+protected:
+
+private:
+    unsigned int    m_refCount;
+};
+
+
+/** @class wxPGCell
+
+    Base class for simple wxPropertyGrid cell information.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGCell
+{
+public:
+    wxPGCell();
+    wxPGCell( const wxString& text,
+              const wxBitmap& bitmap = wxNullBitmap,
+              const wxColour& fgCol = wxNullColour,
+              const wxColour& bgCol = wxNullColour );
+
+    virtual ~wxPGCell() { }
+
+    void SetText( const wxString& text ) { m_text = text; }
+    void SetBitmap( const wxBitmap& bitmap ) { m_bitmap = bitmap; }
+    void SetFgCol( const wxColour& col ) { m_fgCol = col; }
+    void SetBgCol( const wxColour& col ) { m_bgCol = col; }
+
+    const wxString& GetText() const { return m_text; }
+    const wxBitmap& GetBitmap() const { return m_bitmap; }
+    const wxColour& GetFgCol() const { return m_fgCol; }
+    const wxColour& GetBgCol() const { return m_bgCol; }
+
+protected:
+    wxString    m_text;
+    wxBitmap    m_bitmap;
+    wxColour    m_fgCol;
+    wxColour    m_bgCol;
+};
+
+
+/** @class wxPGDefaultRenderer
+
+    Default cell renderer, that can handles the common
+    scenarios.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGDefaultRenderer : public wxPGCellRenderer
+{
+public:
+    virtual void Render( wxDC& dc,
+                         const wxRect& rect,
+                         const wxPropertyGrid* propertyGrid,
+                         wxPGProperty* property,
+                         int column,
+                         int item,
+                         int flags ) const;
+
+    virtual wxSize GetImageSize( const wxPGProperty* property,
+                                 int column,
+                                 int item ) const;
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGAttributeStorage
+
+    wxPGAttributeStorage is somewhat optimized storage for
+      key=variant pairs (ie. a map).
+*/
+class WXDLLIMPEXP_PROPGRID wxPGAttributeStorage
+{
+public:
+    wxPGAttributeStorage();
+    ~wxPGAttributeStorage();
+
+    void Set( const wxString& name, const wxVariant& value );
+    size_t GetCount() const { return m_map.size(); }
+    wxVariant FindValue( const wxString& name ) const
+    {
+        wxPGHashMapS2P::const_iterator it = m_map.find(name);
+        if ( it != m_map.end() )
+        {
+            wxVariantData* data = (wxVariantData*) it->second;
+            data->IncRef();
+            return wxVariant(data, it->first);
+        }
+        return wxVariant();
+    }
+
+    typedef wxPGHashMapS2P::const_iterator const_iterator;
+    const_iterator StartIteration() const
+    {
+        return m_map.begin();
+    }
+    bool GetNext( const_iterator& it, wxVariant& variant ) const
+    {
+        if ( it == m_map.end() )
+            return false;
+
+        wxVariantData* data = (wxVariantData*) it->second;
+        data->IncRef();
+        variant.SetData(data);
+        variant.SetName(it->first);
+        it++;
+        return true;
+    }
+
+protected:
+    wxPGHashMapS2P  m_map;
+};
+
+#endif  // !SWIG
+
+// -----------------------------------------------------------------------
+
+/** @section propgrid_propflags wxPGProperty Flags
+    @{
+*/
+
+enum wxPG_PROPERTY_FLAGS
+{
+
+/** Indicates bold font.
+*/
+wxPG_PROP_MODIFIED                  = 0x0001,
+
+/** Disables ('greyed' text and editor does not activate) property.
+*/
+wxPG_PROP_DISABLED                  = 0x0002,
+
+/** Hider button will hide this property.
+*/
+wxPG_PROP_HIDDEN                    = 0x0004,
+
+/** This property has custom paint image just in front of its value.
+    If property only draws custom images into a popup list, then this
+    flag should not be set.
+*/
+wxPG_PROP_CUSTOMIMAGE               = 0x0008,
+
+/** Do not create text based editor for this property (but button-triggered
+    dialog and choice are ok).
+*/
+wxPG_PROP_NOEDITOR                  = 0x0010,
+
+/** Property is collapsed, ie. it's children are hidden.
+*/
+wxPG_PROP_COLLAPSED                 = 0x0020,
+
+/**
+    If property is selected, then indicates that validation failed for pending
+    value.
+
+    If property is not selected, then indicates that the the actual property
+    value has failed validation (NB: this behavior is not currently supported,
+    but may be used in future).
+*/
+wxPG_PROP_INVALID_VALUE             = 0x0040,
+
+// 0x0080,
+
+/** Switched via SetWasModified(). Temporary flag - only used when
+    setting/changing property value.
+*/
+wxPG_PROP_WAS_MODIFIED              = 0x0200,
+
+/**
+    If set, then child properties (if any) are private, and should be
+    "invisible" to the application.
+*/
+wxPG_PROP_AGGREGATE                 = 0x0400,
+
+/** If set, then child properties (if any) are copies and should not
+    be deleted in dtor.
+*/
+wxPG_PROP_CHILDREN_ARE_COPIES       = 0x0800,
+
+/**
+    Classifies this item as a non-category.
+
+    Used for faster item type identification.
+*/
+wxPG_PROP_PROPERTY                  = 0x1000,
+
+/**
+    Classifies this item as a category.
+
+    Used for faster item type identification.
+*/
+wxPG_PROP_CATEGORY                  = 0x2000,
+
+/** Classifies this item as a property that has children, but is not aggregate
+    (ie children are not private).
+*/
+wxPG_PROP_MISC_PARENT               = 0x4000,
+
+/** Property is read-only. Editor is still created.
+*/
+wxPG_PROP_READONLY                  = 0x8000,
+
+//
+// NB: FLAGS ABOVE 0x8000 CANNOT BE USED WITH PROPERTY ITERATORS
+//
+
+/** Property's value is composed from values of child properties.
+    @remarks
+    This flag cannot be used with property iterators.
+*/
+wxPG_PROP_COMPOSED_VALUE            = 0x00010000,
+
+/** Common value of property is selectable in editor.
+    @remarks
+    This flag cannot be used with property iterators.
+*/
+wxPG_PROP_USES_COMMON_VALUE         = 0x00020000,
+
+/** Property can be set to unspecified value via editor.
+    Currently, this applies to following properties:
+    - wxIntProperty, wxUIntProperty, wxFloatProperty, wxEditEnumProperty:
+      Clear the text field
+
+    @remarks
+    This flag cannot be used with property iterators.
+*/
+wxPG_PROP_AUTO_UNSPECIFIED          = 0x00040000,
+
+/** Indicates the bit useable by derived properties.
+*/
+wxPG_PROP_CLASS_SPECIFIC_1          = 0x00080000,
+
+/** Indicates the bit useable by derived properties.
+*/
+wxPG_PROP_CLASS_SPECIFIC_2          = 0x00100000
+
+};
+
+/** Topmost flag.
+*/
+#define wxPG_PROP_MAX               wxPG_PROP_AUTO_UNSPECIFIED
+
+/** Property with children must have one of these set, otherwise iterators
+    will not work correctly.
+    Code should automatically take care of this, however.
+*/
+#define wxPG_PROP_PARENTAL_FLAGS \
+    (wxPG_PROP_AGGREGATE|wxPG_PROP_CATEGORY|wxPG_PROP_MISC_PARENT)
+
+/** @}
+*/
+
+// Amalgam of flags that should be inherited by sub-properties
+#define wxPG_INHERITED_PROPFLAGS        (wxPG_PROP_HIDDEN|wxPG_PROP_NOEDITOR)
+
+// Combination of flags that can be stored by GetFlagsAsString
+#define wxPG_STRING_STORED_FLAGS \
+    (wxPG_PROP_DISABLED|wxPG_PROP_HIDDEN|wxPG_PROP_NOEDITOR|wxPG_PROP_COLLAPSED)
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+/**
+    @section propgrid_property_attributes wxPropertyGrid Property Attribute
+    Identifiers.
+
+    wxPGProperty::SetAttribute() and
+    wxPropertyGridInterfaces::SetPropertyAttribute() accept one of these as
+    attribute name argument.
+
+    You can use strings instead of constants. However, some of these
+    constants are redefined to use cached strings which may reduce
+    your binary size by some amount.
+
+    @{
+*/
+
+/** Set default value for property.
+*/
+#define wxPG_ATTR_DEFAULT_VALUE           wxS("DefaultValue")
+
+/** Universal, int or double. Minimum value for numeric properties.
+*/
+#define wxPG_ATTR_MIN                     wxS("Min")
+
+/** Universal, int or double. Maximum value for numeric properties.
+*/
+#define wxPG_ATTR_MAX                     wxS("Max")
+
+/** Universal, string. When set, will be shown as text after the displayed
+    text value. Alternatively, if third column is enabled, text will be shown
+    there (for any type of property).
+*/
+#define wxPG_ATTR_UNITS                     wxS("Units")
+
+/** Universal, string. When set, will be shown in property's value cell
+    when displayed value string is empty, or value is unspecified.
+*/
+#define wxPG_ATTR_INLINE_HELP               wxS("InlineHelp")
+
+/** wxBoolProperty specific, int, default 0. When 1 sets bool property to
+    use checkbox instead of choice.
+*/
+#define wxPG_BOOL_USE_CHECKBOX              wxS("UseCheckbox")
+
+/** wxBoolProperty specific, int, default 0. When 1 sets bool property value
+    to cycle on double click (instead of showing the popup listbox).
+*/
+#define wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING  wxS("UseDClickCycling")
+
+/**
+    wxFloatProperty (and similar) specific, int, default -1.
+
+    Sets the (max) precision used when floating point value is rendered as
+    text. The default -1 means infinite precision.
+*/
+#define wxPG_FLOAT_PRECISION                wxS("Precision")
+
+/**
+    The text will be echoed as asterisks (wxTE_PASSWORD will be passed to
+    textctrl etc).
+*/
+#define wxPG_STRING_PASSWORD                wxS("Password")
+
+/** Define base used by a wxUIntProperty. Valid constants are
+    wxPG_BASE_OCT, wxPG_BASE_DEC, wxPG_BASE_HEX and wxPG_BASE_HEXL
+    (lowercase characters).
+*/
+#define wxPG_UINT_BASE                      wxS("Base")
+
+/** Define prefix rendered to wxUIntProperty. Accepted constants
+    wxPG_PREFIX_NONE, wxPG_PREFIX_0x, and wxPG_PREFIX_DOLLAR_SIGN.
+    <b>Note:</b> Only wxPG_PREFIX_NONE works with Decimal and Octal
+    numbers.
+*/
+#define wxPG_UINT_PREFIX                    wxS("Prefix")
+
+/**
+    wxFileProperty/wxImageFileProperty specific, wxChar*, default is
+    detected/varies.
+    Sets the wildcard used in the triggered wxFileDialog. Format is the same.
+*/
+#define wxPG_FILE_WILDCARD                  wxS("Wildcard")
+
+/** wxFileProperty/wxImageFileProperty specific, int, default 1.
+    When 0, only the file name is shown (i.e. drive and directory are hidden).
+*/
+#define wxPG_FILE_SHOW_FULL_PATH            wxS("ShowFullPath")
+
+/** Specific to wxFileProperty and derived properties, wxString, default empty.
+    If set, then the filename is shown relative to the given path string.
+*/
+#define wxPG_FILE_SHOW_RELATIVE_PATH        wxS("ShowRelativePath")
+
+/**
+    Specific to wxFileProperty and derived properties, wxString, default is
+    empty.
+
+    Sets the initial path of where to look for files.
+*/
+#define wxPG_FILE_INITIAL_PATH              wxS("InitialPath")
+
+/** Specific to wxFileProperty and derivatives, wxString, default is empty.
+    Sets a specific title for the dir dialog.
+*/
+#define wxPG_FILE_DIALOG_TITLE              wxS("DialogTitle")
+
+/** Specific to wxDirProperty, wxString, default is empty.
+    Sets a specific message for the dir dialog.
+*/
+#define wxPG_DIR_DIALOG_MESSAGE             wxS("DialogMessage")
+
+/** Sets displayed date format for wxDateProperty.
+*/
+#define wxPG_DATE_FORMAT                    wxS("DateFormat")
+
+/** Sets wxDatePickerCtrl window style used with wxDateProperty. Default
+    is wxDP_DEFAULT | wxDP_SHOWCENTURY.
+*/
+#define wxPG_DATE_PICKER_STYLE              wxS("PickerStyle")
+
+/** SpinCtrl editor, int or double. How much number changes when button is
+    pressed (or up/down on keybard).
+*/
+#define wxPG_ATTR_SPINCTRL_STEP             wxS("Step")
+
+/** SpinCtrl editor, bool. If true, value wraps at Min/Max.
+*/
+#define wxPG_ATTR_SPINCTRL_WRAP             wxS("Wrap")
+
+/**
+    wxMultiChoiceProperty, int.
+    If 0, no user strings allowed. If 1, user strings appear before list
+    strings. If 2, user strings appear after list string.
+*/
+#define wxPG_ATTR_MULTICHOICE_USERSTRINGMODE    wxS("UserStringMode")
+
+/**
+    wxColourProperty and its kind, int, default 1.
+
+    Setting this attribute to 0 hides custom colour from property's list of
+    choices.
+*/
+#define wxPG_COLOUR_ALLOW_CUSTOM            wxS("AllowCustom")
+
+/** First attribute id that is guaranteed not to be used built-in
+    properties.
+*/
+//#define wxPG_USER_ATTRIBUTE                 192
+
+/** @}
+*/
+
+#ifndef DOXYGEN
+
+// Redefine attribute macros to use cached strings
+#undef wxPG_ATTR_MIN
+#define wxPG_ATTR_MIN                     wxPGGlobalVars->m_strMin
+#undef wxPG_ATTR_MAX
+#define wxPG_ATTR_MAX                     wxPGGlobalVars->m_strMax
+#undef wxPG_ATTR_UNITS
+#define wxPG_ATTR_UNITS                   wxPGGlobalVars->m_strUnits
+#undef wxPG_ATTR_INLINE_HELP
+#define wxPG_ATTR_INLINE_HELP             wxPGGlobalVars->m_strInlineHelp
+
+#endif  // !DOXYGEN
+
+#endif  // !SWIG
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGProperty
+
+    wxPGProperty is base class for all wxPropertyGrid properties. In
+    sections below we cover few related topics.
+
+    @li @ref pgproperty_properties
+    @li @ref pgproperty_creating
+
+    @section pgproperty_properties Supplied Ready-to-use Property Classes
+
+    Here is a list and short description of supplied fully-functional
+    property classes. They are located in either props.h or advprops.h.
+
+    @li @ref wxArrayStringProperty
+    @li @ref wxBoolProperty
+    @li @ref wxColourProperty
+    @li @ref wxCursorProperty
+    @li @ref wxDateProperty
+    @li @ref wxDirProperty
+    @li @ref wxEditEnumProperty
+    @li @ref wxEnumProperty
+    @li @ref wxFileProperty
+    @li @ref wxFlagsProperty
+    @li @ref wxFloatProperty
+    @li @ref wxFontProperty
+    @li @ref wxImageFileProperty
+    @li @ref wxIntProperty
+    @li @ref wxLongStringProperty
+    @li @ref wxMultiChoiceProperty
+    @li @ref wxPropertyCategory
+    @li @ref wxStringProperty
+    @li @ref wxSystemColourProperty
+    @li @ref wxUIntProperty
+
+    @subsection wxPropertyCategory
+
+    Not an actual property per se, but a header for a group of properties.
+    Regardless inherits from wxPGProperty.
+
+    @subsection wxStringProperty
+
+    Simple string property. wxPG_STRING_PASSWORD attribute may be used
+    to echo value as asterisks and use wxTE_PASSWORD for wxTextCtrl.
+
+    @remarks
+    * wxStringProperty has a special trait: if it has value of "<composed>",
+      and also has child properties, then its displayed value becomes
+      composition of child property values, similar as with wxFontProperty,
+      for instance.
+
+    @subsection wxIntProperty
+
+    Like wxStringProperty, but converts text to a signed long integer.
+    wxIntProperty seamlessly supports 64-bit integers (ie. wxLongLong).
+
+    @subsection wxUIntProperty
+
+    Like wxIntProperty, but displays value as unsigned int. To set
+    the prefix used globally, manipulate wxPG_UINT_PREFIX string attribute.
+    To set the globally used base, manipulate wxPG_UINT_BASE int
+    attribute. Regardless of current prefix, understands (hex) values starting
+    with both "0x" and "$".
+    wxUIntProperty seamlessly supports 64-bit unsigned integers (ie.
+    wxULongLong).
+
+    @subsection wxFloatProperty
+
+    Like wxStringProperty, but converts text to a double-precision floating
+    point. Default float-to-text precision is 6 decimals, but this can be
+    changed by modifying wxPG_FLOAT_PRECISION attribute.
+
+    @subsection wxBoolProperty
+
+    Represents a boolean value. wxChoice is used as editor control, by the
+    default. wxPG_BOOL_USE_CHECKBOX attribute can be set to true inorder to use
+    check box instead.
+
+    @subsection wxLongStringProperty
+
+    Like wxStringProperty, but has a button that triggers a small text editor
+    dialog. Note that in long string values, tabs are represented by "\t" and
+    line break by "\n".
+
+    @subsection wxDirProperty
+
+    Like wxLongStringProperty, but the button triggers dir selector instead.
+    Supported properties (all with string value): wxPG_DIR_DIALOG_MESSAGE.
+
+    @subsection wxFileProperty
+
+    Like wxLongStringProperty, but the button triggers file selector instead.
+    Default wildcard is "All files..." but this can be changed by setting
+    wxPG_FILE_WILDCARD attribute (see wxFileDialog for format details).
+    Attribute wxPG_FILE_SHOW_FULL_PATH can be set to false inorder to show
+    only the filename, not the entire path.
+
+    @subsection wxEnumProperty
+
+    Represents a single selection from a list of choices -
+    wxOwnerDrawnComboBox is used to edit the value.
+
+    @subsection wxFlagsProperty
+
+    Represents a bit set that fits in a long integer. wxBoolProperty
+    sub-properties are created for editing individual bits. Textctrl is created
+    to manually edit the flags as a text; a continous sequence of spaces,
+    commas and semicolons is considered as a flag id separator.
+    <b>Note: </b> When changing "choices" (ie. flag labels) of wxFlagsProperty,
+    you will need to use SetPropertyChoices - otherwise they will not get
+    updated properly.
+
+    @subsection wxArrayStringProperty
+
+    Allows editing of a list of strings in wxTextCtrl and in a separate dialog.
+
+    @subsection wxDateProperty
+
+    wxDateTime property. Default editor is DatePickerCtrl, altough TextCtrl
+    should work as well. wxPG_DATE_FORMAT attribute can be used to change
+    string wxDateTime::Format uses (altough default is recommended as it is
+    locale-dependant), and wxPG_DATE_PICKER_STYLE allows changing window
+    style given to DatePickerCtrl (default is wxDP_DEFAULT|wxDP_SHOWCENTURY).
+
+    @subsection wxEditEnumProperty
+
+    Represents a string that can be freely edited or selected from list of
+    choices - custom combobox control is used to edit the value.
+
+    @subsection wxMultiChoiceProperty
+
+    Allows editing a multiple selection from a list of strings. This is
+    property is pretty much built around concept of wxMultiChoiceDialog.
+    It uses wxArrayString value.
+
+    @subsection wxImageFileProperty
+
+    Like wxFileProperty, but has thumbnail of the image in front of
+    the filename and autogenerates wildcard from available image handlers.
+
+    @subsection wxColourProperty
+
+    <b>Useful alternate editor:</b> Choice.
+
+    Represents wxColour. wxButton is used to trigger a colour picker dialog.
+
+    @subsection wxFontProperty
+
+    Represents wxFont. Various sub-properties are used to edit individual
+    subvalues.
+
+    @subsection wxSystemColourProperty
+
+    Represents wxColour and a system colour index. wxChoice is used to edit
+    the value. Drop-down list has color images. Note that value type
+    is wxColourPropertyValue instead of wxColour.
+    @code
+        class wxColourPropertyValue : public wxObject
+        {
+        public:
+            //  An integer value relating to the colour, and which exact
+            //  meaning depends on the property with which it is used.
+            //
+            //  For wxSystemColourProperty:
+            //  Any of wxSYS_COLOUR_XXX, or any web-colour (use
+            //  wxPG_TO_WEB_COLOUR macro - (currently unsupported) ),
+            //  or wxPG_COLOUR_CUSTOM.
+            wxUint32    m_type;
+
+            // Resulting colour. Should be correct regardless of type.
+            wxColour    m_colour;
+        };
+    @endcode
+
+    @subsection wxCursorProperty
+
+    Represents a wxCursor. wxChoice is used to edit the value.
+    Drop-down list has cursor images under some (wxMSW) platforms.
+
+
+    @section pgproperty_creating Creating Custom Properties
+
+    New properties can be created by subclassing wxPGProperty or one
+    of the provided property classes, and (re)implementing necessary
+    member functions. Below, each virtual member function has ample
+    documentation about its purpose and any odd details which to keep
+    in mind.
+
+    Here is a very simple 'template' code:
+
+    @code
+        class MyProperty : public wxPGProperty
+        {
+        public:
+            // All arguments of ctor must have a default value -
+            // use wxPG_LABEL for label and name
+            MyProperty( const wxString& label = wxPG_LABEL,
+                        const wxString& name = wxPG_LABEL,
+                        const wxString& value = wxEmptyString )
+            {
+                // m_value is wxVariant
+                m_value = value;
+            }
+
+            virtual ~MyProperty() { }
+
+            const wxPGEditor* DoGetEditorClass() const
+            {
+                // Determines editor used by property.
+                // You can replace 'TextCtrl' below with any of these
+                // builtin-in property editor identifiers: Choice, ComboBox,
+                // TextCtrlAndButton, ChoiceAndButton, CheckBox, SpinCtrl,
+                // DatePickerCtrl.
+                return wxPGEditor_TextCtrl;
+            }
+
+            virtual wxString GetValueAsString( int argFlags ) const
+            {
+                // TODO: Return property value in string format
+            }
+
+            virtual bool StringToValue( wxVariant& variant,
+                                        const wxString& text,
+                                        int argFlags )
+            {
+                // TODO: Adapt string to property value.
+            }
+
+        protected:
+        };
+    @endcode
+
+    Since wxPGProperty derives from wxObject, you can use standard
+    DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS macros. From the
+    above example they were omitted for sake of simplicity, and besides,
+    they are only really needed if you need to use wxRTTI with your
+    property class.
+
+    You can change the 'value type' of a property by simply assigning different
+    type of variant with SetValue. <b>It is mandatory to implement
+    wxVariantData class for all data types used as property values.</b> Also,
+    it is further recommended to derive your class from wxPGVariantData, like
+    this:
+
+    @code
+        // In header file:
+        // (replace DECL with required data declaration, use
+        // wxEMPTY_PARAMETER_VALUE if none)
+        WX_PG_DECLARE_VARIANT_DATA(wxPGVariantMyDataClass, MyDataClass, DECL)
+
+        // In sources file:
+        WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantMyDataClass, MyDataClass)
+    @endcode
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPGProperty : public wxObject
+{
+    friend class wxPropertyGrid;
+    friend class wxPropertyGridInterface;
+    friend class wxPropertyGridPageState;
+    friend class wxPropertyGridPopulator;
+    friend class wxStringProperty;  // Proper "<composed>" support requires this
+#ifndef SWIG
+    DECLARE_ABSTRACT_CLASS(wxPGProperty)
+#endif
+public:
+    typedef wxUint32 FlagType;
+
+    /** Basic constructor.
+    */
+    wxPGProperty();
+
+    /** Constructor.
+        Non-abstract property classes should have constructor of this style:
+
+        @code
+
+        // If T is a class, then it should be a constant reference
+        // (e.g. const T& ) instead.
+        MyProperty( const wxString& label, const wxString& name, T value )
+            : wxPGProperty()
+        {
+            // Generally recommended way to set the initial value
+            // (as it should work in pretty much 100% of cases).
+            wxVariant variant;
+            variant << value;
+            SetValue(variant);
+
+            // If has private child properties then create them here, e.g.:
+            //     AddChild( new wxStringProperty( "Subprop 1",
+            //                                     wxPG_LABEL,
+            //                                     value.GetSubProp1() ) );
+        }
+
+        @endcode
+    */
+    wxPGProperty( const wxString& label, const wxString& name );
+
+    /**
+        Virtual destructor.
+        It is customary for derived properties to implement this.
+    */
+    virtual ~wxPGProperty();
+
+    /** This virtual function is called after m_value has been set.
+
+        @remarks
+        - If m_value was set to Null variant (ie. unspecified value),
+          OnSetValue() will not be called.
+        - m_value may be of any variant type. Typically properties internally
+          support only one variant type, and as such OnSetValue() provides a
+          good opportunity to convert
+          supported values into internal type.
+        - Default implementation does nothing.
+    */
+    virtual void OnSetValue();
+
+    /** Override this to return something else than m_value as the value.
+    */
+    virtual wxVariant DoGetValue() const { return m_value; }
+
+#if !defined(SWIG) || defined(CREATE_VCW)
+    /** Implement this function in derived class to check the value.
+        Return true if it is ok. Returning false prevents property change events
+        from occurring.
+
+        @remarks
+        - Default implementation always returns true.
+    */
+    virtual bool ValidateValue( wxVariant& value,
+                                wxPGValidationInfo& validationInfo ) const;
+
+    /**
+        Converts 'text' into proper value 'variant'.
+        Returns true if new (different than m_value) value could be interpreted
+        from the text.
+        @param argFlags
+            If wxPG_FULL_VALUE is set, returns complete, storable value instead
+            of displayable one (they may be different).
+            If wxPG_COMPOSITE_FRAGMENT is set, text is interpreted as a part of
+            composite property string value (as generated by GetValueAsString()
+            called with this same flag).
+
+        @remarks
+        Default implementation converts semicolon delimited tokens into child
+        values. Only works for properties with children.
+    */
+    virtual bool StringToValue( wxVariant& variant,
+                                const wxString& text,
+                                int argFlags = 0 ) const;
+
+    /**
+        Converts 'number' (including choice selection) into proper value
+        'variant'.
+
+        Returns true if new (different than m_value) value could be interpreted
+        from the integer.
+
+        @param argFlags
+            If wxPG_FULL_VALUE is set, returns complete, storable value instead
+            of displayable one.
+
+        @remarks
+        - If property is not supposed to use choice or spinctrl or other editor
+          with int-based value, it is not necessary to implement this method.
+        - Default implementation simply assign given int to m_value.
+        - If property uses choice control, and displays a dialog on some choice
+          items, then it is preferred to display that dialog in IntToValue
+          instead of OnEvent.
+    */
+    virtual bool IntToValue( wxVariant& value,
+                             int number,
+                             int argFlags = 0 ) const;
+#endif  // !defined(SWIG) || defined(CREATE_VCW)
+
+public:
+    /** Returns text representation of property's value.
+
+        @param argFlags
+            If wxPG_FULL_VALUE is set, returns complete, storable string value
+            instead of displayable. If wxPG_EDITABLE_VALUE is set, returns
+            string value that must be editable in textctrl. If
+            wxPG_COMPOSITE_FRAGMENT is set, returns text that is appropriate to
+            display as a part of composite property string value.
+
+        @remarks
+        Default implementation returns string composed from text
+        representations of child properties.
+    */
+    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+
+    /** Converts string to a value, and if successful, calls SetValue() on it.
+        Default behavior is to do nothing.
+        @param text
+        String to get the value from.
+        @return
+        true if value was changed.
+    */
+    bool SetValueFromString( const wxString& text, int flags = 0 );
+
+    /** Converts integer to a value, and if succesful, calls SetValue() on it.
+        Default behavior is to do nothing.
+        @param value
+            Int to get the value from.
+        @param flags
+            If has wxPG_FULL_VALUE, then the value given is a actual value and
+            not an index.
+        @return
+            True if value was changed.
+    */
+    bool SetValueFromInt( long value, int flags = 0 );
+
+    /**
+        Returns size of the custom painted image in front of property.
+
+        This method must be overridden to return non-default value if
+        OnCustomPaint is to be called.
+        @param item
+            Normally -1, but can be an index to the property's list of items.
+        @remarks
+        - Default behavior is to return wxSize(0,0), which means no image.
+        - Default image width or height is indicated with dimension -1.
+        - You can also return wxPG_DEFAULT_IMAGE_SIZE, i.e. wxSize(-1, -1).
+    */
+    virtual wxSize OnMeasureImage( int item = -1 ) const;
+
+    /**
+        Events received by editor widgets are processed here.
+
+        Note that editor class usually processes most events. Some, such as
+        button press events of TextCtrlAndButton class, can be handled here.
+        Also, if custom handling for regular events is desired, then that can
+        also be done (for example, wxSystemColourProperty custom handles
+        wxEVT_COMMAND_CHOICE_SELECTED to display colour picker dialog when
+        'custom' selection is made).
+
+        If the event causes value to be changed, SetValueInEvent()
+        should be called to set the new value.
+
+        @param event
+        Associated wxEvent.
+        @return
+        Should return true if any changes in value should be reported.
+        @remarks
+        If property uses choice control, and displays a dialog on some choice
+        items, then it is preferred to display that dialog in IntToValue
+        instead of OnEvent.
+    */
+    virtual bool OnEvent( wxPropertyGrid* propgrid,
+                          wxWindow* wnd_primary,
+                          wxEvent& event );
+
+    /**
+        Called after value of a child property has been altered.
+
+        Note that this function is usually called at the time that value of
+        this property, or given child property, is still pending for change.
+
+        Sample pseudo-code implementation:
+
+        @code
+        void MyProperty::ChildChanged( wxVariant& thisValue,
+                                       int childIndex,
+                                       wxVariant& childValue ) const
+        {
+            // Acquire reference to actual type of data stored in variant
+            // (TFromVariant only exists if wxPropertyGrid's wxVariant-macros
+            // were used to create the variant class).
+            T& data = TFromVariant(thisValue);
+
+            // Copy childValue into data.
+            switch ( childIndex )
+            {
+                case 0:
+                    data.SetSubProp1( childvalue.GetLong() );
+                    break;
+                case 1:
+                    data.SetSubProp2( childvalue.GetString() );
+                    break;
+                ...
+            }
+        }
+        @endcode
+
+        @param thisValue
+            Value of this property, that should be altered.
+        @param childIndex
+            Index of child changed (you can use Item(childIndex) to get).
+        @param childValue
+            Value of the child property.
+    */
+    virtual void ChildChanged( wxVariant& thisValue,
+                               int childIndex,
+                               wxVariant& childValue ) const;
+
+    /** Returns pointer to an instance of used editor.
+    */
+    virtual const wxPGEditor* DoGetEditorClass() const;
+
+    /** Returns pointer to the wxValidator that should be used
+        with the editor of this property (NULL for no validator).
+        Setting validator explicitly via SetPropertyValidator
+        will override this.
+
+        In most situations, code like this should work well
+        (macros are used to maintain one actual validator instance,
+        so on the second call the function exits within the first
+        macro):
+
+        @code
+
+        wxValidator* wxMyPropertyClass::DoGetValidator () const
+        {
+            WX_PG_DOGETVALIDATOR_ENTRY()
+
+            wxMyValidator* validator = new wxMyValidator(...);
+
+            ... prepare validator...
+
+            WX_PG_DOGETVALIDATOR_EXIT(validator)
+        }
+
+        @endcode
+
+        @remarks
+        You can get common filename validator by returning
+        wxFileProperty::GetClassValidator(). wxDirProperty,
+        for example, uses it.
+    */
+    virtual wxValidator* DoGetValidator () const;
+
+    /**
+        Returns current value's index to the choice control.
+
+        May also return, through pointer arguments, strings that should be
+        inserted to that control. Irrelevant to classes which do not employ
+        wxPGEditor_Choice or similar.
+
+        @remarks
+        - If returns NULL in choiceinfo.m_choices, then this class must be
+          derived from wxBaseEnumProperty.
+        - Must be able to cope situation where property's set of choices is
+          uninitialized.
+    */
+    virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo );
+
+    /**
+        Override to paint an image in front of the property value text or
+        drop-down list item (but only if wxPGProperty::OnMeasureImage is
+        overridden as well).
+
+        If property's OnMeasureImage() returns size that has height != 0 but
+        less than row height ( < 0 has special meanings), wxPropertyGrid calls
+        this method to draw a custom image in a limited area in front of the
+        editor control or value text/graphics, and if control has drop-down
+        list, then the image is drawn there as well (even in the case
+        OnMeasureImage() returned higher height than row height).
+
+        NOTE: Following applies when OnMeasureImage() returns a "flexible"
+        height ( using wxPG_FLEXIBLE_SIZE(W,H) macro), which implies variable
+        height items: If rect.x is < 0, then this is a measure item call, which
+        means that dc is invalid and only thing that should be done is to set
+        paintdata.m_drawnHeight to the height of the image of item at index
+        paintdata.m_choiceItem. This call may be done even as often as once
+        every drop-down popup show.
+
+        @param dc
+            wxDC to paint on.
+        @param rect
+            Box reserved for custom graphics. Includes surrounding rectangle,
+            if any. If x is < 0, then this is a measure item call (see above).
+        @param paintdata
+            wxPGPaintData structure with much useful data.
+
+        @remarks
+            - You can actually exceed rect width, but if you do so then
+              paintdata.m_drawnWidth must be set to the full width drawn in
+              pixels.
+            - Due to technical reasons, rect's height will be default even if
+              custom height was reported during measure call.
+            - Brush is guaranteed to be default background colour. It has been
+              already used to clear the background of area being painted. It
+              can be modified.
+            - Pen is guaranteed to be 1-wide 'black' (or whatever is the proper
+              colour) pen for drawing framing rectangle. It can be changed as
+              well.
+
+        @see GetValueAsString()
+    */
+    virtual void OnCustomPaint( wxDC& dc,
+                                const wxRect& rect,
+                                wxPGPaintData& paintdata );
+
+    /**
+        Returns used wxPGCellRenderer instance for given property column
+        (label=0, value=1).
+
+        Default implementation returns editor's renderer for all columns.
+    */
+    virtual wxPGCellRenderer* GetCellRenderer( int column ) const;
+
+    /**
+        Refresh values of child properties.
+
+        Automatically called after value is set.
+    */
+    virtual void RefreshChildren();
+
+    /** Special handling for attributes of this property.
+
+        If returns false, then the attribute will be automatically stored in
+        m_attributes.
+
+        Default implementation simply returns false.
+    */
+    virtual bool DoSetAttribute( const wxString& name, wxVariant& value );
+
+    /** Returns value of an attribute.
+
+        Override if custom handling of attributes is needed.
+
+        Default implementation simply return NULL variant.
+    */
+    virtual wxVariant DoGetAttribute( const wxString& name ) const;
+
+    /** Returns instance of a new wxPGEditorDialogAdapter instance, which is
+        used when user presses the (optional) button next to the editor control;
+
+        Default implementation returns NULL (ie. no action is generated when
+        button is pressed).
+    */
+    virtual wxPGEditorDialogAdapter* GetEditorDialog() const;
+
+    /**
+        Adds entry to property's wxPGChoices and editor control (if it is
+        active).
+
+        Returns index of item added.
+    */
+    int AppendChoice( const wxString& label, int value = wxPG_INVALID_VALUE )
+    {
+        return InsertChoice(label,-1,value);
+    }
+
+    /** Returns wxPGCell of given column, NULL if none. If valid
+        object is returned, caller will gain its ownership.
+    */
+    wxPGCell* AcquireCell( unsigned int column )
+    {
+        if ( column >= m_cells.size() )
+            return NULL;
+
+        wxPGCell* cell = (wxPGCell*) m_cells[column];
+        m_cells[column] = NULL;
+        return cell;
+    }
+
+    /**
+        Returns true if children of this property are component values (for
+        instance, points size, face name, and is_underlined are component
+        values of a font).
+    */
+    bool AreChildrenComponents() const
+    {
+        if ( m_flags & (wxPG_PROP_COMPOSED_VALUE|wxPG_PROP_AGGREGATE) )
+            return true;
+
+        return false;
+    }
+
+    /**
+        Removes entry from property's wxPGChoices and editor control (if it is
+        active).
+
+        If selected item is deleted, then the value is set to unspecified.
+    */
+    void DeleteChoice( int index );
+
+    /**
+        Call to enable or disable usage of common value (integer value that can
+        be selected for properties instead of their normal values) for this
+        property.
+
+        Common values are disabled by the default for all properties.
+    */
+    void EnableCommonValue( bool enable = true )
+    {
+        if ( enable ) SetFlag( wxPG_PROP_USES_COMMON_VALUE );
+        else ClearFlag( wxPG_PROP_USES_COMMON_VALUE );
+    }
+
+    /** Composes text from values of child properties. */
+    void GenerateComposedValue( wxString& text, int argFlags = 0 ) const;
+
+    /** Returns property's label. */
+    const wxString& GetLabel() const { return m_label; }
+
+    /** Returns property's name with all (non-category, non-root) parents. */
+    wxString GetName() const;
+
+    /**
+        Returns property's base name (ie parent's name is not added in any
+        case)
+     */
+    const wxString& GetBaseName() const { return m_name; }
+
+    wxPGChoices& GetChoices();
+
+    const wxPGChoices& GetChoices() const;
+
+    const wxPGChoiceEntry* GetCurrentChoice() const;
+
+    /** Returns coordinate to the top y of the property. Note that the
+        position of scrollbars is not taken into account.
+    */
+    int GetY() const;
+
+    wxVariant GetValue() const
+    {
+        return DoGetValue();
+    }
+
+#ifndef SWIG
+    /** Returns reference to the internal stored value. GetValue is preferred
+        way to get the actual value, since GetValueRef ignores DoGetValue,
+        which may override stored value.
+    */
+    wxVariant& GetValueRef()
+    {
+        return m_value;
+    }
+
+    const wxVariant& GetValueRef() const
+    {
+        return m_value;
+    }
+#endif
+
+    /** Same as GetValueAsString, except takes common value into account.
+    */
+    wxString GetValueString( int argFlags = 0 ) const;
+
+    void UpdateControl( wxWindow* primary );
+
+    /** Returns wxPGCell of given column, NULL if none. wxPGProperty
+        will retain ownership of the cell object.
+    */
+    wxPGCell* GetCell( unsigned int column ) const
+    {
+        if ( column >= m_cells.size() )
+            return NULL;
+
+        return (wxPGCell*) m_cells[column];
+    }
+
+    unsigned int GetChoiceCount() const;
+
+    wxString GetChoiceString( unsigned int index );
+
+    /** Return number of displayed common values for this property.
+    */
+    int GetDisplayedCommonValueCount() const;
+
+    wxString GetDisplayedString() const
+    {
+        return GetValueString(0);
+    }
+
+    /** Returns property grid where property lies. */
+    wxPropertyGrid* GetGrid() const;
+
+    /** Returns owner wxPropertyGrid, but only if one is currently on a page
+        displaying this property. */
+    wxPropertyGrid* GetGridIfDisplayed() const;
+
+    /** Returns highest level non-category, non-root parent. Useful when you
+        have nested wxCustomProperties/wxParentProperties.
+        @remarks
+        Thus, if immediate parent is root or category, this will return the
+        property itself.
+    */
+    wxPGProperty* GetMainParent() const;
+
+    /** Return parent of property */
+    wxPGProperty* GetParent() const { return m_parent; }
+
+    /** Returns true if property has editable wxTextCtrl when selected.
+
+        @remarks
+        Altough disabled properties do not displayed editor, they still
+        return True here as being disabled is considered a temporary
+        condition (unlike being read-only or having limited editing enabled).
+    */
+    bool IsTextEditable() const;
+
+    bool IsValueUnspecified() const
+    {
+        return m_value.IsNull();
+    }
+
+    FlagType HasFlag( FlagType flag ) const
+    {
+        return ( m_flags & flag );
+    }
+
+    /** Returns comma-delimited string of property attributes.
+    */
+    const wxPGAttributeStorage& GetAttributes() const
+    {
+        return m_attributes;
+    }
+
+    /** Returns m_attributes as list wxVariant.
+    */
+    wxVariant GetAttributesAsList() const;
+
+    FlagType GetFlags() const
+    {
+        return m_flags;
+    }
+
+    const wxPGEditor* GetEditorClass() const;
+
+    wxString GetValueType() const
+    {
+        return m_value.GetType();
+    }
+
+    /** Returns editor used for given column. NULL for no editor.
+    */
+    const wxPGEditor* GetColumnEditor( int column ) const
+    {
+        if ( column == 1 )
+            return GetEditorClass();
+
+        return NULL;
+    }
+
+    /** Returns common value selected for this property. -1 for none.
+    */
+    int GetCommonValue() const
+    {
+        return m_commonValue;
+    }
+
+    /** Returns true if property has even one visible child.
+    */
+    bool HasVisibleChildren() const;
+
+    /**
+        Adds entry to property's wxPGChoices and editor control (if it is
+        active).
+
+        Returns index of item added.
+    */
+    int InsertChoice( const wxString& label,
+                      int index,
+                      int value = wxPG_INVALID_VALUE );
+
+    /**
+        Returns true if this property is actually a wxPropertyCategory.
+    */
+    bool IsCategory() const { return HasFlag(wxPG_PROP_CATEGORY)?true:false; }
+
+    /** Returns true if this property is actually a wxRootProperty.
+    */
+    bool IsRoot() const { return (m_parent == NULL); }
+
+    /** Returns true if this is a sub-property. */
+    bool IsSubProperty() const
+    {
+        wxPGProperty* parent = (wxPGProperty*)m_parent;
+        if ( parent && !parent->IsCategory() )
+            return true;
+        return false;
+    }
+
+    /** Returns last visible sub-property, recursively.
+    */
+    const wxPGProperty* GetLastVisibleSubItem() const;
+
+    wxVariant GetDefaultValue() const;
+
+    int GetMaxLength() const
+    {
+        return (int) m_maxLen;
+    }
+
+    /**
+        Determines, recursively, if all children are not unspecified.
+
+        Takes values in given list into account.
+    */
+    bool AreAllChildrenSpecified( wxVariant* pendingList = NULL ) const;
+
+    /** Updates composed values of parent non-category properties, recursively.
+        Returns topmost property updated.
+
+        @remarks
+        - Must not call SetValue() (as can be called in it).
+    */
+    wxPGProperty* UpdateParentValues();
+
+    /** Returns true if containing grid uses wxPG_EX_AUTO_UNSPECIFIED_VALUES.
+    */
+    FlagType UsesAutoUnspecified() const
+    {
+        return HasFlag(wxPG_PROP_AUTO_UNSPECIFIED);
+    }
+
+    wxBitmap* GetValueImage() const
+    {
+        return m_valueBitmap;
+    }
+
+    wxVariant GetAttribute( const wxString& name ) const;
+
+    /**
+        Returns named attribute, as string, if found.
+
+        Otherwise defVal is returned.
+    */
+    wxString GetAttribute( const wxString& name, const wxString& defVal ) const;
+
+    /**
+        Returns named attribute, as long, if found.
+
+        Otherwise defVal is returned.
+    */
+    long GetAttributeAsLong( const wxString& name, long defVal ) const;
+
+    /**
+        Returns named attribute, as double, if found.
+
+        Otherwise defVal is returned.
+    */
+    double GetAttributeAsDouble( const wxString& name, double defVal ) const;
+
+    unsigned int GetArrIndex() const { return m_arrIndex; }
+
+    unsigned int GetDepth() const { return (unsigned int)m_depth; }
+
+    /** Gets flags as a'|' delimited string. Note that flag names are not
+        prepended with 'wxPG_PROP_'.
+        @param flagsMask
+        String will only be made to include flags combined by this parameter.
+    */
+    wxString GetFlagsAsString( FlagType flagsMask ) const;
+
+    /** Returns position in parent's array. */
+    unsigned int GetIndexInParent() const
+    {
+        return (unsigned int)m_arrIndex;
+    }
+
+    /** Hides or reveals the property.
+        @param hide
+            true for hide, false for reveal.
+        @param flags
+            By default changes are applied recursively. Set this paramter
+            wxPG_DONT_RECURSE to prevent this.
+    */
+    inline bool Hide( bool hide, int flags = wxPG_RECURSE );
+
+    bool IsExpanded() const
+        { return (!(m_flags & wxPG_PROP_COLLAPSED) && GetChildCount()); }
+
+    /** Returns true if all parents expanded.
+    */
+    bool IsVisible() const;
+
+    bool IsEnabled() const { return !(m_flags & wxPG_PROP_DISABLED); }
+
+    /** If property's editor is created this forces its recreation.
+        Useful in SetAttribute etc. Returns true if actually did anything.
+    */
+    bool RecreateEditor();
+
+    /** If property's editor is active, then update it's value.
+    */
+    void RefreshEditor();
+
+    /** Sets an attribute for this property.
+        @param name
+        Text identifier of attribute. See @ref propgrid_property_attributes.
+        @param value
+        Value of attribute.
+    */
+    void SetAttribute( const wxString& name, wxVariant value );
+
+    void SetAttributes( const wxPGAttributeStorage& attributes );
+
+#ifndef SWIG
+    /** Sets editor for a property.
+
+        @param editor
+            For builtin editors, use wxPGEditor_X, where X is builtin editor's
+            name (TextCtrl, Choice, etc. see wxPGEditor documentation for full
+            list).
+
+        For custom editors, use pointer you received from
+        wxPropertyGrid::RegisterEditorClass().
+    */
+    void SetEditor( const wxPGEditor* editor )
+    {
+        m_customEditor = editor;
+    }
+#endif
+
+    /** Sets editor for a property.
+    */
+    inline void SetEditor( const wxString& editorName );
+
+    /** Sets cell information for given column.
+
+        Note that the property takes ownership of given wxPGCell instance.
+    */
+    void SetCell( int column, wxPGCell* cellObj );
+
+    /** Changes value of a property with choices, but only
+        works if the value type is long or string. */
+    void SetChoiceSelection( int newValue, const wxPGChoiceInfo& choiceInfo );
+
+    /** Sets common value selected for this property. -1 for none.
+    */
+    void SetCommonValue( int commonValue )
+    {
+        m_commonValue = commonValue;
+    }
+
+    /** Sets flags from a '|' delimited string. Note that flag names are not
+        prepended with 'wxPG_PROP_'.
+    */
+    void SetFlagsFromString( const wxString& str );
+
+    /** Sets property's "is it modified?" flag. Affects children recursively.
+    */
+    void SetModifiedStatus( bool modified )
+    {
+        SetFlagRecursively(wxPG_PROP_MODIFIED, modified);
+    }
+
+    /** Call in OnEvent(), OnButtonClick() etc. to change the property value
+        based on user input.
+
+        @remarks
+        This method is const since it doesn't actually modify value, but posts
+        given variant as pending value, stored in wxPropertyGrid.
+    */
+    void SetValueInEvent( wxVariant value ) const;
+
+    /**
+        Call this to set value of the property.
+
+        Unlike methods in wxPropertyGrid, this does not automatically update
+        the display.
+
+        @remarks
+        Use wxPropertyGrid::ChangePropertyValue() instead if you need to run
+        through validation process and send property change event.
+
+        If you need to change property value in event, based on user input, use
+        SetValueInEvent() instead.
+
+        @param pList
+        Pointer to list variant that contains child values. Used to indicate
+        which children should be marked as modified.
+        @param flags
+        Various flags (for instance, wxPG_SETVAL_REFRESH_EDITOR).
+    */
+    void SetValue( wxVariant value, wxVariant* pList = NULL, int flags = 0 );
+
+    /** Set wxBitmap in front of the value. This bitmap may be ignored
+        by custom cell renderers.
+    */
+    void SetValueImage( wxBitmap& bmp );
+
+    /** If property has choices and they are not yet exclusive, new such copy
+        of them will be created.
+    */
+    void SetChoicesExclusive();
+
+    void SetExpanded( bool expanded )
+    {
+        if ( !expanded ) m_flags |= wxPG_PROP_COLLAPSED;
+        else m_flags &= ~wxPG_PROP_COLLAPSED;
+    }
+
+    void SetFlag( FlagType flag ) { m_flags |= flag; }
+
+    void SetFlagRecursively( FlagType flag, bool set );
+
+    void SetHelpString( const wxString& helpString )
+    {
+        m_helpString = helpString;
+    }
+
+    void SetLabel( const wxString& label ) { m_label = label; }
+
+    inline void SetName( const wxString& newName );
+
+    void SetValueToUnspecified()
+    {
+        wxVariant val;  // Create NULL variant
+        SetValue(val);
+    }
+
+#if wxUSE_VALIDATORS
+    /** Sets wxValidator for a property*/
+    void SetValidator( const wxValidator& validator )
+    {
+        m_validator = wxDynamicCast(validator.Clone(),wxValidator);
+    }
+
+    /** Gets assignable version of property's validator. */
+    wxValidator* GetValidator() const
+    {
+        if ( m_validator )
+            return m_validator;
+        return DoGetValidator();
+    }
+#endif // #if wxUSE_VALIDATORS
+
+    /** Updates property value in case there were last minute
+        changes. If value was unspecified, it will be set to default.
+        Use only for properties that have TextCtrl-based editor.
+        @remarks
+        If you have code similar to
+        @code
+            // Update the value in case of last minute changes
+            if ( primary && propgrid->IsEditorsValueModified() )
+                 GetEditorClass()->CopyValueFromControl( this, primary );
+        @endcode
+        in wxPGProperty::OnEvent wxEVT_COMMAND_BUTTON_CLICKED handler,
+        then replace it with call to this method.
+        @return
+        True if value changed.
+    */
+    bool PrepareValueForDialogEditing( wxPropertyGrid* propgrid );
+
+#ifndef SWIG
+    /** Returns client data (void*) of a property.
+    */
+    void* GetClientData() const
+    {
+        return m_clientData;
+    }
+
+    /** Sets client data (void*) of a property.
+        @remarks
+        This untyped client data has to be deleted manually.
+    */
+    void SetClientData( void* clientData )
+    {
+        m_clientData = clientData;
+    }
+
+    /** Returns client object of a property.
+    */
+    void SetClientObject(wxClientData* clientObject)
+    {
+        delete m_clientObject;
+        m_clientObject = clientObject;
+    }
+
+    /** Sets managed client object of a property.
+    */
+    wxClientData *GetClientObject() const { return m_clientObject; }
+#endif
+
+    /** Sets new set of choices for property.
+
+        @remarks
+        This operation clears the property value.
+    */
+    bool SetChoices( wxPGChoices& choices );
+
+    /** Sets new set of choices for property.
+    */
+    inline bool SetChoices( const wxArrayString& labels,
+                            const wxArrayInt& values = wxArrayInt() );
+
+    /** Set max length of text in text editor.
+    */
+    inline bool SetMaxLength( int maxLen );
+
+    /** Call with 'false' in OnSetValue to cancel value changes after all
+        (ie. cancel 'true' returned by StringToValue() or IntToValue()).
+    */
+    void SetWasModified( bool set = true )
+    {
+        if ( set ) m_flags |= wxPG_PROP_WAS_MODIFIED;
+        else m_flags &= ~wxPG_PROP_WAS_MODIFIED;
+    }
+
+    const wxString& GetHelpString() const
+    {
+        return m_helpString;
+    }
+
+    void ClearFlag( FlagType flag ) { m_flags &= ~(flag); }
+
+    // Use, for example, to detect if item is inside collapsed section.
+    bool IsSomeParent( wxPGProperty* candidate_parent ) const;
+
+    /**
+        Adapts list variant into proper value using consecutive
+        ChildChanged-calls.
+    */
+    void AdaptListToValue( wxVariant& list, wxVariant* value ) const;
+
+    /** This is used by properties that have fixed sub-properties. */
+    void AddChild( wxPGProperty* prop );
+
+    /** Returns height of children, recursively, and
+        by taking expanded/collapsed status into account.
+
+        iMax is used when finding property y-positions.
+    */
+    int GetChildrenHeight( int lh, int iMax = -1 ) const;
+
+    /** Returns number of child properties */
+    unsigned int GetChildCount() const { return m_children.GetCount(); }
+
+    /** Returns sub-property at index i. */
+    wxPGProperty* Item( size_t i ) const
+        { return (wxPGProperty*)m_children.Item(i); }
+
+    /** Returns last sub-property.
+    */
+    wxPGProperty* Last() const { return (wxPGProperty*)m_children.Last(); }
+
+    /** Returns index of given sub-property. */
+    int Index( const wxPGProperty* p ) const
+        { return m_children.Index((wxPGProperty*)p); }
+
+    /** Deletes all sub-properties. */
+    void Empty();
+
+    // Puts correct indexes to children
+    void FixIndexesOfChildren( size_t starthere = 0 );
+
+#ifndef SWIG
+    // Returns wxPropertyGridPageState in which this property resides.
+    wxPropertyGridPageState* GetParentState() const { return m_parentState; }
+#endif
+
+    wxPGProperty* GetItemAtY( unsigned int y,
+                              unsigned int lh,
+                              unsigned int* nextItemY ) const;
+
+    /** Returns (direct) child property with given name (or NULL if not found).
+    */
+    wxPGProperty* GetPropertyByName( const wxString& name ) const;
+
+#ifdef SWIG
+     %extend {
+        DocStr(GetClientData,
+               "Returns the client data object for a property", "");
+        PyObject* GetClientData() {
+            wxPyClientData* data = (wxPyClientData*)self->GetClientObject();
+            if (data) {
+                Py_INCREF(data->m_obj);
+                return data->m_obj;
+            } else {
+                Py_INCREF(Py_None);
+                return Py_None;
+            }
+        }
+
+        DocStr(SetClientData,
+               "Associate the given client data.", "");
+        void SetClientData(PyObject* clientData) {
+            wxPyClientData* data = new wxPyClientData(clientData);
+            self->SetClientObject(data);
+        }
+    }
+    %pythoncode {
+         GetClientObject = GetClientData
+         SetClientObject = SetClientData
+    }
+#endif
+
+#ifndef SWIG
+
+    static wxString*            sm_wxPG_LABEL;
+
+    /** This member is public so scripting language bindings
+        wrapper code can access it freely.
+    */
+    void*                       m_clientData;
+
+protected:
+    /** Returns text for given column.
+    */
+    wxString GetColumnText( unsigned int col ) const;
+
+    /** Returns (direct) child property with given label (or NULL if not found),
+        with hint index.
+
+        @param hintIndex
+        Start looking for the child at this index.
+
+        @remarks
+        Does not support scope (ie. Parent.Child notation).
+    */
+    wxPGProperty* GetPropertyByLabelWH( const wxString& label,
+                                        unsigned int hintIndex ) const;
+
+    /** This is used by Insert etc. */
+    void AddChild2( wxPGProperty* prop,
+                    int index = -1,
+                    bool correct_mode = true );
+
+    void DoSetName(const wxString& str) { m_name = str; }
+
+    // Call for after sub-properties added with AddChild
+    void PrepareSubProperties();
+
+    void SetParentalType( int flag )
+    {
+        m_flags &= ~(wxPG_PROP_PROPERTY|wxPG_PROP_PARENTAL_FLAGS);
+        m_flags |= flag;
+    }
+
+    void SetParentState( wxPropertyGridPageState* pstate )
+        { m_parentState = pstate; }
+
+    // Call after fixed sub-properties added/removed after creation.
+    // if oldSelInd >= 0 and < new max items, then selection is
+    // moved to it.
+    void SubPropsChanged( int oldSelInd = -1 );
+
+    int GetY2( int lh ) const;
+
+    wxString                    m_label;
+    wxString                    m_name;
+    wxPGProperty*               m_parent;
+    wxPropertyGridPageState*        m_parentState;
+
+    wxClientData*               m_clientObject;
+
+    // Overrides editor returned by property class
+    const wxPGEditor*           m_customEditor;
+#if wxUSE_VALIDATORS
+    // Editor is going to get this validator
+    wxValidator*                m_validator;
+#endif
+    // Show this in front of the value
+    //
+    // TODO: Can bitmap be implemented with wxPGCell?
+    wxBitmap*                   m_valueBitmap;
+
+    wxVariant                   m_value;
+    wxPGAttributeStorage        m_attributes;
+    wxArrayPtrVoid              m_children;
+
+    // Extended cell information
+    wxArrayPtrVoid              m_cells;
+
+    // Help shown in statusbar or help box.
+    wxString                    m_helpString;
+
+    // Index in parent's property array.
+    unsigned int                m_arrIndex;
+
+    // If not -1, then overrides m_value
+    int                         m_commonValue;
+
+    FlagType                    m_flags;
+
+    // Maximum length (mainly for string properties). Could be in some sort of
+    // wxBaseStringProperty, but currently, for maximum flexibility and
+    // compatibility, we'll stick it here. Anyway, we had 3 excess bytes to use
+    // so short int will fit in just fine.
+    short                       m_maxLen;
+
+    // Root has 0, categories etc. at that level 1, etc.
+    unsigned char               m_depth;
+
+    // m_depthBgCol indicates width of background colour between margin and item
+    // (essentially this is category's depth, if none then equals m_depth).
+    unsigned char               m_depthBgCol;
+
+    unsigned char               m_bgColIndex; // Background brush index.
+    unsigned char               m_fgColIndex; // Foreground colour index.
+
+private:
+    // Called in constructors.
+    void Init();
+    void Init( const wxString& label, const wxString& name );
+#endif // #ifndef SWIG
+};
+
+// -----------------------------------------------------------------------
+
+//
+// Property class declaration helper macros
+// (wxPGRootPropertyClass and wxPropertyCategory require this).
+//
+
+#define WX_PG_DECLARE_DOGETEDITORCLASS \
+    virtual const wxPGEditor* DoGetEditorClass() const;
+
+#ifndef SWIG
+    #define WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
+        public: \
+            DECLARE_DYNAMIC_CLASS(CLASSNAME) \
+            WX_PG_DECLARE_DOGETEDITORCLASS \
+        private:
+#else
+    #define WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME)
+#endif
+
+// Implements sans constructor function. Also, first arg is class name, not
+// property name.
+#define WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(PROPNAME,T,EDITOR) \
+const wxPGEditor* PROPNAME::DoGetEditorClass() const \
+{ \
+    return wxPGEditor_##EDITOR; \
+}
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+/** @class wxPGRootProperty
+    @ingroup classes
+    Root parent property.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGRootProperty : public wxPGProperty
+{
+public:
+    WX_PG_DECLARE_PROPERTY_CLASS(wxPGRootProperty)
+public:
+
+    /** Constructor. */
+    wxPGRootProperty();
+    virtual ~wxPGRootProperty();
+
+    virtual bool StringToValue( wxVariant&, const wxString&, int ) const
+    {
+        return false;
+    }
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxPropertyCategory
+    @ingroup classes
+    Category (caption) property.
+*/
+class WXDLLIMPEXP_PROPGRID wxPropertyCategory : public wxPGProperty
+{
+    friend class wxPropertyGrid;
+    friend class wxPropertyGridPageState;
+    WX_PG_DECLARE_PROPERTY_CLASS(wxPropertyCategory)
+public:
+
+    /** Default constructor is only used in special cases. */
+    wxPropertyCategory();
+
+    wxPropertyCategory( const wxString& label,
+                        const wxString& name = wxPG_LABEL );
+    ~wxPropertyCategory();
+
+    int GetTextExtent( const wxWindow* wnd, const wxFont& font ) const;
+
+protected:
+    virtual wxString GetValueAsString( int argFlags ) const;
+
+    void SetTextColIndex( unsigned int colInd )
+        { m_capFgColIndex = (wxByte) colInd; }
+    unsigned int GetTextColIndex() const
+        { return (unsigned int) m_capFgColIndex; }
+
+    void CalculateTextExtent( wxWindow* wnd, const wxFont& font );
+
+    int     m_textExtent;  // pre-calculated length of text
+    wxByte  m_capFgColIndex;  // caption text colour index
+
+private:
+    void Init();
+};
+
+#endif  // !SWIG
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+/** @class wxPGChoiceEntry
+    Data of a single wxPGChoices choice.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGChoiceEntry : public wxPGCell
+{
+public:
+    wxPGChoiceEntry();
+    wxPGChoiceEntry( const wxPGChoiceEntry& entry );
+    wxPGChoiceEntry( const wxString& label,
+                     int value = wxPG_INVALID_VALUE )
+        : wxPGCell(), m_value(value)
+    {
+        m_text = label;
+    }
+
+    wxPGChoiceEntry( const wxString& label,
+                     int value,
+                     const wxBitmap& bitmap,
+                     const wxColour& fgCol = wxNullColour,
+                     const wxColour& bgCol = wxNullColour )
+        : wxPGCell(label, bitmap, fgCol, bgCol), m_value(value)
+    {
+    }
+
+    virtual ~wxPGChoiceEntry()
+    {
+    }
+
+    void SetValue( int value ) { m_value = value; }
+
+    int GetValue() const { return m_value; }
+
+    bool HasValue() const { return (m_value != wxPG_INVALID_VALUE); }
+
+protected:
+    int m_value;
+};
+
+
+typedef void* wxPGChoicesId;
+
+class WXDLLIMPEXP_PROPGRID wxPGChoicesData
+{
+    friend class wxPGChoices;
+public:
+    // Constructor sets m_refCount to 1.
+    wxPGChoicesData();
+
+    void CopyDataFrom( wxPGChoicesData* data );
+
+    // Takes ownership of 'item'
+    void Insert( int index, wxPGChoiceEntry* item )
+    {
+        wxArrayPtrVoid::iterator it;
+        if ( index == -1 )
+        {
+            it = m_items.end();
+            index = m_items.size();
+        }
+        else
+        {
+            it = m_items.begin() + index;
+        }
+
+        // Need to fix value?
+        if ( item->GetValue() == wxPG_INVALID_VALUE )
+            item->SetValue(index);
+
+        m_items.insert(it, item);
+    }
+
+    // Delete all entries
+    void Clear();
+
+    size_t GetCount() const
+    {
+        return m_items.size();
+    }
+
+    wxPGChoiceEntry* Item( unsigned int i ) const
+    {
+        return (wxPGChoiceEntry*) m_items[i];
+    }
+
+    void DecRef()
+    {
+        m_refCount--;
+        wxASSERT( m_refCount >= 0 );
+        if ( m_refCount == 0 )
+            delete this;
+    }
+
+private:
+    wxArrayPtrVoid  m_items;
+
+    // So that multiple properties can use the same set
+    int             m_refCount;
+
+    virtual ~wxPGChoicesData();
+};
+
+#define wxPGChoicesEmptyData    ((wxPGChoicesData*)NULL)
+
+#endif // SWIG
+
+
+/** @class wxPGChoices
+
+    Helper class for managing choices of wxPropertyGrid properties.
+    Each entry can have label, value, bitmap, text colour, and background
+    colour.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPGChoices
+{
+public:
+    typedef long ValArrItem;
+
+    /** Default constructor. */
+    wxPGChoices()
+    {
+        Init();
+    }
+
+    /** Copy constructor. */
+    wxPGChoices( const wxPGChoices& a )
+    {
+        if ( a.m_data != wxPGChoicesEmptyData )
+        {
+            m_data = a.m_data;
+            m_data->m_refCount++;
+        }
+    }
+
+    /** Constructor. */
+    wxPGChoices( const wxChar** labels, const long* values = NULL )
+    {
+        Init();
+        Set(labels,values);
+    }
+
+    /** Constructor. */
+    wxPGChoices( const wxArrayString& labels,
+                 const wxArrayInt& values = wxArrayInt() )
+    {
+        Init();
+        Set(labels,values);
+    }
+
+    /** Simple interface constructor. */
+    wxPGChoices( wxPGChoicesData* data )
+    {
+        wxASSERT(data);
+        m_data = data;
+        data->m_refCount++;
+    }
+
+    /** Destructor. */
+    ~wxPGChoices()
+    {
+        Free();
+    }
+
+    /**
+        Adds to current.
+
+        If did not have own copies, creates them now. If was empty, identical
+        to set except that creates copies.
+    */
+    void Add( const wxChar** labels, const ValArrItem* values = NULL );
+
+    /** Version that works with wxArrayString. */
+    void Add( const wxArrayString& arr, const ValArrItem* values = NULL );
+
+    /** Version that works with wxArrayString and wxArrayInt. */
+    void Add( const wxArrayString& arr, const wxArrayInt& arrint );
+
+    /** Adds single item. */
+    wxPGChoiceEntry& Add( const wxString& label,
+                          int value = wxPG_INVALID_VALUE );
+
+    /** Adds a single item, with bitmap. */
+    wxPGChoiceEntry& Add( const wxString& label,
+                          const wxBitmap& bitmap,
+                          int value = wxPG_INVALID_VALUE );
+
+    /** Adds a single item with full entry information. */
+    wxPGChoiceEntry& Add( const wxPGChoiceEntry& entry )
+    {
+        return Insert(entry, -1);
+    }
+
+    /** Adds single item. */
+    wxPGChoiceEntry& AddAsSorted( const wxString& label,
+                                  int value = wxPG_INVALID_VALUE );
+
+    void Assign( const wxPGChoices& a )
+    {
+        AssignData(a.m_data);
+    }
+
+    void AssignData( wxPGChoicesData* data );
+
+    /** Delete all choices. */
+    void Clear()
+    {
+        if ( m_data != wxPGChoicesEmptyData )
+            m_data->Clear();
+    }
+
+    void EnsureData()
+    {
+        if ( m_data == wxPGChoicesEmptyData )
+            m_data = new wxPGChoicesData();
+    }
+
+    /** Gets a unsigned number identifying this list. */
+    wxPGChoicesId GetId() const { return (wxPGChoicesId) m_data; };
+
+    const wxString& GetLabel( size_t ind ) const
+    {
+        wxASSERT( ind >= 0 && ind < GetCount() );
+        return Item(ind).GetText();
+    }
+
+    size_t GetCount () const
+    {
+        wxASSERT_MSG( m_data, "When checking if wxPGChoices is valid, "
+                              "use IsOk() instead of GetCount()" );
+        return m_data->GetCount();
+    }
+
+    int GetValue( size_t ind ) const { return Item(ind).GetValue(); }
+
+    /** Returns array of values matching the given strings. Unmatching strings
+        result in wxPG_INVALID_VALUE entry in array.
+    */
+    wxArrayInt GetValuesForStrings( const wxArrayString& strings ) const;
+
+    /** Returns array of indices matching given strings. Unmatching strings
+        are added to 'unmatched', if not NULL.
+    */
+    wxArrayInt GetIndicesForStrings( const wxArrayString& strings,
+                                     wxArrayString* unmatched = NULL ) const;
+
+    /** Returns true if choices in general are likely to have values
+        (depens on that all entries have values or none has)
+    */
+    bool HasValues() const;
+
+    bool HasValue( unsigned int i ) const
+        { return (m_data->GetCount() > i && m_data->Item(i)->HasValue()); }
+
+    int Index( const wxString& str ) const;
+    int Index( int val ) const;
+
+    /** Inserts single item. */
+    wxPGChoiceEntry& Insert( const wxString& label,
+                             int index,
+                             int value = wxPG_INVALID_VALUE );
+
+    /** Inserts a single item with full entry information. */
+    wxPGChoiceEntry& Insert( const wxPGChoiceEntry& entry, int index );
+
+    /** Returns false if this is a constant empty set of choices,
+        which should not be modified.
+    */
+    bool IsOk() const
+    {
+        return ( m_data != wxPGChoicesEmptyData );
+    }
+
+    const wxPGChoiceEntry& Item( unsigned int i ) const
+    {
+        wxASSERT( IsOk() );
+        return *m_data->Item(i);
+    }
+
+    wxPGChoiceEntry& Item( unsigned int i )
+    {
+        wxASSERT( IsOk() );
+        return *m_data->Item(i);
+    }
+
+    /** Removes count items starting at position nIndex. */
+    void RemoveAt(size_t nIndex, size_t count = 1);
+
+#ifndef SWIG
+    /** Does not create copies for itself. */
+    void Set( const wxChar** labels, const long* values = NULL )
+    {
+        Free();
+        Add(labels,values);
+    }
+
+    /** Version that works with wxArrayString.
+        TODO: Deprecate this.
+    */
+    void Set( wxArrayString& arr, const long* values = (const long*) NULL )
+    {
+        Free();
+        Add(arr,values);
+    }
+#endif // SWIG
+
+    /** Version that works with wxArrayString and wxArrayInt. */
+    void Set( const wxArrayString& labels,
+              const wxArrayInt& values = wxArrayInt() )
+    {
+        Free();
+        if ( &values )
+            Add(labels,values);
+        else
+            Add(labels);
+    }
+
+    // Creates exclusive copy of current choices
+    void SetExclusive()
+    {
+        if ( m_data->m_refCount != 1 )
+        {
+            wxPGChoicesData* data = new wxPGChoicesData();
+            data->CopyDataFrom(m_data);
+            Free();
+            m_data = data;
+        }
+    }
+
+    // Returns data, increases refcount.
+    wxPGChoicesData* GetData()
+    {
+        wxASSERT( m_data->m_refCount != 0xFFFFFFF );
+        m_data->m_refCount++;
+        return m_data;
+    }
+
+    // Returns plain data ptr - no refcounting stuff is done.
+    wxPGChoicesData* GetDataPtr() const { return m_data; }
+
+    // Changes ownership of data to you.
+    wxPGChoicesData* ExtractData()
+    {
+        wxPGChoicesData* data = m_data;
+        m_data = wxPGChoicesEmptyData;
+        return data;
+    }
+
+    wxArrayString GetLabels() const;
+
+#ifndef SWIG
+    void operator= (const wxPGChoices& a)
+    {
+        AssignData(a.m_data);
+    }
+
+    wxPGChoiceEntry& operator[](unsigned int i)
+    {
+        return Item(i);
+    }
+
+    const wxPGChoiceEntry& operator[](unsigned int i) const
+    {
+        return Item(i);
+    }
+
+protected:
+    wxPGChoicesData*    m_data;
+
+    void Init();
+    void Free();
+#endif  // !SWIG
+};
+
+inline bool wxPGProperty::SetChoices( const wxArrayString& labels,
+                                      const wxArrayInt& values )
+{
+    wxPGChoices chs(labels, values);
+    return SetChoices(chs);
+}
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_PROPERTY_H_
diff --git a/include/wx/propgrid/propgrid.h b/include/wx/propgrid/propgrid.h
new file mode 100644 (file)
index 0000000..2666cee
--- /dev/null
@@ -0,0 +1,2222 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgrid/propgrid.h
+// Purpose:     wxPropertyGrid
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2004-09-25
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PROPGRID_PROPGRID_H_
+#define _WX_PROPGRID_PROPGRID_H_
+
+#include "wx/dcclient.h"
+#include "wx/scrolwin.h"
+#include "wx/tooltip.h"
+#include "wx/datetime.h"
+
+#include "wx/propgrid/property.h"
+#include "wx/propgrid/propgridiface.h"
+
+
+#ifndef SWIG
+extern WXDLLIMPEXP_PROPGRID const wxChar *wxPropertyGridNameStr;
+#endif
+
+
+// -----------------------------------------------------------------------
+// Global variables
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+// This is required for sharing common global variables.
+class WXDLLIMPEXP_PROPGRID wxPGGlobalVarsClass
+{
+public:
+
+    wxPGGlobalVarsClass();
+    ~wxPGGlobalVarsClass();
+
+    // Used by advprops, but here to make things easier.
+    wxString            m_pDefaultImageWildcard;
+
+    // Map of editor class instances (keys are name string).
+    wxPGHashMapS2P      m_mapEditorClasses;
+
+#if wxUSE_VALIDATORS
+    wxArrayPtrVoid      m_arrValidators; // These wxValidators need to be freed
+#endif
+
+    wxPGHashMapS2P      m_dictPropertyClassInfo; // PropertyName -> ClassInfo
+
+    wxPGChoices*        m_fontFamilyChoices;
+
+    // Replace with your own to affect all properties using default renderer.
+    wxPGCellRenderer*   m_defaultRenderer;
+
+    // These are for fast variant type comparison
+    wxPGVariantDataClassInfo wxVariantClassInfo_long;
+    wxPGVariantDataClassInfo wxVariantClassInfo_string;
+    wxPGVariantDataClassInfo wxVariantClassInfo_double;
+    wxPGVariantDataClassInfo wxVariantClassInfo_bool;
+    wxPGVariantDataClassInfo wxVariantClassInfo_arrstring;
+    wxPGVariantDataClassInfo wxVariantClassInfo_wxobject;
+    wxPGVariantDataClassInfo wxVariantClassInfo_list;
+    wxPGVariantDataClassInfo wxVariantClassInfo_wxColour;
+#if wxUSE_DATETIME
+    wxPGVariantDataClassInfo wxVariantClassInfo_datetime;
+#endif
+
+    wxPGChoices         m_boolChoices;
+
+    wxVariant           m_vEmptyString;
+    wxVariant           m_vZero;
+    wxVariant           m_vMinusOne;
+    wxVariant           m_vTrue;
+    wxVariant           m_vFalse;
+
+    // Cached constant strings
+    wxPGCachedString    m_strMin;
+    wxPGCachedString    m_strMax;
+    wxPGCachedString    m_strUnits;
+    wxPGCachedString    m_strInlineHelp;
+
+    // If true then some things are automatically translated
+    bool                m_autoGetTranslation;
+
+    // > 0 if errors cannot or should not be shown in statusbar etc.
+    int                 m_offline;
+
+    int                 m_extraStyle;  // global extra style
+
+#ifdef __WXDEBUG__
+    int                 m_warnings;
+#endif
+
+    int HasExtraStyle( int style ) const { return (m_extraStyle & style); }
+};
+
+extern WXDLLIMPEXP_PROPGRID wxPGGlobalVarsClass* wxPGGlobalVars;
+
+#define wxPGIsVariantType(VARIANT, T) \
+    ((VARIANT).GetData() && \
+     typeid(*(VARIANT).GetData()) == *wxPGGlobalVars->wxVariantClassInfo_##T)
+
+#define wxPGIsVariantClassInfo(CLASSINFO, T) \
+    (*CLASSINFO == *wxPGGlobalVars->wxVariantClassInfo_##T)
+
+#define wxPGVariant_EmptyString     (wxPGGlobalVars->m_vEmptyString)
+#define wxPGVariant_Zero            (wxPGGlobalVars->m_vZero)
+#define wxPGVariant_MinusOne        (wxPGGlobalVars->m_vMinusOne)
+#define wxPGVariant_True            (wxPGGlobalVars->m_vTrue)
+#define wxPGVariant_False           (wxPGGlobalVars->m_vFalse)
+
+#define wxPGVariant_Bool(A)     (A?wxPGVariant_True:wxPGVariant_False)
+
+#define wxPGVariantAssign(A, B) A = B
+
+#endif // !SWIG
+
+// -----------------------------------------------------------------------
+
+/** @section propgrid_window_styles wxPropertyGrid Window Styles
+
+    SetWindowStyleFlag method can be used to modify some of these at run-time.
+    @{
+*/
+enum wxPG_WINDOW_STYLES
+{
+
+/** This will cause Sort() automatically after an item is added.
+    When inserting a lot of items in this mode, it may make sense to
+    use Freeze() before operations and Thaw() afterwards to increase
+    performance.
+*/
+wxPG_AUTO_SORT                      = 0x00000010,
+
+/** Categories are not initially shown (even if added).
+    IMPORTANT NOTE: If you do not plan to use categories, then this
+    style will waste resources.
+    This flag can also be changed using wxPropertyGrid::EnableCategories method.
+*/
+wxPG_HIDE_CATEGORIES                = 0x00000020,
+
+/* This style combines non-categoric mode and automatic sorting.
+*/
+wxPG_ALPHABETIC_MODE                = (wxPG_HIDE_CATEGORIES|wxPG_AUTO_SORT),
+
+/** Modified values are shown in bold font. Changing this requires Refresh()
+    to show changes.
+*/
+wxPG_BOLD_MODIFIED                  = 0x00000040,
+
+/** When wxPropertyGrid is resized, splitter moves to the center. This
+    behavior stops once the user manually moves the splitter.
+*/
+wxPG_SPLITTER_AUTO_CENTER           = 0x00000080,
+
+/** Display tooltips for cell text that cannot be shown completely. If
+    wxUSE_TOOLTIPS is 0, then this doesn't have any effect.
+*/
+wxPG_TOOLTIPS                       = 0x00000100,
+
+/** Disables margin and hides all expand/collapse buttons that would appear
+    outside the margin (for sub-properties). Toggling this style automatically
+    expands all collapsed items.
+*/
+wxPG_HIDE_MARGIN                    = 0x00000200,
+
+/** This style prevents user from moving the splitter.
+*/
+wxPG_STATIC_SPLITTER                = 0x00000400,
+
+/** Combination of other styles that make it impossible for user to modify
+    the layout.
+*/
+wxPG_STATIC_LAYOUT                  = (wxPG_HIDE_MARGIN|wxPG_STATIC_SPLITTER),
+
+/** Disables wxTextCtrl based editors for properties which
+    can be edited in another way.
+
+    Equals calling wxPropertyGrid::LimitPropertyEditing for all added
+    properties.
+*/
+wxPG_LIMITED_EDITING                = 0x00000800,
+
+/** wxPropertyGridManager only: Show toolbar for mode and page selection. */
+wxPG_TOOLBAR                        = 0x00001000,
+
+/** wxPropertyGridManager only: Show adjustable text box showing description
+    or help text, if available, for currently selected property.
+*/
+wxPG_DESCRIPTION                    = 0x00002000
+
+};
+
+enum wxPG_EX_WINDOW_STYLES
+{
+
+/**
+    NOTE: wxPG_EX_xxx are extra window styles and must be set using
+    SetExtraStyle() member function.
+
+    Speeds up switching to wxPG_HIDE_CATEGORIES mode. Initially, if
+    wxPG_HIDE_CATEGORIES is not defined, the non-categorized data storage is
+    not activated, and switching the mode first time becomes somewhat slower.
+    wxPG_EX_INIT_NOCAT activates the non-categorized data storage right away.
+    IMPORTANT NOTE: If you do plan not switching to non-categoric mode, or if
+    you don't plan to use categories at all, then using this style will result
+    in waste of resources.
+
+*/
+wxPG_EX_INIT_NOCAT                  = 0x00001000,
+
+/** Extended window style that sets wxPropertyGridManager toolbar to not
+    use flat style.
+*/
+wxPG_EX_NO_FLAT_TOOLBAR             = 0x00002000,
+
+/** Shows alphabetic/categoric mode buttons from toolbar.
+*/
+wxPG_EX_MODE_BUTTONS                = 0x00008000,
+
+/** Show property help strings as tool tips instead as text on the status bar.
+    You can set the help strings using SetPropertyHelpString member function.
+*/
+wxPG_EX_HELP_AS_TOOLTIPS            = 0x00010000,
+
+/** Prevent TAB from focusing to wxButtons. This behavior was default
+    in version 1.2.0 and earlier.
+    NOTE! Tabbing to button doesn't work yet. Problem seems to be that on wxMSW
+      atleast the button doesn't properly propagate key events (yes, I'm using
+      wxWANTS_CHARS).
+*/
+//wxPG_EX_NO_TAB_TO_BUTTON            = 0x00020000,
+
+/** Allows relying on native double-buffering.
+*/
+wxPG_EX_NATIVE_DOUBLE_BUFFERING         = 0x00080000,
+
+/** Set this style to let user have ability to set values of properties to
+    unspecified state. Same as setting wxPG_PROP_AUTO_UNSPECIFIED for
+    all properties.
+*/
+wxPG_EX_AUTO_UNSPECIFIED_VALUES         = 0x00200000,
+
+/**
+    If this style is used, built-in attributes (such as wxPG_FLOAT_PRECISION
+    and wxPG_STRING_PASSWORD) are not stored into property's attribute storage
+    (thus they are not readable).
+
+    Note that this option is global, and applies to all wxPG property
+    containers.
+*/
+wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES    = 0x00400000,
+
+/**
+    With this style Validators on properties will work same as in
+    wxPropertyGrid 1.2.
+*/
+wxPG_EX_LEGACY_VALIDATORS               = 0x00800000,
+
+/** Hides page selection buttons from toolbar.
+*/
+wxPG_EX_HIDE_PAGE_BUTTONS               = 0x01000000
+
+};
+
+/** Combines various styles.
+*/
+#define wxPG_DEFAULT_STYLE          (0)
+
+/** Combines various styles.
+*/
+#define wxPGMAN_DEFAULT_STYLE       (0)
+
+/** @}
+*/
+
+// -----------------------------------------------------------------------
+
+//
+// Ids for sub-controls
+// NB: It should not matter what these are.
+#define wxPG_SUBID1                     2
+#define wxPG_SUBID2                     3
+#define wxPG_SUBID_TEMP1                4
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGCommonValue
+
+    wxPropertyGrid stores information about common values in these
+    records.
+
+    NB: Common value feature is not complete, and thus not mentioned in
+        documentation.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGCommonValue
+{
+public:
+
+    wxPGCommonValue( const wxString& label, wxPGCellRenderer* renderer )
+    {
+        m_label = label;
+        m_renderer = renderer;
+        renderer->IncRef();
+    }
+    virtual ~wxPGCommonValue()
+    {
+        m_renderer->DecRef();
+    }
+
+    virtual wxString GetEditableText() const { return m_label; }
+    const wxString& GetLabel() const { return m_label; }
+    wxPGCellRenderer* GetRenderer() const { return m_renderer; }
+
+protected:
+    wxString            m_label;
+    wxPGCellRenderer*   m_renderer;
+};
+
+// -----------------------------------------------------------------------
+
+/** @section propgrid_vfbflags wxPropertyGrid Validation Failure Behavior Flags
+    @{
+*/
+
+enum wxPG_VALIDATION_FAILURE_BEHAVIOR_FLAGS
+{
+
+/** Prevents user from leaving property unless value is valid. If this
+    behavior flag is not used, then value change is instead cancelled.
+*/
+wxPG_VFB_STAY_IN_PROPERTY           = 0x01,
+
+/** Calls wxBell() on validation failure.
+*/
+wxPG_VFB_BEEP                       = 0x02,
+
+/** Cell with invalid value will be marked (with red colour).
+*/
+wxPG_VFB_MARK_CELL                  = 0x04,
+
+/** Display customizable text message explaining the situation.
+*/
+wxPG_VFB_SHOW_MESSAGE               = 0x08,
+
+/** Defaults. */
+wxPG_VFB_DEFAULT                    = wxPG_VFB_STAY_IN_PROPERTY|wxPG_VFB_BEEP,
+
+/** Only used internally. */
+wxPG_VFB_UNDEFINED                  = 0x80
+
+};
+
+/** @}
+*/
+
+typedef wxByte wxPGVFBFlags;
+
+/** @class wxPGValidationInfo
+
+    Used to convey validation information to and from functions that
+    actually perform validation.
+*/
+struct wxPGValidationInfo
+{
+    /** Value to be validated.
+    */
+    wxVariant*      m_pValue;
+
+    /** Message displayed on validation failure.
+    */
+    wxString        m_failureMessage;
+
+    /** Validation failure behavior. Use wxPG_VFB_XXX flags.
+    */
+    wxPGVFBFlags    m_failureBehavior;
+
+    wxPGVFBFlags GetFailureBehavior() const { return m_failureBehavior; }
+
+    void SetFailureBehavior(wxPGVFBFlags failureBehavior)
+        { m_failureBehavior = failureBehavior; }
+
+    const wxString& GetFailureMessage() const { return m_failureMessage; }
+
+    void SetFailureMessage(const wxString& message)
+        { m_failureMessage = message; }
+};
+
+// -----------------------------------------------------------------------
+
+/** @section propgrid_pgactions wxPropertyGrid Action Identifiers
+
+    These are used with wxPropertyGrid::AddActionTrigger() and
+    wxPropertyGrid::ClearActionTriggers().
+    @{
+*/
+
+enum wxPG_KEYBOARD_ACTIONS
+{
+    wxPG_ACTION_INVALID = 0,
+    wxPG_ACTION_NEXT_PROPERTY,
+    wxPG_ACTION_PREV_PROPERTY,
+    wxPG_ACTION_EXPAND_PROPERTY,
+    wxPG_ACTION_COLLAPSE_PROPERTY,
+    wxPG_ACTION_CANCEL_EDIT,
+    wxPG_ACTION_CUT,
+    wxPG_ACTION_COPY,
+    wxPG_ACTION_PASTE,
+    wxPG_ACTION_MAX
+};
+
+/** @}
+*/
+
+// -----------------------------------------------------------------------
+
+
+// wxPropertyGrid::DoSelectProperty flags (selFlags)
+
+// Focuses to created editor
+#define wxPG_SEL_FOCUS      0x01
+// Forces deletion and recreation of editor
+#define wxPG_SEL_FORCE      0x02
+// For example, doesn't cause EnsureVisible
+#define wxPG_SEL_NONVISIBLE 0x04
+// Do not validate editor's value before selecting
+#define wxPG_SEL_NOVALIDATE 0x08
+// Property being deselected is about to be deleted
+#define wxPG_SEL_DELETING   0x10
+// Property's values was set to unspecified by the user
+#define wxPG_SEL_SETUNSPEC  0x20
+// Property's event handler changed the value
+#define wxPG_SEL_DIALOGVAL  0x40
+
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+// Internal flags
+#define wxPG_FL_INITIALIZED                 0x0001
+// Set when creating editor controls if it was clicked on.
+#define wxPG_FL_ACTIVATION_BY_CLICK         0x0002
+#define wxPG_FL_DONT_CENTER_SPLITTER        0x0004
+#define wxPG_FL_FOCUSED                     0x0008
+#define wxPG_FL_MOUSE_CAPTURED              0x0010
+#define wxPG_FL_MOUSE_INSIDE                0x0020
+#define wxPG_FL_VALUE_MODIFIED              0x0040
+// don't clear background of m_wndEditor
+#define wxPG_FL_PRIMARY_FILLS_ENTIRE        0x0080
+// currently active editor uses custom image
+#define wxPG_FL_CUR_USES_CUSTOM_IMAGE       0x0100
+// cell colours override selection colours for selected cell
+#define wxPG_FL_CELL_OVERRIDES_SEL          0x0200
+#define wxPG_FL_SCROLLED                    0x0400
+// set when all added/inserted properties get hideable flag
+#define wxPG_FL_ADDING_HIDEABLES            0x0800
+// Disables showing help strings on statusbar.
+#define wxPG_FL_NOSTATUSBARHELP             0x1000
+// Marks that we created the state, so we have to destroy it too.
+#define wxPG_FL_CREATEDSTATE                0x2000
+// Set if scrollbar's existence was detected in last onresize.
+#define wxPG_FL_SCROLLBAR_DETECTED          0x4000
+// Set if wxPGMan requires redrawing of description text box.
+#define wxPG_FL_DESC_REFRESH_REQUIRED       0x8000
+// Set if contained in wxPropertyGridManager
+#define wxPG_FL_IN_MANAGER                  0x00020000
+// Set after wxPropertyGrid is shown in its initial good size
+#define wxPG_FL_GOOD_SIZE_SET               0x00040000
+// Next navigation key event will get ignored
+#define wxPG_FL_IGNORE_NEXT_NAVKEY          0x00080000
+// Set when in SelectProperty.
+#define wxPG_FL_IN_SELECT_PROPERTY          0x00100000
+// Set when help string is shown in status bar
+#define wxPG_FL_STRING_IN_STATUSBAR         0x00200000
+// Splitter position has been custom-set by the user
+#define wxPG_FL_SPLITTER_PRE_SET            0x00400000
+// Validation failed. Clear on modify event.
+#define wxPG_FL_VALIDATION_FAILED           0x00800000
+// Set if selected is fully painted (ie. both image and text)
+//#define wxPG_FL_SELECTED_IS_FULL_PAINT      0x01000000
+// Set after page has been inserted to manager
+#define wxPG_MAN_FL_PAGE_INSERTED           0x02000000
+// Active editor control is abnormally large
+#define wxPG_FL_ABNORMAL_EDITOR             0x04000000
+// Recursion guard for OnCustomEditorEvent
+#define wxPG_FL_IN_ONCUSTOMEDITOREVENT      0x08000000
+#define wxPG_FL_VALUE_CHANGE_IN_EVENT       0x10000000
+// Editor control width should not change on resize
+#define wxPG_FL_FIXED_WIDTH_EDITOR          0x20000000
+// Width of panel can be different than width of grid
+#define wxPG_FL_HAS_VIRTUAL_WIDTH           0x40000000
+// Prevents RecalculateVirtualSize re-entrancy
+#define wxPG_FL_RECALCULATING_VIRTUAL_SIZE  0x80000000
+
+#endif // #ifndef SWIG
+
+#if !defined(__wxPG_SOURCE_FILE__) && !defined(SWIG)
+    // Reduce compile time, but still include in user app
+    #include "wx/propgrid/props.h"
+#endif
+
+// -----------------------------------------------------------------------
+
+/** @class wxPropertyGrid
+
+    wxPropertyGrid is a specialized grid for editing properties
+    such as strings, numbers, flagsets, fonts, and colours. wxPropertySheet
+    used to do the very same thing, but it hasn't been updated for a while
+    and it is currently deprecated.
+
+    Please note that most member functions are inherited and as such not
+    documented on this page. This means you will probably also want to read
+    wxPropertyGridInterface class reference.
+
+    See also @ref overview_propgrid.
+
+    @section propgrid_window_styles_ Window Styles
+
+    See @ref propgrid_window_styles.
+
+    @section propgrid_event_handling Event Handling
+
+    To process input from a propertygrid control, use these event handler
+    macros to direct input to member functions that take a wxPropertyGridEvent
+    argument.
+
+    @beginEventTable{wxPropertyGridEvent}
+    @event{EVT_PG_SELECTED (id, func)}
+        Respond to wxEVT_PG_SELECTED event, generated when property value
+        has been changed by user.
+    @event{EVT_PG_CHANGING(id, func)}
+        Respond to wxEVT_PG_CHANGING event, generated when property value
+        is about to be changed by user. Use wxPropertyGridEvent::GetValue()
+        to take a peek at the pending value, and wxPropertyGridEvent::Veto()
+        to prevent change from taking place, if necessary.
+    @event{EVT_PG_HIGHLIGHTED(id, func)}
+        Respond to wxEVT_PG_HIGHLIGHTED event, which occurs when mouse
+        moves over a property. Event's property is NULL if hovered area does
+        not belong to any property.
+    @event{EVT_PG_RIGHT_CLICK(id, func)}
+        Respond to wxEVT_PG_RIGHT_CLICK event, which occurs when property is
+        clicked on with right mouse button.
+    @event{EVT_PG_DOUBLE_CLICK(id, func)}
+        Respond to wxEVT_PG_DOUBLE_CLICK event, which occurs when property is
+        double-clicked onwith left mouse button.
+    @event{EVT_PG_ITEM_COLLAPSED(id, func)}
+        Respond to wxEVT_PG_ITEM_COLLAPSED event, generated when user collapses
+        a property or category..
+    @event{EVT_PG_ITEM_EXPANDED(id, func)}
+        Respond to wxEVT_PG_ITEM_EXPANDED event, generated when user expands
+        a property or category..
+    @endEventTable
+
+    @remarks
+
+    - Use Freeze() and Thaw() respectively to disable and enable drawing. This
+      will also delay sorting etc. miscellaneous calculations to the last
+      possible moment.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID
+    wxPropertyGrid : public wxScrolledWindow, public wxPropertyGridInterface
+{
+    friend class wxPropertyGridPageState;
+    friend class wxPropertyGridInterface;
+    friend class wxPropertyGridManager;
+    friend class wxPGCanvas;
+
+#ifndef SWIG
+    DECLARE_DYNAMIC_CLASS(wxPropertyGrid)
+#endif
+public:
+
+#ifdef SWIG
+    %pythonAppend wxPropertyGrid {
+        self._setOORInfo(self)
+        self.DoDefaultTypeMappings()
+        self.edited_objects = {}
+        self.DoDefaultValueTypeMappings()
+        if not hasattr(self.__class__,'_vt2setter'):
+            self.__class__._vt2setter = {}
+    }
+    %pythonAppend wxPropertyGrid() ""
+
+    wxPropertyGrid( wxWindow *parent, wxWindowID id = wxID_ANY,
+                    const wxPoint& pos = wxDefaultPosition,
+                    const wxSize& size = wxDefaultSize,
+                    long style = wxPG_DEFAULT_STYLE,
+                    const wxChar* name = wxPyPropertyGridNameStr );
+    %RenameCtor(PrePropertyGrid,  wxPropertyGrid());
+#else
+
+    /**
+        Two step constructor.
+
+        Call Create when this constructor is called to build up the
+        wxPropertyGrid
+    */
+    wxPropertyGrid();
+
+    /** The default constructor. The styles to be used are styles valid for
+        the wxWindow and wxScrolledWindow.
+        @see @link wndflags Additional Window Styles@endlink
+    */
+    wxPropertyGrid( wxWindow *parent, wxWindowID id = wxID_ANY,
+                    const wxPoint& pos = wxDefaultPosition,
+                    const wxSize& size = wxDefaultSize,
+                    long style = wxPG_DEFAULT_STYLE,
+                    const wxChar* name = wxPropertyGridNameStr );
+
+    /** Destructor */
+    virtual ~wxPropertyGrid();
+#endif
+
+    /** Adds given key combination to trigger given action.
+        @param action
+            Which action to trigger. See @link pgactions List of list of
+            wxPropertyGrid actions@endlink.
+    */
+    void AddActionTrigger( int action, int keycode, int modifiers = 0 );
+
+    /**
+        This static function enables or disables automatic use of
+        wxGetTranslation for following strings: wxEnumProperty list labels,
+        wxFlagsProperty sub-property labels.
+
+        Default is false.
+    */
+    static void AutoGetTranslation( bool enable );
+
+    /**
+        Changes value of a property, as if from an editor.
+
+        Use this instead of SetPropertyValue() if you need the value to run
+        through validation process, and also send the property change event.
+
+        @return
+        Returns true if value was successfully changed.
+    */
+    bool ChangePropertyValue( wxPGPropArg id, wxVariant newValue );
+
+    /**
+        Centers the splitter.
+
+        If argument is true, automatic splitter centering is enabled (only
+        applicapple if style wxPG_SPLITTER_AUTO_CENTER was defined).
+    */
+    void CenterSplitter( bool enable_auto_centering = false );
+
+    /** Deletes all properties.
+    */
+    virtual void Clear();
+
+    /** Clears action triggers for given action.
+        @param action
+            Which action to trigger. See @link pgactions List of list of
+            wxPropertyGrid actions@endlink.
+    */
+    void ClearActionTriggers( int action );
+
+    /** Forces updating the value of property from the editor control.
+
+        Note that wxEVT_PG_CHANGING and wxEVT_PG_CHANGED are dispatched using
+        ProcessEvent, meaning your event handlers will be called immediately.
+
+        @return
+        Returns true if anything was changed.
+    */
+    virtual bool CommitChangesFromEditor( wxUint32 flags = 0 );
+
+    /**
+        Two step creation.
+
+        Whenever the control is created without any parameters, use Create to
+        actually create it. Don't access the control's public methods before
+        this is called @see @link wndflags Additional Window Styles@endlink
+    */
+    bool Create( wxWindow *parent, wxWindowID id = wxID_ANY,
+                 const wxPoint& pos = wxDefaultPosition,
+                 const wxSize& size = wxDefaultSize,
+                 long style = wxPG_DEFAULT_STYLE,
+                 const wxChar* name = wxPropertyGridNameStr );
+
+    /**
+        Call when editor widget's contents is modified.
+
+        For example, this is called when changes text in wxTextCtrl (used in
+        wxStringProperty and wxIntProperty).
+
+        @remarks
+        This function should only be called by custom properties.
+
+        @see wxPGProperty::OnEvent()
+    */
+    void EditorsValueWasModified() { m_iFlags |= wxPG_FL_VALUE_MODIFIED; }
+
+    /** Reverse of EditorsValueWasModified().
+
+        @remarks
+        This function should only be called by custom properties.
+    */
+    void EditorsValueWasNotModified()
+    {
+        m_iFlags &= ~(wxPG_FL_VALUE_MODIFIED);
+    }
+
+    /**
+        Enables or disables (shows/hides) categories according to parameter
+        enable.
+     */
+    bool EnableCategories( bool enable );
+
+    /** Scrolls and/or expands items to ensure that the given item is visible.
+        Returns true if something was actually done.
+    */
+    bool EnsureVisible( wxPGPropArg id );
+
+    /**
+        Reduces column sizes to minimum possible that contents are still
+        visibly (naturally some margin space will be applied as well).
+
+        @return
+        Minimum size for the grid to still display everything.
+
+        @remarks
+        Does not work well with wxPG_SPLITTER_AUTO_CENTER window style.
+
+        This function only works properly if grid size prior to call was already
+        fairly large.
+
+        Note that you can also get calculated column widths by calling
+        GetState->GetColumnWidth() immediately after this function returns.
+    */
+    wxSize FitColumns()
+    {
+        wxSize sz = m_pState->DoFitColumns();
+        return sz;
+    }
+
+    /**
+        Returns wxWindow that the properties are painted on, and which should
+        be used as the parent for editor controls.
+    */
+    wxPanel* GetPanel() const
+    {
+        return m_canvas;
+    }
+
+    /** Returns current category caption background colour. */
+    wxColour GetCaptionBackgroundColour() const { return m_colCapBack; }
+
+    wxFont& GetCaptionFont() { return m_captionFont; }
+
+    const wxFont& GetCaptionFont() const { return m_captionFont; }
+
+    /** Returns current category caption text colour. */
+    wxColour GetCaptionForegroundColour() const { return m_colCapFore; }
+
+    /** Returns current cell background colour. */
+    wxColour GetCellBackgroundColour() const { return m_colPropBack; }
+
+    /** Returns current cell text colour when disabled. */
+    wxColour GetCellDisabledTextColour() const { return m_colDisPropFore; }
+
+    /** Returns current cell text colour. */
+    wxColour GetCellTextColour() const { return m_colPropFore; }
+
+    /** Returns number of columns on current page. */
+    int GetColumnCount() const
+    {
+        return m_pState->m_colWidths.size();
+    }
+
+    /** Returns colour of empty space below properties. */
+    wxColour GetEmptySpaceColour() const { return m_colEmptySpace; }
+
+    /** Returns height of highest characters of used font. */
+    int GetFontHeight() const { return m_fontHeight; }
+
+    /** Returns pointer to itself. Dummy function that enables same kind
+        of code to use wxPropertyGrid and wxPropertyGridManager.
+    */
+    wxPropertyGrid* GetGrid() { return this; }
+
+    /** Returns rectangle of custom paint image.
+    */
+    wxRect GetImageRect( wxPGProperty* p, int item ) const;
+
+    /** Returns size of the custom paint image in front of property.
+        If no argument is given, returns preferred size.
+    */
+    wxSize GetImageSize( wxPGProperty* p = NULL, int item = -1 ) const;
+
+    //@{
+    /** Returns last item which could be iterated using given flags.
+        @param flags
+        See @ref propgrid_iterator_flags.
+    */
+    wxPGProperty* GetLastItem( int flags = wxPG_ITERATE_DEFAULT )
+    {
+        return m_pState->GetLastItem(flags);
+    }
+
+    const wxPGProperty* GetLastItem( int flags = wxPG_ITERATE_DEFAULT ) const
+    {
+        return m_pState->GetLastItem(flags);
+    }
+    //@}
+
+    /** Returns colour of lines between cells. */
+    wxColour GetLineColour() const { return m_colLine; }
+
+    /** Returns background colour of margin. */
+    wxColour GetMarginColour() const { return m_colMargin; }
+
+    /** Returns cell background colour of a property. */
+    wxColour GetPropertyBackgroundColour( wxPGPropArg id ) const;
+
+    /** Returns cell background colour of a property. */
+    wxColour GetPropertyTextColour( wxPGPropArg id ) const;
+
+    /** Returns "root property". It does not have name, etc. and it is not
+        visible. It is only useful for accessing its children.
+    */
+    wxPGProperty* GetRoot() const { return m_pState->m_properties; }
+
+    /** Returns height of a single grid row (in pixels). */
+    int GetRowHeight() const { return m_lineHeight; }
+
+    /** Returns currently selected property. */
+    wxPGProperty* GetSelectedProperty () const { return GetSelection(); }
+
+    /** Returns currently selected property. */
+    wxPGProperty* GetSelection() const
+    {
+        return m_selected;
+    }
+
+    /** Returns current selection background colour. */
+    wxColour GetSelectionBackgroundColour() const { return m_colSelBack; }
+
+    /** Returns current selection text colour. */
+    wxColour GetSelectionForegroundColour() const { return m_colSelFore; }
+
+    /** Returns current splitter x position. */
+    int GetSplitterPosition() const
+        { return m_pState->DoGetSplitterPosition(0); }
+
+    /** Returns wxTextCtrl active in currently selected property, if any. Takes
+        into account wxOwnerDrawnComboBox.
+    */
+    wxTextCtrl* GetEditorTextCtrl() const;
+
+    wxPGValidationInfo& GetValidationInfo()
+    {
+        return m_validationInfo;
+    }
+
+    /** Returns current vertical spacing. */
+    int GetVerticalSpacing() const { return (int)m_vspacing; }
+
+    /** Returns true if editor's value was marked modified.
+    */
+    bool IsEditorsValueModified() const
+        { return  ( m_iFlags & wxPG_FL_VALUE_MODIFIED ) ? true : false; }
+
+    /** Returns information about arbitrary position in the grid.
+
+        For wxPropertyGridHitTestResult definition, see
+        wxPropertyGridPageState::HitTest().
+    */
+    wxPropertyGridHitTestResult HitTest( const wxPoint& pt ) const;
+
+    /** Returns true if any property has been modified by the user. */
+    bool IsAnyModified() const { return (m_pState->m_anyModified>0); }
+
+    /**
+        Returns true if updating is frozen (ie Freeze() called but not yet
+        Thaw() ).
+     */
+    bool IsFrozen() const { return (m_frozen>0)?true:false; }
+
+    /** Redraws given property.
+    */
+    virtual void RefreshProperty( wxPGProperty* p );
+
+#ifndef SWIG
+    /** Registers a new editor class.
+        @return
+        Pointer to the editor class instance that should be used.
+    */
+    static wxPGEditor* RegisterEditorClass( wxPGEditor* editor,
+                                            const wxString& name,
+                                            bool noDefCheck = false );
+#endif
+
+    /** Resets all colours to the original system values.
+    */
+    void ResetColours();
+
+    /**
+        Selects a property.
+        Editor widget is automatically created, but not focused unless focus is
+        true. This will generate wxEVT_PG_SELECT event.
+        @param id
+            Property to select.
+        @return
+            True if selection finished successfully. Usually only fails if
+            current value in editor is not valid.
+        @see wxPropertyGrid::Unselect
+    */
+    bool SelectProperty( wxPGPropArg id, bool focus = false )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return DoSelectProperty(p,focus?wxPG_SEL_FOCUS:0);
+    }
+
+    /** Changes keyboard shortcut to push the editor button.
+        @remarks
+        You can set default with keycode 0. Good value for the platform is
+        guessed, but don't expect it to be very accurate.
+    */
+    void SetButtonShortcut( int keycode,
+                            bool ctrlDown = false,
+                            bool altDown = false );
+
+    /** Sets category caption background colour. */
+    void SetCaptionBackgroundColour(const wxColour& col);
+
+    /** Sets category caption text colour. */
+    void SetCaptionTextColour(const wxColour& col);
+
+    /** Sets default cell background colour - applies to property cells.
+        Note that appearance of editor widgets may not be affected.
+    */
+    void SetCellBackgroundColour(const wxColour& col);
+
+    /** Sets cell text colour for disabled properties.
+    */
+    void SetCellDisabledTextColour(const wxColour& col);
+
+    /** Sets default cell text colour - applies to property name and value text.
+        Note that appearance of editor widgets may not be affected.
+    */
+    void SetCellTextColour(const wxColour& col);
+
+    /** Set number of columns (2 or more).
+    */
+    void SetColumnCount( int colCount )
+    {
+        m_pState->SetColumnCount(colCount);
+        Refresh();
+    }
+
+    /**
+        Sets the 'current' category - Append will add non-category properties
+        under it.
+    */
+    void SetCurrentCategory( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        wxPropertyCategory* pc = (wxPropertyCategory*)p;
+#ifdef __WXDEBUG__
+        if ( pc ) wxASSERT( pc->IsCategory() );
+#endif
+        m_pState->m_currentCategory = pc;
+    }
+
+    /** Sets colour of empty space below properties. */
+    void SetEmptySpaceColour(const wxColour& col);
+
+    /** Sets colour of lines between cells. */
+    void SetLineColour(const wxColour& col);
+
+    /** Sets background colour of margin. */
+    void SetMarginColour(const wxColour& col);
+
+    /** Sets property attribute for all applicapple properties.
+        Be sure to use this method only after all properties have been
+        added to the grid.
+    */
+    void SetPropertyAttributeAll( const wxString& attrName, wxVariant value );
+
+    /** Sets background colour of property and all its children. Colours of
+        captions are not affected. Background brush cache is optimized for often
+        set colours to be set last.
+    */
+    void SetPropertyBackgroundColour( wxPGPropArg id, const wxColour& col );
+
+    /** Resets text and background colours of given property.
+    */
+    void SetPropertyColoursToDefault( wxPGPropArg id );
+
+    /** Sets text colour of property and all its children.
+    */
+    void SetPropertyTextColour( wxPGPropArg id,
+                                const wxColour& col,
+                                bool recursively = true );
+
+    /**
+        Sets selection background colour - applies to selected property name
+        background.
+    */
+    void SetSelectionBackgroundColour(const wxColour& col);
+
+    /**
+        Sets selection foreground colour - applies to selected property name
+        text.
+     */
+    void SetSelectionTextColour(const wxColour& col);
+
+    /** Sets x coordinate of the splitter.
+        @remarks
+        Splitter position cannot exceed grid size, and therefore setting it
+        during form creation may fail as initial grid size is often smaller
+        than desired splitter position, especially when sizers are being used.
+    */
+    void SetSplitterPosition( int newxpos, int col = 0 )
+    {
+        DoSetSplitterPosition_(newxpos, true, col);
+        m_iFlags |= wxPG_FL_SPLITTER_PRE_SET;
+    }
+
+    /** Set virtual width for this particular page. Width -1 indicates that the
+        virtual width should be disabled. */
+    void SetVirtualWidth( int width );
+
+    /** Sets name of a property.
+        @param id
+        Name or pointer of property which name to change.
+        @param newname
+        New name.
+    */
+    void SetPropertyName( wxPGPropArg id, const wxString& newname )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        DoSetPropertyName( p, newname );
+    }
+
+    /** Moves splitter as left as possible, while still allowing all
+        labels to be shown in full.
+        @param subProps
+        If false, will still allow sub-properties (ie. properties which
+        parent is not root or category) to be cropped.
+    */
+    void SetSplitterLeft( bool subProps = false )
+    {
+        m_pState->SetSplitterLeft(subProps);
+    }
+
+    /** Sets vertical spacing. Can be 1, 2, or 3 - a value relative to font
+        height. Value of 2 should be default on most platforms.
+        @remarks
+        On wxMSW, wxComboBox, when used as property editor widget, will spill
+        out with anything less than 3.
+    */
+    void SetVerticalSpacing( int vspacing )
+    {
+        m_vspacing = (unsigned char)vspacing;
+        CalculateFontAndBitmapStuff( vspacing );
+        if ( !m_pState->m_itemsAdded ) Refresh();
+    }
+
+    /** Shows an brief error message that is related to a property. */
+    void ShowPropertyError( wxPGPropArg id, const wxString& msg )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        DoShowPropertyError(p, msg);
+    }
+
+    /** Sorts all items at all levels (except sub-properties). */
+    void Sort();
+
+    /** Sorts children of a category.
+    */
+    void SortChildren( wxPGPropArg id );
+
+    /////////////////////////////////////////////////////////////////
+    //
+    // Following methods do not need to be (currently) documented
+    //
+    /////////////////////////////////////////////////////////////////
+
+    bool HasVirtualWidth() const
+        { return (m_iFlags & wxPG_FL_HAS_VIRTUAL_WIDTH) ? true : false; }
+
+    const wxPGCommonValue* GetCommonValue( unsigned int i ) const
+    {
+        return (wxPGCommonValue*) m_commonValues[i];
+    }
+
+    /** Returns number of common values.
+    */
+    unsigned int GetCommonValueCount() const
+    {
+        return m_commonValues.size();
+    }
+
+    /** Returns label of given common value.
+    */
+    wxString GetCommonValueLabel( unsigned int i ) const
+    {
+        wxASSERT( GetCommonValue(i) );
+        return GetCommonValue(i)->GetLabel();
+    }
+
+    /**
+        Returns index of common value that will truly change value to
+        unspecified.
+    */
+    int GetUnspecifiedCommonValue() const { return m_cvUnspecified; }
+
+    /** Set index of common value that will truly change value to unspecified.
+        Using -1 will set none to have such effect.
+        Default is 0.
+    */
+    void SetUnspecifiedCommonValue( int index ) { m_cvUnspecified = index; }
+
+    /**
+        Shortcut for creating dialog-caller button. Used, for example, by
+        wxFontProperty.
+        @remarks
+        This should only be called by properties.
+    */
+    wxWindow* GenerateEditorButton( const wxPoint& pos, const wxSize& sz );
+
+    /** Fixes position of wxTextCtrl-like control (wxSpinCtrl usually
+        fits as one). Call after control has been created (but before
+        shown).
+    */
+    void FixPosForTextCtrl( wxWindow* ctrl,
+                            const wxPoint& offset = wxPoint(0, 0) );
+
+    /** Shortcut for creating text editor widget.
+        @param pos
+            Same as pos given for CreateEditor.
+        @param sz
+            Same as sz given for CreateEditor.
+        @param value
+            Initial text for wxTextCtrl.
+        @param secondary
+            If right-side control, such as button, also created, then create it
+            first and pass it as this parameter.
+        @param extraStyle
+            Extra style flags to pass for wxTextCtrl.
+        @remarks
+        Note that this should generally be called only by new classes derived
+        from wxPGProperty.
+    */
+    wxWindow* GenerateEditorTextCtrl( const wxPoint& pos,
+                                      const wxSize& sz,
+                                      const wxString& value,
+                                      wxWindow* secondary,
+                                      int extraStyle = 0,
+                                      int maxLen = 0 );
+
+    /* Generates both textctrl and button.
+    */
+    wxWindow* GenerateEditorTextCtrlAndButton( const wxPoint& pos,
+        const wxSize& sz, wxWindow** psecondary, int limited_editing,
+        wxPGProperty* property );
+
+    /** Generates position for a widget editor dialog box.
+        @param p
+        Property for which dialog is positioned.
+        @param sz
+        Known or over-approximated size of the dialog.
+        @return
+        Position for dialog.
+    */
+    wxPoint GetGoodEditorDialogPosition( wxPGProperty* p,
+                                         const wxSize& sz );
+
+    // Converts escape sequences in src_str to newlines,
+    // tabs, etc. and copies result to dst_str.
+    static wxString& ExpandEscapeSequences( wxString& dst_str,
+                                            wxString& src_str );
+
+    // Converts newlines, tabs, etc. in src_str to escape
+    // sequences, and copies result to dst_str.
+    static wxString& CreateEscapeSequences( wxString& dst_str,
+                                            wxString& src_str );
+
+    /**
+        Returns rectangle that fully contains properties between and including
+        p1 and p2.
+    */
+    wxRect GetPropertyRect( const wxPGProperty* p1,
+                            const wxPGProperty* p2 ) const;
+
+    /** Returns pointer to current active primary editor control (NULL if none).
+
+        If editor uses clipper window, pointer is returned to the actual
+        editor, not the clipper.
+    */
+    wxWindow* GetEditorControl() const;
+
+    /** Adjusts given position if topCtrlWnd is child of clipper window.
+    */
+    bool AdjustPosForClipperWindow( wxWindow* topCtrlWnd, int* x, int* y );
+
+    wxWindow* GetPrimaryEditor() const
+    {
+        return GetEditorControl();
+    }
+
+    /**
+        Returns pointer to current active secondary editor control (NULL if
+        none).
+    */
+    wxWindow* GetEditorControlSecondary() const
+    {
+        return m_wndEditor2;
+    }
+
+#ifndef SWIG
+
+    /**
+        Generates contents for string dst based on the contents of
+        wxArrayString src.
+
+        Format will be "(preDelim)str1(postDelim) (preDelim)str2(postDelim) and
+        so on. Set flags to 1 inorder to convert backslashes to double-back-
+        slashes and "(preDelims)"'s to "(preDelims)".
+    */
+    static void ArrayStringToString( wxString& dst, const wxArrayString& src,
+                                     wxChar preDelim, wxChar postDelim,
+                                     int flags );
+
+    // Mostly useful for page switching.
+    void SwitchState( wxPropertyGridPageState* pNewState );
+
+    /** Pass this function to Connect calls in propertyclass::CreateEditor.
+    */
+    void OnCustomEditorEvent( wxCommandEvent &event );
+
+    long GetInternalFlags() const { return m_iFlags; }
+    void SetInternalFlag( long flag ) { m_iFlags |= flag; }
+    void ClearInternalFlag( long flag ) { m_iFlags &= ~(flag); }
+    void IncFrozen() { m_frozen++; }
+    void DecFrozen() { m_frozen--; }
+
+    void OnComboItemPaint( wxPGCustomComboControl* pCb,int item,wxDC& dc,
+                           wxRect& rect,int flags );
+
+    // Used by simple check box for keyboard navigation
+    void SendNavigationKeyEvent( int dir );
+
+    /** Standardized double-to-string conversion.
+    */
+    static void DoubleToString( wxString& target,
+                                double value,
+                                int precision,
+                                bool removeZeroes,
+                                wxString* precTemplate );
+
+    /**
+        Call this from wxPGProperty::OnEvent() to cause property value to be
+        changed after the function returns (with true as return value).
+        ValueChangeInEvent() must be used if you wish the application to be
+        able to use wxEVT_PG_CHANGING to potentially veto the given value.
+    */
+    void ValueChangeInEvent( wxVariant variant )
+    {
+        m_changeInEventValue = variant;
+        m_iFlags |= wxPG_FL_VALUE_CHANGE_IN_EVENT;
+    }
+
+    /** Returns true if given event is from first of an array of buttons
+        (as can be in case when wxPGMultiButton is used).
+    */
+    bool IsMainButtonEvent( const wxEvent& event )
+    {
+        return (event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED)
+                    && (m_wndSecId == event.GetId());
+    }
+
+    /** Pending value is expected to be passed in PerformValidation().
+    */
+    virtual bool DoPropertyChanged( wxPGProperty* p,
+                                    unsigned int selFlags = 0 );
+
+    /**
+        Runs all validation functionality (includes sending wxEVT_PG_CHANGING).
+        Returns true if all tests passed.
+    */
+    virtual bool PerformValidation( wxPGProperty* p, wxVariant& pendingValue );
+
+    /** Called when validation for given property fails.
+        @param invalidValue
+            Value which failed in validation.
+        @return
+            Return true if user is allowed to change to another property even
+            if current has invalid value.
+        @remarks
+        To add your own validation failure behavior, override
+        wxPropertyGrid::DoOnValidationFailure().
+    */
+    bool OnValidationFailure( wxPGProperty* property, wxVariant& invalidValue )
+    {
+        bool res = DoOnValidationFailure(property, invalidValue);
+        property->SetFlag(wxPG_PROP_INVALID_VALUE);
+        return res;
+    }
+
+    /** Called to indicate property and editor has valid value now.
+    */
+    void OnValidationFailureReset( wxPGProperty* property )
+    {
+        if ( property && property->HasFlag(wxPG_PROP_INVALID_VALUE) )
+        {
+            DoOnValidationFailureReset(property);
+            property->ClearFlag(wxPG_PROP_INVALID_VALUE);
+        }
+        m_validationInfo.m_failureMessage.clear();
+    }
+
+    /** Override in derived class to display error messages in custom manner
+        (these message usually only result from validation failure).
+    */
+    virtual void DoShowPropertyError( wxPGProperty* property,
+                                      const wxString& msg );
+
+    /** Override to customize property validation failure behavior.
+        @param invalidValue
+            Value which failed in validation.
+        @return
+            Return true if user is allowed to change to another property even
+            if current has invalid value.
+    */
+    virtual bool DoOnValidationFailure( wxPGProperty* property,
+                                        wxVariant& invalidValue );
+
+    /** Override to customize resetting of property validation failure status.
+        @remarks
+        Property is guaranteed to have flag wxPG_PROP_INVALID_VALUE set.
+    */
+    virtual void DoOnValidationFailureReset( wxPGProperty* property );
+
+    int GetSpacingY() const { return m_spacingy; }
+
+    /**
+        Must be called in wxPGEditor::CreateControls() if primary editor window
+        is wxTextCtrl, just before textctrl is created.
+        @param text
+            Initial text value of created wxTextCtrl.
+    */
+    void SetupTextCtrlValue( const wxString text ) { m_prevTcValue = text; }
+
+    /**
+        Unfocuses or closes editor if one was open, but does not deselect
+        property.
+    */
+    bool UnfocusEditor();
+
+protected:
+
+    /**
+        wxPropertyGridPageState used by the grid is created here.
+
+        If grid is used in wxPropertyGridManager, there is no point overriding
+        this - instead, set custom wxPropertyGridPage classes.
+    */
+    virtual wxPropertyGridPageState* CreateState() const;
+
+#ifndef DOXYGEN
+public:
+
+    // Control font changer helper.
+    void SetCurControlBoldFont();
+
+    //
+    // Public methods for semi-public use
+    // (not protected for optimization)
+    //
+    bool DoSelectProperty( wxPGProperty* p, unsigned int flags = 0 );
+
+    // Overridden functions.
+    virtual bool Destroy();
+    virtual wxSize DoGetBestSize() const;
+    // Returns property at given y coordinate (relative to grid's top left).
+    wxPGProperty* GetItemAtY( int y ) const { return DoGetItemAtY(y); }
+
+    virtual void Refresh( bool eraseBackground = true,
+                          const wxRect *rect = (const wxRect *) NULL );
+    virtual bool SetFont( const wxFont& font );
+#if wxPG_SUPPORT_TOOLTIPS
+    void SetToolTip( const wxString& tipString );
+#endif
+    virtual void Freeze();
+    virtual void SetExtraStyle( long exStyle );
+    virtual void Thaw();
+
+
+protected:
+
+#ifndef wxPG_ICON_WIDTH
+    wxBitmap            *m_expandbmp, *m_collbmp;
+#endif
+
+    wxCursor            *m_cursorSizeWE;
+
+    /** wxWindow pointers to editor control(s). */
+    wxWindow            *m_wndEditor;
+    wxWindow            *m_wndEditor2;
+
+    /** wxPGCanvas instance. */
+    wxPanel             *m_canvas;
+
+#if wxPG_DOUBLE_BUFFER
+    wxBitmap            *m_doubleBuffer;
+#endif
+
+    wxArrayPtrVoid      *m_windowsToDelete;
+
+    /** Local time ms when control was created. */
+    wxLongLong          m_timeCreated;
+
+    /** wxPGProperty::OnEvent can change value by setting this. */
+    wxVariant           m_changeInEventValue;
+
+    /** Id of m_wndEditor2, or its first child, if any. */
+    int                 m_wndSecId;
+
+    /** Extra Y spacing between the items. */
+    int                 m_spacingy;
+
+    /** Control client area width; updated on resize. */
+    int                 m_width;
+
+    /** Control client area height; updated on resize. */
+    int                 m_height;
+
+    /** Current non-client width (needed when auto-centering). */
+    int                 m_ncWidth;
+
+    /** Non-client width (auto-centering helper). */
+    //int                 m_fWidth;
+
+    /** Previously recorded scroll start position. */
+    int                 m_prevVY;
+
+    /**
+        The gutter spacing in front and back of the image.
+        This determines the amount of spacing in front of each item
+     */
+    int                 m_gutterWidth;
+
+    /** Includes separator line. */
+    int                 m_lineHeight;
+
+    /** Gutter*2 + image width. */
+    int                 m_marginWidth;
+
+    // y spacing for expand/collapse button.
+    int                 m_buttonSpacingY;
+
+    /** Extra margin for expanded sub-group items. */
+    int                 m_subgroup_extramargin;
+
+    /**
+        The image width of the [+] icon.
+
+        This is also calculated in the gutter
+     */
+    int                 m_iconWidth;
+
+#ifndef wxPG_ICON_WIDTH
+
+    /**
+        The image height of the [+] icon.
+
+        This is calculated as minimal size and to align
+     */
+    int                 m_iconHeight;
+#endif
+
+    /** Current cursor id. */
+    int                 m_curcursor;
+
+    /**
+        This captionFont is made equal to the font of the wxScrolledWindow.
+
+        As extra the bold face is set on it when this is wanted by the user
+        (see flags)
+     */
+    wxFont              m_captionFont;
+
+    int                 m_fontHeight;  // Height of the font.
+
+    // Base keycode for triggering push button.
+    int                 m_pushButKeyCode;
+
+    /** m_splitterx when drag began. */
+    int                 m_startingSplitterX;
+
+    /**
+        Index to splitter currently being dragged (0=one after the first
+        column).
+     */
+    int                 m_draggedSplitter;
+
+    /** Changed property, calculated in PerformValidation(). */
+    wxPGProperty*       m_chgInfo_changedProperty;
+
+    /**
+        Lowest property for which editing happened, but which does not have
+        aggregate parent
+     */
+    wxPGProperty*       m_chgInfo_baseChangedProperty;
+
+    /** Changed property value, calculated in PerformValidation(). */
+    wxVariant           m_chgInfo_pendingValue;
+
+    /** Passed to SetValue. */
+    wxVariant           m_chgInfo_valueList;
+
+    /** Validation information. */
+    wxPGValidationInfo  m_validationInfo;
+
+    /** Actions and keys that trigger them. */
+    wxPGHashMapI2I      m_actionTriggers;
+
+    //
+    // Temporary values
+    //
+
+    /** Bits are used to indicate which colours are customized. */
+    unsigned short      m_coloursCustomized;
+
+    /** x - m_splitterx. */
+    signed char                 m_dragOffset;
+
+    /** 0 = not dragging, 1 = drag just started, 2 = drag in progress */
+    unsigned char       m_dragStatus;
+
+    /** 0 = margin, 1 = label, 2 = value. */
+    unsigned char       m_mouseSide;
+
+    /** True when editor control is focused. */
+    unsigned char       m_editorFocused;
+
+    /** 1 if m_latsCaption is also the bottommost caption. */
+    //unsigned char       m_lastCaptionBottomnest;
+
+    /** Set to 1 when graphics frozen. */
+    unsigned char       m_frozen;
+
+    unsigned char       m_vspacing;
+
+    // Does triggering push button need Alt down?
+    unsigned char       m_pushButKeyCodeNeedsAlt;
+
+    // Does triggering push button need Ctrl down?
+    unsigned char       m_pushButKeyCodeNeedsCtrl;
+
+    // Used to track when Alt/Ctrl+Key was consumed.
+    unsigned char       m_keyComboConsumed;
+
+    /** 1 if in DoPropertyChanged() */
+    unsigned char       m_inDoPropertyChanged;
+
+    /** 1 if in CommitChangesFromEditor() */
+    unsigned char       m_inCommitChangesFromEditor;
+
+    /** 1 if in DoSelectProperty() */
+    unsigned char       m_inDoSelectProperty;
+
+    wxPGVFBFlags        m_permanentValidationFailureBehavior;  // Set by app
+
+    /** Internal flags - see wxPG_FL_XXX constants. */
+    wxUint32            m_iFlags;
+
+    /** When drawing next time, clear this many item slots at the end. */
+    int                 m_clearThisMany;
+
+    /** Pointer to selected property. Note that this is duplicated in
+        m_state for better transiency between pages so that the selected
+        item can be retained.
+    */
+    wxPGProperty*       m_selected;
+
+    // pointer to property that has mouse hovering
+    wxPGProperty*       m_propHover;
+
+    // EventObject for wxPropertyGridEvents
+    wxWindow*           m_eventObject;
+
+    // What (global) window is currently focused (needed to resolve event
+    // handling mess).
+    wxWindow*           m_curFocused;
+
+    // wxPGTLWHandler
+    wxEvtHandler*       m_tlwHandler;
+
+    // Top level parent
+    wxWindow*           m_tlp;
+
+    // y coordinate of property that mouse hovering
+    int                 m_propHoverY;
+    // Which column's editor is selected (usually 1)?
+    int                 m_selColumn;
+
+    // x relative to splitter (needed for resize).
+    int                 m_ctrlXAdjust;
+
+    // lines between cells
+    wxColour            m_colLine;
+    // property labels and values are written in this colour
+    wxColour            m_colPropFore;
+    // or with this colour when disabled
+    wxColour            m_colDisPropFore;
+    // background for m_colPropFore
+    wxColour            m_colPropBack;
+    // text color for captions
+    wxColour            m_colCapFore;
+    // background color for captions
+    wxColour            m_colCapBack;
+    // foreground for selected property
+    wxColour            m_colSelFore;
+    // background for selected property (actually use background color when
+    // control out-of-focus)
+    wxColour            m_colSelBack;
+    // background colour for margin
+    wxColour            m_colMargin;
+    // background colour for empty space below the grid
+    wxColour            m_colEmptySpace;
+
+    // temp property array used in DoDrawItems
+    wxArrayPtrVoid      m_visPropArray;
+
+    // NB: These *cannot* be moved to globals.
+
+    // Array of background colour brushes.
+    wxArrayPtrVoid      m_arrBgBrushes;
+    // Array of foreground colours.
+    wxArrayPtrVoid      m_arrFgCols;
+
+    // labels when properties use common values
+    wxArrayPtrVoid      m_commonValues;
+    // Which cv selection really sets value to unspecified?
+    int                 m_cvUnspecified;
+
+    // Used to skip excess text editor events
+    wxString            m_prevTcValue;
+
+protected:
+
+    // Sets some members to defaults (called constructors).
+    void Init1();
+
+    // Initializes some members (called by Create and complex constructor).
+    void Init2();
+
+    void OnPaint(wxPaintEvent &event );
+
+    // main event receivers
+    void OnMouseMove( wxMouseEvent &event );
+    void OnMouseMoveBottom( wxMouseEvent &event );
+    void OnMouseClick( wxMouseEvent &event );
+    void OnMouseRightClick( wxMouseEvent &event );
+    void OnMouseDoubleClick( wxMouseEvent &event );
+    void OnMouseUp( wxMouseEvent &event );
+    void OnKey( wxKeyEvent &event );
+    void OnKeyUp( wxKeyEvent &event );
+    void OnNavigationKey( wxNavigationKeyEvent& event );
+    void OnResize( wxSizeEvent &event );
+
+    // event handlers
+    bool HandleMouseMove( int x, unsigned int y, wxMouseEvent &event );
+    bool HandleMouseClick( int x, unsigned int y, wxMouseEvent &event );
+    bool HandleMouseRightClick( int x, unsigned int y, wxMouseEvent &event );
+    bool HandleMouseDoubleClick( int x, unsigned int y, wxMouseEvent &event );
+    bool HandleMouseUp( int x, unsigned int y, wxMouseEvent &event );
+    void HandleKeyEvent( wxKeyEvent &event );
+    // Handle TAB and ESCAPE in control
+    bool HandleChildKey( wxKeyEvent& event );
+
+    void OnMouseEntry( wxMouseEvent &event );
+
+    void OnIdle( wxIdleEvent &event );
+    void OnFocusEvent( wxFocusEvent &event );
+    void OnChildFocusEvent( wxChildFocusEvent& event );
+
+    bool OnMouseCommon( wxMouseEvent &event, int* px, int *py );
+    bool OnMouseChildCommon( wxMouseEvent &event, int* px, int *py );
+
+    // sub-control event handlers
+    void OnMouseClickChild( wxMouseEvent &event );
+    void OnMouseRightClickChild( wxMouseEvent &event );
+    void OnMouseMoveChild( wxMouseEvent &event );
+    void OnMouseUpChild( wxMouseEvent &event );
+    void OnChildKeyDown( wxKeyEvent &event );
+    void OnChildKeyUp( wxKeyEvent &event );
+
+    void OnCaptureChange( wxMouseCaptureChangedEvent &event );
+
+    void OnScrollEvent( wxScrollWinEvent &event );
+
+    void OnSysColourChanged( wxSysColourChangedEvent &event );
+
+protected:
+
+    /**
+        Adjust the centering of the bitmap icons (collapse / expand) when the
+        caption font changes.
+
+        They need to be centered in the middle of the font, so a bit of deltaY
+        adjustment is needed. On entry, m_captionFont must be set to window
+        font. It will be modified properly.
+      */
+    void CalculateFontAndBitmapStuff( int vspacing );
+
+    wxRect GetEditorWidgetRect( wxPGProperty* p, int column ) const;
+
+    void CorrectEditorWidgetSizeX();
+
+    /** Called in RecalculateVirtualSize() to reposition control
+        on virtual height changes.
+    */
+    void CorrectEditorWidgetPosY();
+
+#ifdef __WXDEBUG__
+    void _log_items();
+    void OnScreenNote( const wxChar* format, ... );
+#endif
+
+    /** Deselect current selection, if any. Returns true if success
+        (ie. validator did not intercept). */
+    bool DoClearSelection();
+
+    int DoDrawItems( wxDC& dc,
+                     const wxPGProperty* first_item,
+                     const wxPGProperty* last_item,
+                     const wxRect* clip_rect,
+                     bool isBuffered ) const;
+
+    void DoSetPropertyValueUnspecified( wxPGProperty* p );
+
+    /** Draws an expand/collapse (ie. +/-) button.
+    */
+    virtual void DrawExpanderButton( wxDC& dc, const wxRect& rect,
+                                     wxPGProperty* property ) const;
+
+    /** Draws items from topitemy to bottomitemy */
+    void DrawItems( wxDC& dc, unsigned int topitemy, unsigned int bottomitemy,
+                    const wxRect* clip_rect = (const wxRect*) NULL );
+
+    void DrawItems( const wxPGProperty* p1, const wxPGProperty* p2 );
+
+    void DrawItem( wxPGProperty* p )
+    {
+        DrawItems(p,p);
+    }
+
+    virtual void DrawItemAndChildren( wxPGProperty* p );
+
+    /**
+        Draws item, children, and consequtive parents as long as category is
+        not met.
+     */
+    void DrawItemAndValueRelated( wxPGProperty* p );
+
+    // Translate wxKeyEvent to wxPG_ACTION_XXX
+    int KeyEventToActions(wxKeyEvent &event, int* pSecond) const;
+
+    int KeyEventToAction(wxKeyEvent &event) const
+    {
+        return KeyEventToActions(event, NULL);
+    }
+
+    void ImprovedClientToScreen( int* px, int* py );
+
+    // Called by focus event handlers. newFocused is the window that becomes
+    // focused.
+    void HandleFocusChange( wxWindow* newFocused );
+
+    /** Reloads all non-customized colours from system settings. */
+    void RegainColours();
+
+    bool DoEditorValidate();
+
+    wxPGProperty* DoGetItemAtY( int y ) const;
+
+    void DoSetSplitterPosition_( int newxpos,
+                                 bool refresh = true,
+                                 int splitterIndex = 0,
+                                 bool allPages = false );
+
+    void FreeEditors();
+
+    virtual bool DoExpand( wxPGProperty* p, bool sendEvent = false );
+
+    virtual bool DoCollapse( wxPGProperty* p, bool sendEvent = false );
+
+    // Returns nearest paint visible property (such that will be painted unless
+    // window is scrolled or resized). If given property is paint visible, then
+    // it itself will be returned.
+    wxPGProperty* GetNearestPaintVisible( wxPGProperty* p ) const;
+
+    static void RegisterDefaultEditors();
+
+    // Sets m_bgColIndex to this property and all its children.
+    void SetBackgroundColourIndex( wxPGProperty* p, int index );
+
+    // Sets m_fgColIndex to this property and all its children.
+    void SetTextColourIndex( wxPGProperty* p, int index, int flags );
+
+    int CacheColour( const wxColour& colour );
+
+    void DoSetPropertyName( wxPGProperty* p, const wxString& newname );
+
+    // Setups event handling for child control
+    void SetupEventHandling( wxWindow* wnd, int id );
+
+    void CustomSetCursor( int type, bool override = false );
+
+    virtual bool ProcessEvent(wxEvent& event);
+    virtual void SetWindowStyleFlag( long style );
+
+    /**
+        Repositions scrollbar and underlying panel according to changed virtual
+        size.
+    */
+    void RecalculateVirtualSize( int forceXPos = -1 );
+
+    void PrepareAfterItemsAdded();
+
+    bool SendEvent( int eventType,
+                    wxPGProperty* p,
+                    wxVariant* pValue = NULL,
+                    unsigned int selFlags = 0 );
+
+    bool DoHideProperty( wxPGProperty* p, bool hide, int flags );
+
+private:
+
+    bool ButtonTriggerKeyTest( wxKeyEvent &event );
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+private:
+    DECLARE_EVENT_TABLE()
+#endif // #ifndef SWIG
+};
+
+// -----------------------------------------------------------------------
+//
+// Bunch of inlines that need to resolved after all classes have been defined.
+//
+
+#ifndef SWIG
+inline bool wxPropertyGridPageState::IsDisplayed() const
+{
+    return ( this == m_pPropGrid->GetState() );
+}
+
+inline unsigned int wxPropertyGridPageState::GetActualVirtualHeight() const
+{
+    return DoGetRoot()->GetChildrenHeight(GetGrid()->GetRowHeight());
+}
+#endif
+
+inline int wxPGProperty::GetDisplayedCommonValueCount() const
+{
+    if ( HasFlag(wxPG_PROP_USES_COMMON_VALUE) )
+    {
+        wxPropertyGrid* pg = GetGrid();
+        if ( pg )
+            return pg->GetCommonValueCount();
+    }
+    return 0;
+}
+
+inline void wxPGProperty::SetEditor( const wxString& editorName )
+{
+    m_customEditor = wxPropertyGridInterface::GetEditorByName(editorName);
+}
+
+inline void wxPGProperty::SetName( const wxString& newName )
+{
+    GetGrid()->SetPropertyName(this, newName);
+}
+
+inline bool wxPGProperty::Hide( bool hide, int flags )
+{
+    return GetGrid()->HideProperty(this, hide, flags);
+}
+
+inline bool wxPGProperty::SetMaxLength( int maxLen )
+{
+    return GetGrid()->SetPropertyMaxLength(this,maxLen);
+}
+
+// -----------------------------------------------------------------------
+
+
+#ifndef SWIG
+
+#define wxPG_BASE_EVT_PRE_ID     1775
+
+BEGIN_DECLARE_EVENT_TYPES()
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_SELECTED,           wxPG_BASE_EVT_PRE_ID)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGING,           wxPG_BASE_EVT_PRE_ID+1)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGED,            wxPG_BASE_EVT_PRE_ID+2)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_HIGHLIGHTED,        wxPG_BASE_EVT_PRE_ID+3)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_RIGHT_CLICK,        wxPG_BASE_EVT_PRE_ID+4)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_PAGE_CHANGED,       wxPG_BASE_EVT_PRE_ID+5)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_COLLAPSED,     wxPG_BASE_EVT_PRE_ID+6)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_EXPANDED,      wxPG_BASE_EVT_PRE_ID+7)
+    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_DOUBLE_CLICK,       wxPG_BASE_EVT_PRE_ID+8)
+END_DECLARE_EVENT_TYPES()
+#else
+    enum {
+        wxEVT_PG_SELECTED = wxPG_BASE_EVT_PRE_ID,
+        wxEVT_PG_CHANGING,
+        wxEVT_PG_CHANGED,
+        wxEVT_PG_HIGHLIGHTED,
+        wxEVT_PG_RIGHT_CLICK,
+        wxEVT_PG_PAGE_CHANGED,
+        wxEVT_PG_ITEM_COLLAPSED,
+        wxEVT_PG_ITEM_EXPANDED,
+        wxEVT_PG_DOUBLE_CLICK
+    };
+#endif
+
+
+#define wxPG_BASE_EVT_TYPE       wxEVT_PG_SELECTED
+#define wxPG_MAX_EVT_TYPE        (wxPG_BASE_EVT_TYPE+30)
+
+
+#ifndef SWIG
+typedef void (wxEvtHandler::*wxPropertyGridEventFunction)(wxPropertyGridEvent&);
+
+#define EVT_PG_SELECTED(id, fn)              DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_CHANGING(id, fn)              DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_CHANGED(id, fn)               DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_HIGHLIGHTED(id, fn)           DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_HIGHLIGHTED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_RIGHT_CLICK(id, fn)           DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_DOUBLE_CLICK(id, fn)          DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_DOUBLE_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_PAGE_CHANGED(id, fn)          DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_PAGE_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_ITEM_COLLAPSED(id, fn)        DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_COLLAPSED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_ITEM_EXPANDED(id, fn)         DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_EXPANDED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+
+#define wxPropertyGridEventHandler(A) \
+    ((wxObjectEventFunction)(wxEventFunction)(wxPropertyGridEventFunction)&A)
+
+#endif
+
+
+/** @class wxPropertyGridEvent
+
+    A propertygrid event holds information about events associated with
+    wxPropertyGrid objects.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPropertyGridEvent : public wxCommandEvent
+{
+public:
+
+    /** Constructor. */
+    wxPropertyGridEvent(wxEventType commandType=0, int id=0);
+#ifndef SWIG
+    /** Copy constructor. */
+    wxPropertyGridEvent(const wxPropertyGridEvent& event);
+#endif
+    /** Destructor. */
+    ~wxPropertyGridEvent();
+
+    /** Copyer. */
+    virtual wxEvent* Clone() const;
+
+    wxPGProperty* GetMainParent() const
+    {
+        wxASSERT(m_property);
+        return m_property->GetMainParent();
+    }
+
+    /** Returns id of associated property. */
+    wxPGProperty* GetProperty() const
+    {
+        return m_property;
+    }
+
+    wxPGValidationInfo& GetValidationInfo()
+    {
+        wxASSERT(m_validationInfo);
+        return *m_validationInfo;
+    }
+
+    /** Returns true if event has associated property. */
+    bool HasProperty() const { return ( m_property != (wxPGProperty*) NULL ); }
+
+    /** Returns true if you can veto the action that the event is signaling.
+    */
+    bool CanVeto() const { return m_canVeto; }
+
+    /**
+        Call this from your event handler to veto action that the event is
+        signaling.
+
+        You can only veto a shutdown if wxPropertyGridEvent::CanVeto returns
+        true.
+        @remarks
+        Currently only wxEVT_PG_CHANGING supports vetoing.
+    */
+    void Veto( bool veto = true ) { m_wasVetoed = veto; }
+
+    /** Returns value that is about to be set for wxEVT_PG_CHANGING.
+    */
+    const wxVariant& GetValue() const
+    {
+        wxASSERT_MSG( m_validationInfo,
+                      "Only call GetValue from a handler "
+                      "of event type that supports it" );
+        return *m_validationInfo->m_pValue;
+    }
+
+    /**
+        Set override validation failure behavior.
+
+        Only effective if Veto was also called, and only allowed if event type
+        is wxEVT_PG_CHANGING.
+    */
+    void SetValidationFailureBehavior( int flags )
+    {
+        wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
+        m_validationInfo->m_failureBehavior = (wxPGVFBFlags) flags;
+    }
+
+    /** Sets custom failure message for this time only. Only applies if
+        wxPG_VFB_SHOW_MESSAGE is set in validation failure flags.
+    */
+    void SetValidationFailureMessage( const wxString& message )
+    {
+        wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
+        m_validationInfo->m_failureMessage = message;
+    }
+
+#ifndef SWIG
+    wxPGVFBFlags GetValidationFailureBehavior() const
+    {
+        wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
+        return m_validationInfo->m_failureBehavior;
+    }
+
+    void SetCanVeto( bool canVeto ) { m_canVeto = canVeto; }
+    bool WasVetoed() const { return m_wasVetoed; }
+
+    /** Changes the associated property. */
+    void SetProperty( wxPGProperty* p ) { m_property = p; }
+
+    void SetPropertyGrid( wxPropertyGrid* pg ) { m_pg = pg; }
+
+    void SetupValidationInfo()
+    {
+        wxASSERT(m_pg);
+        wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
+        m_validationInfo = &m_pg->GetValidationInfo();
+    }
+
+private:
+    void Init();
+    DECLARE_DYNAMIC_CLASS(wxPropertyGridEvent)
+
+    wxPGProperty*       m_property;
+    wxPropertyGrid*     m_pg;
+    wxPGValidationInfo* m_validationInfo;
+
+    bool                m_canVeto;
+    bool                m_wasVetoed;
+
+#endif
+};
+
+
+// -----------------------------------------------------------------------
+
+/** @class wxPropertyGridPopulator
+    @ingroup classes
+    Allows populating wxPropertyGrid from arbitrary text source.
+*/
+class WXDLLIMPEXP_PROPGRID wxPropertyGridPopulator
+{
+public:
+    /** Default constructor.
+    */
+    wxPropertyGridPopulator();
+
+    /** Destructor. */
+    virtual ~wxPropertyGridPopulator();
+
+    void SetState( wxPropertyGridPageState* state );
+
+    void SetGrid( wxPropertyGrid* pg );
+
+    /** Appends a new property under bottommost parent.
+        @param propClass
+        Property class as string.
+    */
+    wxPGProperty* Add( const wxString& propClass,
+                       const wxString& propLabel,
+                       const wxString& propName,
+                       const wxString* propValue,
+                       wxPGChoices* pChoices = NULL );
+
+    /**
+        Pushes property to the back of parent array (ie it becomes bottommost
+        parent), and starts scanning/adding children for it.
+
+        When finished, parent array is returned to the original state.
+    */
+    void AddChildren( wxPGProperty* property );
+
+    /** Adds attribute to the bottommost property.
+        @param type
+        Allowed values: "string", (same as string), "int", "bool". Empty string
+          mean autodetect.
+    */
+    bool AddAttribute( const wxString& name,
+                       const wxString& type,
+                       const wxString& value );
+
+    /** Called once in AddChildren.
+    */
+    virtual void DoScanForChildren() = 0;
+
+    /**
+        Returns id of parent property for which children can currently be
+        added.
+     */
+    wxPGProperty* GetCurParent() const
+    {
+        return (wxPGProperty*) m_propHierarchy[m_propHierarchy.size()-1];
+    }
+
+    wxPropertyGridPageState* GetState() { return m_state; }
+    const wxPropertyGridPageState* GetState() const { return m_state; }
+
+    /** Like wxString::ToLong, except allows N% in addition of N.
+    */
+    static bool ToLongPCT( const wxString& s, long* pval, long max );
+
+    /** Parses strings of format "choice1"[=value1] ... "choiceN"[=valueN] into
+        wxPGChoices. Registers parsed result using idString (if not empty).
+        Also, if choices with given id already registered, then don't parse but
+        return those choices instead.
+    */
+    wxPGChoices ParseChoices( const wxString& choicesString,
+                              const wxString& idString );
+
+    /** Implement in derived class to do custom process when an error occurs.
+        Default implementation uses wxLogError.
+    */
+    virtual void ProcessError( const wxString& msg );
+
+protected:
+
+    /** Used property grid. */
+    wxPropertyGrid*         m_pg;
+
+    /** Used property grid state. */
+    wxPropertyGridPageState*    m_state;
+
+    /** Tree-hierarchy of added properties (that can have children). */
+    wxArrayPGProperty       m_propHierarchy;
+
+    /** Hashmap for string-id to wxPGChoicesData mapping. */
+    wxPGHashMapS2P          m_dictIdChoices;
+};
+
+// -----------------------------------------------------------------------
+
+//
+// Undefine macros that are not needed outside propertygrid sources
+//
+#ifndef __wxPG_SOURCE_FILE__
+    #undef wxPG_FL_DESC_REFRESH_REQUIRED
+    #undef wxPG_FL_SCROLLBAR_DETECTED
+    #undef wxPG_FL_CREATEDSTATE
+    #undef wxPG_FL_NOSTATUSBARHELP
+    #undef wxPG_FL_SCROLLED
+    #undef wxPG_FL_FOCUS_INSIDE_CHILD
+    #undef wxPG_FL_FOCUS_INSIDE
+    #undef wxPG_FL_MOUSE_INSIDE_CHILD
+    #undef wxPG_FL_CUR_USES_CUSTOM_IMAGE
+    #undef wxPG_FL_PRIMARY_FILLS_ENTIRE
+    #undef wxPG_FL_VALUE_MODIFIED
+    #undef wxPG_FL_MOUSE_INSIDE
+    #undef wxPG_FL_FOCUSED
+    #undef wxPG_FL_MOUSE_CAPTURED
+    #undef wxPG_FL_INITIALIZED
+    #undef wxPG_FL_ACTIVATION_BY_CLICK
+    #undef wxPG_FL_DONT_CENTER_SPLITTER
+    #undef wxPG_SUPPORT_TOOLTIPS
+    #undef wxPG_DOUBLE_BUFFER
+    #undef wxPG_ICON_WIDTH
+    #undef wxPG_USE_RENDERER_NATIVE
+// Following are needed by the manager headers
+//    #undef const wxString&
+#endif
+
+// Doxygen special
+#ifdef DOXYGEN
+    #include "wx/propgrid/editor.h"
+    #include "wx/propgrid/manager.h"
+#endif
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_PROPGRID_H_
+
diff --git a/include/wx/propgrid/propgriddefs.h b/include/wx/propgrid/propgriddefs.h
new file mode 100644 (file)
index 0000000..c2e3eff
--- /dev/null
@@ -0,0 +1,797 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgrid/propgriddefs.h
+// Purpose:     wxPropertyGrid miscellaneous definitions
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2008-08-31
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PROPGRID_PROPGRIDDEFS_H_
+#define _WX_PROPGRID_PROPGRIDDEFS_H_
+
+#include "wx/dynarray.h"
+#include "wx/hashmap.h"
+#include "wx/variant.h"
+#include "wx/longlong.h"
+#include "wx/clntdata.h"
+
+// -----------------------------------------------------------------------
+
+//
+// Here are some platform dependent defines
+// NOTE: More in propertygrid.cpp
+//
+
+#ifndef SWIG
+
+#if defined(__WXMSW__)
+
+    // space between vertical line and value text
+    #define wxPG_XBEFORETEXT            4
+    // space between vertical line and value editor control
+    #define wxPG_XBEFOREWIDGET          1
+
+    // x position adjustment for wxTextCtrl (and like)
+    #define wxPG_TEXTCTRLXADJUST        3
+
+    // comment to use bitmap buttons
+    #define wxPG_ICON_WIDTH             9
+    // 1 if wxRendererNative should be employed
+    #define wxPG_USE_RENDERER_NATIVE    0
+
+    // 1 to use double-buffer that guarantees flicker-free painting
+    #define wxPG_DOUBLE_BUFFER          1
+
+    // Enable tooltips
+    #define wxPG_SUPPORT_TOOLTIPS       1
+
+    // width of optional bitmap/image in front of property
+    #define wxPG_CUSTOM_IMAGE_WIDTH     20
+
+    // 1 to create controls out of sight, hide them, and then move them into
+    // correct position
+    #define wxPG_CREATE_CONTROLS_HIDDEN 0
+
+    // 1 if splitter drag detect margin and control cannot overlap
+    #define wxPG_NO_CHILD_EVT_MOTION    0
+
+    // If 1, then setting empty tooltip actually hides it
+    #define wxPG_ALLOW_EMPTY_TOOLTIPS   1
+
+    #define wxPG_NAT_BUTTON_BORDER_ANY          1
+    #define wxPG_NAT_BUTTON_BORDER_X            1
+    #define wxPG_NAT_BUTTON_BORDER_Y            1
+
+    // If 1 then controls are refreshed after selected was drawn.
+    #define wxPG_REFRESH_CONTROLS_AFTER_REPAINT 0
+
+#elif defined(__WXGTK__)
+
+    // space between vertical line and value text
+    #define wxPG_XBEFORETEXT            5
+    // space between vertical line and value editor control
+    #define wxPG_XBEFOREWIDGET          1
+
+    // x position adjustment for wxTextCtrl (and like)
+    #define wxPG_TEXTCTRLXADJUST        3
+
+    // comment to use bitmap buttons
+    #define wxPG_ICON_WIDTH             9
+    // 1 if wxRendererNative should be employed
+    #define wxPG_USE_RENDERER_NATIVE    0
+
+    // 1 to use double-buffer that guarantees flicker-free painting
+    #define wxPG_DOUBLE_BUFFER          1
+
+    // Enable tooltips
+    #define wxPG_SUPPORT_TOOLTIPS       1
+
+    // width of optional bitmap/image in front of property
+    #define wxPG_CUSTOM_IMAGE_WIDTH     20
+
+    // 1 to create controls out of sight, hide them, and then move them into
+    // correct position
+    #define wxPG_CREATE_CONTROLS_HIDDEN 0
+
+    // 1 if splitter drag detect margin and control cannot overlap
+    #define wxPG_NO_CHILD_EVT_MOTION    1
+
+    // If 1, then setting empty tooltip actually hides it
+    #define wxPG_ALLOW_EMPTY_TOOLTIPS   0
+
+    #define wxPG_NAT_BUTTON_BORDER_ANY      1
+    #define wxPG_NAT_BUTTON_BORDER_X        1
+    #define wxPG_NAT_BUTTON_BORDER_Y        1
+
+    // If 1 then controls are refreshed after selected was drawn.
+    #define wxPG_REFRESH_CONTROLS_AFTER_REPAINT 1
+
+#elif defined(__WXMAC__)
+
+    // space between vertical line and value text
+    #define wxPG_XBEFORETEXT            4
+    // space between vertical line and value editor widget
+    #define wxPG_XBEFOREWIDGET          1
+
+    // x position adjustment for wxTextCtrl (and like)
+    #define wxPG_TEXTCTRLXADJUST        3
+
+    // comment to use bitmap buttons
+    #define wxPG_ICON_WIDTH             11
+    // 1 if wxRendererNative should be employed
+    #define wxPG_USE_RENDERER_NATIVE    1
+
+    // 1 to use double-buffer that guarantees flicker-free painting
+    #define wxPG_DOUBLE_BUFFER          0
+
+    // Enable tooltips
+    #define wxPG_SUPPORT_TOOLTIPS       1
+
+    // width of optional bitmap/image in front of property
+    #define wxPG_CUSTOM_IMAGE_WIDTH     20
+
+    // 1 to create controls out of sight, hide them, and then move them into
+    // correct position
+    #define wxPG_CREATE_CONTROLS_HIDDEN 0
+
+    // 1 if splitter drag detect margin and control cannot overlap
+    #define wxPG_NO_CHILD_EVT_MOTION    0
+
+    // If 1, then setting empty tooltip actually hides it
+    #define wxPG_ALLOW_EMPTY_TOOLTIPS   1
+
+    #define wxPG_NAT_BUTTON_BORDER_ANY      0
+    #define wxPG_NAT_BUTTON_BORDER_X        0
+    #define wxPG_NAT_BUTTON_BORDER_Y        0
+
+    // If 1 then controls are refreshed after selected was drawn.
+    #define wxPG_REFRESH_CONTROLS_AFTER_REPAINT 0
+
+#else // defaults
+
+    // space between vertical line and value text
+    #define wxPG_XBEFORETEXT            5
+    // space between vertical line and value editor widget
+    #define wxPG_XBEFOREWIDGET          1
+
+    // x position adjustment for wxTextCtrl (and like)
+    #define wxPG_TEXTCTRLXADJUST        3
+
+    // comment to use bitmap buttons
+    #define wxPG_ICON_WIDTH             9
+    // 1 if wxRendererNative should be employed
+    #define wxPG_USE_RENDERER_NATIVE    0
+
+    // 1 to use double-buffer that guarantees flicker-free painting
+    #define wxPG_DOUBLE_BUFFER          0
+
+    // Enable tooltips
+    #define wxPG_SUPPORT_TOOLTIPS       0
+
+    // width of optional bitmap/image in front of property
+    #define wxPG_CUSTOM_IMAGE_WIDTH     20
+
+    // 1 to create controls out of sight, hide them, and then move them into
+    // correct position
+    #define wxPG_CREATE_CONTROLS_HIDDEN 0
+
+    // 1 if splitter drag detect margin and control cannot overlap
+    #define wxPG_NO_CHILD_EVT_MOTION    1
+
+    // If 1, then setting empty tooltip actually hides it
+    #define wxPG_ALLOW_EMPTY_TOOLTIPS   0
+
+    #define wxPG_NAT_BUTTON_BORDER_ANY      0
+    #define wxPG_NAT_BUTTON_BORDER_X        0
+    #define wxPG_NAT_BUTTON_BORDER_Y        0
+
+    // If 1 then controls are refreshed after selected was drawn.
+    #define wxPG_REFRESH_CONTROLS_AFTER_REPAINT 1
+#endif // platform
+
+
+#define wxPG_CONTROL_MARGIN             0 // space between splitter and control
+
+#define wxCC_CUSTOM_IMAGE_MARGIN1       4  // before image
+#define wxCC_CUSTOM_IMAGE_MARGIN2       5  // after image
+
+#define wxPG_DRAG_MARGIN                30
+
+#if wxPG_NO_CHILD_EVT_MOTION
+    #define wxPG_SPLITTERX_DETECTMARGIN1    3 // this much on left
+    #define wxPG_SPLITTERX_DETECTMARGIN2    2 // this much on right
+#else
+    #define wxPG_SPLITTERX_DETECTMARGIN1    3 // this much on left
+    #define wxPG_SPLITTERX_DETECTMARGIN2    2 // this much on right
+#endif
+
+// Use this macro to generate standard custom image height from
+#define wxPG_STD_CUST_IMAGE_HEIGHT(LINEHEIGHT)  (LINEHEIGHT-3)
+
+
+#if defined(__WXWINCE__)
+    #define wxPG_SMALL_SCREEN       1
+    #undef wxPG_DOUBLE_BUFFER
+    #define wxPG_DOUBLE_BUFFER      0
+#else
+    #define wxPG_SMALL_SCREEN       0
+#endif
+
+#endif // #ifndef SWIG
+
+// Undefine wxPG_ICON_WIDTH to use supplied xpm bitmaps instead
+// (for tree buttons)
+//#undef wxPG_ICON_WIDTH
+
+// Need to force disable tooltips?
+#if !wxUSE_TOOLTIPS
+    #undef wxPG_SUPPORT_TOOLTIPS
+    #define wxPG_SUPPORT_TOOLTIPS       0
+#endif
+
+// Set 1 to include advanced properties (wxFontProperty, wxColourProperty, etc.)
+#ifndef wxPG_INCLUDE_ADVPROPS
+    #define wxPG_INCLUDE_ADVPROPS           1
+#endif
+
+// Set 1 to include checkbox editor class
+#define wxPG_INCLUDE_CHECKBOX           1
+
+// -----------------------------------------------------------------------
+
+
+// wxPG_CHECK_FOO_DBG - debug check with message that does not
+//                      interrupt program flow.
+#define wxPG_CHECK_RET_DBG(A,B) \
+    if ( !(A) ) { wxLogWarning(B); return; }
+#define wxPG_CHECK_MSG_DBG(A,B,C) \
+    if ( !(A) ) { wxLogWarning(C); return B; }
+
+
+class wxPGEditor;
+class wxPGProperty;
+class wxPropertyCategory;
+class wxPGChoices;
+class wxPropertyGridPageState;
+class wxPGCell;
+class wxPGCellRenderer;
+class wxPGChoiceEntry;
+class wxPGPropArgCls;
+class wxPropertyGridInterface;
+class wxPropertyGrid;
+class wxPropertyGridEvent;
+class wxPropertyGridManager;
+class wxPGOwnerDrawnComboBox;
+class wxPGCustomComboControl;
+class wxPGEditorDialogAdapter;
+struct wxPGValidationInfo;
+
+
+// -----------------------------------------------------------------------
+
+/** @section propgrid_misc wxPropertyGrid Miscellanous
+
+    This section describes some miscellanous values, types and macros.
+    @{
+*/
+
+#ifndef SWIG
+    // Used to tell wxPGProperty to use label as name as well
+    #define wxPG_LABEL              (*wxPGProperty::sm_wxPG_LABEL)
+    // This is the value placed in wxPGProperty::sm_wxPG_LABEL
+    #define wxPG_LABEL_STRING       wxS("@!")
+    #define wxPG_NULL_BITMAP        wxNullBitmap
+    #define wxPG_COLOUR_BLACK       (*wxBLACK)
+#else
+    #define wxPG_NULL_BITMAP        wxBitmap_NULL
+    #define wxPG_COLOUR_BLACK       wxColour_BLACK
+#endif // #ifndef SWIG
+
+/** Convert Red, Green and Blue to a single 32-bit value.
+*/
+#define wxPG_COLOUR(R,G,B) ((wxUint32)(R+(G<<8)+(B<<16)))
+
+
+/** If property is supposed to have custom-painted image, then returning
+    this in OnMeasureImage() will usually be enough.
+*/
+#define wxPG_DEFAULT_IMAGE_SIZE             wxSize(-1, -1)
+
+
+typedef wxString wxPGCachedString;
+
+/** @}
+*/
+
+// -----------------------------------------------------------------------
+
+// Used to indicate wxPGChoices::Add etc that the value is actually not given
+// by the caller.
+#define wxPG_INVALID_VALUE      INT_MAX
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+#if wxUSE_STL
+typedef WXDLLIMPEXP_PROPGRID std::vector<wxPGProperty*>  wxArrayPGProperty;
+#else
+WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(wxPGProperty*, wxArrayPGProperty,
+                                  wxBaseArrayPtrVoid,
+                                  class WXDLLIMPEXP_PROPGRID);
+#endif
+
+// Always use wxString based hashmap with unicode, stl, swig and GCC 4.0+
+WX_DECLARE_STRING_HASH_MAP_WITH_DECL(void*,
+                                     wxPGHashMapS2P,
+                                     class WXDLLIMPEXP_PROPGRID);
+
+
+WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL(void*,
+                                      wxPGHashMapP2P,
+                                      class WXDLLIMPEXP_PROPGRID);
+
+WX_DECLARE_HASH_MAP_WITH_DECL(wxInt32,
+                              wxInt32,
+                              wxIntegerHash,
+                              wxIntegerEqual,
+                              wxPGHashMapI2I,
+                              class WXDLLIMPEXP_PROPGRID);
+
+#endif // #ifndef SWIG
+
+// -----------------------------------------------------------------------
+
+enum wxPG_GETPROPERTYVALUES_FLAGS
+{
+
+/** Flags for wxPropertyGridInterface::GetPropertyValues */
+wxPG_KEEP_STRUCTURE               = 0x00000010,
+
+/** Flags for wxPropertyGrid::SetPropertyAttribute() etc */
+wxPG_RECURSE                      = 0x00000020,
+
+/** Include attributes for GetPropertyValues. */
+wxPG_INC_ATTRIBUTES               = 0x00000040,
+
+/** Used when first starting recursion. */
+wxPG_RECURSE_STARTS               = 0x00000080,
+
+/** Force value change. */
+wxPG_FORCE                        = 0x00000100
+
+};
+
+/** Flags for wxPropertyGrid::SetPropertyAttribute() etc */
+#define wxPG_DONT_RECURSE         0x00000000
+
+// -----------------------------------------------------------------------
+
+// Misc argument flags.
+enum wxPG_MISC_ARG_FLAGS
+{
+    // Get/Store full value instead of displayed value.
+    wxPG_FULL_VALUE                     = 0x00000001,
+
+    wxPG_REPORT_ERROR                   = 0x00000002,
+
+    wxPG_PROPERTY_SPECIFIC              = 0x00000004,
+
+    // Get/Store editable value instead of displayed one (should only be
+    // different in the case of common values)
+    wxPG_EDITABLE_VALUE                 = 0x00000008,
+
+    // Used when dealing with fragments of composite string value
+    wxPG_COMPOSITE_FRAGMENT             = 0x00000010,
+
+    // Means property for which final string value is for can not really be
+    // edited.
+    wxPG_UNEDITABLE_COMPOSITE_FRAGMENT  = 0x00000020
+};
+
+// -----------------------------------------------------------------------
+
+// wxPGProperty::SetValue() flags
+enum wxPG_SETVALUE_FLAGS
+{
+    wxPG_SETVAL_REFRESH_EDITOR      = 0x0001,
+    wxPG_SETVAL_AGGREGATED          = 0x0002,
+    wxPG_SETVAL_FROM_PARENT         = 0x0004
+};
+
+// -----------------------------------------------------------------------
+
+//
+// Valid constants for wxPG_UINT_BASE attribute
+// (long because of wxVariant constructor)
+#define wxPG_BASE_OCT                       (long)8
+#define wxPG_BASE_DEC                       (long)10
+#define wxPG_BASE_HEX                       (long)16
+#define wxPG_BASE_HEXL                      (long)32
+
+//
+// Valid constants for wxPG_UINT_PREFIX attribute
+#define wxPG_PREFIX_NONE                    (long)0
+#define wxPG_PREFIX_0x                      (long)1
+#define wxPG_PREFIX_DOLLAR_SIGN             (long)2
+
+// -----------------------------------------------------------------------
+// Editor class.
+
+#ifndef SWIG
+
+// Editor accessor.
+#define wxPG_EDITOR(T)          wxPGEditor_##T
+
+// Declare editor class, with optional part.
+#define WX_PG_DECLARE_EDITOR_WITH_DECL(EDITOR,DECL) \
+extern DECL wxPGEditor* wxPGEditor_##EDITOR; \
+extern DECL wxPGEditor* wxPGConstruct##EDITOR##EditorClass();
+
+// Declare editor class.
+#define WX_PG_DECLARE_EDITOR(EDITOR) \
+extern wxPGEditor* wxPGEditor_##EDITOR; \
+extern wxPGEditor* wxPGConstruct##EDITOR##EditorClass();
+
+// Declare builtin editor classes.
+WX_PG_DECLARE_EDITOR_WITH_DECL(TextCtrl,WXDLLIMPEXP_PROPGRID)
+WX_PG_DECLARE_EDITOR_WITH_DECL(Choice,WXDLLIMPEXP_PROPGRID)
+WX_PG_DECLARE_EDITOR_WITH_DECL(ComboBox,WXDLLIMPEXP_PROPGRID)
+WX_PG_DECLARE_EDITOR_WITH_DECL(TextCtrlAndButton,WXDLLIMPEXP_PROPGRID)
+#if wxPG_INCLUDE_CHECKBOX
+WX_PG_DECLARE_EDITOR_WITH_DECL(CheckBox,WXDLLIMPEXP_PROPGRID)
+#endif
+WX_PG_DECLARE_EDITOR_WITH_DECL(ChoiceAndButton,WXDLLIMPEXP_PROPGRID)
+
+#endif  // !SWIG
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+/** @class wxPGVariantData
+    @ingroup classes
+    wxVariantData with additional functionality.
+
+    It is usually enough to use supplied to macros to automatically generate
+    variant data class. Like so:
+
+    @code
+
+    // In header
+    WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataMyClass,  // Name of the class
+                               MyClass,  // Name of the data type
+                               wxEMPTY_PARAMETER_VALUE)  // Declaration
+
+    // In source
+    WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataMyClass, MyClass)
+
+    @endcode
+
+    If your class is derived from wxObject, it is recommended that you use
+    wxObject-versions of the macros (WX_PG_DECLARE_WXOBJECT_VARIANT_DATA and
+    WX_PG_IMPLEMENT_WXOBJECT_VARIANT_DATA).
+
+*/
+class WXDLLIMPEXP_PROPGRID wxPGVariantData : public wxVariantData
+{
+public:
+    virtual void* GetValuePtr() = 0;
+    virtual wxVariant GetDefaultValue() const = 0;
+protected:
+};
+
+
+//
+// With wxWidgets 2.9 and later we demand native C++ RTTI support
+#ifdef wxNO_RTTI
+    #error "You need to enable compiler RTTI support for wxPropertyGrid"
+#endif
+#define WX_PG_DECLARE_DYNAMIC_CLASS_VARIANTDATA(A)
+#define WX_PG_IMPLEMENT_DYNAMIC_CLASS_VARIANTDATA(A, B)
+typedef const std::type_info* wxPGVariantDataClassInfo;
+#define wxPGVariantDataGetClassInfo(A) (&typeid(*A))
+#define wxPG_VARIANT_EQ(A, B) \
+    ( ((A).GetData() && \
+       (B).GetData() && typeid(*(A).GetData()) == typeid(*(B).GetData()) && \
+       (A == B)) || !((A).GetData() && (B).GetData()) )
+
+#ifndef wxDynamicCastVariantData
+    #define wxDynamicCastVariantData wxDynamicCast
+#endif
+
+
+inline void wxPGDoesNothing() {}
+
+
+#define _WX_PG_IMPLEMENT_VARIANT_DATA_CLASS(CLASSNAME, \
+                                            DATATYPE, \
+                                            AS_ARG, \
+                                            AS_ARG_CONST, \
+                                            CTOR_CODE, \
+                                            DEFAULT_VALUE, \
+                                            SET_CODE) \
+    WX_PG_DECLARE_DYNAMIC_CLASS_VARIANTDATA(CLASSNAME) \
+protected: \
+    DATATYPE m_value; \
+public: \
+    CLASSNAME() { CTOR_CODE; } \
+    CLASSNAME(AS_ARG_CONST value) { CTOR_CODE; SET_CODE; m_value = value; } \
+    DATATYPE GetValue() const { return m_value; } \
+    AS_ARG_CONST GetValueRef() const { return m_value; } \
+    AS_ARG GetValueRef() { return m_value; } \
+    void SetValue(AS_ARG_CONST value) { SET_CODE; m_value = value; } \
+    virtual bool Eq(wxVariantData&) const { return false; } \
+    virtual wxString GetType() const { return wxS(#DATATYPE); } \
+    virtual wxVariantData* Clone() { return new CLASSNAME; } \
+    virtual bool Read(wxString &) { return false; } \
+    virtual bool Write(wxString &) const { return true; } \
+    virtual wxVariant GetDefaultValue() const { return DEFAULT_VALUE; }
+
+//
+// Macro WXVARIANT allows creation of wxVariant from any type supported by
+// wxWidgets internally, and of all types created using
+// WX_PG_DECLARE_VARIANT_DATA.
+template<class T>
+wxVariant WXVARIANT( const T& value )
+{
+    return wxVariant((void*)&value);
+}
+
+template<> inline wxVariant WXVARIANT( const int& value )
+    { return wxVariant((long)value); }
+template<> inline wxVariant WXVARIANT( const long& value )
+    { return wxVariant(value); }
+template<> inline wxVariant WXVARIANT( const bool& value )
+    { return wxVariant(value); }
+template<> inline wxVariant WXVARIANT( const double& value )
+    { return wxVariant(value); }
+template<> inline wxVariant WXVARIANT( const wxArrayString& value )
+    { return wxVariant(value); }
+template<> inline wxVariant WXVARIANT( const wxString& value )
+    { return wxVariant(value); }
+#if wxUSE_DATETIME
+template<> inline wxVariant WXVARIANT( const wxDateTime& value )
+    { return wxVariant(value); }
+#endif
+
+#define _WX_PG_VARIANT_DATA_CLASSINFO_CONTAINER_DECL(CLASSNAME) \
+    extern int CLASSNAME##_d_;
+#define _WX_PG_VARIANT_DATA_CLASSINFO_CONTAINER(CLASSNAME) \
+    int CLASSNAME##_d_;
+
+#define _WX_PG_IMPLEMENT_VARIANT_DATA(CLASSNAME, \
+                                      DATATYPE, \
+                                      AS_ARG, \
+                                      AS_CONST_ARG, \
+                                      NULLVAL, \
+                                      BASECLASS) \
+_WX_PG_VARIANT_DATA_CLASSINFO_CONTAINER(CLASSNAME) \
+WX_PG_IMPLEMENT_DYNAMIC_CLASS_VARIANTDATA(CLASSNAME, BASECLASS) \
+AS_ARG operator <<( AS_ARG value, const wxVariant &variant ) \
+{ \
+    CLASSNAME *data = wxDynamicCastVariantData( variant.GetData(), CLASSNAME ); \
+    wxASSERT( data ); \
+    value = data->GetValue(); \
+    return value; \
+} \
+wxVariant& operator <<( wxVariant &variant, AS_CONST_ARG value ) \
+{ \
+    CLASSNAME *data = new CLASSNAME( value ); \
+    variant.SetData( data ); \
+    return variant; \
+} \
+AS_ARG DATATYPE##FromVariant( const wxVariant& v ) \
+{ \
+    CLASSNAME *data = wxDynamicCastVariantData( v.GetData(), CLASSNAME ); \
+    if ( !data ) \
+        return NULLVAL; \
+    return data->GetValueRef(); \
+} \
+wxVariant DATATYPE##ToVariant( AS_CONST_ARG value ) \
+{ \
+    wxVariant variant( new CLASSNAME( value ) ); \
+    return variant; \
+}
+
+#define WX_PG_IMPLEMENT_VARIANT_DATA(CLASSNAME, DATATYPE) \
+class CLASSNAME : public wxPGVariantData \
+{ \
+_WX_PG_IMPLEMENT_VARIANT_DATA_CLASS(CLASSNAME, DATATYPE, DATATYPE&, \
+                                    const DATATYPE&, wxPGDoesNothing(), \
+                                    wxVariant(new CLASSNAME(DATATYPE())), \
+                                    wxPGDoesNothing()) \
+public: \
+    virtual void* GetValuePtr() { return (void*)&m_value; } \
+}; \
+_WX_PG_IMPLEMENT_VARIANT_DATA(CLASSNAME, \
+                              DATATYPE, \
+                              DATATYPE&, \
+                              const DATATYPE&, \
+                              (DATATYPE&)*((DATATYPE*)NULL), \
+                              wxPGVariantData)
+
+#define WX_PG_IMPLEMENT_WXOBJECT_VARIANT_DATA(CLASSNAME, DATATYPE) \
+class CLASSNAME : public wxPGVariantData \
+{ \
+_WX_PG_IMPLEMENT_VARIANT_DATA_CLASS(CLASSNAME, DATATYPE, DATATYPE&, \
+                                    const DATATYPE&, wxPGDoesNothing(), \
+                                    wxVariant(new CLASSNAME(DATATYPE())), \
+                                    wxPGDoesNothing()) \
+public: \
+    virtual void* GetValuePtr() { return (void*)&m_value; } \
+    virtual wxClassInfo* GetValueClassInfo() \
+        { return m_value.GetClassInfo(); } \
+}; \
+_WX_PG_IMPLEMENT_VARIANT_DATA(CLASSNAME, DATATYPE, DATATYPE&, \
+                              const DATATYPE&, \
+                              (DATATYPE&)*((DATATYPE*)NULL), \
+                              wxPGVariantData)
+
+
+#define WX_PG_DECLARE_VARIANT_DATA(CLASSNAME, DATATYPE, DECL) \
+DECL DATATYPE& operator <<( DATATYPE& value, const wxVariant &variant ); \
+DECL wxVariant& operator <<( wxVariant &variant, const DATATYPE& value ); \
+DECL DATATYPE& DATATYPE##FromVariant( const wxVariant& variant ); \
+DECL wxVariant DATATYPE##ToVariant( const DATATYPE& value ); \
+template<> inline wxVariant WXVARIANT( const DATATYPE& value ) \
+    { return DATATYPE##ToVariant(value); } \
+DECL _WX_PG_VARIANT_DATA_CLASSINFO_CONTAINER_DECL(CLASSNAME);
+
+#define WX_PG_DECLARE_WXOBJECT_VARIANT_DATA WX_PG_DECLARE_VARIANT_DATA
+
+#define WX_PG_DECLARE_PTR_VARIANT_DATA(CLASSNAME, DATATYPE, DECL) \
+DECL DATATYPE* operator <<( DATATYPE* value, const wxVariant &variant ); \
+DECL wxVariant& operator <<( wxVariant &variant, DATATYPE* value ); \
+DECL DATATYPE* DATATYPE##FromVariant( const wxVariant& variant ); \
+DECL wxVariant DATATYPE##ToVariant( DATATYPE* value ); \
+DECL _WX_PG_VARIANT_DATA_CLASSINFO_CONTAINER_DECL(CLASSNAME);
+
+
+#define WX_PG_IMPLEMENT_PTR_VARIANT_DATA(CLASSNAME, DATATYPE, DEFAULT) \
+class CLASSNAME : public wxPGVariantData \
+{ \
+_WX_PG_IMPLEMENT_VARIANT_DATA_CLASS(CLASSNAME, DATATYPE*, DATATYPE*, \
+                                    DATATYPE*, m_value = NULL, \
+                                    DEFAULT, \
+                                    if (m_value) Py_DECREF(m_value); \
+                                    if (!value) value = Py_None; \
+                                    Py_INCREF(value) ) \
+    ~CLASSNAME() { if (m_value) Py_DECREF(m_value); } \
+public: \
+    virtual void* GetValuePtr() { return (void*)m_value; } \
+}; \
+_WX_PG_IMPLEMENT_VARIANT_DATA(CLASSNAME, DATATYPE, DATATYPE*, DATATYPE*, \
+                              NULL, wxPGVariantData)
+
+
+WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataPoint, wxPoint, WXDLLIMPEXP_PROPGRID)
+WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataSize, wxSize, WXDLLIMPEXP_PROPGRID)
+WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataArrayInt,
+                           wxArrayInt, WXDLLIMPEXP_PROPGRID)
+WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataLongLong,
+                           wxLongLong, WXDLLIMPEXP_PROPGRID)
+WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataULongLong,
+                           wxULongLong, WXDLLIMPEXP_PROPGRID)
+
+WX_PG_DECLARE_WXOBJECT_VARIANT_DATA(wxPGVariantDataFont,
+                                    wxFont, WXDLLIMPEXP_PROPGRID)
+template<> inline wxVariant WXVARIANT( const wxColour& value )
+{
+    wxVariant variant;
+    variant << value;
+    return variant;
+}
+
+#define WX_PG_VARIANT_GETVALUEREF(P, T) \
+    (*((T*)((wxPGVariantData*)(P.GetData()))->GetValuePtr()))
+
+// Safely converts a wxVariant to (long) int. Supports converting from string
+// and boolean as well.
+WXDLLIMPEXP_PROPGRID
+long wxPGVariantToInt( const wxVariant& variant, long defVal = 1 );
+
+// Safely converts a wxVariant to wxLongLong_t. Returns true on success.
+WXDLLIMPEXP_PROPGRID
+bool wxPGVariantToLongLong( const wxVariant& variant, wxLongLong_t* pResult );
+
+// Safely converts a wxVariant to wxULongLong_t. Returns true on success.
+WXDLLIMPEXP_PROPGRID
+bool wxPGVariantToULongLong( const wxVariant& variant, wxULongLong_t* pResult );
+
+// Safely converts a wxVariant to double. Supports converting from string and
+// wxLongLong as well.
+WXDLLIMPEXP_PROPGRID
+bool wxPGVariantToDouble( const wxVariant& variant, double* pResult );
+
+#endif // !SWIG
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+WXDLLIMPEXP_PROPGRID
+wxObject*
+wxPG_VariantToWxObject( const wxVariant& variant, wxClassInfo* classInfo );
+
+//
+// Redefine wxGetVariantCast to also take propertygrid variantdata
+// classes into account.
+//
+#undef wxGetVariantCast
+#define wxGetVariantCast(var,classname) \
+    (classname*)wxPG_VariantToWxObject(var,&classname::ms_classInfo)
+
+// TODO: After a while, remove this.
+#define WX_PG_VARIANT_TO_WXOBJECT(VARIANT,CLASSNAME) \
+    (CLASSNAME*)wxPG_VariantToWxObject(VARIANT,&CLASSNAME::ms_classInfo)
+
+#endif // !SWIG
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+//
+// Tokenizer macros.
+// NOTE: I have made two versions - worse ones (performance and consistency
+//   wise) use wxStringTokenizer and better ones (may have unfound bugs)
+//   use custom code.
+//
+
+#include "wx/tokenzr.h"
+
+// TOKENIZER1 can be done with wxStringTokenizer
+#define WX_PG_TOKENIZER1_BEGIN(WXSTRING,DELIMITER) \
+    wxStringTokenizer tkz(WXSTRING,DELIMITER,wxTOKEN_RET_EMPTY); \
+    while ( tkz.HasMoreTokens() ) \
+    { \
+        wxString token = tkz.GetNextToken(); \
+        token.Trim(true); \
+        token.Trim(false);
+
+#define WX_PG_TOKENIZER1_END() \
+    }
+
+
+//
+// 2nd version: tokens are surrounded by DELIMITERs (for example, C-style
+// strings). TOKENIZER2 must use custom code (a class) for full compliance with
+// " surrounded strings with \" inside.
+//
+// class implementation is in propgrid.cpp
+//
+
+class WXDLLIMPEXP_PROPGRID wxPGStringTokenizer
+{
+public:
+    wxPGStringTokenizer( const wxString& str, wxChar delimeter );
+    ~wxPGStringTokenizer();
+
+    bool HasMoreTokens(); // not const so we can do some stuff in it
+    wxString GetNextToken();
+
+protected:
+    const wxString*             m_str;
+    wxString::const_iterator    m_curPos;
+    wxString                    m_readyToken;
+    wxUniChar                   m_delimeter;
+};
+
+#define WX_PG_TOKENIZER2_BEGIN(WXSTRING,DELIMITER) \
+    wxPGStringTokenizer tkz(WXSTRING,DELIMITER); \
+    while ( tkz.HasMoreTokens() ) \
+    { \
+        wxString token = tkz.GetNextToken();
+
+#define WX_PG_TOKENIZER2_END() \
+    }
+
+#endif
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_PROPGRIDDEFS_H_
diff --git a/include/wx/propgrid/propgridiface.h b/include/wx/propgrid/propgridiface.h
new file mode 100644 (file)
index 0000000..68634c8
--- /dev/null
@@ -0,0 +1,1542 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgeid/propgridiface.h
+// Purpose:     wxPropertyGridInterface class
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2008-08-24
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef __WX_PROPGRID_PROPGRIDIFACE_H__
+#define __WX_PROPGRID_PROPGRIDIFACE_H__
+
+#include "wx/propgrid/property.h"
+#include "wx/propgrid/propgridpagestate.h"
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+/** @section wxPGPropArgCls
+
+    Most property grid functions have this type as their argument, as it can
+    convey a property by either a pointer or name.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGPropArgCls
+{
+public:
+    wxPGPropArgCls() { }
+    wxPGPropArgCls( const wxPGProperty* property )
+    {
+        m_ptr.property = (wxPGProperty*) property;
+        m_isName = false;
+    }
+    wxPGPropArgCls( const wxString& str )
+    {
+        m_ptr.name = &str;
+        m_isName = 1;
+    }
+    wxPGPropArgCls( const wxPGPropArgCls& id )
+    {
+        m_ptr = id.m_ptr;
+        m_isName = id.m_isName;
+    }
+    // This is only needed for wxPython bindings
+    wxPGPropArgCls( wxString* str, bool WXUNUSED(deallocPtr) )
+    {
+        m_ptr.name = str;
+        m_isName = 3;  // Like 1, but causes ptr to be deallocated in dtor
+    }
+    ~wxPGPropArgCls()
+    {
+        if ( m_isName == 3 )
+            delete m_ptr.name;
+    }
+    wxPGProperty* GetPtr() const
+    {
+        wxCHECK( !m_isName, NULL );
+        return m_ptr.property;
+    }
+    wxPGPropArgCls( const wxChar* str )
+    {
+        m_ptr.rawname = str;
+        m_isName = 2;
+    }
+    /** This constructor is required for NULL. */
+    wxPGPropArgCls( int )
+    {
+        m_ptr.property = (wxPGProperty*) NULL;
+        m_isName = false;
+    }
+    wxPGProperty* GetPtr( wxPropertyGridInterface* methods ) const;
+    wxPGProperty* GetPtr( const wxPropertyGridInterface* methods ) const
+    {
+        return GetPtr((wxPropertyGridInterface*)methods);
+    }
+    wxPGProperty* GetPtr0() const { return m_ptr.property; }
+    unsigned char HasName() const { return m_isName; }
+    const wxString& GetName() const { return *m_ptr.name; }
+private:
+    union
+    {
+        wxPGProperty* property;
+        const wxChar* rawname;
+        const wxString* name;
+    } m_ptr;
+    unsigned char m_isName;
+};
+
+#endif
+
+typedef const wxPGPropArgCls& wxPGPropArg;
+
+// -----------------------------------------------------------------------
+
+WXDLLIMPEXP_PROPGRID
+void wxPGTypeOperationFailed( const wxPGProperty* p,
+                              const wxChar* typestr,
+                              const wxChar* op );
+WXDLLIMPEXP_PROPGRID
+void wxPGGetFailed( const wxPGProperty* p, const wxChar* typestr );
+
+// -----------------------------------------------------------------------
+
+// Helper macro that does necessary preparations when calling
+// some wxPGProperty's member function.
+#define wxPG_PROP_ARG_CALL_PROLOG_0(PROPERTY) \
+    PROPERTY *p = (PROPERTY*)id.GetPtr(this); \
+    if ( !p ) return;
+
+#define wxPG_PROP_ARG_CALL_PROLOG_RETVAL_0(PROPERTY, RETVAL) \
+    PROPERTY *p = (PROPERTY*)id.GetPtr(this); \
+    if ( !p ) return RETVAL;
+
+#define wxPG_PROP_ARG_CALL_PROLOG() \
+    wxPG_PROP_ARG_CALL_PROLOG_0(wxPGProperty)
+
+#define wxPG_PROP_ARG_CALL_PROLOG_RETVAL(RVAL) \
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL_0(wxPGProperty, RVAL)
+
+#define wxPG_PROP_ID_CONST_CALL_PROLOG() \
+    wxPG_PROP_ARG_CALL_PROLOG_0(const wxPGProperty)
+
+#define wxPG_PROP_ID_CONST_CALL_PROLOG_RETVAL(RVAL) \
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL_0(const wxPGProperty, RVAL)
+
+// -----------------------------------------------------------------------
+
+
+/** @class wxPropertyGridInterface
+
+    Most of the shared property manipulation interface shared by wxPropertyGrid,
+    wxPropertyGridPage, and wxPropertyGridManager is defined in this class.
+
+    @remarks
+    - In separate wxPropertyGrid component this class was known as
+    wxPropertyContainerMethods.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPropertyGridInterface
+{
+public:
+
+    /** Destructor */
+    virtual ~wxPropertyGridInterface() { }
+
+    /** Adds choice to a property that can accept one.
+        @remarks
+        - If you need to make sure that you modify only the set of choices of
+          a single property (and not also choices of other properties with
+          initially identical set), call
+          wxPropertyGrid::SetPropertyChoicesPrivate.
+        - This usually only works for wxEnumProperty and derivatives
+          (wxFlagsProperty can get accept new items but its items may not get
+          updated).
+    */
+    void AddPropertyChoice( wxPGPropArg id,
+                            const wxString& label,
+                            int value = wxPG_INVALID_VALUE );
+
+    /**
+        Appends property to the list.
+
+        wxPropertyGrid assumes ownership of the object.
+        Becomes child of most recently added category.
+        @remarks
+        - wxPropertyGrid takes the ownership of the property pointer.
+        - If appending a category with name identical to a category already in
+          the wxPropertyGrid, then newly created category is deleted, and most
+          recently added category (under which properties are appended) is set
+          to the one with same name. This allows easier adding of items to same
+          categories in multiple passes.
+        - Does not automatically redraw the control, so you may need to call
+          Refresh when calling this function after control has been shown for
+          the first time.
+    */
+    wxPGProperty* Append( wxPGProperty* property );
+
+    wxPGProperty* AppendIn( wxPGPropArg id, wxPGProperty* newproperty );
+
+    /**
+        In order to add new items into a property with fixed children (for
+        instance, wxFlagsProperty), you need to call this method. After
+        populating has been finished, you need to call EndAddChildren.
+    */
+    void BeginAddChildren( wxPGPropArg id );
+
+    /** Deletes all properties.
+    */
+    virtual void Clear() = 0;
+
+    /** Deselect current selection, if any. Returns true if success
+        (ie. validator did not intercept). */
+    bool ClearSelection();
+
+    /** Resets modified status of all properties.
+    */
+    void ClearModifiedStatus()
+    {
+        SetPropertyModifiedStatus(m_pState->m_properties, false);
+        m_pState->m_anyModified = false;
+    }
+
+    /** Collapses given category or property with children.
+        Returns true if actually collapses.
+    */
+    bool Collapse( wxPGPropArg id );
+
+    /** Collapses all items that can be collapsed.
+
+        @return
+        Return false if failed (may fail if editor value cannot be validated).
+    */
+    bool CollapseAll() { return ExpandAll(false); }
+
+    /**
+        Changes value of a property, as if from an editor.
+        Use this instead of SetPropertyValue() if you need the value to run
+        through validation process, and also send the property change event.
+
+        @return
+        Returns true if value was successfully changed.
+    */
+    bool ChangePropertyValue( wxPGPropArg id, wxVariant newValue );
+
+    /** Resets value of a property to its default. */
+    bool ClearPropertyValue( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        p->SetValue(p->GetDefaultValue());
+        RefreshProperty(p);
+        return true;
+    }
+
+    /**
+        Deletes a property by id. If category is deleted, all children are
+        automatically deleted as well.
+     */
+    void DeleteProperty( wxPGPropArg id );
+
+    /** Deletes choice from a property.
+
+        If selected item is deleted, then the value is set to unspecified.
+
+        See AddPropertyChoice for more details.
+    */
+    void DeletePropertyChoice( wxPGPropArg id, int index );
+
+    /** Disables property. */
+    bool DisableProperty( wxPGPropArg id ) { return EnableProperty(id,false); }
+
+    /**
+        Returns true if all property grid data changes have been committed.
+
+        Usually only returns false if value in active editor has been
+        invalidated by a wxValidator.
+    */
+    bool EditorValidate();
+
+    /**
+        Enables or disables property, depending on whether enable is true or
+        false.
+     */
+    bool EnableProperty( wxPGPropArg id, bool enable = true );
+
+    /** Called after population of property with fixed children has finished.
+    */
+    void EndAddChildren( wxPGPropArg id );
+
+    /** Expands given category or property with children.
+        Returns true if actually expands.
+    */
+    bool Expand( wxPGPropArg id );
+
+    /** Expands all items that can be expanded.
+    */
+    bool ExpandAll( bool expand = true );
+
+    /** Returns list of expanded properties.
+    */
+    wxArrayPGProperty GetExpandedProperties() const
+    {
+        wxArrayPGProperty array;
+        GetPropertiesWithFlag(&array, wxPG_PROP_COLLAPSED, true,
+            wxPG_ITERATE_ALL_PARENTS_RECURSIVELY|wxPG_ITERATE_HIDDEN);
+        return array;
+    }
+
+    /** Returns id of first child of given property.
+        @remarks
+        Does not return sub-properties!
+    */
+    wxPGProperty* GetFirstChild( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
+
+        if ( !p->GetChildCount() || p->HasFlag(wxPG_PROP_AGGREGATE) )
+            return wxNullProperty;
+
+        return p->Item(0);
+    }
+
+    //@{
+    /** Returns iterator class instance.
+        @param flags
+        See @ref propgrid_iterator_flags. Value wxPG_ITERATE_DEFAULT causes
+        iteration over everything except private child properties.
+        @param firstProp
+            Property to start iteration from. If NULL, then first child of root
+            is used.
+        @param startPos
+            Either wxTOP or wxBOTTOM. wxTOP will indicate that iterations start
+            from the first property from the top, and wxBOTTOM means that the
+            iteration will instead begin from bottommost valid item.
+    */
+    wxPropertyGridIterator GetIterator( int flags = wxPG_ITERATE_DEFAULT,
+                                        wxPGProperty* firstProp = NULL )
+    {
+        return wxPropertyGridIterator( m_pState, flags, firstProp );
+    }
+
+    wxPropertyGridConstIterator
+    GetIterator( int flags = wxPG_ITERATE_DEFAULT,
+                 wxPGProperty* firstProp = NULL ) const
+    {
+        return wxPropertyGridConstIterator( m_pState, flags, firstProp );
+    }
+
+    wxPropertyGridIterator GetIterator( int flags, int startPos )
+    {
+        return wxPropertyGridIterator( m_pState, flags, startPos );
+    }
+
+    wxPropertyGridConstIterator GetIterator( int flags, int startPos ) const
+    {
+        return wxPropertyGridConstIterator( m_pState, flags, startPos );
+    }
+    //@}
+
+    /** Returns id of first item, whether it is a category or property.
+        @param flags
+        @link iteratorflags List of iterator flags@endlink
+    */
+    wxPGProperty* GetFirst( int flags = wxPG_ITERATE_ALL )
+    {
+        wxPropertyGridIterator it( m_pState, flags, wxNullProperty, 1 );
+        return *it;
+    }
+
+    const wxPGProperty* GetFirst( int flags = wxPG_ITERATE_ALL ) const
+    {
+        return ((wxPropertyGridInterface*)this)->GetFirst(flags);
+    }
+
+    /**
+        Returns id of property with given name (case-sensitive).
+
+        If there is no property with such name, returned property id is invalid
+        ( i.e. it will return false with IsOk method).
+        @remarks
+        - Sub-properties (i.e. properties which have parent that is not
+          category or root) can not be accessed globally by their name.
+          Instead, use "<property>.<subproperty>" in place of "<subproperty>".
+    */
+    wxPGProperty* GetProperty( const wxString& name ) const
+    {
+        return GetPropertyByName(name);
+    }
+
+    /** Returns map-like storage of property's attributes.
+        @remarks
+        Note that if extra style wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES is set,
+        then builtin-attributes are not included in the storage.
+    */
+    const wxPGAttributeStorage& GetPropertyAttributes( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(*((const wxPGAttributeStorage*)NULL));
+        return p->GetAttributes();
+    }
+
+    /** Adds to 'targetArr' pointers to properties that have given
+        flags 'flags' set. However, if 'inverse' is set to true, then
+        only properties without given flags are stored.
+        @param flags
+        Property flags to use.
+        @param iterFlags
+        Iterator flags to use. Default is everything expect private children.
+    */
+    void GetPropertiesWithFlag( wxArrayPGProperty* targetArr,
+                                wxPGProperty::FlagType flags,
+                                bool inverse = false,
+                                int iterFlags = wxPG_ITERATE_PROPERTIES |
+                                                wxPG_ITERATE_HIDDEN |
+                                                wxPG_ITERATE_CATEGORIES) const;
+
+    /** Returns value of given attribute. If none found, returns NULL-variant.
+    */
+    wxVariant GetPropertyAttribute( wxPGPropArg id,
+                                    const wxString& attrName ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullVariant)
+        return p->GetAttribute(attrName);
+    }
+
+    /** Returns pointer of property's nearest parent category. If no category
+        found, returns NULL.
+    */
+    wxPropertyCategory* GetPropertyCategory( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_CONST_CALL_PROLOG_RETVAL(NULL)
+        return m_pState->GetPropertyCategory(p);
+    }
+
+#ifndef SWIG
+    /** Returns client data (void*) of a property. */
+    void* GetPropertyClientData( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL)
+        return p->GetClientData();
+    }
+#endif
+
+    /**
+        Returns first property which label matches given string.
+
+        NULL if none found. Note that this operation is extremely slow when
+        compared to GetPropertyByName().
+    */
+    wxPGProperty* GetPropertyByLabel( const wxString& label ) const;
+
+    /** Returns property with given name. NULL if none found.
+    */
+    wxPGProperty* GetPropertyByName( const wxString& name ) const;
+
+    /** Returns child property 'subname' of property 'name'. Same as
+        calling GetPropertyByName("name.subname"), albeit slightly faster.
+    */
+    wxPGProperty* GetPropertyByName( const wxString& name,
+                                     const wxString& subname ) const;
+
+    /** Returns writable reference to property's list of choices (and relevant
+        values). If property does not have any choices, will return reference
+        to an invalid set of choices that will return false on IsOk call.
+    */
+    wxPGChoices& GetPropertyChoices( wxPGPropArg id );
+
+    /** Returns property's editor. */
+    const wxPGEditor* GetPropertyEditor( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL)
+        return p->GetEditorClass();
+    }
+
+    /** Returns help string associated with a property. */
+    wxString GetPropertyHelpString( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
+        return p->GetHelpString();
+    }
+
+    /** Returns property's custom value image (NULL of none). */
+    wxBitmap* GetPropertyImage( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL)
+        return p->GetValueImage();
+    }
+
+    /** Returns property's position under its parent. */
+    unsigned int GetPropertyIndex( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(INT_MAX)
+        return p->GetIndexInParent();
+    }
+
+    /** Returns label of a property. */
+    const wxString& GetPropertyLabel( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
+        return p->GetLabel();
+    }
+
+    /** Returns name of a property, by which it is globally accessible. */
+    wxString GetPropertyName( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
+        return p->GetName();
+    }
+
+    /** Returns parent item of a property. */
+    wxPGProperty* GetPropertyParent( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
+        return p->GetParent();
+    }
+
+#if wxUSE_VALIDATORS
+    /** Returns validator of a property as a reference, which you
+        can pass to any number of SetPropertyValidator.
+    */
+    wxValidator* GetPropertyValidator( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL)
+        return p->GetValidator();
+    }
+#endif
+
+    /** Returns value as wxVariant. To get wxObject pointer from it,
+        you will have to use WX_PG_VARIANT_TO_WXOBJECT(VARIANT,CLASSNAME) macro.
+
+        If property value is unspecified, Null variant is returned.
+    */
+    wxVariant GetPropertyValue( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxVariant())
+        return p->GetValue();
+    }
+
+    wxString GetPropertyValueAsString( wxPGPropArg id ) const;
+    long GetPropertyValueAsLong( wxPGPropArg id ) const;
+    unsigned long GetPropertyValueAsULong( wxPGPropArg id ) const
+    {
+        return (unsigned long) GetPropertyValueAsLong(id);
+    }
+#ifndef SWIG
+    int GetPropertyValueAsInt( wxPGPropArg id ) const
+        { return (int)GetPropertyValueAsLong(id); }
+#endif
+    bool GetPropertyValueAsBool( wxPGPropArg id ) const;
+    double GetPropertyValueAsDouble( wxPGPropArg id ) const;
+    wxObject* GetPropertyValueAsWxObjectPtr( wxPGPropArg id ) const;
+    void* GetPropertyValueAsVoidPtr( wxPGPropArg id ) const;
+
+#define wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(TYPENAME, DEFVAL) \
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(DEFVAL) \
+    if ( p->m_value.GetType() != TYPENAME ) \
+    { \
+        wxPGGetFailed(p, TYPENAME); \
+        return DEFVAL; \
+    }
+
+#define wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(TYPENAME, DEFVAL) \
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(DEFVAL) \
+    if ( p->m_value.GetType() != TYPENAME ) \
+        return DEFVAL; \
+
+    wxArrayString GetPropertyValueAsArrayString( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("arrstring"),
+                                                   wxArrayString())
+        return p->m_value.GetArrayString();
+    }
+
+    wxPoint GetPropertyValueAsPoint( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxPoint"), wxPoint())
+        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxPoint);
+    }
+
+    wxSize GetPropertyValueAsSize( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxSize"), wxSize())
+        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxSize);
+    }
+
+    wxLongLong_t GetPropertyValueAsLongLong( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(wxT("wxLongLong"),
+                                             (long) GetPropertyValueAsLong(id))
+        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxLongLong).GetValue();
+    }
+
+    wxULongLong_t GetPropertyValueAsULongLong( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(wxT("wxULongLong"),
+                                    (unsigned long) GetPropertyValueAsULong(id))
+        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxULongLong).GetValue();
+    }
+
+    wxArrayInt GetPropertyValueAsArrayInt( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxArrayInt"),
+                                                   wxArrayInt())
+        wxArrayInt arr = WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxArrayInt);
+        return arr;
+    }
+
+#if wxUSE_DATETIME
+    wxDateTime GetPropertyValueAsDateTime( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxDateTime())
+
+        if ( wxStrcmp(p->m_value.GetType(), wxT("datetime")) != 0 )
+        {
+            wxPGGetFailed(p, wxT("datetime"));
+            return wxDateTime();
+        }
+        return p->m_value.GetDateTime();
+    }
+#endif
+
+#ifndef SWIG
+    /** Returns a wxVariant list containing wxVariant versions of all
+        property values. Order is not guaranteed.
+        @param flags
+        Use wxPG_KEEP_STRUCTURE to retain category structure; each sub
+        category will be its own wxVariantList of wxVariant.
+        Use wxPG_INC_ATTRIBUTES to include property attributes as well.
+        Each attribute will be stored as list variant named
+        "@@<propname>@@attr."
+        @remarks
+    */
+    wxVariant GetPropertyValues( const wxString& listname = wxEmptyString,
+        wxPGProperty* baseparent = NULL, long flags = 0 ) const
+    {
+        return m_pState->DoGetPropertyValues(listname, baseparent, flags);
+    }
+#endif
+
+    wxString GetPropertyValueType( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
+        return p->GetValueType();
+    }
+
+    /** Returns currently selected property. */
+    wxPGProperty* GetSelection() const
+    {
+        return m_pState->GetSelection();
+    }
+
+#ifndef SWIG
+    wxPropertyGridPageState* GetState() const { return m_pState; }
+#endif
+
+    /** Similar to GetIterator(), but instead returns wxPGVIterator instance,
+        which can be useful for forward-iterating through arbitrary property
+        containers.
+
+        @param flags
+        See @ref propgrid_iterator_flags.
+    */
+    virtual wxPGVIterator GetVIterator( int flags ) const;
+
+    /** Hides or reveals a property.
+        @param hide
+            If true, hides property, otherwise reveals it.
+        @param flags
+            By default changes are applied recursively. Set this paramter
+            wxPG_DONT_RECURSE to prevent this.
+    */
+    bool HideProperty( wxPGPropArg id,
+                       bool hide = true,
+                       int flags = wxPG_RECURSE );
+
+#if wxPG_INCLUDE_ADVPROPS
+    /** Initializes *all* property types. Causes references to most object
+        files in the library, so calling this may cause significant increase
+        in executable size when linking with static library.
+    */
+    static void InitAllTypeHandlers();
+#else
+    static void InitAllTypeHandlers() { }
+#endif
+
+    //@{
+    /** Inserts property to the property container.
+
+        @param priorThis
+        New property is inserted just prior to this. Available only
+        in the first variant. There are two versions of this function
+        to allow this parameter to be either an id or name to
+        a property.
+
+        @param newproperty
+        Pointer to the inserted property. wxPropertyGrid will take
+        ownership of this object.
+
+        @param parent
+        New property is inserted under this category. Available only
+        in the second variant. There are two versions of this function
+        to allow this parameter to be either an id or name to
+        a property.
+
+        @param index
+        Index under category. Available only in the second variant.
+        If index is < 0, property is appended in category.
+
+        @return
+        Returns id for the property,
+
+        @remarks
+
+        - wxPropertyGrid takes the ownership of the property pointer.
+
+        - While Append may be faster way to add items, make note that when
+          both types of data storage (categoric and
+          non-categoric) are active, Insert becomes even more slow. This is
+          especially true if current mode is non-categoric.
+
+        Example of use:
+
+        @code
+
+            // append category
+            wxPGProperty* my_cat_id = propertygrid->Append(
+                new wxPropertyCategory("My Category") );
+
+            ...
+
+            // insert into category - using second variant
+            wxPGProperty* my_item_id_1 = propertygrid->Insert(
+                my_cat_id, 0, new wxStringProperty("My String 1") );
+
+            // insert before to first item - using first variant
+            wxPGProperty* my_item_id_2 = propertygrid->Insert(
+                my_item_id, new wxStringProperty("My String 2") );
+
+        @endcode
+
+    */
+    wxPGProperty* Insert( wxPGPropArg priorThis, wxPGProperty* newproperty );
+    wxPGProperty* Insert( wxPGPropArg parent,
+                          int index,
+                          wxPGProperty* newproperty );
+    //@}
+
+    /** Returns true if property is a category. */
+    bool IsPropertyCategory( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return p->IsCategory();
+    }
+
+    /** Inserts choice to a property that can accept one.
+
+        See AddPropertyChoice for more details.
+    */
+    void InsertPropertyChoice( wxPGPropArg id,
+                               const wxString& label,
+                               int index,
+                               int value = wxPG_INVALID_VALUE );
+
+    /** Returns true if property is enabled. */
+    bool IsPropertyEnabled( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return (!(p->GetFlags() & wxPG_PROP_DISABLED))?true:false;
+    }
+
+    /**
+        Returns true if given property is expanded.
+
+        Naturally, always returns false for properties that cannot be expanded.
+    */
+    bool IsPropertyExpanded( wxPGPropArg id ) const;
+
+    /**
+        Returns true if property has been modified after value set or modify
+        flag clear by software.
+    */
+    bool IsPropertyModified( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return ( (p->GetFlags() & wxPG_PROP_MODIFIED) ? true : false );
+    }
+
+    /**
+        Returns true if property is shown (ie hideproperty with true not
+        called for it).
+     */
+    bool IsPropertyShown( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return (!(p->GetFlags() & wxPG_PROP_HIDDEN))?true:false;
+    }
+
+    /** Returns true if property value is set to unspecified.
+    */
+    bool IsPropertyValueUnspecified( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return p->IsValueUnspecified();
+    }
+
+    /**
+        Disables (limit = true) or enables (limit = false) wxTextCtrl editor of
+        a property, if it is not the sole mean to edit the value.
+    */
+    void LimitPropertyEditing( wxPGPropArg id, bool limit = true );
+
+    /** If state is shown in it's grid, refresh it now.
+    */
+    virtual void RefreshGrid( wxPropertyGridPageState* state = NULL );
+
+#if wxPG_INCLUDE_ADVPROPS
+    /**
+        Initializes additional property editors (SpinCtrl etc.). Causes
+        references to most object files in the library, so calling this may
+        cause significant increase in executable size when linking with static
+        library.
+    */
+    static void RegisterAdditionalEditors();
+#else
+    static void RegisterAdditionalEditors() { }
+#endif
+
+    /** Replaces property with id with newly created property. For example,
+        this code replaces existing property named "Flags" with one that
+        will have different set of items:
+        @code
+            pg->ReplaceProperty("Flags",
+                wxFlagsProperty("Flags", wxPG_LABEL, newItems))
+        @endcode
+        For more info, see wxPropertyGrid::Insert.
+    */
+    wxPGProperty* ReplaceProperty( wxPGPropArg id, wxPGProperty* property );
+
+    /** @anchor propgridinterface_editablestate_flags
+
+        Flags for wxPropertyGridInterface::SaveEditableState() and
+        wxPropertyGridInterface::RestoreEditableState().
+    */
+    enum EditableStateFlags
+    {
+        /** Include selected property. */
+        SelectionState   = 0x01,
+        /** Include expanded/collapsed property information. */
+        ExpandedState    = 0x02,
+        /** Include scrolled position. */
+        ScrollPosState   = 0x04,
+        /** Include selected page information.
+            Only applies to wxPropertyGridManager. */
+        PageState        = 0x08,
+        /** Include splitter position. Stored for each page. */
+        SplitterPosState = 0x10,
+
+        /**
+            Include all supported user editable state information.
+            This is usually the default value. */
+        AllStates        = SelectionState |
+                           ExpandedState |
+                           ScrollPosState |
+                           PageState |
+                           SplitterPosState
+    };
+
+    /**
+        Restores user-editable state.
+
+        See also wxPropertyGridInterface::SaveEditableState().
+
+        @param src
+            String generated by SaveEditableState.
+
+        @param restoreStates
+            Which parts to restore from source string. See @ref
+            propgridinterface_editablestate_flags "list of editable state
+            flags".
+
+        @return
+            False if there was problem reading the string.
+
+        @remarks
+        If some parts of state (such as scrolled or splitter position) fail to
+        restore correctly, please make sure that you call this function after
+        wxPropertyGrid size has been set (this may sometimes be tricky when
+        sizers are used).
+    */
+    bool RestoreEditableState( const wxString& src,
+                               int restoreStates = AllStates );
+
+    /**
+        Used to acquire user-editable state (selected property, expanded
+        properties, scrolled position, splitter positions).
+
+        @param includedStates
+        Which parts of state to include. See @ref
+        propgridinterface_editablestate_flags "list of editable state flags".
+    */
+    wxString SaveEditableState( int includedStates = AllStates ) const;
+
+    /**
+        Lets user to set the strings listed in the choice dropdown of a
+        wxBoolProperty. Defaults are "True" and "False", so changing them to,
+        say, "Yes" and "No" may be useful in some less technical applications.
+    */
+    static void SetBoolChoices( const wxString& trueChoice,
+                                const wxString& falseChoice );
+
+    /** Sets or clears flag(s) of all properties in given array.
+        @param flags
+        Property flags to set or clear.
+        @param inverse
+        Set to true if you want to clear flag instead of setting them.
+    */
+    void SetPropertiesFlag( const wxArrayPGProperty& srcArr,
+                            wxPGProperty::FlagType flags,
+                            bool inverse = false );
+
+    /** Sets an attribute for this property.
+        @param name
+            Text identifier of attribute. See @ref propgrid_property_attributes.
+        @param value
+            Value of attribute.
+        @param argFlags
+            Optional. Use wxPG_RECURSE to set the attribute to child properties
+            recursively.
+    */
+    void SetPropertyAttribute( wxPGPropArg id,
+                               const wxString& attrName,
+                               wxVariant value,
+                               long argFlags = 0 )
+    {
+        DoSetPropertyAttribute(id,attrName,value,argFlags);
+    }
+
+    /** Sets attributes from a wxPGAttributeStorage.
+    */
+    void SetPropertyAttributes( wxPGPropArg id,
+                                const wxPGAttributeStorage& attributes )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetAttributes(attributes);
+    }
+
+    /** Sets text, bitmap, and colours for given column's cell.
+
+        @remarks
+        - You can set label cell by setting column to 0.
+        - You can use wxPG_LABEL as text to use default text for column.
+    */
+    void SetPropertyCell( wxPGPropArg id,
+                          int column,
+                          const wxString& text = wxEmptyString,
+                          const wxBitmap& bitmap = wxNullBitmap,
+                          const wxColour& fgCol = wxNullColour,
+                          const wxColour& bgCol = wxNullColour )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetCell( column, new wxPGCell(text, bitmap, fgCol, bgCol) );
+    }
+
+    /** Set choices of a property to specified set of labels and values.
+
+        @remarks
+        This operation clears the property value.
+    */
+    void SetPropertyChoices( wxPGPropArg id, wxPGChoices& choices)
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetChoices(choices);
+    }
+
+
+    /**
+        If property's set of choices is shared, then calling this method
+        converts it to private.
+    */
+    void SetPropertyChoicesExclusive( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetChoicesExclusive();
+    }
+
+#ifndef SWIG
+    /** Sets client data (void*) of a property.
+        @remarks
+        This untyped client data has to be deleted manually.
+    */
+    void SetPropertyClientData( wxPGPropArg id, void* clientData )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetClientData(clientData);
+    }
+
+    /** Sets editor for a property.
+
+        @param editor
+        For builtin editors, use wxPGEditor_X, where X is builtin editor's
+        name (TextCtrl, Choice, etc. see wxPGEditor documentation for full
+        list).
+
+        For custom editors, use pointer you received from
+        wxPropertyGrid::RegisterEditorClass().
+    */
+    void SetPropertyEditor( wxPGPropArg id, const wxPGEditor* editor )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        wxCHECK_RET( editor, wxT("unknown/NULL editor") );
+        p->SetEditor(editor);
+        RefreshProperty(p);
+    }
+#endif
+
+    /** Sets editor control of a property. As editor argument, use
+        editor name string, such as "TextCtrl" or "Choice".
+    */
+    void SetPropertyEditor( wxPGPropArg id, const wxString& editorName )
+    {
+        SetPropertyEditor(id,GetEditorByName(editorName));
+    }
+
+    /** Sets label of a property.
+        @remarks
+        This is the only way to set property's name. There is not
+        wxPGProperty::SetLabel() method.
+    */
+    void SetPropertyLabel( wxPGPropArg id, const wxString& newproplabel );
+
+    /** Set modified status of a property and all its children.
+    */
+    void SetPropertyModifiedStatus( wxPGPropArg id, bool modified )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetModifiedStatus(modified);
+    }
+
+    /**
+        Sets property (and, recursively, its children) to have read-only value.
+        In other words, user cannot change the value in the editor, but they
+        can still copy it.
+        @remarks
+        This is mainly for use with textctrl editor. Not all other editors fully
+        support it.
+        @param flags
+        By default changes are applied recursively. Set this paramter
+        wxPG_DONT_RECURSE to prevent this.
+    */
+    void SetPropertyReadOnly( wxPGPropArg id,
+                              bool set = true,
+                              int flags = wxPG_RECURSE )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        if ( flags & wxPG_RECURSE )
+            p->SetFlagRecursively(wxPG_PROP_READONLY, set);
+        else
+            p->SetFlag(wxPG_PROP_READONLY);
+    }
+
+    /** Sets property's value to unspecified.
+        If it has children (it may be category), then the same thing is done to
+        them.
+    */
+    void SetPropertyValueUnspecified( wxPGPropArg id );
+
+#ifndef SWIG
+    /** Sets various property values from a list of wxVariants. If property with
+        name is missing from the grid, new property is created under given
+        default category (or root if omitted).
+    */
+    void SetPropertyValues( const wxVariantList& list,
+                            wxPGPropArg defaultCategory = wxNullProperty )
+    {
+        wxPGProperty *p;
+        if ( defaultCategory.HasName() ) p = defaultCategory.GetPtr(this);
+        else p = defaultCategory.GetPtr0();
+        m_pState->DoSetPropertyValues(list, p);
+    }
+
+    void SetPropertyValues( const wxVariant& list,
+                            wxPGPropArg defaultCategory = wxNullProperty )
+    {
+        SetPropertyValues(list.GetList(),defaultCategory);
+    }
+#endif
+
+    /** Associates the help string with property.
+        @remarks
+        By default, text is shown either in the manager's "description"
+        text box or in the status bar. If extra window style
+        wxPG_EX_HELP_AS_TOOLTIPS is used, then the text will appear as a
+        tooltip.
+    */
+    void SetPropertyHelpString( wxPGPropArg id, const wxString& helpString )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetHelpString(helpString);
+    }
+
+    /** Set wxBitmap in front of the value.
+        @remarks
+        - Bitmap will be scaled to a size returned by
+        wxPropertyGrid::GetImageSize();
+    */
+    void SetPropertyImage( wxPGPropArg id, wxBitmap& bmp )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetValueImage(bmp);
+        RefreshProperty(p);
+    }
+
+    /** Sets max length of property's text.
+    */
+    bool SetPropertyMaxLength( wxPGPropArg id, int maxLen );
+
+#if wxUSE_VALIDATORS
+    /** Sets validator of a property.
+    */
+    void SetPropertyValidator( wxPGPropArg id, const wxValidator& validator )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetValidator(validator);
+    }
+#endif
+
+#ifndef SWIG
+    /** Sets value (long integer) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, long value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+
+    /** Sets value (integer) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, int value )
+    {
+        wxVariant v((long)value);
+        SetPropVal( id, v );
+    }
+    /** Sets value (floating point) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, double value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+    /** Sets value (bool) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, bool value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+    void SetPropertyValue( wxPGPropArg id, const wxChar* value )
+    {
+        SetPropertyValueString( id, wxString(value) );
+    }
+    void SetPropertyValue( wxPGPropArg id, const wxString& value )
+    {
+        SetPropertyValueString( id, value );
+    }
+
+    /** Sets value (wxArrayString) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, const wxArrayString& value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+
+#if wxUSE_DATETIME
+    void SetPropertyValue( wxPGPropArg id, const wxDateTime& value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+#endif
+
+    /** Sets value (wxObject*) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, wxObject* value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+
+    void SetPropertyValue( wxPGPropArg id, wxObject& value )
+    {
+        wxVariant v(&value);
+        SetPropVal( id, v );
+    }
+
+    /** Sets value (wxPoint&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, const wxPoint& value )
+    {
+        wxVariant v = WXVARIANT(value);
+        SetPropVal( id, v );
+    }
+    /** Sets value (wxSize&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, const wxSize& value )
+    {
+        wxVariant v = WXVARIANT(value);
+        SetPropVal( id, v );
+    }
+    /** Sets value (wxLongLong&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, wxLongLong_t value )
+    {
+        wxVariant v = WXVARIANT(wxLongLong(value));
+        SetPropVal( id, v );
+    }
+    /** Sets value (wxULongLong&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, wxULongLong_t value )
+    {
+        wxVariant v = WXVARIANT(wxULongLong(value));
+        SetPropVal( id, v );
+    }
+    /** Sets value (wxArrayInt&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, const wxArrayInt& value )
+    {
+        wxVariant v = WXVARIANT(value);
+        SetPropVal( id, v );
+    }
+#endif  // !SWIG
+
+    /** Sets value (wxString) of a property.
+
+        @remarks
+        This method uses wxPGProperty::SetValueFromString, which all properties
+        should implement. This means that there should not be a type error,
+        and instead the string is converted to property's actual value type.
+    */
+    void SetPropertyValueString( wxPGPropArg id, const wxString& value );
+
+    /** Sets value (wxVariant&) of a property.
+
+        @remarks
+        Use wxPropertyGrid::ChangePropertyValue() instead if you need to run
+        through validation process and send property change event.
+    */
+    void SetPropertyValue( wxPGPropArg id, wxVariant value )
+    {
+        SetPropVal( id, value );
+    }
+
+#ifndef SWIG
+    /** Sets value (wxVariant&) of a property. Same as SetPropertyValue, but
+        accepts reference. */
+    void SetPropVal( wxPGPropArg id, wxVariant& value );
+#endif
+
+    /** Adjusts how wxPropertyGrid behaves when invalid value is entered
+        in a property.
+        @param vfbFlags
+        See @link vfbflags list of valid flags values@endlink
+    */
+    void SetValidationFailureBehavior( int vfbFlags );
+
+#ifdef SWIG
+    %pythoncode {
+        def MapType(class_,factory):
+            "Registers Python type/class to property mapping.\n\nfactory: Property builder function/class."
+            global _type2property
+            try:
+                mappings = _type2property
+            except NameError:
+                raise AssertionError("call only after a propertygrid or manager instance constructed")
+
+            mappings[class_] = factory
+
+
+        def DoDefaultTypeMappings(self):
+            "Map built-in properties."
+            global _type2property
+            try:
+                mappings = _type2property
+
+                return
+            except NameError:
+                mappings = {}
+                _type2property = mappings
+
+            mappings[str] = StringProperty
+            mappings[unicode] = StringProperty
+            mappings[int] = IntProperty
+            mappings[float] = FloatProperty
+            mappings[bool] = BoolProperty
+            mappings[list] = ArrayStringProperty
+            mappings[tuple] = ArrayStringProperty
+            mappings[wx.Font] = FontProperty
+            mappings[wx.Colour] = ColourProperty
+            "mappings[wx.Size] = SizeProperty"
+            "mappings[wx.Point] = PointProperty"
+            "mappings[wx.FontData] = FontDataProperty"
+
+        def DoDefaultValueTypeMappings(self):
+            "Map pg value type ids to getter methods."
+            global _vt2getter
+            try:
+                vt2getter = _vt2getter
+
+                return
+            except NameError:
+                vt2getter = {}
+                _vt2getter = vt2getter
+
+        def GetPropertyValues(self,dict_=None, as_strings=False, inc_attributes=False):
+            "Returns values in the grid."
+            ""
+            "dict_: if not given, then a new one is created. dict_ can be"
+            "  object as well, in which case it's __dict__ is used."
+            "as_strings: if True, then string representations of values"
+            "  are fetched instead of native types. Useful for config and such."
+            "inc_attributes: if True, then property attributes are added"
+            "  as @<propname>@<attr>."
+            ""
+            "Return value: dictionary with values. It is always a dictionary,"
+            "so if dict_ was object with __dict__ attribute, then that attribute"
+            "is returned."
+
+            if dict_ is None:
+                dict_ = {}
+            elif hasattr(dict_,'__dict__'):
+                dict_ = dict_.__dict__
+
+            if not as_strings:
+                getter = self.GetPropertyValue
+            else:
+                getter = self.GetPropertyValueAsString
+
+            it = self.GetVIterator(PG_ITERATE_PROPERTIES)
+            while not it.AtEnd():
+                p = it.GetProperty()
+                name = p.GetName()
+
+                dict_[name] = getter(p)
+
+                if inc_attributes:
+                    attrs = p.GetAttributes()
+                    if attrs and len(attrs):
+                        dict_['@%s@attr'%name] = attrs
+
+                it.Next()
+
+            return dict_
+
+        GetValues = GetPropertyValues
+
+
+        def SetPropertyValues(self,dict_):
+            "Sets property values from dict_, which can be either\ndictionary or an object with __dict__ attribute."
+            ""
+            "autofill: If true, keys with not relevant properties"
+            "  are auto-created. For more info, see AutoFill."
+            ""
+            "Notes:"
+            "  * Keys starting with underscore are ignored."
+            "  * Attributes can be set with entries named @<propname>@<attr>."
+            ""
+
+            autofill = False
+
+            if dict_ is None:
+                dict_ = {}
+            elif hasattr(dict_,'__dict__'):
+                dict_ = dict_.__dict__
+
+            attr_dicts = []
+
+            def set_sub_obj(k0,dict_):
+                for k,v in dict_.iteritems():
+                    if k[0] != '_':
+                        if k.endswith('@attr'):
+                            attr_dicts.append((k[1:-5],v))
+                        else:
+                            try:
+                                self.SetPropertyValue(k,v)
+                            except:
+                                try:
+                                    if autofill:
+                                        self._AutoFillOne(k0,k,v)
+                                        continue
+                                except:
+                                    if isinstance(v,dict):
+                                        set_sub_obj(k,v)
+                                    elif hasattr(v,'__dict__'):
+                                        set_sub_obj(k,v.__dict__)
+
+
+            for k,v in attr_dicts:
+                p = GetPropertyByName(k)
+                if not p:
+                    raise AssertionError("No such property: '%s'"%k)
+                for an,av in v.iteritems():
+                    p.SetAttribute(an, av)
+
+
+            cur_page = False
+            is_manager = isinstance(self,PropertyGridManager)
+
+            try:
+                set_sub_obj(self.GetGrid().GetRoot(),dict_)
+            except:
+                import traceback
+                traceback.print_exc()
+
+            self.Refresh()
+
+        SetValues = SetPropertyValues
+
+        def _AutoFillMany(self,cat,dict_):
+            for k,v in dict_.iteritems():
+                self._AutoFillOne(cat,k,v)
+
+
+        def _AutoFillOne(self,cat,k,v):
+            global _type2property
+
+            factory = _type2property.get(v.__class__,None)
+
+            if factory:
+                self.AppendIn( cat, factory(k,k,v) )
+            elif hasattr(v,'__dict__'):
+                cat2 = self.AppendIn( cat, PropertyCategory(k) )
+                self._AutoFillMany(cat2,v.__dict__)
+            elif isinstance(v,dict):
+                cat2 = self.AppendIn( cat, PropertyCategory(k) )
+                self._AutoFillMany(cat2,v)
+            elif not k.startswith('_'):
+                raise AssertionError("member '%s' is of unregisted type/class '%s'"%(k,v.__class__))
+
+
+        def AutoFill(self,obj,parent=None):
+            "Clears properties and re-fills to match members and\nvalues of given object or dictionary obj."
+
+            self.edited_objects[parent] = obj
+
+            cur_page = False
+            is_manager = isinstance(self,PropertyGridManager)
+
+            if not parent:
+                if is_manager:
+                    page = self.GetCurrentPage()
+                    page.Clear()
+                    parent = page.GetRoot()
+                else:
+                    self.Clear()
+                    parent = self.GetGrid().GetRoot()
+            else:
+                it = self.GetIterator(PG_ITERATE_PROPERTIES, parent)
+                it.Next()  # Skip the parent
+                while not it.AtEnd():
+                    p = it.GetProperty()
+                    if not p.IsSomeParent(parent):
+                        break
+
+                    self.DeleteProperty(p)
+
+                    name = p.GetName()
+                    it.Next()
+
+            if not is_manager or page == self.GetCurrentPage():
+                self.Freeze()
+                cur_page = True
+
+            try:
+                self._AutoFillMany(parent,obj.__dict__)
+            except:
+                import traceback
+                traceback.print_exc()
+
+            if cur_page:
+                self.Thaw()
+
+        def RegisterEditor(self, editor, editorName=None):
+            "Transform class into instance, if necessary."
+            if not isinstance(editor, PGEditor):
+                editor = editor()
+            if not editorName:
+                editorName = editor.__class__.__name__
+            try:
+                self._editor_instances.append(editor)
+            except:
+                self._editor_instances = [editor]
+            RegisterEditor(editor, editorName)
+
+        def GetPropertyClientData(self, p):
+            if isinstance(p, basestring):
+                p = self.GetPropertyByName(p)
+            return p.GetClientData()
+
+        def SetPropertyClientData(self, p, data):
+            if isinstance(p, basestring):
+                p = self.GetPropertyByName(p)
+            return p.SetClientData(data)
+    }
+#endif
+
+    // GetPropertyByName With nice assertion error message.
+    wxPGProperty* GetPropertyByNameA( const wxString& name ) const;
+
+    static wxPGEditor* GetEditorByName( const wxString& editorName );
+
+    virtual void RefreshProperty( wxPGProperty* p ) = 0;
+
+protected:
+
+    // Returns page state data for given (sub) page (-1 means current page).
+    virtual wxPropertyGridPageState* GetPageState( int pageIndex ) const
+    {
+        if ( pageIndex <= 0 )
+            return m_pState;
+        return NULL;
+    }
+
+    virtual bool DoSelectPage( int WXUNUSED(index) ) { return true; }
+
+    // Default call's m_pState's BaseGetPropertyByName
+    virtual wxPGProperty* DoGetPropertyByName( const wxString& name ) const;
+
+#ifndef SWIG
+
+    // Deriving classes must set this (it must be only or current page).
+    wxPropertyGridPageState*         m_pState;
+
+    // Intermediate version needed due to wxVariant copying inefficiency
+    void DoSetPropertyAttribute( wxPGPropArg id,
+                                 const wxString& name,
+                                 wxVariant& value, long argFlags );
+
+    // Empty string object to return from member functions returning const
+    // wxString&.
+    wxString                    m_emptyString;
+
+private:
+    // Cannot be GetGrid() due to ambiguity issues.
+    wxPropertyGrid* GetPropertyGrid()
+    {
+        return m_pState->GetGrid();
+    }
+
+    // Cannot be GetGrid() due to ambiguity issues.
+    const wxPropertyGrid* GetPropertyGrid() const
+    {
+        return (const wxPropertyGrid*) m_pState->GetGrid();
+    }
+#endif // #ifndef SWIG
+
+    friend class wxPropertyGrid;
+    friend class wxPropertyGridManager;
+};
+
+#endif // __WX_PROPGRID_PROPGRIDIFACE_H__
diff --git a/include/wx/propgrid/propgridpagestate.h b/include/wx/propgrid/propgridpagestate.h
new file mode 100644 (file)
index 0000000..5ff8ab5
--- /dev/null
@@ -0,0 +1,692 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgrid/propgridpagestate.h
+// Purpose:     wxPropertyGridPageState class
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2008-08-24
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PROPGRID_PROPGRIDPAGESTATE_H_
+#define _WX_PROPGRID_PROPGRIDPAGESTATE_H_
+
+#include "wx/propgrid/property.h"
+
+// -----------------------------------------------------------------------
+
+/** @section propgrid_hittestresult wxPropertyGridHitTestResult
+
+    A return value from wxPropertyGrid::HitTest(),
+    contains all you need to know about an arbitrary location on the grid.
+*/
+struct WXDLLIMPEXP_PROPGRID wxPropertyGridHitTestResult
+{
+    friend class wxPropertyGridPageState;
+public:
+
+    wxPGProperty* GetProperty() const { return property; }
+
+    /** Column. -1 for margin. */
+    int             column;
+
+    /** Index of splitter hit, -1 for none. */
+    int             splitter;
+
+    /** If splitter hit, offset to that */
+    int             splitterHitOffset;
+
+private:
+    /** Property. NULL if empty space below properties was hit */
+    wxPGProperty*   property;
+};
+
+// -----------------------------------------------------------------------
+
+#define wxPG_IT_CHILDREN(A)         ((A)<<16)
+
+/** @section propgrid_iterator_flags wxPropertyGridIterator Flags
+    @{
+
+    NOTES: At lower 16-bits, there are flags to check if item will be included.
+    At higher 16-bits, there are same flags, but to instead check if children
+    will be included.
+*/
+
+enum wxPG_ITERATOR_FLAGS
+{
+
+/**
+    Iterate through 'normal' property items (does not include children of
+    aggregate or hidden items by default).
+*/
+wxPG_ITERATE_PROPERTIES = wxPG_PROP_PROPERTY |
+                          wxPG_PROP_MISC_PARENT |
+                          wxPG_PROP_AGGREGATE |
+                          wxPG_PROP_COLLAPSED |
+                          wxPG_IT_CHILDREN(wxPG_PROP_MISC_PARENT) |
+                          wxPG_IT_CHILDREN(wxPG_PROP_CATEGORY),
+
+/** Iterate children of collapsed parents, and individual items that are hidden.
+*/
+wxPG_ITERATE_HIDDEN = wxPG_PROP_HIDDEN |
+                      wxPG_IT_CHILDREN(wxPG_PROP_COLLAPSED),
+
+/**
+    Iterate children of parent that is an aggregate property (ie has fixed
+    children).
+*/
+wxPG_ITERATE_FIXED_CHILDREN = wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE) |
+                              wxPG_ITERATE_PROPERTIES,
+
+/** Iterate categories.
+    Note that even without this flag, children of categories are still iterated
+    through.
+*/
+wxPG_ITERATE_CATEGORIES = wxPG_PROP_CATEGORY |
+                          wxPG_IT_CHILDREN(wxPG_PROP_CATEGORY) |
+                          wxPG_PROP_COLLAPSED,
+
+wxPG_ITERATE_ALL_PARENTS = wxPG_PROP_MISC_PARENT |
+                           wxPG_PROP_AGGREGATE |
+                           wxPG_PROP_CATEGORY,
+
+wxPG_ITERATE_ALL_PARENTS_RECURSIVELY = wxPG_ITERATE_ALL_PARENTS |
+                                       wxPG_IT_CHILDREN(
+                                                wxPG_ITERATE_ALL_PARENTS),
+
+wxPG_ITERATOR_FLAGS_ALL = wxPG_PROP_PROPERTY |
+                          wxPG_PROP_MISC_PARENT |
+                          wxPG_PROP_AGGREGATE |
+                          wxPG_PROP_HIDDEN |
+                          wxPG_PROP_CATEGORY |
+                          wxPG_PROP_COLLAPSED,
+
+wxPG_ITERATOR_MASK_OP_ITEM = wxPG_ITERATOR_FLAGS_ALL,
+
+// (wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE|wxPG_PROP_CATEGORY)
+wxPG_ITERATOR_MASK_OP_PARENT = wxPG_ITERATOR_FLAGS_ALL,
+
+/** Combines all flags needed to iterate through visible properties
+    (ie hidden properties and children of collapsed parents are skipped).
+*/
+wxPG_ITERATE_VISIBLE = wxPG_ITERATE_PROPERTIES |
+                       wxPG_PROP_CATEGORY |
+                       wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE),
+
+/** Iterate all items.
+*/
+wxPG_ITERATE_ALL = wxPG_ITERATE_VISIBLE |
+                   wxPG_ITERATE_HIDDEN,
+
+/** Iterate through individual properties (ie categories and children of
+    aggregate properties are skipped).
+*/
+wxPG_ITERATE_NORMAL = wxPG_ITERATE_PROPERTIES |
+                      wxPG_ITERATE_HIDDEN,
+
+/** Default iterator flags.
+*/
+wxPG_ITERATE_DEFAULT = wxPG_ITERATE_NORMAL
+
+};
+
+/** @}
+*/
+
+
+#define wxPG_ITERATOR_CREATE_MASKS(FLAGS, A, B) \
+    A = (FLAGS ^ wxPG_ITERATOR_MASK_OP_ITEM) & \
+        wxPG_ITERATOR_MASK_OP_ITEM & 0xFFFF; \
+    B = ((FLAGS>>16) ^ wxPG_ITERATOR_MASK_OP_PARENT) & \
+        wxPG_ITERATOR_MASK_OP_PARENT & 0xFFFF;
+
+
+// Macro to test if children of PWC should be iterated through
+#define wxPG_ITERATOR_PARENTEXMASK_TEST(PWC, PARENTMASK) \
+        ( \
+        !(PWC->GetFlags() & PARENTMASK) && \
+        PWC->GetChildCount() \
+        )
+
+
+// Base for wxPropertyGridIterator classes.
+class WXDLLIMPEXP_PROPGRID wxPropertyGridIteratorBase
+{
+public:
+    wxPropertyGridIteratorBase()
+    {
+    }
+
+    void Assign( const wxPropertyGridIteratorBase& it );
+
+    bool AtEnd() const { return m_property == NULL; }
+
+    /** Get current property.
+    */
+    wxPGProperty* GetProperty() const { return m_property; }
+
+    void Init( wxPropertyGridPageState* state,
+               int flags,
+               wxPGProperty* property,
+               int dir = 1 );
+
+    void Init( wxPropertyGridPageState* state,
+               int flags,
+               int startPos = wxTOP,
+               int dir = 0 );
+
+    /** Iterate to the next property.
+    */
+    void Next( bool iterateChildren = true );
+
+    /** Iterate to the previous property.
+    */
+    void Prev();
+
+    /**
+        Set base parent, ie a property when, in which iteration returns, it
+        ends.
+
+        Default base parent is the root of the used wxPropertyGridPageState.
+    */
+    void SetBaseParent( wxPGProperty* baseParent )
+        { m_baseParent = baseParent; }
+
+protected:
+
+    wxPGProperty*               m_property;
+
+private:
+    wxPropertyGridPageState*        m_state;
+    wxPGProperty*               m_baseParent;
+
+    // Masks are used to quickly exclude items
+    int                         m_itemExMask;
+    int                         m_parentExMask;
+};
+
+
+#define wxPG_IMPLEMENT_ITERATOR(CLASS, PROPERTY, STATE) \
+    CLASS( STATE* state, int flags = wxPG_ITERATE_DEFAULT, \
+           PROPERTY* property = NULL, int dir = 1 ) \
+        : wxPropertyGridIteratorBase() \
+        { Init( (wxPropertyGridPageState*)state, flags, \
+                (wxPGProperty*)property, dir ); } \
+    CLASS( STATE* state, int flags, int startPos, int dir = 0 ) \
+        : wxPropertyGridIteratorBase() \
+        { Init( (wxPropertyGridPageState*)state, flags, startPos, dir ); } \
+    CLASS() \
+        : wxPropertyGridIteratorBase() \
+    { \
+        m_property = NULL; \
+    } \
+    CLASS( const CLASS& it ) \
+        : wxPropertyGridIteratorBase( ) \
+    { \
+        Assign(it); \
+    } \
+    ~CLASS() \
+    { \
+    } \
+    const CLASS& operator=( const CLASS& it ) \
+    { \
+        Assign(it); \
+        return *this; \
+    } \
+    CLASS& operator++() { Next(); return *this; } \
+    CLASS operator++(int) { CLASS it=*this;Next();return it; } \
+    CLASS& operator--() { Prev(); return *this; } \
+    CLASS operator--(int) { CLASS it=*this;Prev();return it; } \
+    PROPERTY* operator *() const { return (PROPERTY*)m_property; } \
+    static PROPERTY* OneStep( STATE* state, \
+                              int flags = wxPG_ITERATE_DEFAULT, \
+                              PROPERTY* property = NULL, \
+                              int dir = 1 ) \
+    { \
+        CLASS it( state, flags, property, dir ); \
+        if ( property ) \
+        { \
+            if ( dir == 1 ) it.Next(); \
+            else it.Prev(); \
+        } \
+        return *it; \
+    }
+
+
+/** @class wxPropertyGridIterator
+
+    Preferable way to iterate through contents of wxPropertyGrid,
+    wxPropertyGridManager, and wxPropertyGridPage.
+
+    See wxPropertyGridInterface::GetIterator() for more information about usage.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID
+    wxPropertyGridIterator : public wxPropertyGridIteratorBase
+{
+public:
+
+    wxPG_IMPLEMENT_ITERATOR(wxPropertyGridIterator,
+                            wxPGProperty,
+                            wxPropertyGridPageState)
+
+protected:
+};
+
+
+// Const version of wxPropertyGridIterator.
+class WXDLLIMPEXP_PROPGRID
+    wxPropertyGridConstIterator : public wxPropertyGridIteratorBase
+{
+public:
+    wxPG_IMPLEMENT_ITERATOR(wxPropertyGridConstIterator,
+                            const wxPGProperty,
+                            const wxPropertyGridPageState)
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+/** Base class to derive new viterators.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGVIteratorBase
+{
+    friend class wxPGVIterator;
+public:
+    wxPGVIteratorBase() { m_refCount = 1; }
+    virtual void Next() = 0;
+    void IncRef()
+    {
+        m_refCount++;
+    }
+    void DecRef()
+    {
+        m_refCount--;
+        if ( m_refCount <= 0 )
+            delete this;
+    }
+protected:
+    virtual ~wxPGVIteratorBase() { }
+
+    wxPropertyGridIterator  m_it;
+private:
+    int     m_refCount;
+};
+
+/** @class wxPGVIterator
+
+    Abstract implementation of a simple iterator. Can only be used
+    to iterate in forward order, and only through the entire container.
+    Used to have functions dealing with all properties work with both
+    wxPropertyGrid and wxPropertyGridManager.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGVIterator
+{
+public:
+    wxPGVIterator() { m_pIt = NULL; }
+    wxPGVIterator( wxPGVIteratorBase* obj ) { m_pIt = obj; }
+    ~wxPGVIterator() { UnRef(); }
+    void UnRef() { if (m_pIt) m_pIt->DecRef(); }
+    wxPGVIterator( const wxPGVIterator& it )
+    {
+        m_pIt = it.m_pIt;
+        m_pIt->IncRef();
+    }
+#ifndef SWIG
+    const wxPGVIterator& operator=( const wxPGVIterator& it )
+    {
+        UnRef();
+        m_pIt = it.m_pIt;
+        m_pIt->IncRef();
+        return *this;
+    }
+#endif
+    void Next() { m_pIt->Next(); }
+    bool AtEnd() const { return m_pIt->m_it.AtEnd(); }
+    wxPGProperty* GetProperty() const { return m_pIt->m_it.GetProperty(); }
+protected:
+    wxPGVIteratorBase*  m_pIt;
+};
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+// We won't need this class from wxPython
+
+/** @class wxPropertyGridPageState
+
+    Contains low-level property page information (properties, column widths,
+    etc) of a single wxPropertyGrid or single wxPropertyGridPage. Generally you
+    should not use this class directly, but instead member functions in
+    wxPropertyGridInterface, wxPropertyGrid, wxPropertyGridPage, and
+    wxPropertyGridManager.
+
+    @remarks
+    - In separate wxPropertyGrid component this class was known as
+    wxPropertyGridState.
+    - Currently this class is not implemented in wxPython.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPropertyGridPageState
+{
+    friend class wxPGProperty;
+    friend class wxPropertyGrid;
+    friend class wxPGCanvas;
+    friend class wxPropertyGridInterface;
+    friend class wxPropertyGridPage;
+    friend class wxPropertyGridManager;
+public:
+
+    /** Default constructor. */
+    wxPropertyGridPageState();
+
+    /** Destructor. */
+    virtual ~wxPropertyGridPageState();
+
+    /** Makes sure all columns have minimum width.
+    */
+    void CheckColumnWidths( int widthChange = 0 );
+
+    /**
+        Override this member function to add custom behavior on property
+        deletion.
+    */
+    virtual void DoDelete( wxPGProperty* item );
+
+    wxSize DoFitColumns( bool allowGridResize = false );
+
+    wxPGProperty* DoGetItemAtY( int y ) const;
+
+    /**
+        Override this member function to add custom behavior on property
+        insertion.
+    */
+    virtual wxPGProperty* DoInsert( wxPGProperty* parent,
+                                    int index,
+                                    wxPGProperty* property );
+
+    /**
+        This needs to be overridden in grid used the manager so that splitter
+        changes can be propagated to other pages.
+    */
+    virtual void DoSetSplitterPosition( int pos,
+                                        int splitterColumn = 0,
+                                        bool allPages = false,
+                                        bool fromAutoCenter = false );
+
+    bool EnableCategories( bool enable );
+
+    /** Make sure virtual height is up-to-date.
+    */
+    void EnsureVirtualHeight()
+    {
+        if ( m_vhCalcPending )
+        {
+            RecalculateVirtualHeight();
+            m_vhCalcPending = 0;
+        }
+    }
+
+    /** Enables or disables given property and its subproperties. */
+    bool DoEnableProperty( wxPGProperty* p, bool enable );
+
+    /** Returns (precalculated) height of contained visible properties.
+    */
+    unsigned int GetVirtualHeight() const
+    {
+        wxASSERT( !m_vhCalcPending );
+        return m_virtualHeight;
+    }
+
+    /** Returns (precalculated) height of contained visible properties.
+    */
+    unsigned int GetVirtualHeight()
+    {
+        EnsureVirtualHeight();
+        return m_virtualHeight;
+    }
+
+    /** Returns actual height of contained visible properties.
+        @remarks
+        Mostly used for internal diagnostic purposes.
+    */
+    inline unsigned int GetActualVirtualHeight() const;
+
+    unsigned int GetColumnCount() const
+    {
+        return m_colWidths.size();
+    }
+
+    wxPGProperty* GetSelection() const
+    {
+        return m_selected;
+    }
+
+    int GetColumnMinWidth( int column ) const;
+
+    int GetColumnWidth( unsigned int column ) const
+    {
+        return m_colWidths[column];
+    }
+
+    wxPropertyGrid* GetGrid() const { return m_pPropGrid; }
+
+    /** Returns last item which could be iterated using given flags.
+        @param flags
+        @link iteratorflags List of iterator flags@endlink
+    */
+    wxPGProperty* GetLastItem( int flags = wxPG_ITERATE_DEFAULT );
+
+    const wxPGProperty* GetLastItem( int flags = wxPG_ITERATE_DEFAULT ) const
+    {
+        return ((wxPropertyGridPageState*)this)->GetLastItem(flags);
+    }
+
+    wxPropertyCategory* GetPropertyCategory( const wxPGProperty* p ) const;
+
+    wxPGProperty* GetPropertyByLabel( const wxString& name,
+                                      wxPGProperty* parent = NULL ) const;
+
+    wxVariant DoGetPropertyValues( const wxString& listname,
+                                   wxPGProperty* baseparent,
+                                   long flags ) const;
+
+    wxPGProperty* DoGetRoot() const { return m_properties; }
+
+    // Returns combined width of margin and all the columns
+    int GetVirtualWidth() const
+    {
+        return m_width;
+    }
+
+    /**
+        Returns minimal width for given column so that all images and texts
+        will fit entirely.
+
+        Used by SetSplitterLeft() and DoFitColumns().
+    */
+    int GetColumnFitWidth(wxClientDC& dc,
+                          wxPGProperty* pwc,
+                          unsigned int col,
+                          bool subProps) const;
+
+    /** Returns information about arbitrary position in the grid.
+
+        wxPropertyGridHitTestResult definition:
+        @code
+            struct wxPropertyGridHitTestResult
+            {
+                wxPGProperty* GetProperty() const;
+
+                // column. -1 for margin
+                int             column;
+
+                // Index of splitter hit, -1 for none.
+                int             splitter;
+
+                // If splitter hit, then offset to that.
+                int             splitterHitOffset;
+            };
+        @endcode
+    */
+    wxPropertyGridHitTestResult HitTest( const wxPoint& pt ) const;
+
+    /** Returns true if page is visibly displayed.
+    */
+    inline bool IsDisplayed() const;
+
+    bool IsInNonCatMode() const { return (bool)(m_properties == m_abcArray); }
+
+    /** Only inits arrays, doesn't migrate things or such. */
+    void InitNonCatMode ();
+
+    void DoLimitPropertyEditing( wxPGProperty* p, bool limit = true )
+    {
+        p->SetFlagRecursively(wxPG_PROP_NOEDITOR, limit);
+    }
+
+    bool DoSelectProperty( wxPGProperty* p, unsigned int flags = 0 );
+
+    /** widthChange is non-client.
+    */
+    void OnClientWidthChange( int newWidth,
+                              int widthChange,
+                              bool fromOnResize = false );
+
+    /** Recalculates m_virtualHeight.
+    */
+    void RecalculateVirtualHeight()
+    {
+        m_virtualHeight = GetActualVirtualHeight();
+    }
+
+    void SetColumnCount( int colCount );
+
+    void PropagateColSizeDec( int column, int decrease, int dir );
+
+    bool DoHideProperty( wxPGProperty* p, bool hide, int flags = wxPG_RECURSE );
+
+    bool DoSetPropertyValueString( wxPGProperty* p, const wxString& value );
+
+    bool DoSetPropertyValue( wxPGProperty* p, wxVariant& value );
+
+    bool DoSetPropertyValueWxObjectPtr( wxPGProperty* p, wxObject* value );
+    void DoSetPropertyValues( const wxVariantList& list,
+                              wxPGProperty* default_category );
+
+    void DoSetPropertyValueUnspecified( wxPGProperty* p );
+
+    void SetSplitterLeft( bool subProps = false );
+
+    /** Set virtual width for this particular page. */
+    void SetVirtualWidth( int width );
+
+    void SortChildren( wxPGProperty* p );
+    void Sort();
+
+    void SetSelection( wxPGProperty* p ) { m_selected = p; }
+
+    /** Called after virtual height needs to be recalculated.
+    */
+    void VirtualHeightChanged()
+    {
+        m_vhCalcPending = 1;
+    }
+
+    /** Base append. */
+    wxPGProperty* DoAppend( wxPGProperty* property );
+
+    /** Returns property by its name. */
+    wxPGProperty* BaseGetPropertyByName( const wxString& name ) const;
+
+    void DoClearSelection()
+    {
+        m_selected = NULL;
+    }
+
+    /** Called in, for example, wxPropertyGrid::Clear. */
+    void DoClear();
+
+    bool DoCollapse( wxPGProperty* p );
+
+    bool DoExpand( wxPGProperty* p );
+
+    void CalculateFontAndBitmapStuff( int vspacing );
+
+protected:
+
+    int DoGetSplitterPosition( int splitterIndex = 0 ) const;
+
+    /** Returns column at x coordinate (in GetGrid()->GetPanel()).
+        @param pSplitterHit
+        Give pointer to int that receives index to splitter that is at x.
+        @param pSplitterHitOffset
+        Distance from said splitter.
+    */
+    int HitTestH( int x, int* pSplitterHit, int* pSplitterHitOffset ) const;
+
+    int PrepareToAddItem ( wxPGProperty* property,
+                           wxPGProperty* scheduledParent );
+
+    /** If visible, then this is pointer to wxPropertyGrid.
+        This shall *never* be NULL to indicate that this state is not visible.
+    */
+    wxPropertyGrid*             m_pPropGrid;
+
+    /** Pointer to currently used array. */
+    wxPGProperty*               m_properties;
+
+    /** Array for categoric mode. */
+    wxPGRootProperty            m_regularArray;
+
+    /** Array for root of non-categoric mode. */
+    wxPGRootProperty*           m_abcArray;
+
+    /** Dictionary for name-based access. */
+    wxPGHashMapS2P              m_dictName;
+
+    /** List of column widths (first column does not include margin). */
+    wxArrayInt                  m_colWidths;
+
+    double                      m_fSplitterX;
+
+    /** Most recently added category. */
+    wxPropertyCategory*         m_currentCategory;
+
+    /** Pointer to selected property. */
+    wxPGProperty*               m_selected;
+
+    /** Virtual width. */
+    int                         m_width;
+
+    /** Indicates total virtual height of visible properties. */
+    unsigned int                m_virtualHeight;
+
+    /** 1 if m_lastCaption is also the bottommost caption. */
+    unsigned char               m_lastCaptionBottomnest;
+
+    /** 1 items appended/inserted, so stuff needs to be done before drawing;
+        If m_virtualHeight == 0, then calcylatey's must be done.
+        Otherwise just sort.
+    */
+    unsigned char               m_itemsAdded;
+
+    /** 1 if any value is modified. */
+    unsigned char               m_anyModified;
+
+    unsigned char               m_vhCalcPending;
+};
+
+#endif // #ifndef SWIG
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_PROPGRIDPAGESTATE_H_
+
diff --git a/include/wx/propgrid/props.h b/include/wx/propgrid/props.h
new file mode 100644 (file)
index 0000000..b2c23b9
--- /dev/null
@@ -0,0 +1,1290 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/propgrid/props.h
+// Purpose:     wxPropertyGrid Property Classes
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2007-03-28
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_PROPGRID_PROPS_H_
+#define _WX_PROPGRID_PROPS_H_
+
+// -----------------------------------------------------------------------
+
+class wxArrayEditorDialog;
+
+#include "wx/propgrid/editors.h"
+
+// -----------------------------------------------------------------------
+
+//
+// Additional property class declaration helper macros
+//
+
+//
+// Property class implementation helper macros.
+//
+
+#define WX_PG_DECLARE_BASIC_TYPE_METHODS() \
+    virtual wxString GetValueAsString( int argFlags = 0 ) const; \
+    virtual bool StringToValue( wxVariant& variant, \
+                                const wxString& text, \
+                                int argFlags = 0 ) const;
+
+#define WX_PG_DECLARE_CHOICE_METHODS() \
+    virtual bool IntToValue( wxVariant& variant, \
+                             int number, int argFlags = 0 ) const; \
+    virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo );
+
+#define WX_PG_DECLARE_EVENT_METHODS() \
+    virtual bool OnEvent( wxPropertyGrid* propgrid, \
+                          wxWindow* primary, wxEvent& event );
+
+#define WX_PG_DECLARE_PARENTAL_METHODS() \
+    virtual void ChildChanged( wxVariant& thisValue, \
+                               int childIndex, wxVariant& childValue ) const; \
+    virtual void RefreshChildren();
+
+#define WX_PG_DECLARE_CUSTOM_PAINT_METHODS() \
+    virtual wxSize OnMeasureImage( int item ) const; \
+    virtual void OnCustomPaint( wxDC& dc, \
+                                const wxRect& rect, wxPGPaintData& paintdata );
+
+#define WX_PG_DECLARE_ATTRIBUTE_METHODS() \
+    virtual bool DoSetAttribute( const wxString& name, wxVariant& value );
+
+#define WX_PG_DECLARE_VALIDATOR_METHODS() \
+    virtual wxValidator* DoGetValidator() const;
+
+// Adds constructor function as well.
+#define WX_PG_IMPLEMENT_PROPERTY_CLASS2(NAME,CLASSNAME,\
+                                        UPCLASS,T,T_AS_ARG,EDITOR) \
+IMPLEMENT_DYNAMIC_CLASS(NAME, UPCLASS) \
+WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(NAME,T,EDITOR)
+
+// A regular property
+#define WX_PG_IMPLEMENT_PROPERTY_CLASS(NAME,UPNAME,T,T_AS_ARG,EDITOR) \
+WX_PG_IMPLEMENT_PROPERTY_CLASS2(NAME,NAME,UPNAME,T,T_AS_ARG,EDITOR)
+
+#define WX_PG_DECLARE_DERIVED_PROPERTY_CLASS(CLASSNAME) \
+DECLARE_DYNAMIC_CLASS(CLASSNAME)
+
+// Derived property class is one that inherits from an existing working property
+// class, but assumes same value and editor type.
+#define WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(NAME,UPNAME,T_AS_ARG) \
+IMPLEMENT_DYNAMIC_CLASS(NAME, UPNAME)
+
+// -----------------------------------------------------------------------
+
+#define wxPG_NO_ESCAPE      wxPG_PROP_NO_ESCAPE     // No escape sequences
+#define wxPG_ESCAPE         0                       // Escape sequences
+
+#define WX_PG_DECLARE_STRING_PROPERTY_WITH_DECL(NAME, DECL) \
+DECL NAME : public wxLongStringProperty \
+{ \
+    WX_PG_DECLARE_DERIVED_PROPERTY_CLASS(NAME) \
+public: \
+    NAME( const wxString& name = wxPG_LABEL, \
+          const wxString& label = wxPG_LABEL, \
+          const wxString& value = wxEmptyString); \
+    virtual ~NAME(); \
+    virtual bool OnButtonClick( wxPropertyGrid* propgrid, wxString& value ); \
+    WX_PG_DECLARE_VALIDATOR_METHODS() \
+};
+
+#define WX_PG_DECLARE_STRING_PROPERTY(NAME) \
+WX_PG_DECLARE_STRING_PROPERTY_WITH_DECL(NAME, class) \
+
+#define WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR(NAME, FLAGS) \
+WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(NAME,wxLongStringProperty,\
+                                       const wxString&) \
+NAME::NAME( const wxString& name, \
+            const wxString& label, \
+            const wxString& value ) \
+  : wxLongStringProperty(name,label,value) \
+{ \
+    m_flags |= FLAGS; \
+} \
+NAME::~NAME() { }
+
+#define WX_PG_IMPLEMENT_STRING_PROPERTY(NAME, FLAGS) \
+WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR(NAME,FLAGS) \
+wxValidator* NAME::DoGetValidator () const \
+{ return (wxValidator*) NULL; }
+
+// -----------------------------------------------------------------------
+
+#define WX_PG_DECLARE_CUSTOM_FLAGS_PROPERTY_WITH_DECL(CLASSNAME,DECL) \
+DECL CLASSNAME : public wxFlagsProperty \
+{ \
+    WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
+public: \
+    CLASSNAME( const wxString& label = wxPG_LABEL, \
+               const wxString& name = wxPG_LABEL, \
+               long value = -1 ); \
+    virtual ~CLASSNAME(); \
+};
+
+#define WX_PG_DECLARE_CUSTOM_FLAGS_PROPERTY(CLASSNAME) \
+WX_PG_DECLARE_CUSTOM_FLAGS_PROPERTY_WITH_DECL(CLASSNAME, class)
+
+// This will create interface for wxFlagsProperty derived class
+// named CLASSNAME.
+#define WX_PG_IMPLEMENT_CUSTOM_FLAGS_PROPERTY(CLASSNAME,LABELS,VALUES,DEFVAL) \
+WX_PG_IMPLEMENT_PROPERTY_CLASS(CLASSNAME,wxFlagsProperty,long_##CLASSNAME,\
+                               long,TextCtrl) \
+CLASSNAME::CLASSNAME( const wxString& label, \
+                      const wxString& name, \
+                      long value ) \
+    : wxFlagsProperty(label,name,LABELS,VALUES,value!=-1?value:DEFVAL) \
+{ \
+    m_flags |= wxPG_PROP_STATIC_CHOICES; \
+} \
+CLASSNAME::~CLASSNAME() { }
+
+
+// -----------------------------------------------------------------------
+
+#define WX_PG_DECLARE_CUSTOM_ENUM_PROPERTY_WITH_DECL(CLASSNAME, DECL) \
+class CLASSNAME : public wxEnumProperty \
+{ \
+    WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
+public: \
+    CLASSNAME( const wxString& label = wxPG_LABEL, \
+               const wxString& name = wxPG_LABEL, \
+               int value = -1 ); \
+    virtual ~CLASSNAME(); \
+};
+
+#define WX_PG_DECLARE_CUSTOM_ENUM_PROPERTY(CLASSNAME) \
+WX_PG_DECLARE_CUSTOM_ENUM_PROPERTY_WITH_DECL(CLASSNAME, class)
+
+#define WX_PG_IMPLEMENT_CUSTOM_ENUM_PROPERTY(CLASSNAME,LABELS,VALUES,DEFVAL) \
+WX_PG_IMPLEMENT_PROPERTY_CLASS(CLASSNAME, wxEnumProperty, long_##CLASSNAME, \
+                               int, Choice) \
+CLASSNAME::CLASSNAME( const wxString& label, const wxString& name, int value ) \
+    : wxEnumProperty(label,name,LABELS,VALUES,value!=-1?value:DEFVAL) \
+{ \
+    m_flags |= wxPG_PROP_STATIC_CHOICES; \
+} \
+CLASSNAME::~CLASSNAME() { }
+
+
+// -----------------------------------------------------------------------
+
+#define WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_WITH_DECL(CLASSNAME, DECL) \
+DECL CLASSNAME : public wxSystemColourProperty \
+{ \
+    DECLARE_DYNAMIC_CLASS(CLASSNAME) \
+public: \
+    CLASSNAME( const wxString& label = wxPG_LABEL, \
+               const wxString& name = wxPG_LABEL, \
+               const wxColourPropertyValue& value = wxColourPropertyValue() ); \
+    virtual ~CLASSNAME(); \
+    virtual wxColour GetColour( int index ) const; \
+};
+
+#define WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY(CLASSNAME) \
+WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_WITH_DECL(CLASSNAME, class)
+
+#define WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY(CLASSNAME,\
+                                               LABELS,VALUES,COLOURS) \
+static wxPGChoices gs_##CLASSNAME##_choicesCache; \
+WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(CLASSNAME, wxSystemColourProperty, \
+                                       const wxColourPropertyValue&) \
+CLASSNAME::CLASSNAME( const wxString& label, const wxString& name, \
+    const wxColourPropertyValue& value ) \
+    : wxSystemColourProperty(label, name, LABELS, VALUES, \
+                             &gs_##CLASSNAME##_choicesCache, value ) \
+{ \
+    m_flags |= wxPG_PROP_TRANSLATE_CUSTOM; \
+} \
+CLASSNAME::~CLASSNAME () { } \
+wxColour CLASSNAME::GetColour ( int index ) const \
+{ \
+    if ( !m_choices.HasValue(index) ) \
+    { \
+        wxASSERT( index < (int)m_choices.GetCount() ); \
+        return COLOURS[index]; \
+    } \
+    return COLOURS[m_choices.GetValue(index)]; \
+}
+
+// -----------------------------------------------------------------------
+
+#define WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR_WITH_DECL(CLASSNAME,\
+                                                                     DECL) \
+DECL CLASSNAME : public wxSystemColourProperty \
+{ \
+    WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
+public: \
+    CLASSNAME( const wxString& label = wxPG_LABEL, \
+               const wxString& name = wxPG_LABEL, \
+               const wxColour& value = wxColour() ); \
+    virtual ~CLASSNAME(); \
+    virtual wxString GetValueAsString( int argFlags ) const; \
+    virtual wxColour GetColour( int index ) const; \
+    virtual wxVariant DoTranslateVal( wxColourPropertyValue& v ) const; \
+    void Init( wxColour colour ); \
+};
+
+#define WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR(CLASSNAME) \
+WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR_WITH_DECL(CLASSNAME, class)
+
+#define WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR2(CLASSNAME, \
+                                                              LABELS, \
+                                                              VALUES, \
+                                                              COLOURS, \
+                                                              EDITOR) \
+static wxPGChoices gs_##CLASSNAME##_choicesCache; \
+WX_PG_IMPLEMENT_PROPERTY_CLASS(CLASSNAME, wxSystemColourProperty, \
+                               wxColour, const wxColour&,EDITOR) \
+CLASSNAME::CLASSNAME( const wxString& label, \
+                      const wxString& name, \
+                      const wxColour& value ) \
+    : wxSystemColourProperty(label, name, LABELS, VALUES, \
+                             &gs_##CLASSNAME##_choicesCache, value ) \
+{ \
+    if ( &value ) \
+        Init( value ); \
+    else \
+        Init( *wxWHITE ); \
+    m_flags |= wxPG_PROP_TRANSLATE_CUSTOM; \
+} \
+CLASSNAME::~CLASSNAME() { } \
+void CLASSNAME::Init( wxColour colour ) \
+{ \
+    if ( !colour.Ok() ) \
+        colour = *wxWHITE; \
+    wxVariant variant; \
+    variant << colour; \
+    m_value = variant; \
+    int ind = ColToInd(colour); \
+    if ( ind < 0 ) \
+        ind = m_choices.GetCount() - 1; \
+    SetIndex( ind ); \
+} \
+wxString CLASSNAME::GetValueAsString( int argFlags ) const \
+{ \
+    const wxPGEditor* editor = GetEditorClass(); \
+    if ( editor != wxPG_EDITOR(Choice) && \
+         editor != wxPG_EDITOR(ChoiceAndButton) && \
+         editor != wxPG_EDITOR(ComboBox) ) \
+        argFlags |= wxPG_PROPERTY_SPECIFIC; \
+    return wxSystemColourProperty::GetValueAsString(argFlags); \
+} \
+wxColour CLASSNAME::GetColour( int index ) const \
+{ \
+    if ( !m_choices.HasValue(index) ) \
+    { \
+        wxASSERT( index < (int)GetItemCount() ); \
+        return COLOURS[index]; \
+    } \
+    return COLOURS[m_choices.GetValue(index)]; \
+} \
+wxVariant CLASSNAME::DoTranslateVal( wxColourPropertyValue& v ) const \
+{ \
+    wxVariant variant; \
+    variant << v.m_colour; \
+    return variant; \
+}
+
+
+#define WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR(CLASSNAME, \
+                                                             LABELS, \
+                                                             VALUES, \
+                                                             COLOURS) \
+WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR2(CLASSNAME, \
+                                                      LABELS, \
+                                                      VALUES, \
+                                                      COLOURS, \
+                                                      Choice)
+
+// -----------------------------------------------------------------------
+
+//
+// These macros help creating DoGetValidator
+#define WX_PG_DOGETVALIDATOR_ENTRY() \
+    static wxValidator* s_ptr = (wxValidator*) NULL; \
+    if ( s_ptr ) return s_ptr;
+
+// Common function exit
+#define WX_PG_DOGETVALIDATOR_EXIT(VALIDATOR) \
+    s_ptr = VALIDATOR; \
+    wxPGGlobalVars->m_arrValidators.Add( (void*) VALIDATOR ); \
+    return VALIDATOR;
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+
+/** @class wxPGInDialogValidator
+    @ingroup classes
+    Creates and manages a temporary wxTextCtrl for validation purposes.
+    Uses wxPropertyGrid's current editor, if available.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGInDialogValidator
+{
+public:
+    wxPGInDialogValidator()
+    {
+        m_textCtrl = NULL;
+    }
+
+    ~wxPGInDialogValidator()
+    {
+        if ( m_textCtrl )
+            m_textCtrl->Destroy();
+    }
+
+    bool DoValidate( wxPropertyGrid* propGrid,
+                     wxValidator* validator,
+                     const wxString& value );
+
+private:
+    wxTextCtrl*         m_textCtrl;
+};
+
+#endif  // SWIG
+
+
+// -----------------------------------------------------------------------
+// Property classes
+// -----------------------------------------------------------------------
+
+#define wxPG_PROP_PASSWORD  wxPG_PROP_CLASS_SPECIFIC_2
+
+/** @class wxStringProperty
+    @ingroup classes
+    Basic property with string value.
+
+    <b>Supported special attributes:</b>
+    - "Password": set to 1 inorder to enable wxTE_PASSWORD on the editor.
+
+    @remarks
+    - If value "<composed>" is set, then actual value is formed (or composed)
+      from values of child properties.
+*/
+class WXDLLIMPEXP_PROPGRID wxStringProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxStringProperty)
+public:
+    wxStringProperty( const wxString& label = wxPG_LABEL,
+                      const wxString& name = wxPG_LABEL,
+                      const wxString& value = wxEmptyString );
+    virtual ~wxStringProperty();
+
+    WX_PG_DECLARE_BASIC_TYPE_METHODS()
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+
+    /** This is updated so "<composed>" special value can be handled.
+    */
+    virtual void OnSetValue();
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+#ifndef SWIG
+/** Constants used with DoValidation() methods.
+*/
+enum
+{
+    /** Instead of modifying the value, show an error message.
+    */
+    wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE      = 0,
+
+    /** Modify value, but stick with the limitations.
+    */
+    wxPG_PROPERTY_VALIDATION_SATURATE           = 1,
+
+    /** Modify value, wrap around on overflow.
+    */
+    wxPG_PROPERTY_VALIDATION_WRAP               = 2
+};
+#endif
+
+// -----------------------------------------------------------------------
+
+/** @class wxIntProperty
+    @ingroup classes
+    Basic property with integer value.
+
+    Seamlessly supports 64-bit integer (wxLongLong) on overflow.
+
+    <b>Example how to use seamless 64-bit integer support</b>
+
+      Getting value:
+
+      @code
+          wxLongLong_t value = pg->GetPropertyValueAsLongLong();
+      @endcode
+
+         or
+
+      @code
+          wxLongLong_t value;
+          wxVariant variant = property->GetValue();
+          if ( variant.GetType() == "wxLongLong" )
+              value = wxLongLongFromVariant(variant);
+          else
+              value = variant.GetLong();
+      @endcode
+
+      Setting value:
+
+       @code
+          pg->SetPropertyValue(longLongVal);
+      @endcode
+
+         or
+
+      @code
+          property->SetValue(WXVARIANT(longLongVal));
+      @endcode
+
+
+    <b>Supported special attributes:</b>
+    - "Min", "Max": Specify acceptable value range.
+*/
+class WXDLLIMPEXP_PROPGRID wxIntProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxIntProperty)
+public:
+    wxIntProperty( const wxString& label = wxPG_LABEL,
+                   const wxString& name = wxPG_LABEL,
+                   long value = 0 );
+    virtual ~wxIntProperty();
+
+    wxIntProperty( const wxString& label,
+                   const wxString& name,
+                   const wxLongLong& value );
+    WX_PG_DECLARE_BASIC_TYPE_METHODS()
+    virtual bool ValidateValue( wxVariant& value,
+                                wxPGValidationInfo& validationInfo ) const;
+    virtual bool IntToValue( wxVariant& variant,
+                             int number,
+                             int argFlags = 0 ) const;
+    static wxValidator* GetClassValidator();
+    virtual wxValidator* DoGetValidator() const;
+
+    /** Validation helper.
+    */
+    static bool DoValidation( const wxPGProperty* property,
+                              wxLongLong_t& value,
+                              wxPGValidationInfo* pValidationInfo,
+                              int mode =
+                                wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE );
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxUIntProperty
+    @ingroup classes
+    Basic property with unsigned integer value.
+    Seamlessly supports 64-bit integer (wxULongLong) on overflow.
+
+    <b>Supported special attributes:</b>
+    - "Min", "Max": Specify acceptable value range.
+    - "Base": Define base. Valid constants are wxPG_BASE_OCT, wxPG_BASE_DEC,
+    wxPG_BASE_HEX and wxPG_BASE_HEXL (lowercase characters). Arbitrary bases
+    are <b>not</b> supported.
+    - "Prefix": Possible values are wxPG_PREFIX_NONE, wxPG_PREFIX_0x, and
+    wxPG_PREFIX_DOLLAR_SIGN. Only wxPG_PREFIX_NONE works with Decimal and Octal
+    numbers.
+
+    @remarks
+    - For example how to use seamless 64-bit integer support, see wxIntProperty
+    documentation (just use wxULongLong instead of wxLongLong).
+*/
+class WXDLLIMPEXP_PROPGRID wxUIntProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxUIntProperty)
+public:
+    wxUIntProperty( const wxString& label = wxPG_LABEL,
+                    const wxString& name = wxPG_LABEL,
+                    unsigned long value = 0 );
+    virtual ~wxUIntProperty();
+    wxUIntProperty( const wxString& label,
+                    const wxString& name,
+                    const wxULongLong& value );
+    WX_PG_DECLARE_BASIC_TYPE_METHODS()
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+    virtual bool ValidateValue( wxVariant& value,
+                                wxPGValidationInfo& validationInfo ) const;
+    virtual bool IntToValue( wxVariant& variant,
+                             int number,
+                             int argFlags = 0 ) const;
+protected:
+    wxByte      m_base;
+    wxByte      m_realBase; // translated to 8,16,etc.
+    wxByte      m_prefix;
+private:
+    void Init();
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxFloatProperty
+    @ingroup classes
+    Basic property with double-precision floating point value.
+
+    <b>Supported special attributes:</b>
+    - "Precision": Sets the (max) precision used when floating point value is
+    rendered as text. The default -1 means infinite precision.
+*/
+class WXDLLIMPEXP_PROPGRID wxFloatProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxFloatProperty)
+public:
+    wxFloatProperty( const wxString& label = wxPG_LABEL,
+                     const wxString& name = wxPG_LABEL,
+                     double value = 0.0 );
+    virtual ~wxFloatProperty();
+
+    WX_PG_DECLARE_BASIC_TYPE_METHODS()
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+    virtual bool ValidateValue( wxVariant& value,
+                                wxPGValidationInfo& validationInfo ) const;
+
+    /** Validation helper.
+    */
+    static bool DoValidation( const wxPGProperty* property,
+                              double& value,
+                              wxPGValidationInfo* pValidationInfo,
+                              int mode =
+                                 wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE );
+
+protected:
+    int m_precision;
+    virtual wxValidator* DoGetValidator () const;
+};
+
+// -----------------------------------------------------------------------
+
+// Exclude class from wxPython bindings
+#ifndef SWIG
+
+/** @class wxBoolProperty
+    @ingroup classes
+    Basic property with boolean value.
+
+    <b>Supported special attributes:</b>
+    - "UseCheckbox": Set to 1 to use check box editor instead of combo box.
+    - "UseDClickCycling": Set to 1 to cycle combo box instead showing the list.
+*/
+class WXDLLIMPEXP_PROPGRID wxBoolProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxBoolProperty)
+public:
+    wxBoolProperty( const wxString& label = wxPG_LABEL,
+                    const wxString& name = wxPG_LABEL,
+                    bool value = false );
+    virtual ~wxBoolProperty();
+
+    WX_PG_DECLARE_BASIC_TYPE_METHODS()
+    WX_PG_DECLARE_CHOICE_METHODS()
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+};
+
+#endif  // !SWIG
+
+// -----------------------------------------------------------------------
+
+/** @class wxBaseEnumProperty
+    @ingroup classes
+    Derive dynamic custom properties with choices from this class.
+
+    @remarks
+    - Updating private index is important. You can do this either by calling
+    SetIndex() in IntToValue, and then letting wxBaseEnumProperty::OnSetValue
+    be called (by not implementing it, or by calling super class function in
+    it) -OR- you can just call SetIndex in OnSetValue.
+*/
+class WXDLLIMPEXP_PROPGRID wxBaseEnumProperty : public wxPGProperty
+{
+public:
+    wxBaseEnumProperty( const wxString& label = wxPG_LABEL,
+                        const wxString& name = wxPG_LABEL );
+
+    virtual void OnSetValue();
+    virtual wxString GetValueAsString( int argFlags ) const;
+    virtual bool StringToValue( wxVariant& variant,
+                                const wxString& text,
+                                int argFlags = 0 ) const;
+    virtual bool ValidateValue( wxVariant& value,
+                                wxPGValidationInfo& validationInfo ) const;
+
+    // If wxPG_FULL_VALUE is not set in flags, then the value is interpreted
+    // as index to choices list. Otherwise, it is actual value.
+    virtual bool IntToValue( wxVariant& variant,
+                             int number,
+                             int argFlags = 0 ) const;
+
+    //
+    // Additional virtuals
+
+    // This must be overridden to have non-index based value
+    virtual int GetIndexForValue( int value ) const;
+
+    // This returns string and value for index
+    // Returns NULL if beyond last item
+    // pvalue is never NULL - always set it.
+    virtual const wxString* GetEntry( size_t index, int* pvalue ) const = 0;
+
+    int GetValueForIndex( size_t index ) const
+    {
+        int v;
+        GetEntry( index, &v );
+        return v;
+    }
+
+protected:
+
+    int GetIndex() const;
+    void SetIndex( int index );
+
+    bool ValueFromString_( wxVariant& value,
+                           const wxString& text,
+                           int argFlags ) const;
+    bool ValueFromInt_( wxVariant& value, int intVal, int argFlags ) const;
+
+    static void ResetNextIndex() { ms_nextIndex = -2; }
+
+private:
+    // This is private so that classes are guaranteed to use GetIndex
+    // for up-to-date index value.
+    int                     m_index;
+
+    // Relies on ValidateValue being called always before OnSetValue
+    static int              ms_nextIndex;
+};
+
+// -----------------------------------------------------------------------
+
+// If set, then selection of choices is static and should not be
+// changed (i.e. returns NULL in GetPropertyChoices).
+#define wxPG_PROP_STATIC_CHOICES    wxPG_PROP_CLASS_SPECIFIC_1
+
+/** @class wxEnumProperty
+    @ingroup classes
+    You can derive custom properties with choices from this class. See
+    wxBaseEnumProperty for remarks.
+*/
+class WXDLLIMPEXP_PROPGRID wxEnumProperty : public wxBaseEnumProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxEnumProperty)
+public:
+
+#ifndef SWIG
+    wxEnumProperty( const wxString& label = wxPG_LABEL,
+                    const wxString& name = wxPG_LABEL,
+                    const wxChar** labels = NULL,
+                    const long* values = NULL,
+                    int value = 0 );
+    wxEnumProperty( const wxString& label,
+                    const wxString& name,
+                    wxPGChoices& choices,
+                    int value = 0 );
+
+    // Special constructor for caching choices (used by derived class)
+    wxEnumProperty( const wxString& label,
+                    const wxString& name,
+                    const wxChar** labels,
+                    const long* values,
+                    wxPGChoices* choicesCache,
+                    int value = 0 );
+
+    wxEnumProperty( const wxString& label,
+                    const wxString& name,
+                    const wxArrayString& labels,
+                    const wxArrayInt& values = wxArrayInt(),
+                    int value = 0 );
+#else
+    wxEnumProperty( const wxString& label = wxPG_LABEL,
+                    const wxString& name = wxPG_LABEL,
+                    const wxArrayString& labels = wxArrayString(),
+                    const wxArrayInt& values = wxArrayInt(),
+                    int value = 0 );
+#endif
+
+    virtual ~wxEnumProperty();
+
+    virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo );
+    virtual int GetIndexForValue( int value ) const;
+    virtual const wxString* GetEntry( size_t index, int* pvalue ) const;
+
+    size_t GetItemCount() const { return m_choices.GetCount(); }
+    const wxPGChoices& GetChoices() const { return m_choices; }
+
+protected:
+    wxPGChoices             m_choices;
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxEditEnumProperty
+    @ingroup classes
+    wxEnumProperty with wxString value and writable combo box editor.
+
+    @remarks
+    Uses int value, similar to wxEnumProperty, unless text entered by user is
+    is not in choices (in which case string value is used).
+*/
+class WXDLLIMPEXP_PROPGRID wxEditEnumProperty : public wxEnumProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxEditEnumProperty)
+public:
+
+    wxEditEnumProperty( const wxString& label,
+                        const wxString& name,
+                        const wxChar** labels,
+                        const long* values,
+                        const wxString& value );
+    wxEditEnumProperty( const wxString& label = wxPG_LABEL,
+                        const wxString& name = wxPG_LABEL,
+                        const wxArrayString& labels = wxArrayString(),
+                        const wxArrayInt& values = wxArrayInt(),
+                        const wxString& value = wxEmptyString );
+    wxEditEnumProperty( const wxString& label,
+                        const wxString& name,
+                        wxPGChoices& choices,
+                        const wxString& value = wxEmptyString );
+
+    // Special constructor for caching choices (used by derived class)
+    wxEditEnumProperty( const wxString& label,
+                        const wxString& name,
+                        const wxChar** labels,
+                        const long* values,
+                        wxPGChoices* choicesCache,
+                        const wxString& value );
+
+    virtual ~wxEditEnumProperty();
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxFlagsProperty
+    @ingroup classes
+    Represents a bit set that fits in a long integer. wxBoolProperty
+    sub-properties are created for editing individual bits. Textctrl is created
+    to manually edit the flags as a text; a continous sequence of spaces,
+    commas and semicolons is considered as a flag id separator.
+    <b>Note:</b> When changing "choices" (ie. flag labels) of wxFlagsProperty,
+    you will need to use SetPropertyChoices - otherwise they will not get
+    updated properly.
+*/
+class WXDLLIMPEXP_PROPGRID wxFlagsProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxFlagsProperty)
+public:
+
+#ifndef SWIG
+    wxFlagsProperty( const wxString& label,
+                     const wxString& name,
+                     const wxChar** labels,
+                     const long* values = NULL,
+                     long value = 0 );
+    wxFlagsProperty( const wxString& label,
+                     const wxString& name,
+                     wxPGChoices& choices,
+                     long value = 0 );
+#endif
+    wxFlagsProperty( const wxString& label = wxPG_LABEL,
+                     const wxString& name = wxPG_LABEL,
+                     const wxArrayString& labels = wxArrayString(),
+                     const wxArrayInt& values = wxArrayInt(),
+                     int value = 0 );
+    virtual ~wxFlagsProperty ();
+
+    virtual void OnSetValue();
+    virtual wxString GetValueAsString( int argFlags ) const;
+    virtual bool StringToValue( wxVariant& variant,
+                                const wxString& text,
+                                int flags ) const;
+    virtual void ChildChanged( wxVariant& thisValue,
+                               int childIndex,
+                               wxVariant& childValue ) const;
+    virtual void RefreshChildren();
+
+    // this is necessary for conveying m_choices
+    virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo );
+
+    // helpers
+    size_t GetItemCount() const { return m_choices.GetCount(); }
+    const wxString& GetLabel( size_t ind ) const
+        { return m_choices.GetLabel(ind); }
+
+protected:
+    wxPGChoices             m_choices;
+
+    // Used to detect if choices have been changed
+    wxPGChoicesData*        m_oldChoicesData;
+
+    // Needed to properly mark changed sub-properties
+    long                    m_oldValue;
+
+    // Converts string id to a relevant bit.
+    long IdToBit( const wxString& id ) const;
+
+    // Creates children and sets value.
+    void Init();
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGFileDialogAdapter
+    @ingroup classes
+*/
+class WXDLLIMPEXP_PROPGRID
+    wxPGFileDialogAdapter : public wxPGEditorDialogAdapter
+{
+public:
+    virtual bool DoShowDialog( wxPropertyGrid* propGrid,
+                               wxPGProperty* property );
+};
+
+// -----------------------------------------------------------------------
+
+#include "wx/filename.h"
+
+// Indicates first bit useable by derived properties.
+#define wxPG_PROP_SHOW_FULL_FILENAME  wxPG_PROP_CLASS_SPECIFIC_1
+
+/** @class wxFileProperty
+    @ingroup classes
+    Like wxLongStringProperty, but the button triggers file selector instead.
+
+    <b>Supported special attributes:</b>
+    - "Wildcard": Sets wildcard (see wxFileDialog for format details), "All
+    files..." is default.
+    - "ShowFullPath": Default 1. When 0, only the file name is shown (i.e. drive
+      and directory are hidden).
+    - "ShowRelativePath": If set, then the filename is shown relative to the
+    given path string.
+    - "InitialPath": Sets the initial path of where to look for files.
+    - "DialogTitle": Sets a specific title for the dir dialog.
+*/
+class WXDLLIMPEXP_PROPGRID wxFileProperty : public wxPGProperty
+{
+    friend class wxPGFileDialogAdapter;
+    WX_PG_DECLARE_PROPERTY_CLASS(wxFileProperty)
+public:
+
+    wxFileProperty( const wxString& label = wxPG_LABEL,
+                    const wxString& name = wxPG_LABEL,
+                    const wxString& value = wxEmptyString );
+    virtual ~wxFileProperty ();
+
+    virtual void OnSetValue();
+    virtual wxString GetValueAsString( int argFlags ) const;
+    virtual bool StringToValue( wxVariant& variant,
+                                const wxString& text,
+                                int argFlags = 0 ) const;
+    virtual wxPGEditorDialogAdapter* GetEditorDialog() const;
+
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+
+    static wxValidator* GetClassValidator();
+    virtual wxValidator* DoGetValidator() const;
+
+protected:
+    wxString    m_wildcard;
+    wxString    m_basePath; // If set, then show path relative to it
+    wxString    m_initialPath; // If set, start the file dialog here
+    wxString    m_dlgTitle; // If set, used as title for file dialog
+    wxFileName  m_filename; // used as primary storage
+    int         m_indFilter; // index to the selected filter
+};
+
+// -----------------------------------------------------------------------
+
+#define wxPG_PROP_NO_ESCAPE     wxPG_PROP_CLASS_SPECIFIC_1
+
+
+/** @class wxPGLongStringDialogAdapter
+    @ingroup classes
+*/
+class WXDLLIMPEXP_PROPGRID
+    wxPGLongStringDialogAdapter : public wxPGEditorDialogAdapter
+{
+public:
+    virtual bool DoShowDialog( wxPropertyGrid* propGrid,
+                               wxPGProperty* property );
+};
+
+
+/** @class wxLongStringProperty
+    @ingroup classes
+    Like wxStringProperty, but has a button that triggers a small text
+    editor dialog.
+*/
+class WXDLLIMPEXP_PROPGRID wxLongStringProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxLongStringProperty)
+public:
+
+    wxLongStringProperty( const wxString& label = wxPG_LABEL,
+                          const wxString& name = wxPG_LABEL,
+                          const wxString& value = wxEmptyString );
+    virtual ~wxLongStringProperty();
+
+    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+    virtual bool StringToValue( wxVariant& variant,
+                                const wxString& text,
+                                int argFlags = 0 ) const;
+
+    WX_PG_DECLARE_EVENT_METHODS()
+
+    // Shows string editor dialog. Value to be edited should be read from
+    // value, and if dialog is not cancelled, it should be stored back and true
+    // should be returned if that was the case.
+    virtual bool OnButtonClick( wxPropertyGrid* propgrid, wxString& value );
+
+    static bool DisplayEditorDialog( wxPGProperty* prop,
+                                     wxPropertyGrid* propGrid,
+                                     wxString& value );
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+
+// Exclude class from wxPython bindings
+#ifndef SWIG
+
+/** @class wxDirProperty
+    @ingroup classes
+    Like wxLongStringProperty, but the button triggers dir selector instead.
+
+    <b>Supported special attributes:</b>
+    - "DialogMessage": Sets specific message in the dir selector.
+*/
+class WXDLLIMPEXP_PROPGRID wxDirProperty : public wxLongStringProperty
+{
+#ifndef SWIG
+    DECLARE_DYNAMIC_CLASS(wxDirProperty)
+#endif
+public:
+    wxDirProperty( const wxString& name = wxPG_LABEL,
+                   const wxString& label = wxPG_LABEL,
+                   const wxString& value = wxEmptyString );
+    virtual ~wxDirProperty();
+
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+    WX_PG_DECLARE_VALIDATOR_METHODS()
+
+    virtual bool OnButtonClick ( wxPropertyGrid* propGrid, wxString& value );
+
+protected:
+    wxString    m_dlgMessage;
+};
+
+#endif  // !SWIG
+
+// -----------------------------------------------------------------------
+
+// wxBoolProperty specific flags
+#define wxPG_PROP_USE_CHECKBOX      wxPG_PROP_CLASS_SPECIFIC_1
+// DCC = Double Click Cycles
+#define wxPG_PROP_USE_DCC           wxPG_PROP_CLASS_SPECIFIC_2
+
+
+// -----------------------------------------------------------------------
+
+/** @class wxArrayStringProperty
+    @ingroup classes
+    Property that manages a list of strings.
+*/
+class WXDLLIMPEXP_PROPGRID wxArrayStringProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxArrayStringProperty)
+public:
+
+    wxArrayStringProperty( const wxString& label = wxPG_LABEL,
+                           const wxString& name = wxPG_LABEL,
+                           const wxArrayString& value = wxArrayString() );
+    virtual ~wxArrayStringProperty();
+
+    virtual void OnSetValue();
+    WX_PG_DECLARE_BASIC_TYPE_METHODS()
+    WX_PG_DECLARE_EVENT_METHODS()
+
+    virtual void GenerateValueAsString();
+
+    // Shows string editor dialog. Value to be edited should be read from
+    // value, and if dialog is not cancelled, it should be stored back and true
+    // should be returned if that was the case.
+    virtual bool OnCustomStringEdit( wxWindow* parent, wxString& value );
+
+    // Helper.
+    virtual bool OnButtonClick( wxPropertyGrid* propgrid,
+                                wxWindow* primary,
+                                const wxChar* cbt );
+
+#ifndef SWIG
+    // Creates wxArrayEditorDialog for string editing. Called in OnButtonClick.
+    virtual wxArrayEditorDialog* CreateEditorDialog();
+#endif
+
+protected:
+    wxString        m_display; // Cache for displayed text.
+};
+
+// -----------------------------------------------------------------------
+
+#define WX_PG_DECLARE_ARRAYSTRING_PROPERTY_WITH_VALIDATOR_WITH_DECL(PROPNAME, \
+                                                                    DECL) \
+DECL PROPNAME : public wxArrayStringProperty \
+{ \
+    WX_PG_DECLARE_PROPERTY_CLASS(PROPNAME) \
+public: \
+    PROPNAME( const wxString& label = wxPG_LABEL, \
+              const wxString& name = wxPG_LABEL, \
+              const wxArrayString& value = wxArrayString() ); \
+    ~PROPNAME(); \
+    virtual void GenerateValueAsString(); \
+    virtual bool StringToValue( wxVariant& value, \
+                                const wxString& text, int = 0 ) const; \
+    virtual bool OnEvent( wxPropertyGrid* propgrid, \
+                          wxWindow* primary, wxEvent& event ); \
+    virtual bool OnCustomStringEdit( wxWindow* parent, wxString& value ); \
+    WX_PG_DECLARE_VALIDATOR_METHODS() \
+};
+
+#define WX_PG_DECLARE_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(PROPNAM) \
+WX_PG_DECLARE_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(PROPNAM, class)
+
+#define WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(PROPNAME, \
+                                                            DELIMCHAR, \
+                                                            CUSTBUTTXT) \
+WX_PG_IMPLEMENT_PROPERTY_CLASS(PROPNAME, wxArrayStringProperty, \
+                               wxArrayString, const wxArrayString&, \
+                               TextCtrlAndButton) \
+PROPNAME::PROPNAME( const wxString& label, \
+                    const wxString& name, \
+                    const wxArrayString& value ) \
+    : wxArrayStringProperty(label,name,value) \
+{ \
+    PROPNAME::GenerateValueAsString(); \
+} \
+PROPNAME::~PROPNAME() { } \
+void PROPNAME::GenerateValueAsString() \
+{ \
+    wxChar delimChar = DELIMCHAR; \
+    if ( delimChar == wxS('"') ) \
+        wxArrayStringProperty::GenerateValueAsString(); \
+    else \
+        wxPropertyGrid::ArrayStringToString(m_display, \
+                                            m_value.GetArrayString(), \
+                                            0,DELIMCHAR,0); \
+} \
+bool PROPNAME::StringToValue( wxVariant& variant, \
+                              const wxString& text, int ) const \
+{ \
+    wxChar delimChar = DELIMCHAR; \
+    if ( delimChar == wxS('"') ) \
+        return wxArrayStringProperty::StringToValue(variant, text, 0); \
+    \
+    wxArrayString arr; \
+    WX_PG_TOKENIZER1_BEGIN(text,DELIMCHAR) \
+        arr.Add( token ); \
+    WX_PG_TOKENIZER1_END() \
+    variant = arr; \
+    return true; \
+} \
+bool PROPNAME::OnEvent( wxPropertyGrid* propgrid, \
+                        wxWindow* primary, wxEvent& event ) \
+{ \
+    if ( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED ) \
+        return OnButtonClick(propgrid,primary,(const wxChar*) CUSTBUTTXT); \
+    return false; \
+}
+
+#define WX_PG_DECLARE_ARRAYSTRING_PROPERTY(PROPNAME) \
+WX_PG_DECLARE_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(PROPNAME)
+
+#define WX_PG_DECLARE_ARRAYSTRING_PROPERTY_WITH_DECL(PROPNAME, DECL) \
+WX_PG_DECLARE_ARRAYSTRING_PROPERTY_WITH_VALIDATOR_WITH_DECL(PROPNAME, DECL)
+
+#define WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY(PROPNAME,DELIMCHAR,CUSTBUTTXT) \
+WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(PROPNAME, \
+                                                    DELIMCHAR, \
+                                                    CUSTBUTTXT) \
+wxValidator* PROPNAME::DoGetValidator () const \
+{ return (wxValidator*) NULL; }
+
+
+// -----------------------------------------------------------------------
+// wxArrayEditorDialog
+// -----------------------------------------------------------------------
+
+#include "wx/textctrl.h"
+#include "wx/button.h"
+#include "wx/listbox.h"
+
+#define wxAEDIALOG_STYLE \
+    (wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxOK | wxCANCEL | wxCENTRE)
+
+class WXDLLIMPEXP_PROPGRID wxArrayEditorDialog : public wxDialog
+{
+public:
+    wxArrayEditorDialog();
+    virtual ~wxArrayEditorDialog() { }
+
+    void Init();
+
+    wxArrayEditorDialog( wxWindow *parent,
+                         const wxString& message,
+                         const wxString& caption,
+                         long style = wxAEDIALOG_STYLE,
+                         const wxPoint& pos = wxDefaultPosition,
+                         const wxSize& sz = wxDefaultSize );
+
+    bool Create( wxWindow *parent,
+                 const wxString& message,
+                 const wxString& caption,
+                 long style = wxAEDIALOG_STYLE,
+                 const wxPoint& pos = wxDefaultPosition,
+                 const wxSize& sz = wxDefaultSize );
+
+    /** Set value modified by dialog.
+    */
+    virtual void SetDialogValue( const wxVariant& WXUNUSED(value) )
+    {
+        wxFAIL_MSG(wxT("re-implement this member function in derived class"));
+    }
+
+    /** Return value modified by dialog.
+    */
+    virtual wxVariant GetDialogValue() const
+    {
+        wxFAIL_MSG(wxT("re-implement this member function in derived class"));
+        return wxVariant();
+    }
+
+    /** Override to return wxValidator to be used with the wxTextCtrl
+        in dialog. Note that the validator is used in the standard
+        wx way, ie. it immediately prevents user from entering invalid
+        input.
+
+        @remarks
+        Dialog frees the validator.
+    */
+    virtual wxValidator* GetTextCtrlValidator() const
+    {
+        return (wxValidator*) NULL;
+    }
+
+    // Returns true if array was actually modified
+    bool IsModified() const { return m_modified; }
+
+    //const wxArrayString& GetStrings() const { return m_array; }
+
+    // implementation from now on
+    void OnUpdateClick(wxCommandEvent& event);
+    void OnAddClick(wxCommandEvent& event);
+    void OnDeleteClick(wxCommandEvent& event);
+    void OnListBoxClick(wxCommandEvent& event);
+    void OnUpClick(wxCommandEvent& event);
+    void OnDownClick(wxCommandEvent& event);
+    //void OnCustomEditClick(wxCommandEvent& event);
+    void OnIdle(wxIdleEvent& event);
+
+protected:
+    wxTextCtrl*     m_edValue;
+    wxListBox*      m_lbStrings;
+
+    wxButton*       m_butAdd;       // Button pointers
+    wxButton*       m_butCustom;    // required for disabling/enabling changing.
+    wxButton*       m_butUpdate;
+    wxButton*       m_butRemove;
+    wxButton*       m_butUp;
+    wxButton*       m_butDown;
+
+    //wxArrayString   m_array;
+
+    const wxChar*   m_custBtText;
+    //wxArrayStringPropertyClass*     m_pCallingClass;
+
+    bool            m_modified;
+
+    unsigned char   m_curFocus;
+
+    // These must be overridden - must return true on success.
+    virtual wxString ArrayGet( size_t index ) = 0;
+    virtual size_t ArrayGetCount() = 0;
+    virtual bool ArrayInsert( const wxString& str, int index ) = 0;
+    virtual bool ArraySet( size_t index, const wxString& str ) = 0;
+    virtual void ArrayRemoveAt( int index ) = 0;
+    virtual void ArraySwap( size_t first, size_t second ) = 0;
+
+private:
+#ifndef SWIG
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxArrayEditorDialog)
+    DECLARE_EVENT_TABLE()
+#endif
+};
+
+// -----------------------------------------------------------------------
+// wxPGArrayStringEditorDialog
+// -----------------------------------------------------------------------
+
+class WXDLLIMPEXP_PROPGRID
+    wxPGArrayStringEditorDialog : public wxArrayEditorDialog
+{
+public:
+    wxPGArrayStringEditorDialog();
+    virtual ~wxPGArrayStringEditorDialog() { }
+
+    void Init();
+
+    virtual void SetDialogValue( const wxVariant& value )
+    {
+        m_array = value.GetArrayString();
+    }
+
+    virtual wxVariant GetDialogValue() const
+    {
+        return m_array;
+    }
+
+    void SetCustomButton( const wxChar* custBtText, wxArrayStringProperty* pcc )
+    {
+        m_custBtText = custBtText;
+        m_pCallingClass = pcc;
+    }
+
+    void OnCustomEditClick(wxCommandEvent& event);
+
+protected:
+    wxArrayString   m_array;
+
+    wxArrayStringProperty*     m_pCallingClass;
+
+    virtual wxString ArrayGet( size_t index );
+    virtual size_t ArrayGetCount();
+    virtual bool ArrayInsert( const wxString& str, int index );
+    virtual bool ArraySet( size_t index, const wxString& str );
+    virtual void ArrayRemoveAt( int index );
+    virtual void ArraySwap( size_t first, size_t second );
+
+private:
+#ifndef SWIG
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxPGArrayStringEditorDialog)
+    DECLARE_EVENT_TABLE()
+#endif
+};
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_PROPS_H_
index 628d5e0096547cdd0bf02eb9acbde9d0b56f26a2..13e650db6695717c436671244e5d51c8c9e50d57 100644 (file)
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
index c0759f852b8c1b8b54464af5eeeca22c34e70f58..a6910382af11490269b22ac30ce7d1f70d50862c 100644 (file)
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
 // Recommended setting: 1
 #define wxUSE_MEDIACTRL     1
 
-// Use GStreamer for Unix (req a lot of dependancies)
+// Use GStreamer for Unix.
 //
 //
-// Default is 0
+// Default is 0 as this requires a lot of dependencies which might not be
+// available.
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 //
 // Recommended setting: 1 (wxMediaCtrl won't work by default without it)
 #define wxUSE_GSTREAMER    0
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
 // Recommended setting: 1
 #define wxUSE_AUI       1
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
 #define wxUSE_AFM_FOR_POSTSCRIPT 1
 
 // Set to 1 to compile in support for wxSVGFileDC, a wxDC subclass which allows
-// to create fiels in SVG (Scalable Vector Graphics) format.
+// to create files in SVG (Scalable Vector Graphics) format.
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
 #define wxUSE_SVG 1
 
 // ----------------------------------------------------------------------------
diff --git a/interface/wx/propgrid/editors.h b/interface/wx/propgrid/editors.h
new file mode 100644 (file)
index 0000000..40e1f76
--- /dev/null
@@ -0,0 +1,278 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        editors.h
+// Purpose:     interface of wxPropertyGrid editors
+// Author:      wxWidgets team
+// RCS-ID:      $Id:
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGEditor
+
+    Base class for custom wxPropertyGrid editors.
+
+    @remarks
+    - Names of builtin property editors are: TextCtrl, Choice,
+      ComboBox, CheckBox, TextCtrlAndButton, and ChoiceAndButton. Additional editors
+      include SpinCtrl and DatePickerCtrl, but using them requires calling
+      wxPropertyGrid::RegisterAdditionalEditors() prior use.
+
+    - Pointer to builtin editor is available as wxPGEditor_EditorName
+      (eg. wxPGEditor_TextCtrl).
+
+    - To add new editor you need to register it first using static function
+      wxPropertyGrid::RegisterEditorClass(), with code like this:
+        @code
+            wxPGEditor* editorPointer = wxPropertyGrid::RegisterEditorClass(new MyEditorClass(), "MyEditor");
+        @endcode
+      After that, wxPropertyGrid will take ownership of the given object, but
+      you should still store editorPointer somewhere, so you can pass it to
+      wxPGProperty::SetEditor(), or return it from wxPGEditor::DoGetEditorClass().
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class wxPGEditor : public wxObject
+{
+public:
+
+    /** Constructor. */
+    wxPGEditor()
+        : wxObject()
+    {
+        m_clientData = NULL;
+    }
+
+    /** Destructor. */
+    virtual ~wxPGEditor();
+
+    /** Returns pointer to the name of the editor. For example, wxPG_EDITOR(TextCtrl)
+        has name "TextCtrl". This method is autogenerated for custom editors.
+    */
+    virtual wxString GetName() const = 0;
+
+    /** Instantiates editor controls.
+        @param propgrid
+        wxPropertyGrid to which the property belongs (use as parent for control).
+        @param property
+        Property for which this method is called.
+        @param pos
+        Position, inside wxPropertyGrid, to create control(s) to.
+        @param size
+        Initial size for control(s).
+
+        @remarks
+        - Primary control shall use id wxPG_SUBID1, and secondary (button) control
+          shall use wxPG_SUBID2.
+        - Implementation shoud use connect all necessary events to the
+          wxPropertyGrid::OnCustomEditorEvent. For Example:
+            @code
+                // Relays wxEVT_COMMAND_TEXT_UPDATED events of primary editor
+                // control to the OnEvent.
+                // NOTE: This event in particular is actually automatically conveyed, but
+                //   it is just used as an example.
+                propgrid->Connect( wxPG_SUBID1, wxEVT_COMMAND_TEXT_UPDATED,
+                                  wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent) );
+            @endcode
+            OnCustomEditorEvent will then forward events, first to wxPGEditor::OnEvent and then to wxPGProperty::OnEvent.
+
+    */
+    virtual wxPGWindowList CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property,
+        const wxPoint& pos, const wxSize& size ) const = 0;
+
+    /** Loads value from property to the control. */
+    virtual void UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const = 0;
+
+    /** Draws value for given property.
+    */
+    virtual void DrawValue( wxDC& dc, const wxRect& rect, wxPGProperty* property, const wxString& text ) const;
+
+    /** Handles events. Returns true if value in control was modified
+        (see wxPGProperty::OnEvent for more information).
+    */
+    virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
+        wxWindow* wnd_primary, wxEvent& event ) const = 0;
+
+    /** Returns value from control, via parameter 'variant'.
+        Usually ends up calling property's StringToValue or IntToValue.
+        Returns true if value was different.
+    */
+    virtual bool GetValueFromControl( wxVariant& variant, wxPGProperty* property, wxWindow* ctrl ) const;
+
+    /** Sets value in control to unspecified. */
+    virtual void SetValueToUnspecified( wxPGProperty* property, wxWindow* ctrl ) const = 0;
+
+    /** Sets control's value specifically from string. */
+    virtual void SetControlStringValue( wxPGProperty* property, wxWindow* ctrl, const wxString& txt ) const;
+
+    /** Sets control's value specifically from int (applies to choice etc.). */
+    virtual void SetControlIntValue( wxPGProperty* property, wxWindow* ctrl, int value ) const;
+
+    /** Inserts item to existing control. Index -1 means appending.
+        Default implementation does nothing. Returns index of item added.
+    */
+    virtual int InsertItem( wxWindow* ctrl, const wxString& label, int index ) const;
+
+    /** Deletes item from existing control.
+        Default implementation does nothing.
+    */
+    virtual void DeleteItem( wxWindow* ctrl, int index ) const;
+
+    /** Extra processing when control gains focus. For example, wxTextCtrl 
+        based controls should select all text.
+    */
+    virtual void OnFocus( wxPGProperty* property, wxWindow* wnd ) const;
+
+    /** Returns true if control itself can contain the custom image. Default is
+        to return false.
+    */
+    virtual bool CanContainCustomImage() const;
+
+    //
+    // This member is public so scripting language bindings
+    // wrapper code can access it freely.
+    void*       m_clientData;
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGMultiButton
+
+    This class can be used to have multiple buttons in a property editor.
+    You will need to create a new property editor class, override CreateControls,
+    and have it return wxPGMultiButton instance in wxPGWindowList::SetSecondary().
+    For instance, here we add three buttons to a textctrl editor:
+
+    @code
+
+    #include <wx/propgrid/editors.h>
+
+    class wxMultiButtonTextCtrlEditor : public wxPGTextCtrlEditor
+    {
+        WX_PG_DECLARE_EDITOR_CLASS(wxMultiButtonTextCtrlEditor)
+    public:
+        wxMultiButtonTextCtrlEditor() {}
+        virtual ~wxMultiButtonTextCtrlEditor() {}
+
+        wxPG_DECLARE_CREATECONTROLS
+        virtual bool OnEvent( wxPropertyGrid* propGrid,
+                              wxPGProperty* property,
+                              wxWindow* ctrl,
+                              wxEvent& event ) const;
+
+    };
+
+    WX_PG_IMPLEMENT_EDITOR_CLASS(MultiButtonTextCtrlEditor, wxMultiButtonTextCtrlEditor,
+                                 wxPGTextCtrlEditor)
+
+    wxPGWindowList wxMultiButtonTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid,
+                                                                wxPGProperty* property,
+                                                                const wxPoint& pos,
+                                                                const wxSize& sz ) const
+    {
+        // Create and populate buttons-subwindow
+        wxPGMultiButton* buttons = new wxPGMultiButton( propGrid, sz );
+
+        // Add two regular buttons
+        buttons->Add( "..." );
+        buttons->Add( "A" );
+        // Add a bitmap button
+        buttons->Add( wxArtProvider::GetBitmap(wxART_FOLDER) );
+
+        // Create the 'primary' editor control (textctrl in this case)
+        wxPGWindowList wndList = wxPGTextCtrlEditor::CreateControls
+                                 ( propGrid, property, pos, buttons->GetPrimarySize() );
+
+        // Finally, move buttons-subwindow to correct position and make sure
+        // returned wxPGWindowList contains our custom button list.
+        buttons->FinalizePosition(pos);
+
+        wndList.SetSecondary( buttons );
+        return wndList;
+    }
+
+    bool wxMultiButtonTextCtrlEditor::OnEvent( wxPropertyGrid* propGrid,
+                                               wxPGProperty* property,
+                                               wxWindow* ctrl,
+                                               wxEvent& event ) const
+    {
+        if ( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED )
+        {
+            wxPGMultiButton* buttons = (wxPGMultiButton*) propGrid->GetEditorControlSecondary();
+
+            if ( event.GetId() == buttons->GetButtonId(0) )
+            {
+                // Do something when first button is pressed
+                return true;
+            }
+            if ( event.GetId() == buttons->GetButtonId(1) )
+            {
+                // Do something when first button is pressed
+                return true;
+            }
+            if ( event.GetId() == buttons->GetButtonId(2) )
+            {
+                // Do something when second button is pressed
+                return true;
+            }
+        }
+        return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event);
+    }
+
+    @endcode
+
+    Further to use this editor, code like this can be used:
+
+    @code
+
+        // Register editor class - needs only to be called once
+        wxPGRegisterEditorClass( MultiButtonTextCtrlEditor );
+
+        // Insert the property that will have multiple buttons
+        propGrid->Append( new wxLongStringProperty("MultipleButtons", wxPG_LABEL) );
+
+        // Change property to use editor created in the previous code segment
+        propGrid->SetPropertyEditor( "MultipleButtons", wxPG_EDITOR(MultiButtonTextCtrlEditor) );
+
+    @endcode
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPGMultiButton : public wxWindow
+{
+public:
+
+    wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz );
+
+    virtual ~wxPGMultiButton() { }
+
+    wxWindow* GetButton( unsigned int i ) { return (wxWindow*) m_buttons[i]; }
+    const wxWindow* GetButton( unsigned int i ) const { return (const wxWindow*) m_buttons[i]; }
+
+    /** Utility function to be used in event handlers.
+    */
+    int GetButtonId( unsigned int i ) const { return GetButton(i)->GetId(); }
+
+    /** Returns number of buttons.
+    */
+    int GetCount() const { return m_buttons.Count(); }
+
+    void Add( const wxString& label, int id = -2 );
+    void Add( const wxBitmap& bitmap, int id = -2 );
+
+    wxSize GetPrimarySize() const
+    {
+        return wxSize(m_fullEditorSize.x - m_buttonsWidth, m_fullEditorSize.y);
+    }
+
+    void FinalizePosition( const wxPoint& pos )
+    {
+        Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y );
+    }
+};
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_PROPGRID_EDITORS_H_
diff --git a/interface/wx/propgrid/manager.h b/interface/wx/propgrid/manager.h
new file mode 100644 (file)
index 0000000..b062819
--- /dev/null
@@ -0,0 +1,475 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        manager.h
+// Purpose:     interface of wxPropertyGridManager
+// Author:      wxWidgets team
+// RCS-ID:      $Id:
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+/** @class wxPropertyGridPage
+
+    Holder of property grid page information. You can subclass this and
+    give instance in wxPropertyGridManager::AddPage. It inherits from
+    wxEvtHandler and can be used to process events specific to this
+    page (id of events will still be same as manager's). If you don't
+    want to use it to process all events of the page, you need to
+    return false in the derived wxPropertyGridPage::IsHandlingAllEvents.
+
+    Please note that wxPropertyGridPage lacks many non-const property
+    manipulation functions found in wxPropertyGridManager. Please use
+    parent manager (m_manager member variable) when needed.
+
+    Please note that most member functions are inherited and as such not documented on
+    this page. This means you will probably also want to read wxPropertyGridInterface
+    class reference.
+
+    @section propgridpage_event_handling Event Handling
+
+    wxPropertyGridPage receives events emitted by its wxPropertyGridManager, but
+    only those events that are specific to that page. If wxPropertyGridPage::IsHandlingAllEvents
+    returns false, then unhandled events are sent to the manager's parent, as usual.
+
+    See @ref propgrid_event_handling "wxPropertyGrid Event Handling"
+    for more information.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPropertyGridPage : public wxEvtHandler,
+                                                public wxPropertyGridInterface
+{
+    friend class wxPropertyGridManager;
+public:
+
+    wxPropertyGridPage();
+    virtual ~wxPropertyGridPage();
+
+    /** Deletes all properties on page.
+    */
+    virtual void Clear();
+
+    /** Reduces column sizes to minimum possible that contents are still visibly (naturally
+        some margin space will be applied as well).
+
+        @retval
+        Minimum size for the page to still display everything.
+
+        @remarks
+        This function only works properly if size of containing grid was already fairly large.
+
+        Note that you can also get calculated column widths by calling GetColumnWidth()
+        immediately after this function returns.
+    */
+    wxSize FitColumns();
+
+    /** Returns page index in manager;
+    */
+    inline int GetIndex() const;
+
+    /** Returns x-coordinate position of splitter on a page.
+    */
+    int GetSplitterPosition( int col = 0 ) const { return GetStatePtr()->DoGetSplitterPosition(col); }
+
+    /** Returns "root property". It does not have name, etc. and it is not
+        visible. It is only useful for accessing its children.
+    */
+    wxPGProperty* GetRoot() const { return GetStatePtr()->DoGetRoot(); }
+
+    /** Returns id of the tool bar item that represents this page on wxPropertyGridManager's wxToolBar.
+    */
+    int GetToolId() const
+    {
+        return m_id;
+    }
+
+    /** Do any member initialization in this method.
+        @remarks
+        - Called every time the page is added into a manager.
+        - You can add properties to the page here.
+    */
+    virtual void Init() {}
+
+    /** Return false here to indicate unhandled events should be
+        propagated to manager's parent, as normal.
+    */
+    virtual bool IsHandlingAllEvents() const { return true; }
+
+    /** Called every time page is about to be shown.
+        Useful, for instance, creating properties just-in-time.
+    */
+    virtual void OnShow();
+
+    virtual void RefreshProperty( wxPGProperty* p );
+
+    /** Sets splitter position on page.
+        @remarks
+        Splitter position cannot exceed grid size, and therefore setting it during
+        form creation may fail as initial grid size is often smaller than desired
+        splitter position, especially when sizers are being used.
+    */
+    void SetSplitterPosition( int splitterPos, int col = 0 );
+};
+
+// -----------------------------------------------------------------------
+
+/** @class wxPropertyGridManager
+
+    wxPropertyGridManager is an efficient multi-page version of wxPropertyGrid,
+    which can optionally have toolbar for mode and page selection, and help text box.
+    Use window flags to select components to include.
+
+    @section propgridmanager_window_styles_ Window Styles
+
+    See @ref propgrid_window_styles.
+
+    @section propgridmanager_event_handling Event Handling
+
+    See @ref propgrid_event_handling "wxPropertyGrid Event Handling"
+    for more information.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class wxPropertyGridManager : public wxPanel, public wxPropertyGridInterface
+{
+public:
+    /** Creates new property page. Note that the first page is not created
+        automatically.
+        @param label
+        A label for the page. This may be shown as a toolbar tooltip etc.
+        @param bmp
+        Bitmap image for toolbar. If wxNullBitmap is used, then a built-in
+        default image is used.
+        @param pageObj
+        wxPropertyGridPage instance. Manager will take ownership of this object.
+        NULL indicates that a default page instance should be created.
+        @retval
+        Returns index to the page created.
+        @remarks
+        If toolbar is used, it is highly recommended that the pages are
+        added when the toolbar is not turned off using window style flag
+        switching.
+    */
+    int AddPage( const wxString& label = wxEmptyString,
+                 const wxBitmap& bmp = wxPG_NULL_BITMAP,
+                 wxPropertyGridPage* pageObj = (wxPropertyGridPage*) NULL )
+    {
+        return InsertPage(-1,label,bmp,pageObj);
+    }
+
+    void ClearModifiedStatus ( wxPGPropArg id );
+
+    void ClearModifiedStatus ()
+    {
+        m_pPropGrid->ClearModifiedStatus();
+    }
+
+    /** Deletes all all properties and all pages.
+    */
+    virtual void Clear();
+
+    /** Deletes all properties on given page.
+    */
+    void ClearPage( int page );
+
+    /** Forces updating the value of property from the editor control.
+        Returns true if DoPropertyChanged was actually called.
+    */
+    bool CommitChangesFromEditor( wxUint32 flags = 0 )
+    {
+        return m_pPropGrid->CommitChangesFromEditor(flags);
+    }
+
+    /** Two step creation. Whenever the control is created without any parameters,
+        use Create to actually create it. Don't access the control's public methods
+        before this is called.
+        @sa @link wndflags Additional Window Styles@endlink
+    */
+    bool Create( wxWindow *parent, wxWindowID id = wxID_ANY,
+                 const wxPoint& pos = wxDefaultPosition,
+                 const wxSize& size = wxDefaultSize,
+                 long style = wxPGMAN_DEFAULT_STYLE,
+                 const wxChar* name = wxPropertyGridManagerNameStr );
+
+    /** Enables or disables (shows/hides) categories according to parameter enable.
+        WARNING: Not tested properly, use at your own risk.
+    */
+    bool EnableCategories( bool enable )
+    {
+        long fl = m_windowStyle | wxPG_HIDE_CATEGORIES;
+        if ( enable ) fl = m_windowStyle & ~(wxPG_HIDE_CATEGORIES);
+        SetWindowStyleFlag(fl);
+        return true;
+    }
+
+    /** Selects page, scrolls and/or expands items to ensure that the
+        given item is visible. Returns true if something was actually done.
+    */
+    bool EnsureVisible( wxPGPropArg id );
+
+    /** Returns number of children of the root property of the selected page. */
+    size_t GetChildrenCount()
+    {
+        return GetChildrenCount( m_pPropGrid->m_pState->m_properties );
+    }
+
+    /** Returns number of children of the root property of given page. */
+    size_t GetChildrenCount( int pageIndex );
+
+    /** Returns number of children for the property.
+
+        NB: Cannot be in container methods class due to name hiding.
+    */
+    size_t GetChildrenCount( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(0)
+        return p->GetChildCount();
+    }
+
+    /** Returns number of columns on given page. By the default,
+        returns number of columns on current page. */
+    int GetColumnCount( int page = -1 ) const;
+
+    /** Returns height of the description text box. */
+    int GetDescBoxHeight() const;
+
+    /** Returns pointer to the contained wxPropertyGrid. This does not change
+        after wxPropertyGridManager has been created, so you can safely obtain
+        pointer once and use it for the entire lifetime of the instance.
+    */
+    wxPropertyGrid* GetGrid()
+    {
+        wxASSERT(m_pPropGrid);
+        return m_pPropGrid;
+    };
+
+    const wxPropertyGrid* GetGrid() const
+    {
+        wxASSERT(m_pPropGrid);
+        return (const wxPropertyGrid*)m_pPropGrid;
+    };
+
+    /** Returns iterator class instance.
+        @remarks
+        Calling this method in wxPropertyGridManager causes run-time assertion failure.
+        Please only iterate through individual pages or use CreateVIterator().
+    */
+    wxPropertyGridIterator GetIterator( int flags = wxPG_ITERATE_DEFAULT, wxPGProperty* firstProp = NULL )
+    {
+        wxFAIL_MSG(wxT("Please only iterate through individual pages or use CreateVIterator()"));
+        return wxPropertyGridInterface::GetIterator( flags, firstProp );
+    }
+
+    wxPropertyGridConstIterator GetIterator( int flags = wxPG_ITERATE_DEFAULT, wxPGProperty* firstProp = NULL ) const
+    {
+        wxFAIL_MSG(wxT("Please only iterate through individual pages or use CreateVIterator()"));
+        return wxPropertyGridInterface::GetIterator( flags, firstProp );
+    }
+
+    /** Returns iterator class instance.
+        @remarks
+        Calling this method in wxPropertyGridManager causes run-time assertion failure.
+        Please only iterate through individual pages or use CreateVIterator().
+    */
+    wxPropertyGridIterator GetIterator( int flags, int startPos )
+    {
+        wxFAIL_MSG(wxT("Please only iterate through individual pages or use CreateVIterator()"));
+        return wxPropertyGridInterface::GetIterator( flags, startPos );
+    }
+
+    wxPropertyGridConstIterator GetIterator( int flags, int startPos ) const
+    {
+        wxFAIL_MSG(wxT("Please only iterate through individual pages or use CreateVIterator()"));
+        return wxPropertyGridInterface::GetIterator( flags, startPos );
+    }
+
+    /** Similar to GetIterator, but instead returns wxPGVIterator instance,
+        which can be useful for forward-iterating through arbitrary property
+        containers.
+    */
+    virtual wxPGVIterator GetVIterator( int flags ) const;
+
+    /** Returns currently selected page.
+    */
+    wxPropertyGridPage* GetCurrentPage() const
+    {
+        return GetPage(m_selPage);
+    }
+
+    /** Returns last page.
+    */
+    wxPropertyGridPage* GetLastPage() const
+    {
+        return GetPage(m_arrPages.size()-1);
+    }
+
+    /** Returns page object for given page index.
+    */
+    wxPropertyGridPage* GetPage( unsigned int ind ) const
+    {
+        return (wxPropertyGridPage*)m_arrPages.Item(ind);
+    }
+
+    /** Returns page object for given page name.
+    */
+    wxPropertyGridPage* GetPage( const wxString& name ) const
+    {
+        return GetPage(GetPageByName(name));
+    }
+
+    /** Returns index for a page name. If no match is found, wxNOT_FOUND is returned. */
+    int GetPageByName( const wxString& name ) const;
+
+    /** Returns number of managed pages. */
+    size_t GetPageCount() const;
+
+    /** Returns name of given page. */
+    const wxString& GetPageName( int index ) const;
+
+    /** Returns "root property" of the given page. It does not have name, etc.
+        and it is not visible. It is only useful for accessing its children.
+    */
+    wxPGProperty* GetPageRoot( int index ) const;
+
+    /** Returns index to currently selected page. */
+    int GetSelectedPage() const { return m_selPage; }
+
+    /** Shortcut for GetGrid()->GetSelection(). */
+    wxPGProperty* GetSelectedProperty() const
+    {
+        return m_pPropGrid->GetSelection();
+    }
+
+    /** Synonyme for GetSelectedPage. */
+    int GetSelection() const { return m_selPage; }
+
+    /** Returns a pointer to the toolbar currently associated with the
+        wxPropertyGridManager (if any). */
+    wxToolBar* GetToolBar() const { return m_pToolbar; }
+
+    /** Creates new property page. Note that the first page is not created
+        automatically.
+        @param index
+        Add to this position. -1 will add as the last item.
+        @param label
+        A label for the page. This may be shown as a toolbar tooltip etc.
+        @param bmp
+        Bitmap image for toolbar. If wxNullBitmap is used, then a built-in
+        default image is used.
+        @param pageObj
+        wxPropertyGridPage instance. Manager will take ownership of this object.
+        If NULL, default page object is constructed.
+        @retval
+        Returns index to the page created.
+    */
+    virtual int InsertPage( int index, const wxString& label, const wxBitmap& bmp = wxNullBitmap,
+                            wxPropertyGridPage* pageObj = (wxPropertyGridPage*) NULL );
+
+    /** Returns true if any property on any page has been modified by the user. */
+    bool IsAnyModified() const;
+
+    /** Returns true if updating is frozen (ie. Freeze() called but not yet Thaw() ). */
+    bool IsFrozen() const { return (m_pPropGrid->m_frozen>0)?true:false; }
+
+    /** Returns true if any property on given page has been modified by the user. */
+    bool IsPageModified( size_t index ) const;
+
+    virtual void Refresh( bool eraseBackground = true,
+                          const wxRect* rect = (const wxRect*) NULL );
+
+    /** Removes a page.
+        @retval
+        Returns false if it was not possible to remove page in question.
+    */
+    virtual bool RemovePage( int page );
+
+    /** Select and displays a given page. Also makes it target page for
+        insert operations etc.
+        @param index
+        Index of page being seleced. Can be -1 to select nothing.
+    */
+    void SelectPage( int index );
+
+    /** Select and displays a given page (by label). */
+    void SelectPage( const wxString& label )
+    {
+        int index = GetPageByName(label);
+        wxCHECK_RET( index >= 0, wxT("No page with such name") );
+        SelectPage( index );
+    }
+
+    /** Select and displays a given page. */
+    void SelectPage( wxPropertyGridPage* ptr )
+    {
+        SelectPage( GetPageByState(ptr) );
+    }
+
+    /** Select a property. */
+    bool SelectProperty( wxPGPropArg id, bool focus = false )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return p->GetParentState()->DoSelectProperty(p, focus);
+    }
+
+    /** Sets number of columns on given page (default is current page).
+    */
+    void SetColumnCount( int colCount, int page = -1 );
+
+    /** Sets label and text in description box.
+    */
+    void SetDescription( const wxString& label, const wxString& content );
+
+    /** Sets y coordinate of the description box splitter. */
+    void SetDescBoxHeight( int ht, bool refresh = true );
+
+    /** Sets property attribute for all applicapple properties.
+        Be sure to use this method after all properties have been
+        added to the grid.
+    */
+    void SetPropertyAttributeAll( const wxString& name, wxVariant value );
+
+    /** Moves splitter as left as possible, while still allowing all
+        labels to be shown in full.
+        @param subProps
+        If false, will still allow sub-properties (ie. properties which
+        parent is not root or category) to be cropped.
+        @param allPages
+        If true, takes labels on all pages into account.
+    */
+    void SetSplitterLeft( bool subProps = false, bool allPages = true );
+
+    /** Sets splitter position on individual page. */
+    void SetPageSplitterPosition( int page, int pos, int column = 0 )
+    {
+        GetPage(page)->DoSetSplitterPosition( pos, column );
+    }
+
+    /** Sets splitter position for all pages.
+        @remarks
+        Splitter position cannot exceed grid size, and therefore setting it during
+        form creation may fail as initial grid size is often smaller than desired
+        splitter position, especially when sizers are being used.
+    */
+    void SetSplitterPosition( int pos, int column = 0 );
+
+    /** Synonyme for SelectPage(name). */
+    void SetStringSelection( const wxChar* name )
+    {
+        SelectPage( GetPageByName(name) );
+    }
+
+protected:
+
+    //
+    // Subclassing helpers
+    //
+
+    /** Creates property grid for the manager. Override to use subclassed
+        wxPropertyGrid.
+    */
+    virtual wxPropertyGrid* CreatePropertyGrid() const;
+
+    virtual void RefreshProperty( wxPGProperty* p );
+};
+
+// -----------------------------------------------------------------------
diff --git a/interface/wx/propgrid/property.h b/interface/wx/propgrid/property.h
new file mode 100644 (file)
index 0000000..2f3f5fb
--- /dev/null
@@ -0,0 +1,1558 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        property.h
+// Purpose:     interface of wxPGProperty
+// Author:      wxWidgets team
+// RCS-ID:      $Id:
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+
+#define wxNullProperty  ((wxPGProperty*)NULL)
+
+
+/** wxPGPaintData
+
+    Contains information relayed to property's OnCustomPaint.
+*/
+struct wxPGPaintData
+{
+    /** wxPropertyGrid. */
+    const wxPropertyGrid*   m_parent;
+
+    /** Normally -1, otherwise index to drop-down list item that has to be drawn. */
+    int                     m_choiceItem;
+
+    /** Set to drawn width in OnCustomPaint (optional). */
+    int                     m_drawnWidth;
+
+    /** In a measure item call, set this to the height of item at m_choiceItem index. */
+    int                     m_drawnHeight;   
+};
+
+
+// Structure for relaying choice/list info.
+struct wxPGChoiceInfo
+{
+    wxPGChoices*    m_choices;
+};
+
+
+/** @section propgrid_property_attributes wxPropertyGrid Property Attribute Identifiers
+
+    wxPGProperty::SetAttribute() and wxPropertyGridInterfaces::SetPropertyAttribute()
+    accept one of these as attribute name argument .
+
+    You can use strings instead of constants. However, some of these
+    constants are redefined to use cached strings which may reduce
+    your binary size by some amount.
+
+    @{
+*/
+
+/** Set default value for property.
+*/
+#define wxPG_ATTR_DEFAULT_VALUE           wxS("DefaultValue")
+
+/** Universal, int or double. Minimum value for numeric properties.
+*/
+#define wxPG_ATTR_MIN                     wxS("Min")
+
+/** Universal, int or double. Maximum value for numeric properties.
+*/
+#define wxPG_ATTR_MAX                     wxS("Max")
+
+/** Universal, string. When set, will be shown as text after the displayed
+    text value. Alternatively, if third column is enabled, text will be shown
+    there (for any type of property).
+*/
+#define wxPG_ATTR_UNITS                     wxS("Units")
+
+/** Universal, string. When set, will be shown in property's value cell
+    when displayed value string is empty, or value is unspecified.
+*/
+#define wxPG_ATTR_INLINE_HELP               wxS("InlineHelp")
+
+/** wxBoolProperty specific, int, default 0. When 1 sets bool property to
+    use checkbox instead of choice.
+*/
+#define wxPG_BOOL_USE_CHECKBOX              wxS("UseCheckbox")
+
+/** wxBoolProperty specific, int, default 0. When 1 sets bool property value
+    to cycle on double click (instead of showing the popup listbox).
+*/
+#define wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING  wxS("UseDClickCycling")
+
+/** wxFloatProperty (and similar) specific, int, default -1. Sets the (max) precision
+    used when floating point value is rendered as text. The default -1 means infinite
+    precision.
+*/
+#define wxPG_FLOAT_PRECISION                wxS("Precision")
+
+/** The text will be echoed as asterisks (wxTE_PASSWORD will be passed to textctrl etc).
+*/
+#define wxPG_STRING_PASSWORD                wxS("Password")
+
+/** Define base used by a wxUIntProperty. Valid constants are
+    wxPG_BASE_OCT, wxPG_BASE_DEC, wxPG_BASE_HEX and wxPG_BASE_HEXL
+    (lowercase characters).
+*/
+#define wxPG_UINT_BASE                      wxS("Base")
+
+/** Define prefix rendered to wxUIntProperty. Accepted constants
+    wxPG_PREFIX_NONE, wxPG_PREFIX_0x, and wxPG_PREFIX_DOLLAR_SIGN.
+    <b>Note:</b> Only wxPG_PREFIX_NONE works with Decimal and Octal
+    numbers.
+*/
+#define wxPG_UINT_PREFIX                    wxS("Prefix")
+
+/** wxFileProperty/wxImageFileProperty specific, wxChar*, default is detected/varies.
+    Sets the wildcard used in the triggered wxFileDialog. Format is the
+    same.
+*/
+#define wxPG_FILE_WILDCARD                  wxS("Wildcard")
+
+/** wxFileProperty/wxImageFileProperty specific, int, default 1.
+    When 0, only the file name is shown (i.e. drive and directory are hidden).
+*/
+#define wxPG_FILE_SHOW_FULL_PATH            wxS("ShowFullPath")
+
+/** Specific to wxFileProperty and derived properties, wxString, default empty.
+    If set, then the filename is shown relative to the given path string.
+*/
+#define wxPG_FILE_SHOW_RELATIVE_PATH        wxS("ShowRelativePath")
+
+/** Specific to wxFileProperty and derived properties, wxString, default is empty.
+    Sets the initial path of where to look for files.
+*/
+#define wxPG_FILE_INITIAL_PATH              wxS("InitialPath")
+
+/** Specific to wxFileProperty and derivatives, wxString, default is empty.
+    Sets a specific title for the dir dialog.
+*/
+#define wxPG_FILE_DIALOG_TITLE              wxS("DialogTitle")
+
+/** Specific to wxDirProperty, wxString, default is empty.
+    Sets a specific message for the dir dialog.
+*/
+#define wxPG_DIR_DIALOG_MESSAGE             wxS("DialogMessage")
+
+/** Sets displayed date format for wxDateProperty.
+*/
+#define wxPG_DATE_FORMAT                    wxS("DateFormat")
+
+/** Sets wxDatePickerCtrl window style used with wxDateProperty. Default
+    is wxDP_DEFAULT | wxDP_SHOWCENTURY.
+*/
+#define wxPG_DATE_PICKER_STYLE              wxS("PickerStyle")
+
+/** SpinCtrl editor, int or double. How much number changes when button is
+    pressed (or up/down on keybard).
+*/
+#define wxPG_ATTR_SPINCTRL_STEP             wxS("Step")
+
+/** SpinCtrl editor, bool. If true, value wraps at Min/Max.
+*/
+#define wxPG_ATTR_SPINCTRL_WRAP             wxS("Wrap")
+
+/** wxMultiChoiceProperty, int. If 0, no user strings allowed. If 1, user strings
+    appear before list strings. If 2, user strings appear after list string.
+*/
+#define wxPG_ATTR_MULTICHOICE_USERSTRINGMODE    wxS("UserStringMode")
+
+/** wxColourProperty and its kind, int, default 1. Setting this attribute to 0 hides custom
+    colour from property's list of choices.
+*/
+#define wxPG_COLOUR_ALLOW_CUSTOM            wxS("AllowCustom")
+
+/** First attribute id that is guaranteed not to be used built-in
+    properties.
+*/
+//#define wxPG_USER_ATTRIBUTE                 192
+
+/** @}
+*/
+
+// -----------------------------------------------------------------------
+
+/** @class wxPGProperty
+
+    wxPGProperty is base class for all wxPropertyGrid properties. In
+    sections below we cover few related topics.
+
+    @li @ref pgproperty_properties
+    @li @ref pgproperty_creating
+
+    @section pgproperty_properties Supplied Ready-to-use Property Classes
+
+    Here is a list and short description of supplied fully-functional
+    property classes. They are located in either props.h or advprops.h.
+
+    @li @ref wxArrayStringProperty
+    @li @ref wxBoolProperty
+    @li @ref wxColourProperty
+    @li @ref wxCursorProperty
+    @li @ref wxDateProperty
+    @li @ref wxDirProperty
+    @li @ref wxEditEnumProperty
+    @li @ref wxEnumProperty
+    @li @ref wxFileProperty
+    @li @ref wxFlagsProperty
+    @li @ref wxFloatProperty
+    @li @ref wxFontProperty
+    @li @ref wxImageFileProperty
+    @li @ref wxIntProperty
+    @li @ref wxLongStringProperty
+    @li @ref wxMultiChoiceProperty
+    @li @ref wxPropertyCategory
+    @li @ref wxStringProperty
+    @li @ref wxSystemColourProperty
+    @li @ref wxUIntProperty
+
+    @subsection wxPropertyCategory
+
+    Not an actual property per se, but a header for a group of properties.
+    Regardless inherits from wxPGProperty.
+
+    @subsection wxStringProperty
+
+    Simple string property. wxPG_STRING_PASSWORD attribute may be used
+    to echo value as asterisks and use wxTE_PASSWORD for wxTextCtrl.
+
+    @remarks
+    * wxStringProperty has a special trait: if it has value of "<composed>",
+      and also has child properties, then its displayed value becomes
+      composition of child property values, similar as with wxFontProperty,
+      for instance.
+
+    @subsection wxIntProperty
+
+    Like wxStringProperty, but converts text to a signed long integer.
+    wxIntProperty seamlessly supports 64-bit integers (ie. wxLongLong).
+
+    @subsection wxUIntProperty
+
+    Like wxIntProperty, but displays value as unsigned int. To set
+    the prefix used globally, manipulate wxPG_UINT_PREFIX string attribute.
+    To set the globally used base, manipulate wxPG_UINT_BASE int
+    attribute. Regardless of current prefix, understands (hex) values starting
+    with both "0x" and "$".
+    wxUIntProperty seamlessly supports 64-bit unsigned integers (ie. wxULongLong).
+
+    @subsection wxFloatProperty
+
+    Like wxStringProperty, but converts text to a double-precision floating point.
+    Default float-to-text precision is 6 decimals, but this can be changed
+    by modifying wxPG_FLOAT_PRECISION attribute.
+
+    @subsection wxBoolProperty
+
+    Represents a boolean value. wxChoice is used as editor control, by the
+    default. wxPG_BOOL_USE_CHECKBOX attribute can be set to true inorder to use
+    check box instead.
+
+    @subsection wxLongStringProperty
+
+    Like wxStringProperty, but has a button that triggers a small text editor
+    dialog. Note that in long string values, tabs are represented by "\t" and
+    line break by "\n".
+
+    @subsection wxDirProperty
+
+    Like wxLongStringProperty, but the button triggers dir selector instead.
+    Supported properties (all with string value): wxPG_DIR_DIALOG_MESSAGE.
+
+    @subsection wxFileProperty
+
+    Like wxLongStringProperty, but the button triggers file selector instead.
+    Default wildcard is "All files..." but this can be changed by setting
+    wxPG_FILE_WILDCARD attribute (see wxFileDialog for format details).
+    Attribute wxPG_FILE_SHOW_FULL_PATH can be set to false inorder to show
+    only the filename, not the entire path.
+
+    @subsection wxEnumProperty
+
+    Represents a single selection from a list of choices -
+    wxOwnerDrawnComboBox is used to edit the value.
+
+    @subsection wxFlagsProperty
+
+    Represents a bit set that fits in a long integer. wxBoolProperty sub-properties
+    are created for editing individual bits. Textctrl is created to manually edit
+    the flags as a text; a continous sequence of spaces, commas and semicolons
+    is considered as a flag id separator.
+    <b>Note: </b> When changing "choices" (ie. flag labels) of wxFlagsProperty, you
+    will need to use SetPropertyChoices - otherwise they will not get updated properly.
+
+    @subsection wxArrayStringProperty
+
+    Allows editing of a list of strings in wxTextCtrl and in a separate dialog.
+
+    @subsection wxDateProperty
+
+    wxDateTime property. Default editor is DatePickerCtrl, altough TextCtrl
+    should work as well. wxPG_DATE_FORMAT attribute can be used to change
+    string wxDateTime::Format uses (altough default is recommended as it is
+    locale-dependant), and wxPG_DATE_PICKER_STYLE allows changing window
+    style given to DatePickerCtrl (default is wxDP_DEFAULT|wxDP_SHOWCENTURY).
+
+    @subsection wxEditEnumProperty
+
+    Represents a string that can be freely edited or selected from list of choices -
+    custom combobox control is used to edit the value.
+
+    @subsection wxMultiChoiceProperty
+
+    Allows editing a multiple selection from a list of strings. This is
+    property is pretty much built around concept of wxMultiChoiceDialog.
+    It uses wxArrayString value.
+
+    @subsection wxImageFileProperty
+
+    Like wxFileProperty, but has thumbnail of the image in front of
+    the filename and autogenerates wildcard from available image handlers.
+
+    @subsection wxColourProperty
+
+    <b>Useful alternate editor:</b> Choice.
+
+    Represents wxColour. wxButton is used to trigger a colour picker dialog.
+
+    @subsection wxFontProperty
+
+    Represents wxFont. Various sub-properties are used to edit individual
+    subvalues.
+
+    @subsection wxSystemColourProperty
+
+    Represents wxColour and a system colour index. wxChoice is used to edit
+    the value. Drop-down list has color images. Note that value type
+    is wxColourPropertyValue instead of wxColour.
+    @code
+        class wxColourPropertyValue : public wxObject
+        {
+        public:
+            //  An integer value relating to the colour, and which exact
+            //  meaning depends on the property with which it is used.
+            //
+            //  For wxSystemColourProperty:
+            //  Any of wxSYS_COLOUR_XXX, or any web-colour ( use wxPG_TO_WEB_COLOUR
+            //  macro - (currently unsupported) ), or wxPG_COLOUR_CUSTOM.
+            wxUint32    m_type;
+
+            // Resulting colour. Should be correct regardless of type.
+            wxColour    m_colour;
+        };
+    @endcode
+
+    @subsection wxCursorProperty
+
+    Represents a wxCursor. wxChoice is used to edit the value.
+    Drop-down list has cursor images under some (wxMSW) platforms.
+
+
+    @section pgproperty_creating Creating Custom Properties
+
+    New properties can be created by subclassing wxPGProperty or one
+    of the provided property classes, and (re)implementing necessary
+    member functions. Below, each virtual member function has ample
+    documentation about its purpose and any odd details which to keep
+    in mind.
+
+    Here is a very simple 'template' code:
+
+    @code
+        class MyProperty : public wxPGProperty
+        {
+        public:
+            // All arguments of ctor must have a default value -
+            // use wxPG_LABEL for label and name
+            MyProperty( const wxString& label = wxPG_LABEL,
+                        const wxString& name = wxPG_LABEL,
+                        const wxString& value = wxEmptyString )
+            {
+                // m_value is wxVariant
+                m_value = value;
+            }
+
+            virtual ~MyProperty() { }
+
+            const wxPGEditor* DoGetEditorClass() const
+            {
+                // Determines editor used by property.
+                // You can replace 'TextCtrl' below with any of these
+                // builtin-in property editor identifiers: Choice, ComboBox,
+                // TextCtrlAndButton, ChoiceAndButton, CheckBox, SpinCtrl,
+                // DatePickerCtrl.
+                return wxPGEditor_TextCtrl;
+            }
+
+            virtual wxString GetValueAsString( int argFlags ) const
+            {
+                // TODO: Return property value in string format
+            }
+
+            virtual bool StringToValue( wxVariant& variant, const wxString& text, int argFlags )
+            {
+                // TODO: Adapt string to property value.
+            }
+
+        protected:
+        };
+    @endcode
+
+    Since wxPGProperty derives from wxObject, you can use standard
+    DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS macros. From the
+    above example they were omitted for sake of simplicity, and besides,
+    they are only really needed if you need to use wxRTTI with your
+    property class.
+
+    You can change the 'value type' of a property by simply assigning different type
+    of variant with SetValue. <b>It is mandatory to implement wxVariantData class
+    for all data types used as property values.</b> Also, it is further recommended
+    to derive your class from wxPGVariantData, like this:
+
+    @code
+        // In header file:
+        // (replace DECL with required data declaration, wxEMPTY_PARAMETER_VALUE if none)
+        WX_PG_DECLARE_VARIANT_DATA(wxPGVariantMyDataClass, MyDataClass, DECL)
+
+        // In sources file:
+        WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantMyDataClass, MyDataClass)
+    @endcode
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class wxPGProperty : public wxObject
+{
+public:
+    typedef wxUint32 FlagType;
+
+    /** Basic constructor.
+    */
+    wxPGProperty();
+
+    /** Constructor.
+        Non-abstract property classes should have constructor of this style:
+
+        @code
+
+        // If T is a class, then it should be a constant reference
+        // (e.g. const T& ) instead.
+        MyProperty( const wxString& label, const wxString& name, T value )
+            : wxPGProperty()
+        {
+            // Generally recommended way to set the initial value
+            // (as it should work in pretty much 100% of cases).
+            wxVariant variant;
+            variant << value;
+            SetValue(variant);
+
+            // If has private child properties then create them here. For example:
+            //     AddChild( new wxStringProperty( "Subprop 1", wxPG_LABEL, value.GetSubProp1() ) );
+        }
+
+        @endcode
+    */
+    wxPGProperty( const wxString& label, const wxString& name );
+
+    /** Virtual destructor. It is customary for derived properties to implement this. */
+    virtual ~wxPGProperty();
+
+    /** This virtual function is called after m_value has been set.
+
+        @remarks
+        - If m_value was set to Null variant (ie. unspecified value), OnSetValue()
+          will not be called.
+        - m_value may be of any variant type. Typically properties internally support only
+          one variant type, and as such OnSetValue() provides a good opportunity to convert
+          supported values into internal type.
+        - Default implementation does nothing.
+    */
+    virtual void OnSetValue();
+
+    /** Override this to return something else than m_value as the value.
+    */
+    virtual wxVariant DoGetValue() const { return m_value; }
+
+    /** Implement this function in derived class to check the value.
+        Return true if it is ok. Returning false prevents property change events
+        from occurring.
+
+        @remarks
+        - Default implementation always returns true.
+    */
+    virtual bool ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const;
+
+    /** Converts 'text' into proper value 'variant'. Returns true if new (different than
+        m_value) value could be interpreted from the text.
+        @param argFlags
+        If wxPG_FULL_VALUE is set, returns complete, storable value instead of displayable
+        one (they may be different).
+        If wxPG_COMPOSITE_FRAGMENT is set, text is interpreted as a part of composite
+        property string value (as generated by GetValueAsString() called with this same
+        flag).
+
+        @remarks
+        Default implementation converts semicolon delimited tokens into child values. Only
+        works for properties with children.
+    */
+    virtual bool StringToValue( wxVariant& variant, const wxString& text, int argFlags = 0 ) const;
+
+    /** Converts 'number' (including choice selection) into proper value 'variant'.
+        Returns true if new (different than m_value) value could be interpreted from the integer.
+        @param argFlags
+        If wxPG_FULL_VALUE is set, returns complete, storable value instead of displayable one.
+
+        @remarks
+        - If property is not supposed to use choice or spinctrl or other editor
+          with int-based value, it is not necessary to implement this method.
+        - Default implementation simply assign given int to m_value.
+        - If property uses choice control, and displays a dialog on some choice items,
+          then it is preferred to display that dialog in IntToValue instead of OnEvent.
+    */
+    virtual bool IntToValue( wxVariant& value, int number, int argFlags = 0 ) const;
+
+public:
+
+    /** Returns text representation of property's value.
+
+        @param argFlags
+        If wxPG_FULL_VALUE is set, returns complete, storable string value instead of displayable.
+        If wxPG_EDITABLE_VALUE is set, returns string value that must be editable in textctrl.
+        If wxPG_COMPOSITE_FRAGMENT is set, returns text that is appropriate to display
+        as a part of composite property string value.
+
+        @remarks
+        Default implementation returns string composed from text representations of
+        child properties.
+    */
+    virtual wxString GetValueAsString( int argFlags = 0 ) const;
+
+    /** Converts string to a value, and if successful, calls SetValue() on it.
+        Default behavior is to do nothing.
+        @param text
+        String to get the value from.
+        @retval
+        true if value was changed.
+    */
+    bool SetValueFromString( const wxString& text, int flags = 0 );
+
+    /** Converts integer to a value, and if succesful, calls SetValue() on it.
+        Default behavior is to do nothing.
+        @param value
+        Int to get the value from.
+        @param flags
+        If has wxPG_FULL_VALUE, then the value given is a actual value and not an index.
+        @retval
+        True if value was changed.
+    */
+    bool SetValueFromInt( long value, int flags = 0 );
+
+    /** Returns size of the custom painted image in front of property. This method
+        must be overridden to return non-default value if OnCustomPaint is to be
+        called.
+        @param item
+        Normally -1, but can be an index to the property's list of items.
+        @remarks
+        - Default behavior is to return wxSize(0,0), which means no image.
+        - Default image width or height is indicated with dimension -1.
+        - You can also return wxPG_DEFAULT_IMAGE_SIZE which equals wxSize(-1, -1).
+    */
+    virtual wxSize OnMeasureImage( int item = -1 ) const;
+
+    /** Events received by editor widgets are processed here. Note that editor class
+        usually processes most events. Some, such as button press events of
+        TextCtrlAndButton class, can be handled here. Also, if custom handling
+        for regular events is desired, then that can also be done (for example,
+        wxSystemColourProperty custom handles wxEVT_COMMAND_CHOICE_SELECTED
+        to display colour picker dialog when 'custom' selection is made).
+
+        If the event causes value to be changed, SetValueInEvent()
+        should be called to set the new value.
+
+        @param event
+        Associated wxEvent.
+        @retval
+        Should return true if any changes in value should be reported.
+        @remarks
+        - If property uses choice control, and displays a dialog on some choice items,
+          then it is preferred to display that dialog in IntToValue instead of OnEvent.
+    */
+    virtual bool OnEvent( wxPropertyGrid* propgrid, wxWindow* wnd_primary, wxEvent& event );
+
+    /** Called after value of a child property has been altered. Note that this function is
+        usually called at the time that value of this property, or given child property, is
+        still pending for change.
+
+        Sample pseudo-code implementation:
+
+        @code
+        void MyProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+        {
+            // Acquire reference to actual type of data stored in variant
+            // (TFromVariant only exists if wxPropertyGrid's wxVariant-macros were used to create
+            // the variant class).
+            T& data = TFromVariant(thisValue);
+
+            // Copy childValue into data.
+            switch ( childIndex )
+            {
+                case 0:
+                    data.SetSubProp1( childvalue.GetLong() );
+                    break;
+                case 1:
+                    data.SetSubProp2( childvalue.GetString() );
+                    break;
+                ...
+            }
+        }
+        @endcode
+
+        @param thisValue
+        Value of this property, that should be altered.
+        @param childIndex
+        Index of child changed (you can use Item(childIndex) to get).
+        @param childValue
+        Value of the child property.
+    */
+    virtual void ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const;
+
+    /** Returns pointer to an instance of used editor.
+    */
+    virtual const wxPGEditor* DoGetEditorClass() const;
+
+    /** Returns pointer to the wxValidator that should be used
+        with the editor of this property (NULL for no validator).
+        Setting validator explicitly via SetPropertyValidator
+        will override this.
+
+        In most situations, code like this should work well
+        (macros are used to maintain one actual validator instance,
+        so on the second call the function exits within the first
+        macro):
+
+        @code
+
+        wxValidator* wxMyPropertyClass::DoGetValidator () const
+        {
+            WX_PG_DOGETVALIDATOR_ENTRY()
+
+            wxMyValidator* validator = new wxMyValidator(...);
+
+            ... prepare validator...
+
+            WX_PG_DOGETVALIDATOR_EXIT(validator)
+        }
+
+        @endcode
+
+        @remarks
+        You can get common filename validator by returning
+        wxFileProperty::GetClassValidator(). wxDirProperty,
+        for example, uses it.
+    */
+    virtual wxValidator* DoGetValidator () const;
+
+    /** Returns current value's index to the choice control. May also return,
+        through pointer arguments, strings that should be inserted to that control.
+        Irrelevant to classes which do not employ wxPGEditor_Choice or similar.
+        @remarks
+        - If returns NULL in choiceinfo.m_choices, then this class must be
+          derived from wxBaseEnumProperty.
+        - Must be able to cope situation where property's set of choices is
+          uninitialized.
+    */
+    virtual int GetChoiceInfo( wxPGChoiceInfo* choiceinfo );
+
+    /** Override to paint an image in front of the property value text or drop-down
+        list item (but only if wxPGProperty::OnMeasureImage is overridden as well).
+
+        If property's OnMeasureImage() returns size that has height != 0 but less than
+        row height ( < 0 has special meanings), wxPropertyGrid calls this method to
+        draw a custom image in a limited area in front of the editor control or
+        value text/graphics, and if control has drop-down list, then the image is
+        drawn there as well (even in the case OnMeasureImage() returned higher height
+        than row height).
+
+        NOTE: Following applies when OnMeasureImage() returns a "flexible" height (
+        using wxPG_FLEXIBLE_SIZE(W,H) macro), which implies variable height items:
+        If rect.x is < 0, then this is a measure item call, which means that
+        dc is invalid and only thing that should be done is to set paintdata.m_drawnHeight
+        to the height of the image of item at index paintdata.m_choiceItem. This call
+        may be done even as often as once every drop-down popup show.
+
+        @param dc
+        wxDC to paint on.
+        @param rect
+        Box reserved for custom graphics. Includes surrounding rectangle, if any.
+        If x is < 0, then this is a measure item call (see above).
+        @param paintdata
+        wxPGPaintData structure with much useful data.
+
+        @remarks
+            - You can actually exceed rect width, but if you do so then paintdata.m_drawnWidth
+              must be set to the full width drawn in pixels.
+            - Due to technical reasons, rect's height will be default even if custom height
+              was reported during measure call.
+            - Brush is guaranteed to be default background colour. It has been already used to
+              clear the background of area being painted. It can be modified.
+            - Pen is guaranteed to be 1-wide 'black' (or whatever is the proper colour) pen for
+              drawing framing rectangle. It can be changed as well.
+
+        @see GetValueAsString()
+    */
+    virtual void OnCustomPaint( wxDC& dc, const wxRect& rect, wxPGPaintData& paintdata );
+
+    /** Returns used wxPGCellRenderer instance for given property column (label=0, value=1).
+
+        Default implementation returns editor's renderer for all columns.
+    */
+    virtual wxPGCellRenderer* GetCellRenderer( int column ) const;
+
+    /** Refresh values of child properties. Automatically called after value is set.
+    */
+    virtual void RefreshChildren();
+
+    /** Special handling for attributes of this property.
+
+        If returns false, then the attribute will be automatically stored in
+        m_attributes.
+
+        Default implementation simply returns false.
+    */
+    virtual bool DoSetAttribute( const wxString& name, wxVariant& value );
+
+    /** Returns value of an attribute.
+
+        Override if custom handling of attributes is needed.
+
+        Default implementation simply return NULL variant.
+    */
+    virtual wxVariant DoGetAttribute( const wxString& name ) const;
+
+    /** Returns instance of a new wxPGEditorDialogAdapter instance, which is
+        used when user presses the (optional) button next to the editor control;
+
+        Default implementation returns NULL (ie. no action is generated when
+        button is pressed).
+    */
+    virtual wxPGEditorDialogAdapter* GetEditorDialog() const;
+
+    /** Adds entry to property's wxPGChoices and editor control (if it is active).
+        Returns index of item added.
+    */
+    int AppendChoice( const wxString& label, int value = wxPG_INVALID_VALUE )
+    {
+        return InsertChoice(label,-1,value);
+    }
+
+    /** Returns wxPGCell of given column, NULL if none. If valid
+        object is returned, caller will gain its ownership.
+    */
+    wxPGCell* AcquireCell( unsigned int column )
+    {
+        if ( column >= m_cells.size() )
+            return NULL;
+
+        wxPGCell* cell = (wxPGCell*) m_cells[column];
+        m_cells[column] = NULL;
+        return cell;
+    }
+
+    /** Returns true if children of this property are component values (for instance,
+        points size, face name, and is_underlined are component values of a font).
+    */
+    bool AreChildrenComponents() const
+    {
+        if ( m_flags & (wxPG_PROP_COMPOSED_VALUE|wxPG_PROP_AGGREGATE) )
+            return true;
+
+        return false;
+    }
+
+    /** Removes entry from property's wxPGChoices and editor control (if it is active).
+
+        If selected item is deleted, then the value is set to unspecified.
+    */
+    void DeleteChoice( int index );
+
+    /** Call to enable or disable usage of common value (integer value that can be selected for
+        properties instead of their normal values) for this property.
+
+        Common values are disabled by the default for all properties.
+    */
+    void EnableCommonValue( bool enable = true )
+    {
+        if ( enable ) SetFlag( wxPG_PROP_USES_COMMON_VALUE );
+        else ClearFlag( wxPG_PROP_USES_COMMON_VALUE );
+    }
+
+    /** Composes text from values of child properties. */
+    void GenerateComposedValue( wxString& text, int argFlags = 0 ) const;
+
+    /** Returns property's label. */
+    const wxString& GetLabel() const { return m_label; }
+
+    /** Returns property's name with all (non-category, non-root) parents. */
+    wxString GetName() const;
+
+    /** Returns property's base name (ie. parent's name is not added in any case) */
+    const wxString& GetBaseName() const { return m_name; }
+
+    wxPGChoices& GetChoices();
+
+    const wxPGChoices& GetChoices() const;
+
+    const wxPGChoiceEntry* GetCurrentChoice() const;
+
+    /** Returns coordinate to the top y of the property. Note that the
+        position of scrollbars is not taken into account.
+    */
+    int GetY() const;
+
+    wxVariant GetValue() const
+    {
+        return DoGetValue();
+    }
+
+    /** Returns reference to the internal stored value. GetValue is preferred
+        way to get the actual value, since GetValueRef ignores DoGetValue,
+        which may override stored value.
+    */
+    wxVariant& GetValueRef()
+    {
+        return m_value;
+    }
+
+    const wxVariant& GetValueRef() const
+    {
+        return m_value;
+    }
+
+    /** Same as GetValueAsString, except takes common value into account.
+    */
+    wxString GetValueString( int argFlags = 0 ) const;
+
+    void UpdateControl( wxWindow* primary );
+
+    /** Returns wxPGCell of given column, NULL if none. wxPGProperty
+        will retain ownership of the cell object.
+    */
+    wxPGCell* GetCell( unsigned int column ) const
+    {
+        if ( column >= m_cells.size() )
+            return NULL;
+
+        return (wxPGCell*) m_cells[column];
+    }
+
+    unsigned int GetChoiceCount() const;
+
+    wxString GetChoiceString( unsigned int index );
+
+    /** Return number of displayed common values for this property.
+    */
+    int GetDisplayedCommonValueCount() const;
+
+    wxString GetDisplayedString() const
+    {
+        return GetValueString(0);
+    }
+
+    /** Returns property grid where property lies. */
+    wxPropertyGrid* GetGrid() const;
+
+    /** Returns owner wxPropertyGrid, but only if one is currently on a page
+        displaying this property. */
+    wxPropertyGrid* GetGridIfDisplayed() const;
+
+    /** Returns highest level non-category, non-root parent. Useful when you
+        have nested wxCustomProperties/wxParentProperties.
+        @remarks
+        Thus, if immediate parent is root or category, this will return the
+        property itself.
+    */
+    wxPGProperty* GetMainParent() const;
+
+    /** Return parent of property */
+    wxPGProperty* GetParent() const { return m_parent; }
+
+    /** Returns true if property has editable wxTextCtrl when selected.
+
+        @remarks
+        Altough disabled properties do not displayed editor, they still
+        return True here as being disabled is considered a temporary
+        condition (unlike being read-only or having limited editing enabled).
+    */
+    bool IsTextEditable() const;
+
+    bool IsValueUnspecified() const
+    {
+        return m_value.IsNull();
+    }
+
+    FlagType HasFlag( FlagType flag ) const
+    {
+        return ( m_flags & flag );
+    }
+
+    /** Returns comma-delimited string of property attributes.
+    */
+    const wxPGAttributeStorage& GetAttributes() const
+    {
+        return m_attributes;
+    }
+
+    /** Returns m_attributes as list wxVariant.
+    */
+    wxVariant GetAttributesAsList() const;
+
+    FlagType GetFlags() const
+    {
+        return m_flags;
+    }
+
+    const wxPGEditor* GetEditorClass() const;
+
+    wxString GetValueType() const
+    {
+        return m_value.GetType();
+    }
+
+    /** Returns editor used for given column. NULL for no editor.
+    */
+    const wxPGEditor* GetColumnEditor( int column ) const
+    {
+        if ( column == 1 )
+            return GetEditorClass();
+
+        return NULL;
+    }
+
+    /** Returns common value selected for this property. -1 for none.
+    */
+    int GetCommonValue() const
+    {
+        return m_commonValue;
+    }
+
+    /** Returns true if property has even one visible child.
+    */
+    bool HasVisibleChildren() const;
+
+    /** Adds entry to property's wxPGChoices and editor control (if it is active).
+        Returns index of item added.
+    */
+    int InsertChoice( const wxString& label, int index, int value = wxPG_INVALID_VALUE );
+
+    /** Returns true if this property is actually a wxPropertyCategory.
+    */
+    bool IsCategory() const { return HasFlag(wxPG_PROP_CATEGORY)?true:false; }
+
+    /** Returns true if this property is actually a wxRootProperty.
+    */
+    bool IsRoot() const { return (m_parent == NULL); }
+
+    /** Returns true if this is a sub-property. */
+    bool IsSubProperty() const
+    {
+        wxPGProperty* parent = (wxPGProperty*)m_parent;
+        if ( parent && !parent->IsCategory() )
+            return true;
+        return false;
+    }
+
+    /** Returns last visible sub-property, recursively.
+    */
+    const wxPGProperty* GetLastVisibleSubItem() const;
+
+    wxVariant GetDefaultValue() const;
+
+    int GetMaxLength() const
+    {
+        return (int) m_maxLen;
+    }
+
+    /** Determines, recursively, if all children are not unspecified. Takes values in given list into account.
+    */
+    bool AreAllChildrenSpecified( wxVariant* pendingList = NULL ) const;
+
+    /** Updates composed values of parent non-category properties, recursively.
+        Returns topmost property updated.
+
+        @remarks
+        - Must not call SetValue() (as can be called in it).
+    */
+    wxPGProperty* UpdateParentValues();
+
+    /** Returns true if containing grid uses wxPG_EX_AUTO_UNSPECIFIED_VALUES.
+    */
+    FlagType UsesAutoUnspecified() const
+    {
+        return HasFlag(wxPG_PROP_AUTO_UNSPECIFIED);
+    }
+
+    wxBitmap* GetValueImage() const
+    {
+        return m_valueBitmap;
+    }
+
+    wxVariant GetAttribute( const wxString& name ) const;
+
+    /** Returns named attribute, as string, if found. Otherwise defVal is returned.
+    */
+    wxString GetAttribute( const wxString& name, const wxString& defVal ) const;
+
+    /** Returns named attribute, as long, if found. Otherwise defVal is returned.
+    */
+    long GetAttributeAsLong( const wxString& name, long defVal ) const;
+
+    /** Returns named attribute, as double, if found. Otherwise defVal is returned.
+    */
+    double GetAttributeAsDouble( const wxString& name, double defVal ) const;
+
+    inline unsigned int GetArrIndex() const { return m_arrIndex; }
+
+    inline unsigned int GetDepth() const { return (unsigned int)m_depth; }
+
+    /** Gets flags as a'|' delimited string. Note that flag names are not
+        prepended with 'wxPG_PROP_'.
+        @param flagsMask
+        String will only be made to include flags combined by this parameter.
+    */
+    wxString GetFlagsAsString( FlagType flagsMask ) const;
+
+    /** Returns position in parent's array. */
+    unsigned int GetIndexInParent() const
+    {
+        return (unsigned int)m_arrIndex;
+    }
+
+    /** Hides or reveals the property.
+        @param hide
+        true for hide, false for reveal.
+        @param flags
+        By default changes are applied recursively. Set this paramter wxPG_DONT_RECURSE to prevent this.
+    */
+    inline bool Hide( bool hide, int flags = wxPG_RECURSE );
+
+    bool IsExpanded() const { return (!(m_flags & wxPG_PROP_COLLAPSED) && GetChildCount()); }
+
+    /** Returns true if all parents expanded.
+    */
+    bool IsVisible() const;
+
+    bool IsEnabled() const
+    {
+        return ( m_flags & wxPG_PROP_DISABLED ) ? false : true;
+    }
+
+    /** If property's editor is created this forces its recreation. Useful
+        in SetAttribute etc. Returns true if actually did anything.
+    */
+    bool RecreateEditor();
+
+    /** If property's editor is active, then update it's value.
+    */
+    void RefreshEditor();
+
+    /** Sets an attribute for this property.
+        @param name
+        Text identifier of attribute. See @ref propgrid_property_attributes.
+        @param value
+        Value of attribute.
+    */
+    void SetAttribute( const wxString& name, wxVariant value );
+
+    void SetAttributes( const wxPGAttributeStorage& attributes );
+
+    /** Sets editor for a property.
+
+        @param editor
+        For builtin editors, use wxPGEditor_X, where X is builtin editor's
+        name (TextCtrl, Choice, etc. see wxPGEditor documentation for full list).
+
+        For custom editors, use pointer you received from wxPropertyGrid::RegisterEditorClass().
+    */
+    void SetEditor( const wxPGEditor* editor )
+    {
+        m_customEditor = editor;
+    }
+
+    /** Sets editor for a property.
+    */
+    inline void SetEditor( const wxString& editorName );
+
+    /** Sets cell information for given column.
+
+        Note that the property takes ownership of given wxPGCell instance.
+    */
+    void SetCell( int column, wxPGCell* cellObj );
+
+    /** Changes value of a property with choices, but only
+        works if the value type is long or string. */
+    void SetChoiceSelection( int newValue, const wxPGChoiceInfo& choiceInfo );
+
+    /** Sets common value selected for this property. -1 for none.
+    */
+    void SetCommonValue( int commonValue )
+    {
+        m_commonValue = commonValue;
+    }
+
+    /** Sets flags from a '|' delimited string. Note that flag names are not
+        prepended with 'wxPG_PROP_'.
+    */
+    void SetFlagsFromString( const wxString& str );
+
+    /** Sets property's "is it modified?" flag. Affects children recursively.
+    */
+    void SetModifiedStatus( bool modified )
+    {
+        SetFlagRecursively(wxPG_PROP_MODIFIED, modified);
+    }
+
+    /** Call in OnEvent(), OnButtonClick() etc. to change the property value
+        based on user input.
+
+        @remarks
+        This method is const since it doesn't actually modify value, but posts
+        given variant as pending value, stored in wxPropertyGrid.
+    */
+    void SetValueInEvent( wxVariant value ) const;
+
+    /** Call this to set value of the property. Unlike methods in wxPropertyGrid,
+        this does not automatically update the display.
+
+        @remarks
+        Use wxPropertyGrid::ChangePropertyValue() instead if you need to run through
+        validation process and send property change event.
+
+        If you need to change property value in event, based on user input, use
+        SetValueInEvent() instead.
+
+        @param pList
+        Pointer to list variant that contains child values. Used to indicate
+        which children should be marked as modified.
+        @param flags
+        Various flags (for instance, wxPG_SETVAL_REFRESH_EDITOR).
+    */
+    void SetValue( wxVariant value, wxVariant* pList = NULL, int flags = 0 );
+
+    /** Set wxBitmap in front of the value. This bitmap may be ignored
+        by custom cell renderers.
+    */
+    void SetValueImage( wxBitmap& bmp );
+
+    /** If property has choices and they are not yet exclusive, new such copy
+        of them will be created.
+    */
+    void SetChoicesExclusive();
+
+    void SetExpanded( bool expanded )
+    {
+        if ( !expanded ) m_flags |= wxPG_PROP_COLLAPSED;
+        else m_flags &= ~wxPG_PROP_COLLAPSED;
+    }
+
+    void SetFlag( FlagType flag ) { m_flags |= flag; }
+
+    void SetFlagRecursively( FlagType flag, bool set );
+
+    void SetHelpString( const wxString& helpString )
+    {
+        m_helpString = helpString;
+    }
+
+    void SetLabel( const wxString& label ) { m_label = label; }
+
+    inline void SetName( const wxString& newName );
+
+    void SetValueToUnspecified()
+    {
+        wxVariant val;  // Create NULL variant
+        SetValue(val);
+    }
+
+    /** Sets wxValidator for a property*/
+    void SetValidator( const wxValidator& validator )
+    {
+        m_validator = wxDynamicCast(validator.Clone(),wxValidator);
+    }
+
+    /** Gets assignable version of property's validator. */
+    wxValidator* GetValidator() const
+    {
+        if ( m_validator )
+            return m_validator;
+        return DoGetValidator();
+    }
+
+    /** Updates property value in case there were last minute
+        changes. If value was unspecified, it will be set to default.
+        Use only for properties that have TextCtrl-based editor.
+        @remarks
+        If you have code similar to
+        @code
+            // Update the value in case of last minute changes
+            if ( primary && propgrid->IsEditorsValueModified() )
+                 GetEditorClass()->CopyValueFromControl( this, primary );
+        @endcode
+        in wxPGProperty::OnEvent wxEVT_COMMAND_BUTTON_CLICKED handler,
+        then replace it with call to this method.
+        @retval
+        True if value changed.
+    */
+    bool PrepareValueForDialogEditing( wxPropertyGrid* propgrid );
+
+    /** Returns client data (void*) of a property.
+    */
+    void* GetClientData() const
+    {
+        return m_clientData;
+    }
+
+    /** Sets client data (void*) of a property.
+        @remarks
+        This untyped client data has to be deleted manually.
+    */
+    void SetClientData( void* clientData )
+    {
+        m_clientData = clientData;
+    }
+
+    /** Returns client object of a property.
+    */
+    void SetClientObject(wxClientData* clientObject)
+    {
+        delete m_clientObject;
+        m_clientObject = clientObject;
+    }
+
+    /** Sets managed client object of a property.
+    */
+    wxClientData *GetClientObject() const { return m_clientObject; }
+
+    /** Sets new set of choices for property.
+
+        @remarks
+        This operation clears the property value.
+    */
+    bool SetChoices( wxPGChoices& choices );
+
+    /** Sets new set of choices for property.
+    */
+    inline bool SetChoices( const wxArrayString& labels,
+                            const wxArrayInt& values = wxArrayInt() );
+
+    /** Set max length of text in text editor.
+    */
+    inline bool SetMaxLength( int maxLen );
+
+    /** Call with 'false' in OnSetValue to cancel value changes after all
+        (ie. cancel 'true' returned by StringToValue() or IntToValue()).
+    */
+    void SetWasModified( bool set = true )
+    {
+        if ( set ) m_flags |= wxPG_PROP_WAS_MODIFIED;
+        else m_flags &= ~wxPG_PROP_WAS_MODIFIED;
+    }
+
+    const wxString& GetHelpString() const
+    {
+        return m_helpString;
+    }
+
+    void ClearFlag( FlagType flag ) { m_flags &= ~(flag); }
+
+    // Use, for example, to detect if item is inside collapsed section.
+    bool IsSomeParent( wxPGProperty* candidate_parent ) const;
+
+    /** Adapts list variant into proper value using consequtive ChildChanged-calls.
+    */
+    void AdaptListToValue( wxVariant& list, wxVariant* value ) const;
+
+    /** This is used by properties that have fixed sub-properties. */
+    void AddChild( wxPGProperty* prop );
+
+    /** Returns height of children, recursively, and
+        by taking expanded/collapsed status into account.
+        
+        iMax is used when finding property y-positions.
+    */
+    int GetChildrenHeight( int lh, int iMax = -1 ) const;
+
+    /** Returns number of child properties */
+    unsigned int GetChildCount() const { return m_children.GetCount(); }
+
+    /** Returns sub-property at index i. */
+    wxPGProperty* Item( size_t i ) const { return (wxPGProperty*)m_children.Item(i); }
+
+    /** Returns last sub-property.
+    */
+    wxPGProperty* Last() const { return (wxPGProperty*)m_children.Last(); }
+
+    /** Returns index of given sub-property. */
+    int Index( const wxPGProperty* p ) const { return m_children.Index((wxPGProperty*)p); }
+
+    /** Deletes all sub-properties. */
+    void Empty();
+
+    // Puts correct indexes to children
+    void FixIndexesOfChildren( size_t starthere = 0 );
+
+    wxPGProperty* GetItemAtY( unsigned int y, unsigned int lh, unsigned int* nextItemY ) const;
+
+    /** Returns (direct) child property with given name (or NULL if not found).
+    */
+    wxPGProperty* GetPropertyByName( const wxString& name ) const;
+};
+
+
+/** @class wxPGChoices
+
+    Helper class for managing choices of wxPropertyGrid properties.
+    Each entry can have label, value, bitmap, text colour, and background colour.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPGChoices
+{
+public:
+    typedef long ValArrItem;
+
+    /** Default constructor. */
+    wxPGChoices()
+    {
+        Init();
+    }
+
+    /** Copy constructor. */
+    wxPGChoices( const wxPGChoices& a )
+    {
+        if ( a.m_data != wxPGChoicesEmptyData )
+        {
+            m_data = a.m_data;
+            m_data->m_refCount++;
+        }
+    }
+
+    /** Constructor. */
+    wxPGChoices( const wxChar** labels, const long* values = NULL )
+    {
+        Init();
+        Set(labels,values);
+    }
+
+    /** Constructor. */
+    wxPGChoices( const wxArrayString& labels, const wxArrayInt& values = wxArrayInt() )
+    {
+        Init();
+        Set(labels,values);
+    }
+
+    /** Simple interface constructor. */
+    wxPGChoices( wxPGChoicesData* data )
+    {
+        wxASSERT(data);
+        m_data = data;
+        data->m_refCount++;
+    }
+
+    /** Destructor. */
+    ~wxPGChoices()
+    {
+        Free();
+    }
+
+    /** Adds to current. If did not have own copies, creates them now. If was empty,
+        identical to set except that creates copies.
+    */
+    void Add( const wxChar** labels, const ValArrItem* values = NULL );
+
+    /** Version that works with wxArrayString. */
+    void Add( const wxArrayString& arr, const ValArrItem* values = NULL );
+
+    /** Version that works with wxArrayString and wxArrayInt. */
+    void Add( const wxArrayString& arr, const wxArrayInt& arrint );
+
+    /** Adds single item. */
+    wxPGChoiceEntry& Add( const wxString& label, int value = wxPG_INVALID_VALUE );
+
+    /** Adds a single item, with bitmap. */
+    wxPGChoiceEntry& Add( const wxString& label, const wxBitmap& bitmap, int value = wxPG_INVALID_VALUE );
+
+    /** Adds a single item with full entry information. */
+    wxPGChoiceEntry& Add( const wxPGChoiceEntry& entry )
+    {
+        return Insert(entry, -1);
+    }
+
+    /** Adds single item. */
+    wxPGChoiceEntry& AddAsSorted( const wxString& label, int value = wxPG_INVALID_VALUE );
+
+    void Assign( const wxPGChoices& a )
+    {
+        AssignData(a.m_data);
+    }
+
+    void AssignData( wxPGChoicesData* data );
+
+    /** Delete all choices. */
+    void Clear()
+    {
+        if ( m_data != wxPGChoicesEmptyData )
+            m_data->Clear();
+    }
+
+    void EnsureData()
+    {
+        if ( m_data == wxPGChoicesEmptyData )
+            m_data = new wxPGChoicesData();
+    }
+
+    /** Gets a unsigned number identifying this list. */
+    wxPGChoicesId GetId() const { return (wxPGChoicesId) m_data; };
+
+    const wxString& GetLabel( size_t ind ) const
+    {
+        wxASSERT( ind >= 0 && ind < GetCount() );
+        return Item(ind).GetText();
+    }
+
+    size_t GetCount () const
+    {
+        wxASSERT_MSG( m_data,
+            wxT("When checking if wxPGChoices is valid, use IsOk() instead of GetCount()") );
+        return m_data->GetCount();
+    }
+
+    int GetValue( size_t ind ) const { return Item(ind).GetValue(); }
+
+    /** Returns array of values matching the given strings. Unmatching strings
+        result in wxPG_INVALID_VALUE entry in array.
+    */
+    wxArrayInt GetValuesForStrings( const wxArrayString& strings ) const;
+
+    /** Returns array of indices matching given strings. Unmatching strings
+        are added to 'unmatched', if not NULL.
+    */
+    wxArrayInt GetIndicesForStrings( const wxArrayString& strings, wxArrayString* unmatched = NULL ) const;
+
+    /** Returns true if choices in general are likely to have values
+        (depens on that all entries have values or none has)
+    */
+    bool HasValues() const;
+
+    bool HasValue( unsigned int i ) const { return (m_data->GetCount() > i && m_data->Item(i)->HasValue()); }
+
+    int Index( const wxString& str ) const;
+    int Index( int val ) const;
+
+    /** Inserts single item. */
+    wxPGChoiceEntry& Insert( const wxString& label, int index, int value = wxPG_INVALID_VALUE );
+
+    /** Inserts a single item with full entry information. */
+    wxPGChoiceEntry& Insert( const wxPGChoiceEntry& entry, int index );
+
+    /** Returns false if this is a constant empty set of choices,
+        which should not be modified.
+    */
+    bool IsOk() const
+    {
+        return ( m_data != wxPGChoicesEmptyData );
+    }
+
+    const wxPGChoiceEntry& Item( unsigned int i ) const
+    {
+        wxASSERT( IsOk() );
+        return *m_data->Item(i);
+    }
+
+    wxPGChoiceEntry& Item( unsigned int i )
+    {
+        wxASSERT( IsOk() );
+        return *m_data->Item(i);
+    }
+
+    /** Removes count items starting at position nIndex. */
+    void RemoveAt(size_t nIndex, size_t count = 1);
+
+    /** Does not create copies for itself. */
+    void Set( const wxChar** labels, const long* values = NULL )
+    {
+        Free();
+        Add(labels,values);
+    }
+
+    /** Version that works with wxArrayString.
+        TODO: Deprecate this.
+    */
+    void Set( wxArrayString& arr, const long* values = (const long*) NULL )
+    {
+        Free();
+        Add(arr,values);
+    }
+
+    /** Version that works with wxArrayString and wxArrayInt. */
+    void Set( const wxArrayString& labels, const wxArrayInt& values = wxArrayInt() )
+    {
+        Free();
+        if ( &values )
+            Add(labels,values);
+        else
+            Add(labels);
+    }
+
+    // Creates exclusive copy of current choices
+    void SetExclusive()
+    {
+        if ( m_data->m_refCount != 1 )
+        {
+            wxPGChoicesData* data = new wxPGChoicesData();
+            data->CopyDataFrom(m_data);
+            Free();
+            m_data = data;
+        }
+    }
+
+    // Returns data, increases refcount.
+    wxPGChoicesData* GetData()
+    {
+        wxASSERT( m_data->m_refCount != 0xFFFFFFF );
+        m_data->m_refCount++;
+        return m_data;
+    }
+
+    // Returns plain data ptr - no refcounting stuff is done.
+    wxPGChoicesData* GetDataPtr() const { return m_data; }
+
+    // Changes ownership of data to you.
+    wxPGChoicesData* ExtractData()
+    {
+        wxPGChoicesData* data = m_data;
+        m_data = wxPGChoicesEmptyData;
+        return data;
+    }
+
+    wxArrayString GetLabels() const;
+
+    void operator= (const wxPGChoices& a)
+    {
+        AssignData(a.m_data);
+    }
+
+    wxPGChoiceEntry& operator[](unsigned int i)
+    {
+        return Item(i);
+    }
+
+    const wxPGChoiceEntry& operator[](unsigned int i) const
+    {
+        return Item(i);
+    }
+};
+
+// -----------------------------------------------------------------------
diff --git a/interface/wx/propgrid/propgrid.h b/interface/wx/propgrid/propgrid.h
new file mode 100644 (file)
index 0000000..15a7168
--- /dev/null
@@ -0,0 +1,839 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        propgrid.h
+// Purpose:     interface of wxPropertyGrid
+// Author:      wxWidgets team
+// RCS-ID:      $Id:
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+
+/** @section propgrid_window_styles wxPropertyGrid Window Styles
+
+    SetWindowStyleFlag method can be used to modify some of these at run-time.
+    @{
+*/
+enum wxPG_WINDOW_STYLES
+{
+
+/** This will cause Sort() automatically after an item is added.
+    When inserting a lot of items in this mode, it may make sense to
+    use Freeze() before operations and Thaw() afterwards to increase
+    performance.
+*/
+wxPG_AUTO_SORT                      = 0x00000010,
+
+/** Categories are not initially shown (even if added).
+    IMPORTANT NOTE: If you do not plan to use categories, then this
+    style will waste resources.
+    This flag can also be changed using wxPropertyGrid::EnableCategories method.
+*/
+wxPG_HIDE_CATEGORIES                = 0x00000020,
+
+/* This style combines non-categoric mode and automatic sorting.
+*/
+wxPG_ALPHABETIC_MODE                = (wxPG_HIDE_CATEGORIES|wxPG_AUTO_SORT),
+
+/** Modified values are shown in bold font. Changing this requires Refresh()
+    to show changes.
+*/
+wxPG_BOLD_MODIFIED                  = 0x00000040,
+
+/** When wxPropertyGrid is resized, splitter moves to the center. This
+    behavior stops once the user manually moves the splitter.
+*/
+wxPG_SPLITTER_AUTO_CENTER           = 0x00000080,
+
+/** Display tooltips for cell text that cannot be shown completely. If
+    wxUSE_TOOLTIPS is 0, then this doesn't have any effect.
+*/
+wxPG_TOOLTIPS                       = 0x00000100,
+
+/** Disables margin and hides all expand/collapse buttons that would appear
+    outside the margin (for sub-properties). Toggling this style automatically
+    expands all collapsed items.
+*/
+wxPG_HIDE_MARGIN                    = 0x00000200,
+
+/** This style prevents user from moving the splitter.
+*/
+wxPG_STATIC_SPLITTER                = 0x00000400,
+
+/** Combination of other styles that make it impossible for user to modify
+    the layout.
+*/
+wxPG_STATIC_LAYOUT                  = (wxPG_HIDE_MARGIN|wxPG_STATIC_SPLITTER),
+
+/** Disables wxTextCtrl based editors for properties which
+    can be edited in another way. Equals calling wxPropertyGrid::LimitPropertyEditing
+    for all added properties.
+*/
+wxPG_LIMITED_EDITING                = 0x00000800,
+
+/** wxPropertyGridManager only: Show toolbar for mode and page selection. */
+wxPG_TOOLBAR                        = 0x00001000,
+
+/** wxPropertyGridManager only: Show adjustable text box showing description
+    or help text, if available, for currently selected property.
+*/
+wxPG_DESCRIPTION                    = 0x00002000
+
+};
+
+enum wxPG_EX_WINDOW_STYLES
+{
+
+/**
+    NOTE: wxPG_EX_xxx are extra window styles and must be set using SetExtraStyle()
+    member function.
+
+    Speeds up switching to wxPG_HIDE_CATEGORIES mode. Initially, if wxPG_HIDE_CATEGORIES
+    is not defined, the non-categorized data storage is not activated, and switching
+    the mode first time becomes somewhat slower. wxPG_EX_INIT_NOCAT activates the
+    non-categorized data storage right away. IMPORTANT NOTE: If you do plan not
+    switching to non-categoric mode, or if you don't plan to use categories at
+    all, then using this style will result in waste of resources.
+
+*/
+wxPG_EX_INIT_NOCAT                  = 0x00001000,
+
+/** Extended window style that sets wxPropertyGridManager toolbar to not
+    use flat style.
+*/
+wxPG_EX_NO_FLAT_TOOLBAR             = 0x00002000,
+
+/** Shows alphabetic/categoric mode buttons from toolbar.
+*/
+wxPG_EX_MODE_BUTTONS                = 0x00008000,
+
+/** Show property help strings as tool tips instead as text on the status bar.
+    You can set the help strings using SetPropertyHelpString member function.
+*/
+wxPG_EX_HELP_AS_TOOLTIPS            = 0x00010000,
+
+/** Prevent TAB from focusing to wxButtons. This behavior was default
+    in version 1.2.0 and earlier.
+    NOTE! Tabbing to button doesn't work yet. Problem seems to be that on wxMSW
+      atleast the button doesn't properly propagate key events (yes, I'm using
+      wxWANTS_CHARS).
+*/
+//wxPG_EX_NO_TAB_TO_BUTTON            = 0x00020000,
+
+/** Allows relying on native double-buffering.
+*/
+wxPG_EX_NATIVE_DOUBLE_BUFFERING         = 0x00080000,
+
+/** Set this style to let user have ability to set values of properties to
+    unspecified state. Same as setting wxPG_PROP_AUTO_UNSPECIFIED for
+    all properties.
+*/
+wxPG_EX_AUTO_UNSPECIFIED_VALUES         = 0x00200000,
+
+/** If this style is used, built-in attributes (such as wxPG_FLOAT_PRECISION and wxPG_STRING_PASSWORD)
+    are not stored into property's attribute storage (thus they are not readable).
+
+    Note that this option is global, and applies to all wxPG property containers.
+*/
+wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES    = 0x00400000,
+
+/** With this style Validators on properties will work same as in wxPropertyGrid 1.2.
+*/
+wxPG_EX_LEGACY_VALIDATORS               = 0x00800000,
+
+/** Hides page selection buttons from toolbar.
+*/
+wxPG_EX_HIDE_PAGE_BUTTONS               = 0x01000000
+
+};
+
+/** Combines various styles.
+*/
+#define wxPG_DEFAULT_STYLE             (0)
+
+/** Combines various styles.
+*/
+#define wxPGMAN_DEFAULT_STYLE      (0)
+
+/** @}
+*/
+
+// -----------------------------------------------------------------------
+
+/** wxPropertyGrid Validation Failure Behavior Flags
+    @{
+*/
+
+enum wxPG_VALIDATION_FAILURE_BEHAVIOR_FLAGS
+{
+
+/** Prevents user from leaving property unless value is valid. If this
+    behavior flag is not used, then value change is instead cancelled.
+*/
+wxPG_VFB_STAY_IN_PROPERTY           = 0x01,
+
+/** Calls wxBell() on validation failure.
+*/
+wxPG_VFB_BEEP                       = 0x02,
+
+/** Cell with invalid value will be marked (with red colour).
+*/
+wxPG_VFB_MARK_CELL                  = 0x04,
+
+/** Display customizable text message explaining the situation.
+*/
+wxPG_VFB_SHOW_MESSAGE               = 0x08,
+
+/** Defaults. */
+wxPG_VFB_DEFAULT                    = wxPG_VFB_STAY_IN_PROPERTY|wxPG_VFB_BEEP,
+
+/** Only used internally. */
+wxPG_VFB_UNDEFINED                  = 0x80
+
+};
+
+/** @}
+*/
+
+typedef wxByte wxPGVFBFlags;
+
+/** wxPGValidationInfo
+
+    Used to convey validation information to and from functions that
+    actually perform validation.
+*/
+struct wxPGValidationInfo
+{
+    /** Value to be validated.
+    */
+    wxVariant*      m_pValue;
+
+    /** Message displayed on validation failure.
+    */
+    wxString        m_failureMessage;
+
+    /** Validation failure behavior. Use wxPG_VFB_XXX flags.
+    */
+    wxPGVFBFlags    m_failureBehavior;
+
+    wxPGVFBFlags GetFailureBehavior() const { return m_failureBehavior; }
+
+    void SetFailureBehavior(wxPGVFBFlags failureBehavior) { m_failureBehavior = failureBehavior; }
+
+    const wxString& GetFailureMessage() const { return m_failureMessage; }
+
+    void SetFailureMessage(const wxString& message) { m_failureMessage = message; }
+};
+
+// -----------------------------------------------------------------------
+
+/** wxPropertyGrid Action Identifiers
+    These are used with wxPropertyGrid::AddActionTrigger() and wxPropertyGrid::ClearActionTriggers().
+    @{
+*/
+
+enum wxPG_KEYBOARD_ACTIONS
+{
+    wxPG_ACTION_INVALID = 0,
+    wxPG_ACTION_NEXT_PROPERTY,
+    wxPG_ACTION_PREV_PROPERTY,
+    wxPG_ACTION_EXPAND_PROPERTY,
+    wxPG_ACTION_COLLAPSE_PROPERTY,
+    wxPG_ACTION_CANCEL_EDIT,
+    wxPG_ACTION_CUT,
+    wxPG_ACTION_COPY,
+    wxPG_ACTION_PASTE,
+    wxPG_ACTION_MAX
+};
+
+/** @}
+*/
+
+// -----------------------------------------------------------------------
+
+/** @class wxPropertyGrid
+
+    wxPropertyGrid is a specialized grid for editing properties
+    such as strings, numbers, flagsets, fonts, and colours. wxPropertySheet
+    used to do the very same thing, but it hasn't been updated for a while
+    and it is currently deprecated.
+
+    Please note that most member functions are inherited and as such not documented on
+    this page. This means you will probably also want to read wxPropertyGridInterface
+    class reference.
+
+    See also @ref overview_propgrid.
+
+    @section propgrid_window_styles_ Window Styles
+
+    See @ref propgrid_window_styles.
+
+    @section propgrid_event_handling Event Handling
+
+    To process input from a propertygrid control, use these event handler macros to
+    direct input to member functions that take a wxPropertyGridEvent argument.
+
+    @beginEventTable{wxPropertyGridEvent}
+    @event{EVT_PG_SELECTED (id, func)}
+        Respond to wxEVT_PG_SELECTED event, generated when property value
+        has been changed by user.
+    @event{EVT_PG_CHANGING(id, func)}
+        Respond to wxEVT_PG_CHANGING event, generated when property value
+        is about to be changed by user. Use wxPropertyGridEvent::GetValue()
+        to take a peek at the pending value, and wxPropertyGridEvent::Veto()
+        to prevent change from taking place, if necessary.
+    @event{EVT_PG_HIGHLIGHTED(id, func)}
+        Respond to wxEVT_PG_HIGHLIGHTED event, which occurs when mouse
+        moves over a property. Event's property is NULL if hovered area does
+        not belong to any property.
+    @event{EVT_PG_RIGHT_CLICK(id, func)}
+        Respond to wxEVT_PG_RIGHT_CLICK event, which occurs when property is
+        clicked on with right mouse button.
+    @event{EVT_PG_DOUBLE_CLICK(id, func)}
+        Respond to wxEVT_PG_DOUBLE_CLICK event, which occurs when property is
+        double-clicked onwith left mouse button.
+    @event{EVT_PG_ITEM_COLLAPSED(id, func)}
+        Respond to wxEVT_PG_ITEM_COLLAPSED event, generated when user collapses
+        a property or category..
+    @event{EVT_PG_ITEM_EXPANDED(id, func)}
+        Respond to wxEVT_PG_ITEM_EXPANDED event, generated when user expands
+        a property or category..
+    @endEventTable
+
+    @remarks
+
+    - Use Freeze() and Thaw() respectively to disable and enable drawing. This
+      will also delay sorting etc. miscellaneous calculations to the last possible
+      moment.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class wxPropertyGrid : public wxScrolledWindow, public wxPropertyGridInterface
+{
+public:
+
+       /** Two step constructor. Call Create when this constructor is called to build up the
+           wxPropertyGrid
+       */
+    wxPropertyGrid();
+
+    /** The default constructor. The styles to be used are styles valid for
+        the wxWindow and wxScrolledWindow.
+        @sa @link wndflags Additional Window Styles@endlink
+    */
+    wxPropertyGrid( wxWindow *parent, wxWindowID id = wxID_ANY,
+                           const wxPoint& pos = wxDefaultPosition,
+                           const wxSize& size = wxDefaultSize,
+                           long style = wxPG_DEFAULT_STYLE,
+                           const wxChar* name = wxPropertyGridNameStr );
+
+    /** Destructor */
+    virtual ~wxPropertyGrid();
+
+    /** Adds given key combination to trigger given action.
+        @param action
+        Which action to trigger. See @link pgactions List of list of wxPropertyGrid actions@endlink.
+    */
+    void AddActionTrigger( int action, int keycode, int modifiers = 0 );
+
+    /** This static function enables or disables automatic use of wxGetTranslation for
+        following strings: wxEnumProperty list labels, wxFlagsProperty sub-property
+        labels.
+        Default is false.
+    */
+    static void AutoGetTranslation( bool enable );
+
+    /** Changes value of a property, as if from an editor. Use this instead of SetPropertyValue()
+        if you need the value to run through validation process, and also send the property
+        change event.
+
+        @return
+        Returns true if value was successfully changed.
+    */
+    bool ChangePropertyValue( wxPGPropArg id, wxVariant newValue );
+
+    /** Centers the splitter. If argument is true, automatic splitter centering is
+        enabled (only applicapple if style wxPG_SPLITTER_AUTO_CENTER was defined).
+    */
+    void CenterSplitter( bool enable_auto_centering = false );
+
+    /** Deletes all properties.
+    */
+    virtual void Clear();
+
+    /** Clears action triggers for given action.
+        @param action
+        Which action to trigger. See @link pgactions List of list of wxPropertyGrid actions@endlink.
+    */
+    void ClearActionTriggers( int action );
+
+    /** Forces updating the value of property from the editor control.
+        Note that wxEVT_PG_CHANGING and wxEVT_PG_CHANGED are dispatched using ProcessEvent,
+        meaning your event handlers will be called immediately.
+
+        @retval
+        Returns true if anything was changed.
+    */
+    virtual bool CommitChangesFromEditor( wxUint32 flags = 0 );
+
+    /** Two step creation. Whenever the control is created without any parameters, use Create to actually
+        create it. Don't access the control's public methods before this is called
+        @sa @link wndflags Additional Window Styles@endlink
+    */
+    bool Create( wxWindow *parent, wxWindowID id = wxID_ANY,
+                 const wxPoint& pos = wxDefaultPosition,
+                 const wxSize& size = wxDefaultSize,
+                 long style = wxPG_DEFAULT_STYLE,
+                 const wxChar* name = wxPropertyGridNameStr );
+
+    /** Call when editor widget's contents is modified. For example, this is called
+        when changes text in wxTextCtrl (used in wxStringProperty and wxIntProperty).
+
+        @remarks
+        This function should only be called by custom properties.
+
+        @see wxPGProperty::OnEvent()
+    */
+    void EditorsValueWasModified() { m_iFlags |= wxPG_FL_VALUE_MODIFIED; }
+
+    /** Reverse of EditorsValueWasModified().
+
+        @remarks
+        This function should only be called by custom properties.
+    */
+    void EditorsValueWasNotModified()
+    {
+        m_iFlags &= ~(wxPG_FL_VALUE_MODIFIED);
+    }
+
+    /** Enables or disables (shows/hides) categories according to parameter enable. */
+    bool EnableCategories( bool enable );
+
+    /** Scrolls and/or expands items to ensure that the given item is visible.
+        Returns true if something was actually done.
+    */
+    bool EnsureVisible( wxPGPropArg id );
+
+    /** Reduces column sizes to minimum possible that contents are still visibly (naturally
+        some margin space will be applied as well).
+
+        @return
+        Minimum size for the grid to still display everything.
+
+        @remarks
+        Does not work well with wxPG_SPLITTER_AUTO_CENTER window style.
+
+        This function only works properly if grid size prior to call was already
+        fairly large.
+
+        Note that you can also get calculated column widths by calling GetState->GetColumnWidth()
+        immediately after this function returns.
+    */
+    wxSize FitColumns()
+    {
+        wxSize sz = m_pState->DoFitColumns();
+        return sz;
+    }
+
+    /** Returns wxWindow that the properties are painted on, and which should be used
+        as the parent for editor controls.
+    */
+    wxPanel* GetPanel() const
+    {
+        return m_canvas;
+    }
+
+    /** Returns current category caption background colour. */
+    wxColour GetCaptionBackgroundColour() const { return m_colCapBack; }
+
+    wxFont& GetCaptionFont() { return m_captionFont; }
+
+    const wxFont& GetCaptionFont() const { return m_captionFont; }
+
+    /** Returns current category caption text colour. */
+    wxColour GetCaptionForegroundColour() const { return m_colCapFore; }
+
+    /** Returns current cell background colour. */
+    wxColour GetCellBackgroundColour() const { return m_colPropBack; }
+
+    /** Returns current cell text colour when disabled. */
+    wxColour GetCellDisabledTextColour() const { return m_colDisPropFore; }
+
+    /** Returns current cell text colour. */
+    wxColour GetCellTextColour() const { return m_colPropFore; }
+
+    /** Returns number of columns on current page. */
+    int GetColumnCount() const
+    {
+        return m_pState->m_colWidths.size();
+    }
+
+    /** Returns colour of empty space below properties. */
+    wxColour GetEmptySpaceColour() const { return m_colEmptySpace; }
+
+    /** Returns height of highest characters of used font. */
+    int GetFontHeight() const { return m_fontHeight; }
+
+    /** Returns pointer to itself. Dummy function that enables same kind
+        of code to use wxPropertyGrid and wxPropertyGridManager.
+    */
+    wxPropertyGrid* GetGrid() { return this; }
+
+    /** Returns rectangle of custom paint image.
+    */
+    wxRect GetImageRect( wxPGProperty* p, int item ) const;
+
+    /** Returns size of the custom paint image in front of property.
+        If no argument is given, returns preferred size.
+    */
+    wxSize GetImageSize( wxPGProperty* p = NULL, int item = -1 ) const;
+
+    //@{
+    /** Returns last item which could be iterated using given flags.
+        @param flags
+        See @ref propgrid_iterator_flags.
+    */
+    wxPGProperty* GetLastItem( int flags = wxPG_ITERATE_DEFAULT )
+    {
+        return m_pState->GetLastItem(flags);
+    }
+
+    const wxPGProperty* GetLastItem( int flags = wxPG_ITERATE_DEFAULT ) const
+    {
+        return m_pState->GetLastItem(flags);
+    }
+    //@}
+
+    /** Returns colour of lines between cells. */
+    wxColour GetLineColour() const { return m_colLine; }
+
+    /** Returns background colour of margin. */
+    wxColour GetMarginColour() const { return m_colMargin; }
+
+    /** Returns cell background colour of a property. */
+    wxColour GetPropertyBackgroundColour( wxPGPropArg id ) const;
+
+    /** Returns cell background colour of a property. */
+    wxColour GetPropertyTextColour( wxPGPropArg id ) const;
+
+    /** Returns "root property". It does not have name, etc. and it is not
+        visible. It is only useful for accessing its children.
+    */
+    wxPGProperty* GetRoot() const { return m_pState->m_properties; }
+
+    /** Returns height of a single grid row (in pixels). */
+    int GetRowHeight() const { return m_lineHeight; }
+
+    /** Returns currently selected property. */
+    wxPGProperty* GetSelectedProperty () const { return GetSelection(); }
+
+    /** Returns currently selected property. */
+    wxPGProperty* GetSelection() const
+    {
+        return m_selected;
+    }
+
+    /** Returns current selection background colour. */
+    wxColour GetSelectionBackgroundColour() const { return m_colSelBack; }
+
+    /** Returns current selection text colour. */
+    wxColour GetSelectionForegroundColour() const { return m_colSelFore; }
+
+    /** Returns current splitter x position. */
+    int GetSplitterPosition() const { return m_pState->DoGetSplitterPosition(0); }
+
+    /** Returns wxTextCtrl active in currently selected property, if any. Takes
+        into account wxOwnerDrawnComboBox.
+    */
+    wxTextCtrl* GetEditorTextCtrl() const;
+
+    wxPGValidationInfo& GetValidationInfo()
+    {
+        return m_validationInfo;
+    }
+
+    /** Returns current vertical spacing. */
+    int GetVerticalSpacing() const { return (int)m_vspacing; }
+
+    /** Returns true if editor's value was marked modified.
+    */
+    bool IsEditorsValueModified() const { return  ( m_iFlags & wxPG_FL_VALUE_MODIFIED ) ? true : false; }
+
+    /** Returns information about arbitrary position in the grid.
+    */
+    wxPropertyGridHitTestResult HitTest( const wxPoint& pt ) const;
+
+    /** Returns true if any property has been modified by the user. */
+    bool IsAnyModified() const { return (m_pState->m_anyModified>0); }
+
+    /** Returns true if updating is frozen (ie. Freeze() called but not yet Thaw() ). */
+    bool IsFrozen() const { return (m_frozen>0)?true:false; }
+
+    /** Redraws given property.
+    */
+    virtual void RefreshProperty( wxPGProperty* p );
+
+    /** Registers a new editor class.
+        @retval
+        Pointer to the editor class instance that should be used.
+    */
+    static wxPGEditor* RegisterEditorClass( wxPGEditor* editor, const wxString& name,
+                                            bool noDefCheck = false );
+
+    /** Resets all colours to the original system values.
+    */
+    void ResetColours();
+
+    /** Selects a property. Editor widget is automatically created, but
+        not focused unless focus is true. This will generate wxEVT_PG_SELECT event.
+        @param id
+        Property to select.
+        @retval
+        True if selection finished successfully. Usually only fails if current
+        value in editor is not valid.
+        @sa wxPropertyGrid::Unselect
+    */
+    bool SelectProperty( wxPGPropArg id, bool focus = false )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return DoSelectProperty(p,focus?wxPG_SEL_FOCUS:0);
+    }
+
+    /** Changes keyboard shortcut to push the editor button.
+        @remarks
+        You can set default with keycode 0. Good value for the platform is guessed,
+        but don't expect it to be very accurate.
+    */
+    void SetButtonShortcut( int keycode, bool ctrlDown = false, bool altDown = false );
+
+    /** Sets category caption background colour. */
+    void SetCaptionBackgroundColour(const wxColour& col);
+
+    /** Sets category caption text colour. */
+    void SetCaptionTextColour(const wxColour& col);
+
+    /** Sets default cell background colour - applies to property cells.
+        Note that appearance of editor widgets may not be affected.
+    */
+    void SetCellBackgroundColour(const wxColour& col);
+
+    /** Sets cell text colour for disabled properties.
+    */
+    void SetCellDisabledTextColour(const wxColour& col);
+
+    /** Sets default cell text colour - applies to property name and value text.
+        Note that appearance of editor widgets may not be affected.
+    */
+    void SetCellTextColour(const wxColour& col);
+
+    /** Set number of columns (2 or more).
+    */
+    void SetColumnCount( int colCount )
+    {
+        m_pState->SetColumnCount(colCount);
+        Refresh();
+    }
+
+    /** Sets the 'current' category - Append will add non-category properties under it.
+    */
+    void SetCurrentCategory( wxPGPropArg id );
+
+    /** Sets colour of empty space below properties. */
+    void SetEmptySpaceColour(const wxColour& col);
+
+    /** Sets colour of lines between cells. */
+    void SetLineColour(const wxColour& col);
+
+    /** Sets background colour of margin. */
+    void SetMarginColour(const wxColour& col);
+
+    /** Sets property attribute for all applicapple properties.
+        Be sure to use this method only after all properties have been
+        added to the grid.
+    */
+    void SetPropertyAttributeAll( const wxString& attrName, wxVariant value );
+
+    /** Sets background colour of property and all its children. Colours of
+        captions are not affected. Background brush cache is optimized for often
+        set colours to be set last.
+    */
+    void SetPropertyBackgroundColour( wxPGPropArg id, const wxColour& col );
+
+    /** Resets text and background colours of given property.
+    */
+    void SetPropertyColoursToDefault( wxPGPropArg id );
+
+    /** Sets text colour of property and all its children.
+    */
+    void SetPropertyTextColour( wxPGPropArg id, const wxColour& col, bool recursively = true );
+
+    /** Sets selection background colour - applies to selected property name background. */
+    void SetSelectionBackgroundColour(const wxColour& col);
+
+    /** Sets selection foreground colour - applies to selected property name text. */
+    void SetSelectionTextColour(const wxColour& col);
+
+    /** Sets x coordinate of the splitter.
+        @remarks
+        Splitter position cannot exceed grid size, and therefore setting it during
+        form creation may fail as initial grid size is often smaller than desired
+        splitter position, especially when sizers are being used.
+    */
+    void SetSplitterPosition( int newxpos, int col = 0 )
+    {
+        DoSetSplitterPosition_(newxpos, true, col);
+        m_iFlags |= wxPG_FL_SPLITTER_PRE_SET;
+    }
+
+    /** Set virtual width for this particular page. Width -1 indicates that the
+        virtual width should be disabled. */
+    void SetVirtualWidth( int width );
+
+    /** Sets name of a property.
+        @param id
+        Name or pointer of property which name to change.
+        @param newname
+        New name.
+    */
+    void SetPropertyName( wxPGPropArg id, const wxString& newname )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        DoSetPropertyName( p, newname );
+    }
+
+    /** Moves splitter as left as possible, while still allowing all
+        labels to be shown in full.
+        @param subProps
+        If false, will still allow sub-properties (ie. properties which
+        parent is not root or category) to be cropped.
+    */
+    void SetSplitterLeft( bool subProps = false )
+    {
+        m_pState->SetSplitterLeft(subProps);
+    }
+
+    /** Sets vertical spacing. Can be 1, 2, or 3 - a value relative to font
+        height. Value of 2 should be default on most platforms.
+        @remarks
+        On wxMSW, wxComboBox, when used as property editor widget, will spill
+        out with anything less than 3.
+    */
+    void SetVerticalSpacing( int vspacing )
+    {
+        m_vspacing = (unsigned char)vspacing;
+        CalculateFontAndBitmapStuff( vspacing );
+        if ( !m_pState->m_itemsAdded ) Refresh();
+    }
+
+    /** Shows an brief error message that is related to a property. */
+    void ShowPropertyError( wxPGPropArg id, const wxString& msg )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        DoShowPropertyError(p, msg);
+    }
+
+    /** Sorts all items at all levels (except sub-properties). */
+    void Sort();
+
+    /** Sorts children of a category.
+    */
+    void SortChildren( wxPGPropArg id );
+};
+
+
+/** @class wxPropertyGridEvent
+
+    A propertygrid event holds information about events associated with
+    wxPropertyGrid objects.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class wxPropertyGridEvent : public wxCommandEvent
+{
+public:
+
+    /** Constructor. */
+    wxPropertyGridEvent(wxEventType commandType=0, int id=0);
+
+    /** Copy constructor. */
+    wxPropertyGridEvent(const wxPropertyGridEvent& event);
+
+    /** Destructor. */
+    ~wxPropertyGridEvent();
+
+    /** Copyer. */
+    virtual wxEvent* Clone() const;
+
+    wxPGProperty* GetMainParent() const
+    {
+        wxASSERT(m_property);
+        return m_property->GetMainParent();
+    }
+
+    /** Returns id of associated property. */
+    wxPGProperty* GetProperty() const
+    {
+        return m_property;
+    }
+
+    wxPGValidationInfo& GetValidationInfo()
+    {
+        wxASSERT(m_validationInfo);
+        return *m_validationInfo;
+    }
+
+    /** Returns true if event has associated property. */
+    bool HasProperty() const { return ( m_property != (wxPGProperty*) NULL ); }
+
+    /** Returns true if you can veto the action that the event is signaling.
+    */
+    bool CanVeto() const { return m_canVeto; }
+
+    /** Call this from your event handler to veto action that the event is signaling.
+        You can only veto a shutdown if wxPropertyGridEvent::CanVeto returns true.
+        @remarks
+        Currently only wxEVT_PG_CHANGING supports vetoing.
+    */
+    void Veto( bool veto = true ) { m_wasVetoed = veto; }
+
+    /** Returns value that is about to be set for wxEVT_PG_CHANGING.
+    */
+    const wxVariant& GetValue() const
+    {
+        wxASSERT_MSG( m_validationInfo,
+                      wxT("Only call GetValue from a handler of event type that supports it") );
+        return *m_validationInfo->m_pValue;
+    }
+
+    /** Set override validation failure behavior. Only effective if Veto was also called,
+        and only allowed if event type is wxEVT_PG_CHANGING.
+    */
+    void SetValidationFailureBehavior( int flags )
+    {
+        wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
+        m_validationInfo->m_failureBehavior = (wxPGVFBFlags) flags;
+    }
+
+    /** Sets custom failure message for this time only. Only applies if
+        wxPG_VFB_SHOW_MESSAGE is set in validation failure flags.
+    */
+    void SetValidationFailureMessage( const wxString& message )
+    {
+        wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
+        m_validationInfo->m_failureMessage = message;
+    }
+
+    wxPGVFBFlags GetValidationFailureBehavior() const
+    {
+        wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
+        return m_validationInfo->m_failureBehavior;
+    }
+
+    void SetCanVeto( bool canVeto ) { m_canVeto = canVeto; }
+    bool WasVetoed() const { return m_wasVetoed; }
+
+    /** Changes the associated property. */
+    void SetProperty( wxPGProperty* p ) { m_property = p; }
+
+    void SetPropertyGrid( wxPropertyGrid* pg ) { m_pg = pg; }
+};
diff --git a/interface/wx/propgrid/propgridiface.h b/interface/wx/propgrid/propgridiface.h
new file mode 100644 (file)
index 0000000..3f433ad
--- /dev/null
@@ -0,0 +1,992 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        property.h
+// Purpose:     interface of wxPGProperty
+// Author:      wxWidgets team
+// RCS-ID:      $Id:
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// -----------------------------------------------------------------------
+
+/** @class wxPropertyGridInterface
+
+    Most of the shared property manipulation interface shared by wxPropertyGrid,
+    wxPropertyGridPage, and wxPropertyGridManager is defined in this class.
+
+    @remarks
+    - In separate wxPropertyGrid component this class was known as wxPropertyContainerMethods.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class WXDLLIMPEXP_PROPGRID wxPropertyGridInterface
+{
+public:
+
+    /** Destructor */
+    virtual ~wxPropertyGridInterface() { }
+
+    /** Adds choice to a property that can accept one.
+        @remarks
+        - If you need to make sure that you modify only the set of choices of
+          a single property (and not also choices of other properties with initially
+          identical set), call wxPropertyGrid::SetPropertyChoicesPrivate.
+        - This usually only works for wxEnumProperty and derivatives (wxFlagsProperty
+          can get accept new items but its items may not get updated).
+    */
+    void AddPropertyChoice( wxPGPropArg id, const wxString& label, int value = wxPG_INVALID_VALUE );
+
+    /** Appends property to the list. wxPropertyGrid assumes ownership of the object.
+        Becomes child of most recently added category.
+        @remarks
+        - wxPropertyGrid takes the ownership of the property pointer.
+        - If appending a category with name identical to a category already in the
+          wxPropertyGrid, then newly created category is deleted, and most recently
+          added category (under which properties are appended) is set to the one with
+          same name. This allows easier adding of items to same categories in multiple
+          passes.
+        - Does not automatically redraw the control, so you may need to call Refresh
+          when calling this function after control has been shown for the first time.
+    */
+    wxPGProperty* Append( wxPGProperty* property );
+
+    wxPGProperty* AppendIn( wxPGPropArg id, wxPGProperty* newproperty );
+
+    /** Inorder to add new items into a property with fixed children (for instance, wxFlagsProperty),
+        you need to call this method. After populating has been finished, you need to call EndAddChildren.
+    */
+    void BeginAddChildren( wxPGPropArg id );
+
+    /** Deletes all properties.
+    */
+    virtual void Clear() = 0;
+
+    /** Deselect current selection, if any. Returns true if success
+        (ie. validator did not intercept). */
+    bool ClearSelection();
+
+    /** Resets modified status of all properties.
+    */
+    void ClearModifiedStatus()
+    {
+        SetPropertyModifiedStatus(m_pState->m_properties, false);
+        m_pState->m_anyModified = false;
+    }
+
+    /** Collapses given category or property with children.
+        Returns true if actually collapses.
+    */
+    bool Collapse( wxPGPropArg id );
+
+    /** Collapses all items that can be collapsed.
+
+        @retval
+        Return false if failed (may fail if editor value cannot be validated).
+    */
+    bool CollapseAll() { return ExpandAll(false); }
+
+    /** Changes value of a property, as if from an editor. Use this instead of SetPropertyValue()
+        if you need the value to run through validation process, and also send the property
+        change event.
+
+        @retval
+        Returns true if value was successfully changed.
+    */
+    bool ChangePropertyValue( wxPGPropArg id, wxVariant newValue );
+
+    /** Resets value of a property to its default. */
+    bool ClearPropertyValue( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        p->SetValue(p->GetDefaultValue());
+        RefreshProperty(p);
+        return true;
+    }
+
+    /** Deletes a property by id. If category is deleted, all children are automatically deleted as well. */
+    void DeleteProperty( wxPGPropArg id );
+
+    /** Deletes choice from a property.
+
+        If selected item is deleted, then the value is set to unspecified.
+
+        See AddPropertyChoice for more details.
+    */
+    void DeletePropertyChoice( wxPGPropArg id, int index );
+
+    /** Disables property. */
+    bool DisableProperty( wxPGPropArg id ) { return EnableProperty(id,false); }
+
+    /** Returns true if all property grid data changes have been committed. Usually
+        only returns false if value in active editor has been invalidated by a
+        wxValidator.
+    */
+    bool EditorValidate();
+
+    /** Enables or disables property, depending on whether enable is true or false. */
+    bool EnableProperty( wxPGPropArg id, bool enable = true );
+
+    /** Called after population of property with fixed children has finished.
+    */
+    void EndAddChildren( wxPGPropArg id );
+
+    /** Expands given category or property with children.
+        Returns true if actually expands.
+    */
+    bool Expand( wxPGPropArg id );
+
+    /** Expands all items that can be expanded.
+    */
+    bool ExpandAll( bool expand = true );
+
+    /** Returns list of expanded properties.
+    */
+    wxArrayPGProperty GetExpandedProperties() const
+    {
+        wxArrayPGProperty array;
+        GetPropertiesWithFlag(&array, wxPG_PROP_COLLAPSED, true,
+            wxPG_ITERATE_ALL_PARENTS_RECURSIVELY|wxPG_ITERATE_HIDDEN);
+        return array;
+    }
+
+    /** Returns id of first child of given property.
+        @remarks
+        Does not return sub-properties!
+    */
+    wxPGProperty* GetFirstChild( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
+
+        if ( !p->GetChildCount() || p->HasFlag(wxPG_PROP_AGGREGATE) )
+            return wxNullProperty;
+
+        return p->Item(0);
+    }
+
+    //@{
+    /** Returns iterator class instance.
+        @param flags
+        See @ref propgrid_iterator_flags. Value wxPG_ITERATE_DEFAULT causes
+        iteration over everything except private child properties.
+        @param firstProp
+        Property to start iteration from. If NULL, then first child of root is used.
+        @param startPos
+        Either wxTOP or wxBOTTOM. wxTOP will indicate that iterations start from
+        the first property from the top, and wxBOTTOM means that the iteration will
+        instead begin from bottommost valid item.
+    */
+    wxPropertyGridIterator GetIterator( int flags = wxPG_ITERATE_DEFAULT, wxPGProperty* firstProp = NULL )
+    {
+        return wxPropertyGridIterator( m_pState, flags, firstProp );
+    }
+
+    wxPropertyGridConstIterator GetIterator( int flags = wxPG_ITERATE_DEFAULT, wxPGProperty* firstProp = NULL ) const
+    {
+        return wxPropertyGridConstIterator( m_pState, flags, firstProp );
+    }
+
+    wxPropertyGridIterator GetIterator( int flags, int startPos )
+    {
+        return wxPropertyGridIterator( m_pState, flags, startPos );
+    }
+
+    wxPropertyGridConstIterator GetIterator( int flags, int startPos ) const
+    {
+        return wxPropertyGridConstIterator( m_pState, flags, startPos );
+    }
+    //@}
+
+    /** Returns id of first item, whether it is a category or property.
+        @param flags
+        @link iteratorflags List of iterator flags@endlink
+    */
+    wxPGProperty* GetFirst( int flags = wxPG_ITERATE_ALL )
+    {
+        wxPropertyGridIterator it( m_pState, flags, wxNullProperty, 1 );
+        return *it;
+    }
+
+    const wxPGProperty* GetFirst( int flags = wxPG_ITERATE_ALL ) const
+    {
+        return ((wxPropertyGridInterface*)this)->GetFirst(flags);
+    }
+
+    /** Returns id of property with given name (case-sensitive). If there is no
+        property with such name, returned property id is invalid ( i.e. it will return
+        false with IsOk method).
+        @remarks
+        - Sub-properties (i.e. properties which have parent that is not category or
+          root) can not be accessed globally by their name. Instead, use
+          "<property>.<subproperty>" in place of "<subproperty>".
+    */
+    wxPGProperty* GetProperty( const wxString& name ) const
+    {
+        return GetPropertyByName(name);
+    }
+
+    /** Returns map-like storage of property's attributes.
+        @remarks
+        Note that if extra style wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES is set,
+        then builtin-attributes are not included in the storage.
+    */
+    const wxPGAttributeStorage& GetPropertyAttributes( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(*((const wxPGAttributeStorage*)NULL));
+        return p->GetAttributes();
+    }
+
+    /** Adds to 'targetArr' pointers to properties that have given
+        flags 'flags' set. However, if 'inverse' is set to true, then
+        only properties without given flags are stored.
+        @param flags
+        Property flags to use.
+        @param iterFlags
+        Iterator flags to use. Default is everything expect private children.
+    */
+    void GetPropertiesWithFlag( wxArrayPGProperty* targetArr,
+                                wxPGProperty::FlagType flags,
+                                bool inverse = false,
+                                int iterFlags = (wxPG_ITERATE_PROPERTIES|wxPG_ITERATE_HIDDEN|wxPG_ITERATE_CATEGORIES) ) const;
+
+    /** Returns value of given attribute. If none found, returns NULL-variant.
+    */
+    wxVariant GetPropertyAttribute( wxPGPropArg id, const wxString& attrName ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullVariant)
+        return p->GetAttribute(attrName);
+    }
+
+    /** Returns pointer of property's nearest parent category. If no category
+        found, returns NULL.
+    */
+    wxPropertyCategory* GetPropertyCategory( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_CONST_CALL_PROLOG_RETVAL(NULL)
+        return m_pState->GetPropertyCategory(p);
+    }
+
+    /** Returns client data (void*) of a property. */
+    void* GetPropertyClientData( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL)
+        return p->GetClientData();
+    }
+
+    /** Returns first property which label matches given string. NULL if none found.
+        Note that this operation is extremely slow when compared to GetPropertyByName().
+    */
+    wxPGProperty* GetPropertyByLabel( const wxString& label ) const;
+
+    /** Returns property with given name. NULL if none found.
+    */
+    wxPGProperty* GetPropertyByName( const wxString& name ) const;
+
+    /** Returns child property 'subname' of property 'name'. Same as
+        calling GetPropertyByName("name.subname"), albeit slightly faster.
+    */
+    wxPGProperty* GetPropertyByName( const wxString& name, const wxString& subname ) const;
+
+    /** Returns writable reference to property's list of choices (and relevant
+        values). If property does not have any choices, will return reference
+        to an invalid set of choices that will return false on IsOk call.
+    */
+    wxPGChoices& GetPropertyChoices( wxPGPropArg id );
+
+    /** Returns property's editor. */
+    const wxPGEditor* GetPropertyEditor( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL)
+        return p->GetEditorClass();
+    }
+
+    /** Returns help string associated with a property. */
+    wxString GetPropertyHelpString( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
+        return p->GetHelpString();
+    }
+
+    /** Returns property's custom value image (NULL of none). */
+    wxBitmap* GetPropertyImage( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL)
+        return p->GetValueImage();
+    }
+
+    /** Returns property's position under its parent. */
+    unsigned int GetPropertyIndex( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(INT_MAX)
+        return p->GetIndexInParent();
+    }
+
+    /** Returns label of a property. */
+    const wxString& GetPropertyLabel( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
+        return p->GetLabel();
+    }
+
+    /** Returns name of a property, by which it is globally accessible. */
+    wxString GetPropertyName( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
+        return p->GetName();
+    }
+
+    /** Returns parent item of a property. */
+    wxPGProperty* GetPropertyParent( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
+        return p->GetParent();
+    }
+
+    /** Returns validator of a property as a reference, which you
+        can pass to any number of SetPropertyValidator.
+    */
+    wxValidator* GetPropertyValidator( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL)
+        return p->GetValidator();
+    }
+
+    /** Returns value as wxVariant. To get wxObject pointer from it,
+        you will have to use WX_PG_VARIANT_TO_WXOBJECT(VARIANT,CLASSNAME) macro.
+
+        If property value is unspecified, Null variant is returned.
+    */
+    wxVariant GetPropertyValue( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxVariant())
+        return p->GetValue();
+    }
+
+    wxString GetPropertyValueAsString( wxPGPropArg id ) const;
+    long GetPropertyValueAsLong( wxPGPropArg id ) const;
+    unsigned long GetPropertyValueAsULong( wxPGPropArg id ) const
+    {
+        return (unsigned long) GetPropertyValueAsLong(id);
+    }
+    int GetPropertyValueAsInt( wxPGPropArg id ) const { return (int)GetPropertyValueAsLong(id); }
+    bool GetPropertyValueAsBool( wxPGPropArg id ) const;
+    double GetPropertyValueAsDouble( wxPGPropArg id ) const;
+    wxObject* GetPropertyValueAsWxObjectPtr( wxPGPropArg id ) const;
+    void* GetPropertyValueAsVoidPtr( wxPGPropArg id ) const;
+
+    wxArrayString GetPropertyValueAsArrayString( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("arrstring"), wxArrayString())
+        return p->m_value.GetArrayString();
+    }
+
+    wxPoint GetPropertyValueAsPoint( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxPoint"), wxPoint())
+        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxPoint);
+    }
+
+    wxSize GetPropertyValueAsSize( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxSize"), wxSize())
+        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxSize);
+    }
+
+    wxLongLong_t GetPropertyValueAsLongLong( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(wxT("wxLongLong"), (long) GetPropertyValueAsLong(id))
+        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxLongLong).GetValue();
+    }
+
+    wxULongLong_t GetPropertyValueAsULongLong( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(wxT("wxULongLong"), (unsigned long) GetPropertyValueAsULong(id))
+        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxULongLong).GetValue();
+    }
+
+    wxArrayInt GetPropertyValueAsArrayInt( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxArrayInt"), wxArrayInt())
+        wxArrayInt arr = WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxArrayInt);
+        return arr;
+    }
+
+    wxDateTime GetPropertyValueAsDateTime( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxDateTime())
+
+        if ( wxStrcmp(p->m_value.GetType(), wxT("datetime")) != 0 )
+        {
+            wxPGGetFailed(p, wxT("datetime"));
+            return wxDateTime();
+        }
+        return p->m_value.GetDateTime();
+    }
+
+    /** Returns a wxVariant list containing wxVariant versions of all
+        property values. Order is not guaranteed.
+        @param flags
+        Use wxPG_KEEP_STRUCTURE to retain category structure; each sub
+        category will be its own wxVariantList of wxVariant.
+        Use wxPG_INC_ATTRIBUTES to include property attributes as well.
+        Each attribute will be stored as list variant named "@@<propname>@@attr."
+        @remarks
+    */
+    wxVariant GetPropertyValues( const wxString& listname = wxEmptyString,
+        wxPGProperty* baseparent = NULL, long flags = 0 ) const
+    {
+        return m_pState->DoGetPropertyValues(listname, baseparent, flags);
+    }
+
+    wxString GetPropertyValueType( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
+        return p->GetValueType();
+    }
+
+    /** Returns currently selected property. */
+    wxPGProperty* GetSelection() const
+    {
+        return m_pState->GetSelection();
+    }
+
+    /** Similar to GetIterator(), but instead returns wxPGVIterator instance,
+        which can be useful for forward-iterating through arbitrary property
+        containers.
+
+        @param flags
+        See @ref propgrid_iterator_flags.
+    */
+    virtual wxPGVIterator GetVIterator( int flags ) const;
+
+    /** Hides or reveals a property.
+        @param hide
+        If true, hides property, otherwise reveals it.
+        @param flags
+        By default changes are applied recursively. Set this paramter wxPG_DONT_RECURSE to prevent this.
+    */
+    bool HideProperty( wxPGPropArg id, bool hide = true, int flags = wxPG_RECURSE );
+
+    /** Initializes *all* property types. Causes references to most object
+        files in the library, so calling this may cause significant increase
+        in executable size when linking with static library.
+    */
+    static void InitAllTypeHandlers();
+
+    //@{
+    /** Inserts property to the property container.
+
+        @param priorThis
+        New property is inserted just prior to this. Available only
+        in the first variant. There are two versions of this function
+        to allow this parameter to be either an id or name to
+        a property.
+
+        @param newproperty
+        Pointer to the inserted property. wxPropertyGrid will take
+        ownership of this object.
+
+        @param parent
+        New property is inserted under this category. Available only
+        in the second variant. There are two versions of this function
+        to allow this parameter to be either an id or name to
+        a property.
+
+        @param index
+        Index under category. Available only in the second variant.
+        If index is < 0, property is appended in category.
+
+        @return
+        Returns id for the property,
+
+        @remarks
+
+        - wxPropertyGrid takes the ownership of the property pointer.
+
+        - While Append may be faster way to add items, make note that when
+          both types of data storage (categoric and
+          non-categoric) are active, Insert becomes even more slow. This is
+          especially true if current mode is non-categoric.
+
+        Example of use:
+
+        @code
+
+            // append category
+            wxPGProperty* my_cat_id = propertygrid->Append( new wxPropertyCategory("My Category") );
+
+            ...
+
+            // insert into category - using second variant
+            wxPGProperty* my_item_id_1 = propertygrid->Insert( my_cat_id, 0, new wxStringProperty("My String 1") );
+
+            // insert before to first item - using first variant
+            wxPGProperty* my_item_id_2 = propertygrid->Insert( my_item_id, new wxStringProperty("My String 2") );
+
+        @endcode
+
+    */
+    wxPGProperty* Insert( wxPGPropArg priorThis, wxPGProperty* newproperty );
+    wxPGProperty* Insert( wxPGPropArg parent, int index, wxPGProperty* newproperty );
+    //@}
+
+    /** Returns true if property is a category. */
+    bool IsPropertyCategory( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return p->IsCategory();
+    }
+
+    /** Inserts choice to a property that can accept one.
+
+        See AddPropertyChoice for more details.
+    */
+    void InsertPropertyChoice( wxPGPropArg id, const wxString& label, int index, int value = wxPG_INVALID_VALUE );
+
+    /** Returns true if property is enabled. */
+    bool IsPropertyEnabled( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return (!(p->GetFlags() & wxPG_PROP_DISABLED))?true:false;
+    }
+
+    /** Returns true if given property is expanded. Naturally, always returns false
+        for properties that cannot be expanded.
+    */
+    bool IsPropertyExpanded( wxPGPropArg id ) const;
+
+    /** Returns true if property has been modified after value set or modify flag
+        clear by software.
+    */
+    bool IsPropertyModified( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return ( (p->GetFlags() & wxPG_PROP_MODIFIED) ? true : false );
+    }
+
+    /** Returns true if property is shown (ie. hideproperty with true not called for it). */
+    bool IsPropertyShown( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return (!(p->GetFlags() & wxPG_PROP_HIDDEN))?true:false;
+    }
+
+    /** Returns true if property value is set to unspecified.
+    */
+    bool IsPropertyValueUnspecified( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+        return p->IsValueUnspecified();
+    }
+
+    /** Disables (limit = true) or enables (limit = false) wxTextCtrl editor of a property,
+        if it is not the sole mean to edit the value.
+    */
+    void LimitPropertyEditing( wxPGPropArg id, bool limit = true );
+
+    /** If state is shown in it's grid, refresh it now.
+    */
+    virtual void RefreshGrid();
+
+    /** Initializes additional property editors (SpinCtrl etc.). Causes references
+        to most object files in the library, so calling this may cause significant increase
+        in executable size when linking with static library.
+    */
+    static void RegisterAdditionalEditors();
+
+    /** Replaces property with id with newly created property. For example,
+        this code replaces existing property named "Flags" with one that
+        will have different set of items:
+        @code
+            pg->ReplaceProperty("Flags",
+                wxFlagsProperty("Flags", wxPG_LABEL, newItems))
+        @endcode
+        For more info, see wxPropertyGrid::Insert.
+    */
+    wxPGProperty* ReplaceProperty( wxPGPropArg id, wxPGProperty* property );
+
+
+    /** @anchor propgridinterface_editablestate_flags
+
+        Flags for wxPropertyGridInterface::SaveEditableState() and
+        wxPropertyGridInterface::RestoreEditableState().
+    */
+    enum EditableStateFlags
+    {
+        /** Include selected property. */
+        SelectionState   = 0x01,
+        /** Include expanded/collapsed property information. */
+        ExpandedState    = 0x02,
+        /** Include scrolled position. */
+        ScrollPosState   = 0x04,
+        /** Include selected page information. Only applies to wxPropertyGridManager. */
+        PageState        = 0x08,
+        /** Include splitter position. Stored for each page. */
+        SplitterPosState = 0x10,
+
+        /** Include all supported user editable state information. This is usually the default value. */
+        AllStates        = SelectionState | ExpandedState | ScrollPosState | PageState | SplitterPosState
+    };
+
+    /** Restores user-editable state. See also wxPropertyGridInterface::SaveEditableState().
+
+        @param src
+        String generated by SaveEditableState.
+
+        @param restoreStates
+        Which parts to restore from source string. See @ref propgridinterface_editablestate_flags
+        "list of editable state flags".
+
+        @return
+        False if there was problem reading the string.
+
+        @remarks
+        If some parts of state (such as scrolled or splitter position) fail to restore correctly,
+        please make sure that you call this function after wxPropertyGrid size has been set
+        (this may sometimes be tricky when sizers are used).
+    */
+    bool RestoreEditableState( const wxString& src,
+                               int restoreStates = AllStates );
+
+    /** Used to acquire user-editable state (selected property, expanded properties, scrolled position,
+        splitter positions).
+
+        @param includedStates
+        Which parts of state to include. See @ref propgridinterface_editablestate_flags
+        "list of editable state flags".
+    */
+    wxString SaveEditableState( int includedStates = AllStates ) const;
+
+    /** Lets user to set the strings listed in the choice dropdown of a wxBoolProperty.
+        Defaults are "True" and "False", so changing them to, say, "Yes" and "No" may
+        be useful in some less technical applications.
+    */
+    static void SetBoolChoices( const wxString& trueChoice, const wxString& falseChoice );
+
+    /** Sets or clears flag(s) of all properties in given array.
+        @param flags
+        Property flags to set or clear.
+        @param inverse
+        Set to true if you want to clear flag instead of setting them.
+    */
+    void SetPropertiesFlag( const wxArrayPGProperty& srcArr, wxPGProperty::FlagType flags,
+                            bool inverse = false );
+
+    /** Sets an attribute for this property.
+        @param name
+        Text identifier of attribute. See @ref propgrid_property_attributes.
+        @param value
+        Value of attribute.
+        @param argFlags
+        Optional. Use wxPG_RECURSE to set the attribute to child properties recursively.
+    */
+    void SetPropertyAttribute( wxPGPropArg id, const wxString& attrName, wxVariant value, long argFlags = 0 )
+    {
+        DoSetPropertyAttribute(id,attrName,value,argFlags);
+    }
+
+    /** Sets attributes from a wxPGAttributeStorage.
+    */
+    void SetPropertyAttributes( wxPGPropArg id, const wxPGAttributeStorage& attributes )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetAttributes(attributes);
+    }
+
+    /** Sets text, bitmap, and colours for given column's cell.
+
+        @remarks
+        - You can set label cell by setting column to 0.
+        - You can use wxPG_LABEL as text to use default text for column.
+    */
+    void SetPropertyCell( wxPGPropArg id,
+                          int column,
+                          const wxString& text = wxEmptyString,
+                          const wxBitmap& bitmap = wxNullBitmap,
+                          const wxColour& fgCol = wxNullColour,
+                          const wxColour& bgCol = wxNullColour )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetCell( column, new wxPGCell(text, bitmap, fgCol, bgCol) );
+    }
+
+    /** Set choices of a property to specified set of labels and values.
+
+        @remarks
+        This operation clears the property value.
+    */
+    void SetPropertyChoices( wxPGPropArg id, wxPGChoices& choices)
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetChoices(choices);
+    }
+
+
+    /** If property's set of choices is shared, then calling this method converts
+        it to private.
+    */
+    void SetPropertyChoicesExclusive( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetChoicesExclusive();
+    }
+
+    /** Sets client data (void*) of a property.
+        @remarks
+        This untyped client data has to be deleted manually.
+    */
+    void SetPropertyClientData( wxPGPropArg id, void* clientData )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetClientData(clientData);
+    }
+
+    /** Sets editor for a property.
+
+        @param editor
+        For builtin editors, use wxPGEditor_X, where X is builtin editor's
+        name (TextCtrl, Choice, etc. see wxPGEditor documentation for full list).
+
+        For custom editors, use pointer you received from wxPropertyGrid::RegisterEditorClass().
+    */
+    void SetPropertyEditor( wxPGPropArg id, const wxPGEditor* editor )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        wxCHECK_RET( editor, wxT("unknown/NULL editor") );
+        p->SetEditor(editor);
+        RefreshProperty(p);
+    }
+
+    /** Sets editor control of a property. As editor argument, use
+        editor name string, such as "TextCtrl" or "Choice".
+    */
+    void SetPropertyEditor( wxPGPropArg id, const wxString& editorName )
+    {
+        SetPropertyEditor(id,GetEditorByName(editorName));
+    }
+
+    /** Sets label of a property.
+        @remarks
+        This is the only way to set property's name. There is not
+        wxPGProperty::SetLabel() method.
+    */
+    void SetPropertyLabel( wxPGPropArg id, const wxString& newproplabel );
+
+    /** Set modified status of a property and all its children.
+    */
+    void SetPropertyModifiedStatus( wxPGPropArg id, bool modified )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetModifiedStatus(modified);
+    }
+
+    /** Sets property (and, recursively, its children) to have read-only value. In other words,
+        user cannot change the value in the editor, but they can still copy it.
+        @remarks
+        This is mainly for use with textctrl editor. Not all other editors fully
+        support it.
+        @param flags
+        By default changes are applied recursively. Set this paramter wxPG_DONT_RECURSE to prevent this.
+    */
+    void SetPropertyReadOnly( wxPGPropArg id, bool set = true, int flags = wxPG_RECURSE )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        if ( flags & wxPG_RECURSE )
+            p->SetFlagRecursively(wxPG_PROP_READONLY, set);
+        else
+            p->SetFlag(wxPG_PROP_READONLY);
+    }
+
+    /** Sets property's value to unspecified. If it has children (it may be category),
+        then the same thing is done to them.
+    */
+    void SetPropertyValueUnspecified( wxPGPropArg id );
+
+    /** Sets various property values from a list of wxVariants. If property with
+        name is missing from the grid, new property is created under given default
+        category (or root if omitted).
+    */
+    void SetPropertyValues( const wxVariantList& list, wxPGPropArg defaultCategory = wxNullProperty )
+    {
+        wxPGProperty *p;
+        if ( defaultCategory.HasName() ) p = defaultCategory.GetPtr(this);
+        else p = defaultCategory.GetPtr0();
+        m_pState->DoSetPropertyValues(list, p);
+    }
+
+    void SetPropertyValues( const wxVariant& list, wxPGPropArg defaultCategory = wxNullProperty )
+    {
+        SetPropertyValues(list.GetList(),defaultCategory);
+    }
+
+    /** Associates the help string with property.
+        @remarks
+        By default, text is shown either in the manager's "description"
+        text box or in the status bar. If extra window style wxPG_EX_HELP_AS_TOOLTIPS
+        is used, then the text will appear as a tooltip.
+    */
+    void SetPropertyHelpString( wxPGPropArg id, const wxString& helpString )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetHelpString(helpString);
+    }
+
+    /** Set wxBitmap in front of the value.
+        @remarks
+        - Bitmap will be scaled to a size returned by wxPropertyGrid::GetImageSize();
+    */
+    void SetPropertyImage( wxPGPropArg id, wxBitmap& bmp )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetValueImage(bmp);
+        RefreshProperty(p);
+    }
+
+    /** Sets max length of property's text.
+    */
+    bool SetPropertyMaxLength( wxPGPropArg id, int maxLen );
+
+    /** Sets validator of a property.
+    */
+    void SetPropertyValidator( wxPGPropArg id, const wxValidator& validator )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        p->SetValidator(validator);
+    }
+
+    /** Sets value (long integer) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, long value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+
+    /** Sets value (integer) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, int value )
+    {
+        wxVariant v((long)value);
+        SetPropVal( id, v );
+    }
+    /** Sets value (floating point) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, double value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+    /** Sets value (bool) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, bool value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+    void SetPropertyValue( wxPGPropArg id, const wxChar* value )
+    {
+        SetPropertyValueString( id, wxString(value) );
+    }
+    void SetPropertyValue( wxPGPropArg id, const wxString& value )
+    {
+        SetPropertyValueString( id, value );
+    }
+
+    /** Sets value (wxArrayString) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, const wxArrayString& value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+
+    void SetPropertyValue( wxPGPropArg id, const wxDateTime& value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+
+    /** Sets value (wxObject*) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, wxObject* value )
+    {
+        wxVariant v(value);
+        SetPropVal( id, v );
+    }
+
+    void SetPropertyValue( wxPGPropArg id, wxObject& value )
+    {
+        wxVariant v(&value);
+        SetPropVal( id, v );
+    }
+
+    /** Sets value (wxPoint&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, const wxPoint& value )
+    {
+        wxVariant v = WXVARIANT(value);
+        SetPropVal( id, v );
+    }
+    /** Sets value (wxSize&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, const wxSize& value )
+    {
+        wxVariant v = WXVARIANT(value);
+        SetPropVal( id, v );
+    }
+    /** Sets value (wxLongLong&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, wxLongLong_t value )
+    {
+        wxVariant v = WXVARIANT(wxLongLong(value));
+        SetPropVal( id, v );
+    }
+    /** Sets value (wxULongLong&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, wxULongLong_t value )
+    {
+        wxVariant v = WXVARIANT(wxULongLong(value));
+        SetPropVal( id, v );
+    }
+    /** Sets value (wxArrayInt&) of a property.
+    */
+    void SetPropertyValue( wxPGPropArg id, const wxArrayInt& value )
+    {
+        wxVariant v = WXVARIANT(value);
+        SetPropVal( id, v );
+    }
+
+    /** Sets value (wxString) of a property.
+
+        @remarks
+        This method uses wxPGProperty::SetValueFromString, which all properties
+        should implement. This means that there should not be a type error,
+        and instead the string is converted to property's actual value type.
+    */
+    void SetPropertyValueString( wxPGPropArg id, const wxString& value );
+
+    /** Sets value (wxVariant&) of a property.
+    
+        @remarks
+        Use wxPropertyGrid::ChangePropertyValue() instead if you need to run through
+        validation process and send property change event.
+    */
+    void SetPropertyValue( wxPGPropArg id, wxVariant value )
+    {
+        SetPropVal( id, value );
+    }
+
+    /** Adjusts how wxPropertyGrid behaves when invalid value is entered
+        in a property.
+        @param vfbFlags
+        See @link vfbflags list of valid flags values@endlink
+    */
+    void SetValidationFailureBehavior( int vfbFlags );
+
+    // GetPropertyByName With nice assertion error message.
+    wxPGProperty* GetPropertyByNameA( const wxString& name ) const;
+
+    static wxPGEditor* GetEditorByName( const wxString& editorName );
+    
+    virtual void RefreshProperty( wxPGProperty* p ) = 0;
+};
+
diff --git a/interface/wx/propgrid/propgridpagestate.h b/interface/wx/propgrid/propgridpagestate.h
new file mode 100644 (file)
index 0000000..af2ee8d
--- /dev/null
@@ -0,0 +1,170 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        property.h
+// Purpose:     interface of wxPGProperty
+// Author:      wxWidgets team
+// RCS-ID:      $Id:
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+
+/** @section propgrid_hittestresult wxPropertyGridHitTestResult
+
+    A return value from wxPropertyGrid::HitTest(),
+    contains all you need to know about an arbitrary location on the grid.
+*/
+struct wxPropertyGridHitTestResult
+{
+public:
+
+    wxPGProperty* GetProperty() const { return property; }
+
+    /** Column. -1 for margin. */
+    int             column;
+
+    /** Index of splitter hit, -1 for none. */
+    int             splitter;
+
+    /** If splitter hit, offset to that */
+    int             splitterHitOffset;
+
+private:
+    /** Property. NULL if empty space below properties was hit */
+    wxPGProperty*   property;
+};
+
+// -----------------------------------------------------------------------
+
+#define wxPG_IT_CHILDREN(A)         (A<<16)
+
+/** @section propgrid_iterator_flags wxPropertyGridIterator Flags
+    @{
+
+    NOTES: At lower 16-bits, there are flags to check if item will be included. At higher
+      16-bits, there are same flags, but to instead check if children will be included.
+*/
+
+enum wxPG_ITERATOR_FLAGS
+{
+
+/** Iterate through 'normal' property items (does not include children of aggregate or hidden items by default).
+*/
+wxPG_ITERATE_PROPERTIES             = (wxPG_PROP_PROPERTY|wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE| \
+                                       wxPG_PROP_COLLAPSED|((wxPG_PROP_MISC_PARENT|wxPG_PROP_CATEGORY)<<16)),
+
+/** Iterate children of collapsed parents, and individual items that are hidden.
+*/
+wxPG_ITERATE_HIDDEN                 = (wxPG_PROP_HIDDEN|wxPG_IT_CHILDREN(wxPG_PROP_COLLAPSED)),
+
+/** Iterate children of parent that is an aggregate property (ie. has fixed children).
+*/
+wxPG_ITERATE_FIXED_CHILDREN         = (wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE)|wxPG_ITERATE_PROPERTIES),
+
+/** Iterate categories. Note that even without this flag, children of categories
+    are still iterated through.
+*/
+wxPG_ITERATE_CATEGORIES             = (wxPG_PROP_CATEGORY|wxPG_IT_CHILDREN(wxPG_PROP_CATEGORY)|wxPG_PROP_COLLAPSED),
+
+wxPG_ITERATE_ALL_PARENTS            = (wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE|wxPG_PROP_CATEGORY),
+
+wxPG_ITERATE_ALL_PARENTS_RECURSIVELY        = (wxPG_ITERATE_ALL_PARENTS|wxPG_IT_CHILDREN(wxPG_ITERATE_ALL_PARENTS)),
+
+wxPG_ITERATOR_FLAGS_ALL             = (wxPG_PROP_PROPERTY|wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE| \
+                                      wxPG_PROP_HIDDEN|wxPG_PROP_CATEGORY|wxPG_PROP_COLLAPSED),
+
+wxPG_ITERATOR_MASK_OP_ITEM          = wxPG_ITERATOR_FLAGS_ALL,
+
+wxPG_ITERATOR_MASK_OP_PARENT        = wxPG_ITERATOR_FLAGS_ALL,  // (wxPG_PROP_MISC_PARENT|wxPG_PROP_AGGREGATE|wxPG_PROP_CATEGORY)
+
+/** Combines all flags needed to iterate through visible properties
+    (ie. hidden properties and children of collapsed parents are skipped).
+*/
+wxPG_ITERATE_VISIBLE                = (wxPG_ITERATE_PROPERTIES|wxPG_PROP_CATEGORY|wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE)),
+
+/** Iterate all items.
+*/
+wxPG_ITERATE_ALL                    = (wxPG_ITERATE_VISIBLE|wxPG_ITERATE_HIDDEN),
+
+/** Iterate through individual properties (ie. categories and children of
+    aggregate properties are skipped).
+*/
+wxPG_ITERATE_NORMAL                 = (wxPG_ITERATE_PROPERTIES|wxPG_ITERATE_HIDDEN),
+
+/** Default iterator flags.
+*/
+wxPG_ITERATE_DEFAULT                = wxPG_ITERATE_NORMAL
+
+};
+
+/** @}
+*/
+
+
+/** @section propgrid_iterator_class wxPropertyGridIterator
+
+    Preferable way to iterate through contents of wxPropertyGrid,
+    wxPropertyGridManager, and wxPropertyGridPage.
+
+    See wxPropertyGridInterface::GetIterator() for more information about usage.
+
+    @library{wxpropgrid}
+    @category{propgrid}
+*/
+class wxPropertyGridIterator : public wxPropertyGridIteratorBase
+{
+public:
+
+    void Assign( const wxPropertyGridIteratorBase& it );
+
+    bool AtEnd() const { return m_property == NULL; }
+
+    /** Get current property.
+    */
+    wxPGProperty* GetProperty() const { return m_property; }
+
+    /** Iterate to the next property.
+    */
+    void Next( bool iterateChildren = true );
+
+    /** Iterate to the previous property.
+    */
+    void Prev();
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+/** @section propgrid_viterator_class wxPGVIterator
+
+    Abstract implementation of a simple iterator. Can only be used
+    to iterate in forward order, and only through the entire container.
+    Used to have functions dealing with all properties work with both
+    wxPropertyGrid and wxPropertyGridManager.
+*/
+class wxPGVIterator
+{
+public:
+    wxPGVIterator() { m_pIt = NULL; }
+    wxPGVIterator( wxPGVIteratorBase* obj ) { m_pIt = obj; }
+    ~wxPGVIterator() { UnRef(); }
+    void UnRef() { if (m_pIt) m_pIt->DecRef(); }
+    wxPGVIterator( const wxPGVIterator& it )
+    {
+        m_pIt = it.m_pIt;
+        m_pIt->IncRef();
+    }
+    const wxPGVIterator& operator=( const wxPGVIterator& it )
+    {
+        UnRef();
+        m_pIt = it.m_pIt;
+        m_pIt->IncRef();
+        return *this;
+    }
+    void Next() { m_pIt->Next(); }
+    bool AtEnd() const { return m_pIt->m_it.AtEnd(); }
+    wxPGProperty* GetProperty() const { return m_pIt->m_it.GetProperty(); }
+protected:
+    wxPGVIteratorBase*  m_pIt;
+};
+
+
index 4ccf975a22e03d1e338a4ac0e7c0b982af12cdf5..96b9cb22a98b91bcdd00494319ca3e1c3f029434 100755 (executable)
@@ -1 +1 @@
-@ctags.exe --totals --language-force=c++ --c++-types=+px -I WXDLLEXPORT -I WXDLLIMPEXP_DATA_BASE+ -I WXDLLIMPEXP_BASE -I WXDLLIMPEXP_DATA_CORE+ -I WXDLLIMPEXP_CORE -I WXDLLIMPEXP_DATA_NET+ -I WXDLLIMPEXP_NET -I WXDLLIMPEXP_DATA_ADV+ -I WXDLLIMPEXP_ADV -I WXDLLIMPEXP_DATA_QA+ -I WXDLLIMPEXP_QA -I WXDLLIMPEXP_DATA_ODBC+ -I WXDLLIMPEXP_ODBC -I WXDLLIMPEXP_DATA_DBGRID+ -I WXDLLIMPEXP_DBGRID -I WXDLLIMPEXP_DATA_HTML+ -I WXDLLIMPEXP_HTML -I WXDLLIMPEXP_DATA_GL+ -I WXDLLIMPEXP_GL -I WXDLLIMPEXP_DATA_XML+ -I WXDLLIMPEXP_XML -I WXDLLIMPEXP_DATA_XRC+ -I WXDLLIMPEXP_XRC -I WXDLLIMPEXP_DATA_AUI+ -I WXDLLIMPEXP_AUI -I WXDLLIMPEXP_DATA_RICHTEXT+ -I WXDLLIMPEXP_RICHTEXT -I WXDLLIMPEXP_DATA_MEDIA+ -I WXDLLIMPEXP_MEDIA include/wx/*.h include/wx/msw/*.h include/wx/msw/ole/*.h include/wx/generic/*.h include/wx/html/*.h include/wx/protocol/*.h include/wx/richtext/*.h include/wx/xml/*.h include/wx/xrc/*.h src/common/*.cpp src/generic/*.cpp src/msw/*.cpp src/msw/ole/*.cpp src/html/*.cpp src/richtext/*.cpp src/xml/*.cpp src/xrc/*.cpp
+@ctags.exe --totals --language-force=c++ --c++-types=+px -I WXDLLEXPORT -I WXDLLIMPEXP_DATA_BASE+ -I WXDLLIMPEXP_BASE -I WXDLLIMPEXP_DATA_CORE+ -I WXDLLIMPEXP_CORE -I WXDLLIMPEXP_DATA_NET+ -I WXDLLIMPEXP_NET -I WXDLLIMPEXP_DATA_ADV+ -I WXDLLIMPEXP_ADV -I WXDLLIMPEXP_DATA_QA+ -I WXDLLIMPEXP_QA -I WXDLLIMPEXP_DATA_ODBC+ -I WXDLLIMPEXP_ODBC -I WXDLLIMPEXP_DATA_DBGRID+ -I WXDLLIMPEXP_DBGRID -I WXDLLIMPEXP_DATA_HTML+ -I WXDLLIMPEXP_HTML -I WXDLLIMPEXP_DATA_GL+ -I WXDLLIMPEXP_GL -I WXDLLIMPEXP_DATA_XML+ -I WXDLLIMPEXP_XML -I WXDLLIMPEXP_DATA_XRC+ -I WXDLLIMPEXP_XRC -I WXDLLIMPEXP_DATA_AUI+ -I WXDLLIMPEXP_AUI -I WXDLLIMPEXP_DATA_PROPGRID+ -I WXDLLIMPEXP_PROPGRID -I WXDLLIMPEXP_DATA_RICHTEXT+ -I WXDLLIMPEXP_RICHTEXT -I WXDLLIMPEXP_DATA_MEDIA+ -I WXDLLIMPEXP_MEDIA include/wx/*.h include/wx/msw/*.h include/wx/msw/ole/*.h include/wx/generic/*.h include/wx/html/*.h include/wx/protocol/*.h include/wx/richtext/*.h include/wx/xml/*.h include/wx/xrc/*.h src/common/*.cpp src/generic/*.cpp src/msw/*.cpp src/msw/ole/*.cpp src/html/*.cpp src/richtext/*.cpp src/xml/*.cpp src/xrc/*.cpp
index 79476b1407c2fdfb7fd4d002846e0fbd253ebf4e..a2ea205f0a06cc3486fccec115e9d2fc0e30b12d 100644 (file)
@@ -24,6 +24,7 @@ ctags --totals --c++-kinds=+px --language-force=c++ \
        -I WXDLLIMPEXP_DATA_MEDIA+ -I WXDLLIMPEXP_MEDIA \
        -I WXDLLIMPEXP_DATA_NET+ -I WXDLLIMPEXP_NET \
        -I WXDLLIMPEXP_DATA_ODBC+ -I WXDLLIMPEXP_ODBC \
        -I WXDLLIMPEXP_DATA_MEDIA+ -I WXDLLIMPEXP_MEDIA \
        -I WXDLLIMPEXP_DATA_NET+ -I WXDLLIMPEXP_NET \
        -I WXDLLIMPEXP_DATA_ODBC+ -I WXDLLIMPEXP_ODBC \
+       -I WXDLLIMPEXP_DATA_PROPGRID+ -I WXDLLIMPEXP_PROPGRID \
        -I WXDLLIMPEXP_DATA_QA+ -I WXDLLIMPEXP_QA \
        -I WXDLLIMPEXP_DATA_RICHTEXT+ -I WXDLLIMPEXP_RICHTEXT \
        -I WXDLLIMPEXP_DATA_STC+ -I WXDLLIMPEXP_STC \
        -I WXDLLIMPEXP_DATA_QA+ -I WXDLLIMPEXP_QA \
        -I WXDLLIMPEXP_DATA_RICHTEXT+ -I WXDLLIMPEXP_RICHTEXT \
        -I WXDLLIMPEXP_DATA_STC+ -I WXDLLIMPEXP_STC \
@@ -36,6 +37,7 @@ ctags --totals --c++-kinds=+px --language-force=c++ \
        include/wx/$1/*.h \
        include/wx/$1/private/*.h \
        include/wx/html/*.h \
        include/wx/$1/*.h \
        include/wx/$1/private/*.h \
        include/wx/html/*.h \
+       include/wx/propgrid/*.h \
        include/wx/protocol/*.h \
        include/wx/richtext/*.h \
        include/wx/xml/*.h \
        include/wx/protocol/*.h \
        include/wx/richtext/*.h \
        include/wx/xml/*.h \
diff --git a/samples/propgrid/Makefile.in b/samples/propgrid/Makefile.in
new file mode 100644 (file)
index 0000000..dfa5fbc
--- /dev/null
@@ -0,0 +1,217 @@
+# =========================================================================
+#     This makefile was generated by
+#     Bakefile 0.2.3 (http://www.bakefile.org)
+#     Do not modify, all changes will be overwritten!
+# =========================================================================
+
+
+@MAKE_SET@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+INSTALL = @INSTALL@
+EXEEXT = @EXEEXT@
+WINDRES = @WINDRES@
+SETFILE = @SETFILE@
+NM = @NM@
+BK_DEPS = @BK_DEPS@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+LIBS = @LIBS@
+LDFLAGS_GUI = @LDFLAGS_GUI@
+CXX = @CXX@
+CXXFLAGS = @CXXFLAGS@
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+WX_LIB_FLAVOUR = @WX_LIB_FLAVOUR@
+TOOLKIT = @TOOLKIT@
+TOOLKIT_LOWERCASE = @TOOLKIT_LOWERCASE@
+TOOLKIT_VERSION = @TOOLKIT_VERSION@
+TOOLCHAIN_FULLNAME = @TOOLCHAIN_FULLNAME@
+EXTRALIBS = @EXTRALIBS@
+EXTRALIBS_GUI = @EXTRALIBS_GUI@
+EXTRALIBS_SDL = @EXTRALIBS_SDL@
+CXXWARNINGS = @CXXWARNINGS@
+HOST_SUFFIX = @HOST_SUFFIX@
+SAMPLES_RPATH_FLAG = @SAMPLES_RPATH_FLAG@
+SAMPLES_RPATH_POSTLINK = @SAMPLES_RPATH_POSTLINK@
+wx_top_builddir = @wx_top_builddir@
+
+### Variables: ###
+
+DESTDIR = 
+WX_RELEASE = 2.9
+WX_VERSION = $(WX_RELEASE).0
+LIBDIRNAME = $(wx_top_builddir)/lib
+PROPGRID_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \
+       $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \
+       -I$(srcdir) $(__DLLFLAG_p) -I$(srcdir)/../../samples $(CXXWARNINGS) \
+       $(CPPFLAGS) $(CXXFLAGS)
+PROPGRID_OBJECTS =  \
+       $(__propgrid_os2_lib_res) \
+       propgrid_propgrid.o \
+       propgrid_propgrid_minimal.o \
+       propgrid_sampleprops.o \
+       propgrid_tests.o \
+       $(__propgrid___win32rc)
+
+### Conditionally set variables: ###
+
+@COND_DEPS_TRACKING_0@CXXC = $(CXX)
+@COND_DEPS_TRACKING_1@CXXC = $(BK_DEPS) $(CXX)
+@COND_USE_PLUGINS_0@PLUGIN_ADV_EXTRALIBS = $(EXTRALIBS_SDL)
+@COND_USE_GUI_0@PORTNAME = base
+@COND_USE_GUI_1@PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION)
+@COND_TOOLKIT_MAC@WXBASEPORT = _carbon
+@COND_BUILD_DEBUG_DEBUG_FLAG_DEFAULT@WXDEBUGFLAG = d
+@COND_DEBUG_FLAG_1@WXDEBUGFLAG = d
+@COND_UNICODE_1@WXUNICODEFLAG = u
+@COND_WXUNIV_1@WXUNIVNAME = univ
+@COND_MONOLITHIC_0@EXTRALIBS_FOR_BASE = $(EXTRALIBS)
+@COND_MONOLITHIC_1@EXTRALIBS_FOR_BASE = $(EXTRALIBS) $(EXTRALIBS_GUI)
+@COND_MONOLITHIC_0@EXTRALIBS_FOR_GUI = $(EXTRALIBS_GUI)
+@COND_MONOLITHIC_1@EXTRALIBS_FOR_GUI = 
+@COND_PLATFORM_MAC_0@__propgrid___mac_setfilecmd = @true
+@COND_PLATFORM_MAC_1@__propgrid___mac_setfilecmd = \
+@COND_PLATFORM_MAC_1@  $(SETFILE) -t APPL propgrid$(EXEEXT)
+@COND_WXUNIV_1@__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
+@COND_WXUNIV_1@__WXUNIV_DEFINE_p_2 = --define __WXUNIVERSAL__
+@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
+@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_2 = --define wxNO_EXCEPTIONS
+@COND_USE_RTTI_0@__RTTI_DEFINE_p = -DwxNO_RTTI
+@COND_USE_RTTI_0@__RTTI_DEFINE_p_2 = --define wxNO_RTTI
+@COND_USE_THREADS_0@__THREAD_DEFINE_p = -DwxNO_THREADS
+@COND_USE_THREADS_0@__THREAD_DEFINE_p_2 = --define wxNO_THREADS
+@COND_SHARED_1@__DLLFLAG_p = -DWXUSINGDLL
+@COND_SHARED_1@__DLLFLAG_p_2 = --define WXUSINGDLL
+COND_PLATFORM_OS2_1___propgrid___os2_emxbindcmd = $(NM) propgrid$(EXEEXT) | if \
+       grep -q pmwin.763 ; then emxbind -ep propgrid$(EXEEXT) ; fi
+@COND_PLATFORM_OS2_1@__propgrid___os2_emxbindcmd = $(COND_PLATFORM_OS2_1___propgrid___os2_emxbindcmd)
+@COND_TOOLKIT_MSW@__RCDEFDIR_p_1 = --include-dir \
+@COND_TOOLKIT_MSW@     $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME)
+@COND_PLATFORM_OS2_1@__propgrid_os2_lib_res = \
+@COND_PLATFORM_OS2_1@  $(top_srcdir)/include/wx/os2/wx.res
+@COND_PLATFORM_MACOSX_1@__propgrid_app_Contents_PkgInfo___depname \
+@COND_PLATFORM_MACOSX_1@       = propgrid.app/Contents/PkgInfo
+@COND_PLATFORM_MACOSX_1@__propgrid_bundle___depname = propgrid_bundle
+@COND_TOOLKIT_MAC@____propgrid_BUNDLE_TGT_REF_DEP = \
+@COND_TOOLKIT_MAC@     $(__propgrid_app_Contents_PkgInfo___depname)
+@COND_TOOLKIT_OSX_CARBON@____propgrid_BUNDLE_TGT_REF_DEP \
+@COND_TOOLKIT_OSX_CARBON@      = $(__propgrid_app_Contents_PkgInfo___depname)
+@COND_TOOLKIT_OSX_COCOA@____propgrid_BUNDLE_TGT_REF_DEP \
+@COND_TOOLKIT_OSX_COCOA@       = $(__propgrid_app_Contents_PkgInfo___depname)
+@COND_TOOLKIT_OSX_IPHONE@____propgrid_BUNDLE_TGT_REF_DEP \
+@COND_TOOLKIT_OSX_IPHONE@      = $(__propgrid_app_Contents_PkgInfo___depname)
+@COND_TOOLKIT_COCOA@____propgrid_BUNDLE_TGT_REF_DEP = \
+@COND_TOOLKIT_COCOA@   $(__propgrid_app_Contents_PkgInfo___depname)
+COND_MONOLITHIC_0___WXLIB_PROPGRID_p = \
+       -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_MONOLITHIC_0@__WXLIB_PROPGRID_p = $(COND_MONOLITHIC_0___WXLIB_PROPGRID_p)
+COND_MONOLITHIC_0___WXLIB_ADV_p = \
+       -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_MONOLITHIC_0@__WXLIB_ADV_p = $(COND_MONOLITHIC_0___WXLIB_ADV_p)
+COND_MONOLITHIC_0___WXLIB_CORE_p = \
+       -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_MONOLITHIC_0@__WXLIB_CORE_p = $(COND_MONOLITHIC_0___WXLIB_CORE_p)
+COND_MONOLITHIC_0___WXLIB_BASE_p = \
+       -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_MONOLITHIC_0@__WXLIB_BASE_p = $(COND_MONOLITHIC_0___WXLIB_BASE_p)
+@COND_PLATFORM_WIN32_1@__propgrid___win32rc = propgrid_sample_rc.o
+COND_MONOLITHIC_1___WXLIB_MONO_p = \
+       -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_MONOLITHIC_1@__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p)
+@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@__LIB_TIFF_p \
+@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ = \
+@COND_USE_GUI_1_WXUSE_LIBTIFF_BUILTIN@ -lwxtiff$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@__LIB_JPEG_p \
+@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@ = \
+@COND_USE_GUI_1_WXUSE_LIBJPEG_BUILTIN@ -lwxjpeg$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@__LIB_PNG_p \
+@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@  = \
+@COND_USE_GUI_1_WXUSE_LIBPNG_BUILTIN@  -lwxpng$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_WXUSE_ZLIB_BUILTIN@__LIB_ZLIB_p = \
+@COND_WXUSE_ZLIB_BUILTIN@      -lwxzlib$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p = \
+       -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+@COND_WXUSE_REGEX_BUILTIN@__LIB_REGEX_p = $(COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p)
+@COND_WXUSE_EXPAT_BUILTIN@__LIB_EXPAT_p = \
+@COND_WXUSE_EXPAT_BUILTIN@     -lwxexpat$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX)
+
+### Targets: ###
+
+all: propgrid$(EXEEXT) $(__propgrid_bundle___depname)
+
+install: all
+
+uninstall: 
+
+install-strip: install
+
+clean: 
+       rm -rf ./.deps ./.pch
+       rm -f ./*.o
+       rm -f propgrid$(EXEEXT)
+       rm -rf propgrid.app
+
+distclean: clean
+       rm -f config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile
+
+propgrid$(EXEEXT): $(PROPGRID_OBJECTS) $(__propgrid___win32rc)
+       $(CXX) -o $@ $(PROPGRID_OBJECTS) $(LDFLAGS)   -L$(LIBDIRNAME) $(LDFLAGS_GUI) $(SAMPLES_RPATH_FLAG)  $(LIBS) $(__WXLIB_PROPGRID_p)  $(__WXLIB_ADV_p) $(PLUGIN_ADV_EXTRALIBS) $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE)
+       
+       $(__propgrid___mac_setfilecmd)
+       $(__propgrid___os2_emxbindcmd)
+       $(SAMPLES_RPATH_POSTLINK)
+
+@COND_PLATFORM_MACOSX_1@propgrid.app/Contents/PkgInfo: propgrid$(EXEEXT) $(top_srcdir)/src/osx/carbon/Info.plist.in $(top_srcdir)/src/osx/carbon/wxmac.icns
+@COND_PLATFORM_MACOSX_1@       mkdir -p propgrid.app/Contents
+@COND_PLATFORM_MACOSX_1@       mkdir -p propgrid.app/Contents/MacOS
+@COND_PLATFORM_MACOSX_1@       mkdir -p propgrid.app/Contents/Resources
+@COND_PLATFORM_MACOSX_1@       
+@COND_PLATFORM_MACOSX_1@       
+@COND_PLATFORM_MACOSX_1@       sed -e "s/IDENTIFIER/`echo $(srcdir) | sed -e 's,\.\./,,g' | sed -e 's,/,.,g'`/" \
+@COND_PLATFORM_MACOSX_1@       -e "s/EXECUTABLE/propgrid/" \
+@COND_PLATFORM_MACOSX_1@       -e "s/VERSION/$(WX_VERSION)/" \
+@COND_PLATFORM_MACOSX_1@       $(top_srcdir)/src/osx/carbon/Info.plist.in >propgrid.app/Contents/Info.plist
+@COND_PLATFORM_MACOSX_1@       
+@COND_PLATFORM_MACOSX_1@       
+@COND_PLATFORM_MACOSX_1@       echo -n "APPL????" >propgrid.app/Contents/PkgInfo
+@COND_PLATFORM_MACOSX_1@       
+@COND_PLATFORM_MACOSX_1@       
+@COND_PLATFORM_MACOSX_1@       ln -f propgrid$(EXEEXT) propgrid.app/Contents/MacOS/propgrid
+@COND_PLATFORM_MACOSX_1@       
+@COND_PLATFORM_MACOSX_1@       
+@COND_PLATFORM_MACOSX_1@       cp -f $(top_srcdir)/src/osx/carbon/wxmac.icns propgrid.app/Contents/Resources/wxmac.icns
+
+@COND_PLATFORM_MACOSX_1@propgrid_bundle: $(____propgrid_BUNDLE_TGT_REF_DEP)
+
+propgrid_propgrid.o: $(srcdir)/propgrid.cpp
+       $(CXXC) -c -o $@ $(PROPGRID_CXXFLAGS) $(srcdir)/propgrid.cpp
+
+propgrid_propgrid_minimal.o: $(srcdir)/propgrid_minimal.cpp
+       $(CXXC) -c -o $@ $(PROPGRID_CXXFLAGS) $(srcdir)/propgrid_minimal.cpp
+
+propgrid_sampleprops.o: $(srcdir)/sampleprops.cpp
+       $(CXXC) -c -o $@ $(PROPGRID_CXXFLAGS) $(srcdir)/sampleprops.cpp
+
+propgrid_tests.o: $(srcdir)/tests.cpp
+       $(CXXC) -c -o $@ $(PROPGRID_CXXFLAGS) $(srcdir)/tests.cpp
+
+propgrid_sample_rc.o: $(srcdir)/../sample.rc
+       $(WINDRES) -i$< -o$@    --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_2)  $(__EXCEPTIONS_DEFINE_p_2) $(__RTTI_DEFINE_p_2) $(__THREAD_DEFINE_p_2)   --include-dir $(srcdir) $(__DLLFLAG_p_2) --include-dir $(srcdir)/../../samples $(__RCDEFDIR_p_1) --include-dir $(top_srcdir)/include
+
+
+$(srcdir)/include/wx/stc/stc.h: \
+$(srcdir)/src/stc/scintilla/include/Scintilla.iface \
+$(srcdir)/src/stc/stc.cpp.in \
+$(srcdir)/src/stc/stc.h.in \
+$(srcdir)/src/stc/gen_iface.py
+       cd $(srcdir)/src/stc && ./gen_iface.py
+monolib_stc.o monodll_stc.o stcdll_stc.o stclib_stc.o: \
+$(srcdir)/include/wx/stc/stc.h
+
+# Include dependency info, if present:
+@IF_GNU_MAKE@-include .deps/*.d
+
+.PHONY: all install uninstall clean distclean propgrid_bundle
diff --git a/samples/propgrid/makefile.bcc b/samples/propgrid/makefile.bcc
new file mode 100644 (file)
index 0000000..b7a928d
--- /dev/null
@@ -0,0 +1,261 @@
+# =========================================================================
+#     This makefile was generated by
+#     Bakefile 0.2.3 (http://www.bakefile.org)
+#     Do not modify, all changes will be overwritten!
+# =========================================================================
+
+.autodepend
+
+!ifndef BCCDIR
+!ifndef MAKEDIR
+!error Your Borland compiler does not define MAKEDIR. Please define the BCCDIR variable, e.g. BCCDIR=d:\bc4
+!endif
+BCCDIR = $(MAKEDIR)\..
+!endif
+
+!include ../../build/msw/config.bcc
+
+# -------------------------------------------------------------------------
+# Do not modify the rest of this file!
+# -------------------------------------------------------------------------
+
+### Variables: ###
+
+WX_RELEASE_NODOT = 29
+COMPILER_PREFIX = bcc
+OBJS = \
+       $(COMPILER_PREFIX)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)
+LIBDIRNAME = .\..\..\lib\$(COMPILER_PREFIX)_$(LIBTYPE_SUFFIX)$(CFG)
+SETUPHDIR = \
+       $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)
+PROPGRID_CXXFLAGS = $(__RUNTIME_LIBS_7) -I$(BCCDIR)\include $(__DEBUGINFO) \
+       $(__OPTIMIZEFLAG_2) $(__THREADSFLAG_6) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
+       $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
+       $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include -I. $(__DLLFLAG_p) \
+       -I.\..\..\samples -DNOPCH $(CPPFLAGS) $(CXXFLAGS)
+PROPGRID_OBJECTS =  \
+       $(OBJS)\propgrid_propgrid.obj \
+       $(OBJS)\propgrid_propgrid_minimal.obj \
+       $(OBJS)\propgrid_sampleprops.obj \
+       $(OBJS)\propgrid_tests.obj
+
+### Conditionally set variables: ###
+
+!if "$(USE_GUI)" == "0"
+PORTNAME = base
+!endif
+!if "$(USE_GUI)" == "1"
+PORTNAME = msw
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
+WXDEBUGFLAG = d
+!endif
+!if "$(DEBUG_FLAG)" == "1"
+WXDEBUGFLAG = d
+!endif
+!if "$(UNICODE)" == "1"
+WXUNICODEFLAG = u
+!endif
+!if "$(WXUNIV)" == "1"
+WXUNIVNAME = univ
+!endif
+!if "$(SHARED)" == "1"
+WXDLLFLAG = dll
+!endif
+!if "$(SHARED)" == "0"
+LIBTYPE_SUFFIX = lib
+!endif
+!if "$(SHARED)" == "1"
+LIBTYPE_SUFFIX = dll
+!endif
+!if "$(MONOLITHIC)" == "0"
+EXTRALIBS_FOR_BASE = 
+!endif
+!if "$(MONOLITHIC)" == "1"
+EXTRALIBS_FOR_BASE =  
+!endif
+!if "$(BUILD)" == "debug"
+__OPTIMIZEFLAG_2 = -Od
+!endif
+!if "$(BUILD)" == "release"
+__OPTIMIZEFLAG_2 = -O2
+!endif
+!if "$(USE_THREADS)" == "0"
+__THREADSFLAG_5 = 
+!endif
+!if "$(USE_THREADS)" == "1"
+__THREADSFLAG_5 = mt
+!endif
+!if "$(USE_THREADS)" == "0"
+__THREADSFLAG_6 = 
+!endif
+!if "$(USE_THREADS)" == "1"
+__THREADSFLAG_6 = -tWM
+!endif
+!if "$(RUNTIME_LIBS)" == "dynamic"
+__RUNTIME_LIBS_7 = -tWR
+!endif
+!if "$(RUNTIME_LIBS)" == "static"
+__RUNTIME_LIBS_7 = 
+!endif
+!if "$(RUNTIME_LIBS)" == "dynamic"
+__RUNTIME_LIBS_8 = i
+!endif
+!if "$(RUNTIME_LIBS)" == "static"
+__RUNTIME_LIBS_8 = 
+!endif
+!if "$(WXUNIV)" == "1"
+__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
+!endif
+!if "$(WXUNIV)" == "1"
+__WXUNIV_DEFINE_p_1 = -d__WXUNIVERSAL__
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
+__DEBUG_DEFINE_p = -D__WXDEBUG__
+!endif
+!if "$(DEBUG_FLAG)" == "1"
+__DEBUG_DEFINE_p = -D__WXDEBUG__
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
+__DEBUG_DEFINE_p_1 = -d__WXDEBUG__
+!endif
+!if "$(DEBUG_FLAG)" == "1"
+__DEBUG_DEFINE_p_1 = -d__WXDEBUG__
+!endif
+!if "$(USE_EXCEPTIONS)" == "0"
+__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
+!endif
+!if "$(USE_EXCEPTIONS)" == "0"
+__EXCEPTIONS_DEFINE_p_1 = -dwxNO_EXCEPTIONS
+!endif
+!if "$(USE_RTTI)" == "0"
+__RTTI_DEFINE_p = -DwxNO_RTTI
+!endif
+!if "$(USE_RTTI)" == "0"
+__RTTI_DEFINE_p_1 = -dwxNO_RTTI
+!endif
+!if "$(USE_THREADS)" == "0"
+__THREAD_DEFINE_p = -DwxNO_THREADS
+!endif
+!if "$(USE_THREADS)" == "0"
+__THREAD_DEFINE_p_1 = -dwxNO_THREADS
+!endif
+!if "$(UNICODE)" == "0"
+__UNICODE_DEFINE_p = -DwxUSE_UNICODE=0
+!endif
+!if "$(UNICODE)" == "1"
+__UNICODE_DEFINE_p = -D_UNICODE
+!endif
+!if "$(UNICODE)" == "0"
+__UNICODE_DEFINE_p_1 = -dwxUSE_UNICODE=0
+!endif
+!if "$(UNICODE)" == "1"
+__UNICODE_DEFINE_p_1 = -d_UNICODE
+!endif
+!if "$(MSLU)" == "1"
+__MSLU_DEFINE_p = -DwxUSE_UNICODE_MSLU=1
+!endif
+!if "$(MSLU)" == "1"
+__MSLU_DEFINE_p_1 = -dwxUSE_UNICODE_MSLU=1
+!endif
+!if "$(USE_GDIPLUS)" == "1"
+__GFXCTX_DEFINE_p = -DwxUSE_GRAPHICS_CONTEXT=1
+!endif
+!if "$(USE_GDIPLUS)" == "1"
+__GFXCTX_DEFINE_p_1 = -dwxUSE_GRAPHICS_CONTEXT=1
+!endif
+!if "$(SHARED)" == "1"
+__DLLFLAG_p = -DWXUSINGDLL
+!endif
+!if "$(SHARED)" == "1"
+__DLLFLAG_p_1 = -dWXUSINGDLL
+!endif
+!if "$(MONOLITHIC)" == "0"
+__WXLIB_PROPGRID_p = \
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+!endif
+!if "$(MONOLITHIC)" == "0"
+__WXLIB_ADV_p = \
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib
+!endif
+!if "$(MONOLITHIC)" == "0"
+__WXLIB_CORE_p = \
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
+!endif
+!if "$(MONOLITHIC)" == "0"
+__WXLIB_BASE_p = \
+       wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
+!endif
+!if "$(MONOLITHIC)" == "1"
+__WXLIB_MONO_p = \
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
+!endif
+!if "$(USE_GUI)" == "1"
+__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
+!endif
+!if "$(USE_GUI)" == "1"
+__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
+!endif
+!if "$(USE_GUI)" == "1"
+__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
+!endif
+!if "$(MSLU)" == "1"
+__UNICOWS_LIB_p = unicows.lib
+!endif
+!if "$(USE_GDIPLUS)" == "1"
+__GDIPLUS_LIB_p = gdiplus.lib
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default"
+__DEBUGINFO = -v
+!endif
+!if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default"
+__DEBUGINFO = -v-
+!endif
+!if "$(DEBUG_INFO)" == "0"
+__DEBUGINFO = -v-
+!endif
+!if "$(DEBUG_INFO)" == "1"
+__DEBUGINFO = -v
+!endif
+
+
+all: $(OBJS)
+$(OBJS):
+       -if not exist $(OBJS) mkdir $(OBJS)
+
+### Targets: ###
+
+all: $(OBJS)\propgrid.exe
+
+clean: 
+       -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
+       -if exist $(OBJS)\*.res del $(OBJS)\*.res
+       -if exist $(OBJS)\*.csm del $(OBJS)\*.csm
+       -if exist $(OBJS)\propgrid.exe del $(OBJS)\propgrid.exe
+       -if exist $(OBJS)\propgrid.tds del $(OBJS)\propgrid.tds
+       -if exist $(OBJS)\propgrid.ilc del $(OBJS)\propgrid.ilc
+       -if exist $(OBJS)\propgrid.ild del $(OBJS)\propgrid.ild
+       -if exist $(OBJS)\propgrid.ilf del $(OBJS)\propgrid.ilf
+       -if exist $(OBJS)\propgrid.ils del $(OBJS)\propgrid.ils
+
+$(OBJS)\propgrid.exe: $(PROPGRID_OBJECTS)  $(OBJS)\propgrid_sample.res
+       ilink32 -Tpe -q $(LDFLAGS) -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO)  -L$(LIBDIRNAME) -aa @&&|
+       c0w32.obj $(PROPGRID_OBJECTS),$@,, $(__WXLIB_PROPGRID_p)  $(__WXLIB_ADV_p)  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG_5)$(__RUNTIME_LIBS_8).lib,, $(OBJS)\propgrid_sample.res
+|
+
+$(OBJS)\propgrid_propgrid.obj: .\propgrid.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRID_CXXFLAGS) .\propgrid.cpp
+
+$(OBJS)\propgrid_propgrid_minimal.obj: .\propgrid_minimal.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRID_CXXFLAGS) .\propgrid_minimal.cpp
+
+$(OBJS)\propgrid_sampleprops.obj: .\sampleprops.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRID_CXXFLAGS) .\sampleprops.cpp
+
+$(OBJS)\propgrid_tests.obj: .\tests.cpp
+       $(CXX) -q -c -P -o$@ $(PROPGRID_CXXFLAGS) .\tests.cpp
+
+$(OBJS)\propgrid_sample.res: .\..\sample.rc
+       brcc32 -32 -r -fo$@ -i$(BCCDIR)\include    -d__WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) $(__GFXCTX_DEFINE_p_1) -i$(SETUPHDIR) -i.\..\..\include -i. $(__DLLFLAG_p_1) -i.\..\..\samples -dNOPCH .\..\sample.rc
+
diff --git a/samples/propgrid/makefile.gcc b/samples/propgrid/makefile.gcc
new file mode 100644 (file)
index 0000000..55c92a1
--- /dev/null
@@ -0,0 +1,261 @@
+# =========================================================================
+#     This makefile was generated by
+#     Bakefile 0.2.3 (http://www.bakefile.org)
+#     Do not modify, all changes will be overwritten!
+# =========================================================================
+
+include ../../build/msw/config.gcc
+
+# -------------------------------------------------------------------------
+# Do not modify the rest of this file!
+# -------------------------------------------------------------------------
+
+### Variables: ###
+
+CPPDEPS = -MT$@ -MF$@.d -MD
+WX_RELEASE_NODOT = 29
+COMPILER_PREFIX = gcc
+OBJS = \
+       $(COMPILER_PREFIX)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)
+LIBDIRNAME = .\..\..\lib\$(COMPILER_PREFIX)_$(LIBTYPE_SUFFIX)$(CFG)
+SETUPHDIR = \
+       $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)
+PROPGRID_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG_2) $(__THREADSFLAG) \
+       $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
+       $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
+       $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include -W -Wall -I. \
+       $(__DLLFLAG_p) -I.\..\..\samples -DNOPCH $(__RTTIFLAG_5) \
+       $(__EXCEPTIONSFLAG_6) -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)
+PROPGRID_OBJECTS =  \
+       $(OBJS)\propgrid_propgrid.o \
+       $(OBJS)\propgrid_propgrid_minimal.o \
+       $(OBJS)\propgrid_sampleprops.o \
+       $(OBJS)\propgrid_tests.o \
+       $(OBJS)\propgrid_sample_rc.o
+
+### Conditionally set variables: ###
+
+ifeq ($(GCC_VERSION),2.95)
+GCCFLAGS = -fvtable-thunks
+endif
+ifeq ($(USE_GUI),0)
+PORTNAME = base
+endif
+ifeq ($(USE_GUI),1)
+PORTNAME = msw
+endif
+ifeq ($(BUILD),debug)
+ifeq ($(DEBUG_FLAG),default)
+WXDEBUGFLAG = d
+endif
+endif
+ifeq ($(DEBUG_FLAG),1)
+WXDEBUGFLAG = d
+endif
+ifeq ($(UNICODE),1)
+WXUNICODEFLAG = u
+endif
+ifeq ($(WXUNIV),1)
+WXUNIVNAME = univ
+endif
+ifeq ($(SHARED),1)
+WXDLLFLAG = dll
+endif
+ifeq ($(SHARED),0)
+LIBTYPE_SUFFIX = lib
+endif
+ifeq ($(SHARED),1)
+LIBTYPE_SUFFIX = dll
+endif
+ifeq ($(MONOLITHIC),0)
+EXTRALIBS_FOR_BASE = 
+endif
+ifeq ($(MONOLITHIC),1)
+EXTRALIBS_FOR_BASE =  
+endif
+ifeq ($(BUILD),debug)
+__OPTIMIZEFLAG_2 = -O0
+endif
+ifeq ($(BUILD),release)
+__OPTIMIZEFLAG_2 = -O2
+endif
+ifeq ($(USE_RTTI),0)
+__RTTIFLAG_5 = -fno-rtti
+endif
+ifeq ($(USE_RTTI),1)
+__RTTIFLAG_5 = 
+endif
+ifeq ($(USE_EXCEPTIONS),0)
+__EXCEPTIONSFLAG_6 = -fno-exceptions
+endif
+ifeq ($(USE_EXCEPTIONS),1)
+__EXCEPTIONSFLAG_6 = 
+endif
+ifeq ($(WXUNIV),1)
+__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__
+endif
+ifeq ($(WXUNIV),1)
+__WXUNIV_DEFINE_p_1 = --define __WXUNIVERSAL__
+endif
+ifeq ($(BUILD),debug)
+ifeq ($(DEBUG_FLAG),default)
+__DEBUG_DEFINE_p = -D__WXDEBUG__
+endif
+endif
+ifeq ($(DEBUG_FLAG),1)
+__DEBUG_DEFINE_p = -D__WXDEBUG__
+endif
+ifeq ($(BUILD),debug)
+ifeq ($(DEBUG_FLAG),default)
+__DEBUG_DEFINE_p_1 = --define __WXDEBUG__
+endif
+endif
+ifeq ($(DEBUG_FLAG),1)
+__DEBUG_DEFINE_p_1 = --define __WXDEBUG__
+endif
+ifeq ($(USE_EXCEPTIONS),0)
+__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS
+endif
+ifeq ($(USE_EXCEPTIONS),0)
+__EXCEPTIONS_DEFINE_p_1 = --define wxNO_EXCEPTIONS
+endif
+ifeq ($(USE_RTTI),0)
+__RTTI_DEFINE_p = -DwxNO_RTTI
+endif
+ifeq ($(USE_RTTI),0)
+__RTTI_DEFINE_p_1 = --define wxNO_RTTI
+endif
+ifeq ($(USE_THREADS),0)
+__THREAD_DEFINE_p = -DwxNO_THREADS
+endif
+ifeq ($(USE_THREADS),0)
+__THREAD_DEFINE_p_1 = --define wxNO_THREADS
+endif
+ifeq ($(UNICODE),0)
+__UNICODE_DEFINE_p = -DwxUSE_UNICODE=0
+endif
+ifeq ($(UNICODE),1)
+__UNICODE_DEFINE_p = -D_UNICODE
+endif
+ifeq ($(UNICODE),0)
+__UNICODE_DEFINE_p_1 = --define wxUSE_UNICODE=0
+endif
+ifeq ($(UNICODE),1)
+__UNICODE_DEFINE_p_1 = --define _UNICODE
+endif
+ifeq ($(MSLU),1)
+__MSLU_DEFINE_p = -DwxUSE_UNICODE_MSLU=1
+endif
+ifeq ($(MSLU),1)
+__MSLU_DEFINE_p_1 = --define wxUSE_UNICODE_MSLU=1
+endif
+ifeq ($(USE_GDIPLUS),1)
+__GFXCTX_DEFINE_p = -DwxUSE_GRAPHICS_CONTEXT=1
+endif
+ifeq ($(USE_GDIPLUS),1)
+__GFXCTX_DEFINE_p_1 = --define wxUSE_GRAPHICS_CONTEXT=1
+endif
+ifeq ($(SHARED),1)
+__DLLFLAG_p = -DWXUSINGDLL
+endif
+ifeq ($(SHARED),1)
+__DLLFLAG_p_1 = --define WXUSINGDLL
+endif
+ifeq ($(MONOLITHIC),0)
+__WXLIB_PROPGRID_p = \
+       -lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid
+endif
+ifeq ($(MONOLITHIC),0)
+__WXLIB_ADV_p = \
+       -lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv
+endif
+ifeq ($(MONOLITHIC),0)
+__WXLIB_CORE_p = \
+       -lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core
+endif
+ifeq ($(MONOLITHIC),0)
+__WXLIB_BASE_p = \
+       -lwxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)
+endif
+ifeq ($(MONOLITHIC),1)
+__WXLIB_MONO_p = \
+       -lwx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)
+endif
+ifeq ($(USE_GUI),1)
+__LIB_TIFF_p = -lwxtiff$(WXDEBUGFLAG)
+endif
+ifeq ($(USE_GUI),1)
+__LIB_JPEG_p = -lwxjpeg$(WXDEBUGFLAG)
+endif
+ifeq ($(USE_GUI),1)
+__LIB_PNG_p = -lwxpng$(WXDEBUGFLAG)
+endif
+ifeq ($(MSLU),1)
+__UNICOWS_LIB_p = -lunicows
+endif
+ifeq ($(USE_GDIPLUS),1)
+__GDIPLUS_LIB_p = -lgdiplus
+endif
+ifeq ($(BUILD),debug)
+ifeq ($(DEBUG_INFO),default)
+__DEBUGINFO = -g
+endif
+endif
+ifeq ($(BUILD),release)
+ifeq ($(DEBUG_INFO),default)
+__DEBUGINFO = 
+endif
+endif
+ifeq ($(DEBUG_INFO),0)
+__DEBUGINFO = 
+endif
+ifeq ($(DEBUG_INFO),1)
+__DEBUGINFO = -g
+endif
+ifeq ($(USE_THREADS),0)
+__THREADSFLAG = 
+endif
+ifeq ($(USE_THREADS),1)
+__THREADSFLAG = -mthreads
+endif
+
+
+all: $(OBJS)
+$(OBJS):
+       -if not exist $(OBJS) mkdir $(OBJS)
+
+### Targets: ###
+
+all: $(OBJS)\propgrid.exe
+
+clean: 
+       -if exist $(OBJS)\*.o del $(OBJS)\*.o
+       -if exist $(OBJS)\*.d del $(OBJS)\*.d
+       -if exist $(OBJS)\propgrid.exe del $(OBJS)\propgrid.exe
+
+$(OBJS)\propgrid.exe: $(PROPGRID_OBJECTS) $(OBJS)\propgrid_sample_rc.o
+       $(CXX) -o $@ $(PROPGRID_OBJECTS) $(LDFLAGS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows  $(__WXLIB_PROPGRID_p)  $(__WXLIB_ADV_p)  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32
+
+$(OBJS)\propgrid_propgrid.o: ./propgrid.cpp
+       $(CXX) -c -o $@ $(PROPGRID_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgrid_propgrid_minimal.o: ./propgrid_minimal.cpp
+       $(CXX) -c -o $@ $(PROPGRID_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgrid_sampleprops.o: ./sampleprops.cpp
+       $(CXX) -c -o $@ $(PROPGRID_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgrid_tests.o: ./tests.cpp
+       $(CXX) -c -o $@ $(PROPGRID_CXXFLAGS) $(CPPDEPS) $<
+
+$(OBJS)\propgrid_sample_rc.o: ./../sample.rc
+       windres --use-temp-file -i$< -o$@    --define __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) $(__GFXCTX_DEFINE_p_1) --include-dir $(SETUPHDIR) --include-dir ./../../include --include-dir . $(__DLLFLAG_p_1) --include-dir ./../../samples --define NOPCH
+
+.PHONY: all clean
+
+
+SHELL := $(COMSPEC)
+
+# Dependencies tracking:
+-include $(OBJS)/*.d
diff --git a/samples/propgrid/makefile.unx b/samples/propgrid/makefile.unx
new file mode 100644 (file)
index 0000000..c3be594
--- /dev/null
@@ -0,0 +1,122 @@
+# =========================================================================
+#     This makefile was generated by
+#     Bakefile 0.2.3 (http://www.bakefile.org)
+#     Do not modify, all changes will be overwritten!
+# =========================================================================
+
+
+
+# -------------------------------------------------------------------------
+# These are configurable options:
+# -------------------------------------------------------------------------
+
+# C++ compiler 
+CXX := g++
+
+# Standard flags for C++ 
+CXXFLAGS := 
+
+# Standard preprocessor flags (common for CC and CXX) 
+CPPFLAGS := 
+
+# Standard linker flags 
+LDFLAGS := 
+
+# Location and arguments of wx-config script 
+WX_CONFIG := wx-config
+
+# Port of the wx library to build against [gtk1,gtk2,msw,x11,motif,mgl,mac,dfb]
+WX_PORT := $(shell $(WX_CONFIG) --selected-config | cut -d '-' -f 1)
+
+# Use DLL build of wx library to use? [0,1]
+WX_SHARED := $(shell if test -z `$(WX_CONFIG) --selected-config | cut -d '-' -f 5`; then echo 1; else echo 0; fi)
+
+# Compile Unicode build of wxWidgets? [0,1]
+WX_UNICODE := $(shell $(WX_CONFIG) --selected-config | cut -d '-' -f 2 | sed 's/unicode/1/;s/ansi/0/')
+
+# Use debug build of wxWidgets (define __WXDEBUG__)? [0,1]
+WX_DEBUG := $(shell $(WX_CONFIG) --selected-config | cut -d '-' -f 3 | sed 's/debug/1/;s/release/0/')
+
+# Version of the wx library to build against. 
+WX_VERSION := $(shell $(WX_CONFIG) --selected-config | sed -e 's/.*-\([0-9]*\)\.\([0-9]*\)$$/\1\2/')
+
+
+
+# -------------------------------------------------------------------------
+# Do not modify the rest of this file!
+# -------------------------------------------------------------------------
+
+### Variables: ###
+
+CPPDEPS = -MT$@ -MF`echo $@ | sed -e 's,\.o$$,.d,'` -MD
+WX_VERSION_MAJOR = $(shell echo $(WX_VERSION) | cut -c1,1)
+WX_VERSION_MINOR = $(shell echo $(WX_VERSION) | cut -c2,2)
+WX_CONFIG_FLAGS = $(WX_CONFIG_DEBUG_FLAG) $(WX_CONFIG_UNICODE_FLAG) \
+       $(WX_CONFIG_SHARED_FLAG) --toolkit=$(WX_PORT) \
+       --version=$(WX_VERSION_MAJOR).$(WX_VERSION_MINOR)
+PROPGRID_CXXFLAGS = -I. `$(WX_CONFIG) --cxxflags $(WX_CONFIG_FLAGS)` $(CPPFLAGS) \
+       $(CXXFLAGS)
+PROPGRID_OBJECTS =  \
+       propgrid_propgrid.o \
+       propgrid_propgrid_minimal.o \
+       propgrid_sampleprops.o \
+       propgrid_tests.o
+
+### Conditionally set variables: ###
+
+ifeq ($(WX_DEBUG),0)
+WX_CONFIG_DEBUG_FLAG = --debug=no
+endif
+ifeq ($(WX_DEBUG),1)
+WX_CONFIG_DEBUG_FLAG = --debug=yes
+endif
+ifeq ($(WX_UNICODE),0)
+WX_CONFIG_UNICODE_FLAG = --unicode=no
+endif
+ifeq ($(WX_UNICODE),1)
+WX_CONFIG_UNICODE_FLAG = --unicode=yes
+endif
+ifeq ($(WX_SHARED),0)
+WX_CONFIG_SHARED_FLAG = --static=yes
+endif
+ifeq ($(WX_SHARED),1)
+WX_CONFIG_SHARED_FLAG = --static=no
+endif
+
+
+### Targets: ###
+
+all: test_for_selected_wxbuild propgrid
+
+install: all
+
+uninstall: 
+
+clean: 
+       rm -f ./*.o
+       rm -f ./*.d
+       rm -f propgrid
+
+test_for_selected_wxbuild: 
+       @$(WX_CONFIG) $(WX_CONFIG_FLAGS)
+
+propgrid: $(PROPGRID_OBJECTS)
+       $(CXX) -o $@ $(PROPGRID_OBJECTS) $(LDFLAGS)  `$(WX_CONFIG) $(WX_CONFIG_FLAGS) --libs propgrid,adv,core,base`
+
+propgrid_propgrid.o: ./propgrid.cpp
+       $(CXX) -c -o $@ $(PROPGRID_CXXFLAGS) $(CPPDEPS) $<
+
+propgrid_propgrid_minimal.o: ./propgrid_minimal.cpp
+       $(CXX) -c -o $@ $(PROPGRID_CXXFLAGS) $(CPPDEPS) $<
+
+propgrid_sampleprops.o: ./sampleprops.cpp
+       $(CXX) -c -o $@ $(PROPGRID_CXXFLAGS) $(CPPDEPS) $<
+
+propgrid_tests.o: ./tests.cpp
+       $(CXX) -c -o $@ $(PROPGRID_CXXFLAGS) $(CPPDEPS) $<
+
+.PHONY: all install uninstall clean
+
+
+# Dependencies tracking:
+-include ./*.d
diff --git a/samples/propgrid/makefile.vc b/samples/propgrid/makefile.vc
new file mode 100644 (file)
index 0000000..eeddc46
--- /dev/null
@@ -0,0 +1,337 @@
+# =========================================================================
+#     This makefile was generated by
+#     Bakefile 0.2.3 (http://www.bakefile.org)
+#     Do not modify, all changes will be overwritten!
+# =========================================================================
+
+!include <../../build/msw/config.vc>
+
+# -------------------------------------------------------------------------
+# Do not modify the rest of this file!
+# -------------------------------------------------------------------------
+
+### Variables: ###
+
+WX_RELEASE_NODOT = 29
+COMPILER_PREFIX = vc
+OBJS = \
+       $(COMPILER_PREFIX)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)$(DIR_SUFFIX_CPU)
+LIBDIRNAME = \
+       .\..\..\lib\$(COMPILER_PREFIX)$(DIR_SUFFIX_CPU)_$(LIBTYPE_SUFFIX)$(CFG)
+SETUPHDIR = \
+       $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)
+PROPGRID_CXXFLAGS = /M$(__RUNTIME_LIBS_8)$(__DEBUGRUNTIME_3) /DWIN32 \
+       $(__DEBUGINFO_0) /Fd$(OBJS)\propgrid.pdb $(____DEBUGRUNTIME_2_p) \
+       $(__OPTIMIZEFLAG_4) $(__NO_VC_CRTDBG_p) /D__WXMSW__ $(__WXUNIV_DEFINE_p) \
+       $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
+       $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) \
+       $(__GFXCTX_DEFINE_p) /I$(SETUPHDIR) /I.\..\..\include /W4 /I. $(__DLLFLAG_p) \
+       /D_WINDOWS /I.\..\..\samples /DNOPCH $(__RTTIFLAG_9) $(__EXCEPTIONSFLAG_10) \
+       $(CPPFLAGS) $(CXXFLAGS)
+PROPGRID_OBJECTS =  \
+       $(OBJS)\propgrid_propgrid.obj \
+       $(OBJS)\propgrid_propgrid_minimal.obj \
+       $(OBJS)\propgrid_sampleprops.obj \
+       $(OBJS)\propgrid_tests.obj \
+       $(OBJS)\propgrid_sample.res
+
+### Conditionally set variables: ###
+
+!if "$(USE_GUI)" == "0"
+PORTNAME = base
+!endif
+!if "$(USE_GUI)" == "1"
+PORTNAME = msw
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
+WXDEBUGFLAG = d
+!endif
+!if "$(DEBUG_FLAG)" == "1"
+WXDEBUGFLAG = d
+!endif
+!if "$(UNICODE)" == "1"
+WXUNICODEFLAG = u
+!endif
+!if "$(WXUNIV)" == "1"
+WXUNIVNAME = univ
+!endif
+!if "$(TARGET_CPU)" == "amd64"
+DIR_SUFFIX_CPU = _amd64
+!endif
+!if "$(TARGET_CPU)" == "amd64"
+DIR_SUFFIX_CPU = _amd64
+!endif
+!if "$(TARGET_CPU)" == "ia64"
+DIR_SUFFIX_CPU = _ia64
+!endif
+!if "$(TARGET_CPU)" == "ia64"
+DIR_SUFFIX_CPU = _ia64
+!endif
+!if "$(SHARED)" == "1"
+WXDLLFLAG = dll
+!endif
+!if "$(SHARED)" == "0"
+LIBTYPE_SUFFIX = lib
+!endif
+!if "$(SHARED)" == "1"
+LIBTYPE_SUFFIX = dll
+!endif
+!if "$(TARGET_CPU)" == "amd64"
+LINK_TARGET_CPU = /MACHINE:AMD64
+!endif
+!if "$(TARGET_CPU)" == "amd64"
+LINK_TARGET_CPU = /MACHINE:AMD64
+!endif
+!if "$(TARGET_CPU)" == "ia64"
+LINK_TARGET_CPU = /MACHINE:IA64
+!endif
+!if "$(TARGET_CPU)" == "ia64"
+LINK_TARGET_CPU = /MACHINE:IA64
+!endif
+!if "$(MONOLITHIC)" == "0"
+EXTRALIBS_FOR_BASE = 
+!endif
+!if "$(MONOLITHIC)" == "1"
+EXTRALIBS_FOR_BASE =  
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default"
+__DEBUGINFO_0 = /Zi
+!endif
+!if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default"
+__DEBUGINFO_0 = 
+!endif
+!if "$(DEBUG_INFO)" == "0"
+__DEBUGINFO_0 = 
+!endif
+!if "$(DEBUG_INFO)" == "1"
+__DEBUGINFO_0 = /Zi
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default"
+__DEBUGINFO_1 = /DEBUG
+!endif
+!if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default"
+__DEBUGINFO_1 = 
+!endif
+!if "$(DEBUG_INFO)" == "0"
+__DEBUGINFO_1 = 
+!endif
+!if "$(DEBUG_INFO)" == "1"
+__DEBUGINFO_1 = /DEBUG
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
+____DEBUGRUNTIME_2_p = /D_DEBUG
+!endif
+!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
+____DEBUGRUNTIME_2_p = 
+!endif
+!if "$(DEBUG_RUNTIME_LIBS)" == "0"
+____DEBUGRUNTIME_2_p = 
+!endif
+!if "$(DEBUG_RUNTIME_LIBS)" == "1"
+____DEBUGRUNTIME_2_p = /D_DEBUG
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
+____DEBUGRUNTIME_2_p_1 = /d _DEBUG
+!endif
+!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
+____DEBUGRUNTIME_2_p_1 = 
+!endif
+!if "$(DEBUG_RUNTIME_LIBS)" == "0"
+____DEBUGRUNTIME_2_p_1 = 
+!endif
+!if "$(DEBUG_RUNTIME_LIBS)" == "1"
+____DEBUGRUNTIME_2_p_1 = /d _DEBUG
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default"
+__DEBUGRUNTIME_3 = d
+!endif
+!if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default"
+__DEBUGRUNTIME_3 = 
+!endif
+!if "$(DEBUG_RUNTIME_LIBS)" == "0"
+__DEBUGRUNTIME_3 = 
+!endif
+!if "$(DEBUG_RUNTIME_LIBS)" == "1"
+__DEBUGRUNTIME_3 = d
+!endif
+!if "$(BUILD)" == "debug"
+__OPTIMIZEFLAG_4 = /Od
+!endif
+!if "$(BUILD)" == "release"
+__OPTIMIZEFLAG_4 = /O2
+!endif
+!if "$(USE_THREADS)" == "0"
+__THREADSFLAG_7 = L
+!endif
+!if "$(USE_THREADS)" == "1"
+__THREADSFLAG_7 = T
+!endif
+!if "$(RUNTIME_LIBS)" == "dynamic"
+__RUNTIME_LIBS_8 = D
+!endif
+!if "$(RUNTIME_LIBS)" == "static"
+__RUNTIME_LIBS_8 = $(__THREADSFLAG_7)
+!endif
+!if "$(USE_RTTI)" == "0"
+__RTTIFLAG_9 = 
+!endif
+!if "$(USE_RTTI)" == "1"
+__RTTIFLAG_9 = /GR
+!endif
+!if "$(USE_EXCEPTIONS)" == "0"
+__EXCEPTIONSFLAG_10 = 
+!endif
+!if "$(USE_EXCEPTIONS)" == "1"
+__EXCEPTIONSFLAG_10 = /EHsc
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0"
+__NO_VC_CRTDBG_p = /D__NO_VC_CRTDBG__
+!endif
+!if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
+__NO_VC_CRTDBG_p = /D__NO_VC_CRTDBG__
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "0"
+__NO_VC_CRTDBG_p_1 = /d __NO_VC_CRTDBG__
+!endif
+!if "$(BUILD)" == "release" && "$(DEBUG_FLAG)" == "1"
+__NO_VC_CRTDBG_p_1 = /d __NO_VC_CRTDBG__
+!endif
+!if "$(WXUNIV)" == "1"
+__WXUNIV_DEFINE_p = /D__WXUNIVERSAL__
+!endif
+!if "$(WXUNIV)" == "1"
+__WXUNIV_DEFINE_p_1 = /d __WXUNIVERSAL__
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
+__DEBUG_DEFINE_p = /D__WXDEBUG__
+!endif
+!if "$(DEBUG_FLAG)" == "1"
+__DEBUG_DEFINE_p = /D__WXDEBUG__
+!endif
+!if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
+__DEBUG_DEFINE_p_1 = /d __WXDEBUG__
+!endif
+!if "$(DEBUG_FLAG)" == "1"
+__DEBUG_DEFINE_p_1 = /d __WXDEBUG__
+!endif
+!if "$(USE_EXCEPTIONS)" == "0"
+__EXCEPTIONS_DEFINE_p = /DwxNO_EXCEPTIONS
+!endif
+!if "$(USE_EXCEPTIONS)" == "0"
+__EXCEPTIONS_DEFINE_p_1 = /d wxNO_EXCEPTIONS
+!endif
+!if "$(USE_RTTI)" == "0"
+__RTTI_DEFINE_p = /DwxNO_RTTI
+!endif
+!if "$(USE_RTTI)" == "0"
+__RTTI_DEFINE_p_1 = /d wxNO_RTTI
+!endif
+!if "$(USE_THREADS)" == "0"
+__THREAD_DEFINE_p = /DwxNO_THREADS
+!endif
+!if "$(USE_THREADS)" == "0"
+__THREAD_DEFINE_p_1 = /d wxNO_THREADS
+!endif
+!if "$(UNICODE)" == "0"
+__UNICODE_DEFINE_p = /DwxUSE_UNICODE=0
+!endif
+!if "$(UNICODE)" == "1"
+__UNICODE_DEFINE_p = /D_UNICODE
+!endif
+!if "$(UNICODE)" == "0"
+__UNICODE_DEFINE_p_1 = /d wxUSE_UNICODE=0
+!endif
+!if "$(UNICODE)" == "1"
+__UNICODE_DEFINE_p_1 = /d _UNICODE
+!endif
+!if "$(MSLU)" == "1"
+__MSLU_DEFINE_p = /DwxUSE_UNICODE_MSLU=1
+!endif
+!if "$(MSLU)" == "1"
+__MSLU_DEFINE_p_1 = /d wxUSE_UNICODE_MSLU=1
+!endif
+!if "$(USE_GDIPLUS)" == "1"
+__GFXCTX_DEFINE_p = /DwxUSE_GRAPHICS_CONTEXT=1
+!endif
+!if "$(USE_GDIPLUS)" == "1"
+__GFXCTX_DEFINE_p_1 = /d wxUSE_GRAPHICS_CONTEXT=1
+!endif
+!if "$(SHARED)" == "1"
+__DLLFLAG_p = /DWXUSINGDLL
+!endif
+!if "$(SHARED)" == "1"
+__DLLFLAG_p_1 = /d WXUSINGDLL
+!endif
+!if "$(MONOLITHIC)" == "0"
+__WXLIB_PROPGRID_p = \
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+!endif
+!if "$(MONOLITHIC)" == "0"
+__WXLIB_ADV_p = \
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib
+!endif
+!if "$(MONOLITHIC)" == "0"
+__WXLIB_CORE_p = \
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
+!endif
+!if "$(MONOLITHIC)" == "0"
+__WXLIB_BASE_p = \
+       wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
+!endif
+!if "$(MONOLITHIC)" == "1"
+__WXLIB_MONO_p = \
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
+!endif
+!if "$(USE_GUI)" == "1"
+__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
+!endif
+!if "$(USE_GUI)" == "1"
+__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
+!endif
+!if "$(USE_GUI)" == "1"
+__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
+!endif
+!if "$(MSLU)" == "1"
+__UNICOWS_LIB_p = unicows.lib
+!endif
+!if "$(USE_GDIPLUS)" == "1"
+__GDIPLUS_LIB_p = gdiplus.lib
+!endif
+
+
+all: $(OBJS)
+$(OBJS):
+       -if not exist $(OBJS) mkdir $(OBJS)
+
+### Targets: ###
+
+all: $(OBJS)\propgrid.exe
+
+clean: 
+       -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
+       -if exist $(OBJS)\*.res del $(OBJS)\*.res
+       -if exist $(OBJS)\*.pch del $(OBJS)\*.pch
+       -if exist $(OBJS)\propgrid.exe del $(OBJS)\propgrid.exe
+       -if exist $(OBJS)\propgrid.ilk del $(OBJS)\propgrid.ilk
+       -if exist $(OBJS)\propgrid.pdb del $(OBJS)\propgrid.pdb
+
+$(OBJS)\propgrid.exe: $(PROPGRID_OBJECTS) $(OBJS)\propgrid_sample.res
+       link /NOLOGO /OUT:$@ $(LDFLAGS) $(__DEBUGINFO_1) /pdb:"$(OBJS)\propgrid.pdb"  $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS @<<
+       $(PROPGRID_OBJECTS)  $(__WXLIB_PROPGRID_p)  $(__WXLIB_ADV_p)  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib
+<<
+
+$(OBJS)\propgrid_propgrid.obj: .\propgrid.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRID_CXXFLAGS) .\propgrid.cpp
+
+$(OBJS)\propgrid_propgrid_minimal.obj: .\propgrid_minimal.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRID_CXXFLAGS) .\propgrid_minimal.cpp
+
+$(OBJS)\propgrid_sampleprops.obj: .\sampleprops.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRID_CXXFLAGS) .\sampleprops.cpp
+
+$(OBJS)\propgrid_tests.obj: .\tests.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(PROPGRID_CXXFLAGS) .\tests.cpp
+
+$(OBJS)\propgrid_sample.res: .\..\sample.rc
+       rc /fo$@  /d WIN32 $(____DEBUGRUNTIME_2_p_1) $(__NO_VC_CRTDBG_p_1)  /d __WXMSW__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) $(__GFXCTX_DEFINE_p_1) /i $(SETUPHDIR) /i .\..\..\include /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\samples /d NOPCH .\..\sample.rc
+
diff --git a/samples/propgrid/makefile.wat b/samples/propgrid/makefile.wat
new file mode 100644 (file)
index 0000000..424d467
--- /dev/null
@@ -0,0 +1,288 @@
+# =========================================================================
+#     This makefile was generated by
+#     Bakefile 0.2.3 (http://www.bakefile.org)
+#     Do not modify, all changes will be overwritten!
+# =========================================================================
+
+!include ../../build/msw/config.wat
+
+# -------------------------------------------------------------------------
+# Do not modify the rest of this file!
+# -------------------------------------------------------------------------
+
+# Speed up compilation a bit:
+!ifdef __LOADDLL__
+!  loaddll wcc      wccd
+!  loaddll wccaxp   wccdaxp
+!  loaddll wcc386   wccd386
+!  loaddll wpp      wppdi86
+!  loaddll wppaxp   wppdaxp
+!  loaddll wpp386   wppd386
+!  loaddll wlink    wlink
+!  loaddll wlib     wlibd
+!endif
+
+# We need these variables in some bakefile-made rules:
+WATCOM_CWD = $+ $(%cdrive):$(%cwd) $-
+
+### Conditionally set variables: ###
+
+PORTNAME =
+!ifeq USE_GUI 0
+PORTNAME = base
+!endif
+!ifeq USE_GUI 1
+PORTNAME = msw
+!endif
+WXDEBUGFLAG =
+!ifeq BUILD debug
+!ifeq DEBUG_FLAG default
+WXDEBUGFLAG = d
+!endif
+!endif
+!ifeq DEBUG_FLAG 1
+WXDEBUGFLAG = d
+!endif
+WXUNICODEFLAG =
+!ifeq UNICODE 1
+WXUNICODEFLAG = u
+!endif
+WXUNIVNAME =
+!ifeq WXUNIV 1
+WXUNIVNAME = univ
+!endif
+WXDLLFLAG =
+!ifeq SHARED 1
+WXDLLFLAG = dll
+!endif
+LIBTYPE_SUFFIX =
+!ifeq SHARED 0
+LIBTYPE_SUFFIX = lib
+!endif
+!ifeq SHARED 1
+LIBTYPE_SUFFIX = dll
+!endif
+EXTRALIBS_FOR_BASE =
+!ifeq MONOLITHIC 0
+EXTRALIBS_FOR_BASE = 
+!endif
+!ifeq MONOLITHIC 1
+EXTRALIBS_FOR_BASE =  
+!endif
+__DEBUGINFO_0 =
+!ifeq BUILD debug
+!ifeq DEBUG_INFO default
+__DEBUGINFO_0 = -d2
+!endif
+!endif
+!ifeq BUILD release
+!ifeq DEBUG_INFO default
+__DEBUGINFO_0 = -d0
+!endif
+!endif
+!ifeq DEBUG_INFO 0
+__DEBUGINFO_0 = -d0
+!endif
+!ifeq DEBUG_INFO 1
+__DEBUGINFO_0 = -d2
+!endif
+__DEBUGINFO_1 =
+!ifeq BUILD debug
+!ifeq DEBUG_INFO default
+__DEBUGINFO_1 = debug all
+!endif
+!endif
+!ifeq BUILD release
+!ifeq DEBUG_INFO default
+__DEBUGINFO_1 = 
+!endif
+!endif
+!ifeq DEBUG_INFO 0
+__DEBUGINFO_1 = 
+!endif
+!ifeq DEBUG_INFO 1
+__DEBUGINFO_1 = debug all
+!endif
+__OPTIMIZEFLAG_2 =
+!ifeq BUILD debug
+__OPTIMIZEFLAG_2 = -od
+!endif
+!ifeq BUILD release
+__OPTIMIZEFLAG_2 = -ot -ox
+!endif
+__THREADSFLAG_5 =
+!ifeq USE_THREADS 0
+__THREADSFLAG_5 = 
+!endif
+!ifeq USE_THREADS 1
+__THREADSFLAG_5 = -bm
+!endif
+__RUNTIME_LIBS_6 =
+!ifeq RUNTIME_LIBS dynamic
+__RUNTIME_LIBS_6 = -br
+!endif
+!ifeq RUNTIME_LIBS static
+__RUNTIME_LIBS_6 = 
+!endif
+__RTTIFLAG_7 =
+!ifeq USE_RTTI 0
+__RTTIFLAG_7 = 
+!endif
+!ifeq USE_RTTI 1
+__RTTIFLAG_7 = -xr
+!endif
+__EXCEPTIONSFLAG_8 =
+!ifeq USE_EXCEPTIONS 0
+__EXCEPTIONSFLAG_8 = 
+!endif
+!ifeq USE_EXCEPTIONS 1
+__EXCEPTIONSFLAG_8 = -xs
+!endif
+__WXLIB_PROPGRID_p =
+!ifeq MONOLITHIC 0
+__WXLIB_PROPGRID_p = &
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_propgrid.lib
+!endif
+__WXLIB_ADV_p =
+!ifeq MONOLITHIC 0
+__WXLIB_ADV_p = &
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_adv.lib
+!endif
+__WXLIB_CORE_p =
+!ifeq MONOLITHIC 0
+__WXLIB_CORE_p = &
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core.lib
+!endif
+__WXLIB_BASE_p =
+!ifeq MONOLITHIC 0
+__WXLIB_BASE_p = &
+       wxbase$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
+!endif
+__WXLIB_MONO_p =
+!ifeq MONOLITHIC 1
+__WXLIB_MONO_p = &
+       wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib
+!endif
+__LIB_TIFF_p =
+!ifeq USE_GUI 1
+__LIB_TIFF_p = wxtiff$(WXDEBUGFLAG).lib
+!endif
+__LIB_JPEG_p =
+!ifeq USE_GUI 1
+__LIB_JPEG_p = wxjpeg$(WXDEBUGFLAG).lib
+!endif
+__LIB_PNG_p =
+!ifeq USE_GUI 1
+__LIB_PNG_p = wxpng$(WXDEBUGFLAG).lib
+!endif
+__GDIPLUS_LIB_p =
+!ifeq USE_GDIPLUS 1
+__GDIPLUS_LIB_p = gdiplus.lib
+!endif
+__WXUNIV_DEFINE_p =
+!ifeq WXUNIV 1
+__WXUNIV_DEFINE_p = -d__WXUNIVERSAL__
+!endif
+__DEBUG_DEFINE_p =
+!ifeq BUILD debug
+!ifeq DEBUG_FLAG default
+__DEBUG_DEFINE_p = -d__WXDEBUG__
+!endif
+!endif
+!ifeq DEBUG_FLAG 1
+__DEBUG_DEFINE_p = -d__WXDEBUG__
+!endif
+__EXCEPTIONS_DEFINE_p =
+!ifeq USE_EXCEPTIONS 0
+__EXCEPTIONS_DEFINE_p = -dwxNO_EXCEPTIONS
+!endif
+__RTTI_DEFINE_p =
+!ifeq USE_RTTI 0
+__RTTI_DEFINE_p = -dwxNO_RTTI
+!endif
+__THREAD_DEFINE_p =
+!ifeq USE_THREADS 0
+__THREAD_DEFINE_p = -dwxNO_THREADS
+!endif
+__UNICODE_DEFINE_p =
+!ifeq UNICODE 0
+__UNICODE_DEFINE_p = -dwxUSE_UNICODE=0
+!endif
+!ifeq UNICODE 1
+__UNICODE_DEFINE_p = -d_UNICODE
+!endif
+__GFXCTX_DEFINE_p =
+!ifeq USE_GDIPLUS 1
+__GFXCTX_DEFINE_p = -dwxUSE_GRAPHICS_CONTEXT=1
+!endif
+__DLLFLAG_p =
+!ifeq SHARED 1
+__DLLFLAG_p = -dWXUSINGDLL
+!endif
+
+### Variables: ###
+
+WX_RELEASE_NODOT = 29
+COMPILER_PREFIX = wat
+OBJS = &
+       $(COMPILER_PREFIX)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)
+LIBDIRNAME = .\..\..\lib\$(COMPILER_PREFIX)_$(LIBTYPE_SUFFIX)$(CFG)
+SETUPHDIR = &
+       $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)
+PROPGRID_CXXFLAGS = $(__DEBUGINFO_0) $(__OPTIMIZEFLAG_2) $(__THREADSFLAG_5) &
+       $(__RUNTIME_LIBS_6) -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) &
+       $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) &
+       $(__UNICODE_DEFINE_p) $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) &
+       -i=.\..\..\include -wx -wcd=549 -wcd=656 -wcd=657 -wcd=667 -i=. $(__DLLFLAG_p) &
+       -i=.\..\..\samples -dNOPCH $(__RTTIFLAG_7) $(__EXCEPTIONSFLAG_8) $(CPPFLAGS) &
+       $(CXXFLAGS)
+PROPGRID_OBJECTS =  &
+       $(OBJS)\propgrid_propgrid.obj &
+       $(OBJS)\propgrid_propgrid_minimal.obj &
+       $(OBJS)\propgrid_sampleprops.obj &
+       $(OBJS)\propgrid_tests.obj
+
+
+all : $(OBJS)
+$(OBJS) :
+       -if not exist $(OBJS) mkdir $(OBJS)
+
+### Targets: ###
+
+all : .SYMBOLIC $(OBJS)\propgrid.exe
+
+clean : .SYMBOLIC 
+       -if exist $(OBJS)\*.obj del $(OBJS)\*.obj
+       -if exist $(OBJS)\*.res del $(OBJS)\*.res
+       -if exist $(OBJS)\*.lbc del $(OBJS)\*.lbc
+       -if exist $(OBJS)\*.ilk del $(OBJS)\*.ilk
+       -if exist $(OBJS)\*.pch del $(OBJS)\*.pch
+       -if exist $(OBJS)\propgrid.exe del $(OBJS)\propgrid.exe
+
+$(OBJS)\propgrid.exe :  $(PROPGRID_OBJECTS) $(OBJS)\propgrid_sample.res
+       @%create $(OBJS)\propgrid.lbc
+       @%append $(OBJS)\propgrid.lbc option quiet
+       @%append $(OBJS)\propgrid.lbc name $^@
+       @%append $(OBJS)\propgrid.lbc option caseexact
+       @%append $(OBJS)\propgrid.lbc $(LDFLAGS) $(__DEBUGINFO_1)  libpath $(LIBDIRNAME) system nt_win ref '_WinMain@16'
+       @for %i in ($(PROPGRID_OBJECTS)) do @%append $(OBJS)\propgrid.lbc file %i
+       @for %i in ( $(__WXLIB_PROPGRID_p)  $(__WXLIB_ADV_p)  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)  wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE)  $(__GDIPLUS_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib) do @%append $(OBJS)\propgrid.lbc library %i
+       @%append $(OBJS)\propgrid.lbc option resource=$(OBJS)\propgrid_sample.res
+       @for %i in () do @%append $(OBJS)\propgrid.lbc option stack=%i
+       wlink @$(OBJS)\propgrid.lbc
+
+$(OBJS)\propgrid_propgrid.obj :  .AUTODEPEND .\propgrid.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRID_CXXFLAGS) $<
+
+$(OBJS)\propgrid_propgrid_minimal.obj :  .AUTODEPEND .\propgrid_minimal.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRID_CXXFLAGS) $<
+
+$(OBJS)\propgrid_sampleprops.obj :  .AUTODEPEND .\sampleprops.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRID_CXXFLAGS) $<
+
+$(OBJS)\propgrid_tests.obj :  .AUTODEPEND .\tests.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(PROPGRID_CXXFLAGS) $<
+
+$(OBJS)\propgrid_sample.res :  .AUTODEPEND .\..\sample.rc
+       wrc -q -ad -bt=nt -r -fo=$^@    -d__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p)  $(__GFXCTX_DEFINE_p) -i=$(SETUPHDIR) -i=.\..\..\include -i=. $(__DLLFLAG_p) -i=.\..\..\samples -dNOPCH $<
+
diff --git a/samples/propgrid/propgrid.bkl b/samples/propgrid/propgrid.bkl
new file mode 100644 (file)
index 0000000..a12075b
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" ?>
+<!-- $Id$ -->
+<makefile>
+
+    <include file="../../build/bakefiles/common_samples.bkl"/>
+
+    <exe id="propgrid" template="wx_sample" template_append="wx_append">
+        <sources>
+            propgrid.cpp
+            propgrid_minimal.cpp
+            sampleprops.cpp
+            tests.cpp
+        </sources>
+        <wx-lib>propgrid</wx-lib>
+        <wx-lib>adv</wx-lib>
+        <wx-lib>core</wx-lib>
+        <wx-lib>base</wx-lib>
+        <win32-res>../sample.rc</win32-res>
+    </exe>
+
+</makefile>
diff --git a/samples/propgrid/propgrid.cpp b/samples/propgrid/propgrid.cpp
new file mode 100644 (file)
index 0000000..362fb86
--- /dev/null
@@ -0,0 +1,3137 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        samples/propgrid/propgrid.cpp
+// Purpose:     wxPropertyGrid sample
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2004-09-25
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+//
+//
+// NOTES
+//
+// * Examples of custom property classes are in sampleprops.cpp.
+//
+// * Additional ones can be found below.
+//
+// * Currently there is no example of a custom property editor. However,
+//   SpinCtrl editor sample is well-commented. It can be found in
+//   contrib/src/propgrid/advprops.cpp.
+//
+// * To find code that populates the grid with properties, search for
+//   string "::Populate".
+//
+// * To find code that handles property grid changes, search for string
+//   "::OnPropertyGridChange".
+//
+// * At the end of file there is example code for using the owner-drawn combo
+//   box independently outside the wxPropertyGrid.
+//
+//
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all "standard" wxWidgets headers)
+#ifndef WX_PRECOMP
+    #include "wx/wx.h"
+#endif
+
+#include <wx/numdlg.h>
+
+// -----------------------------------------------------------------------
+
+
+// Main propertygrid header.
+#include <wx/propgrid/propgrid.h>
+
+// Extra property classes.
+#include <wx/propgrid/advprops.h>
+
+// This defines wxPropertyGridManager.
+#include <wx/propgrid/manager.h>
+
+#include "propgrid.h"
+#include "sampleprops.h"
+
+#if wxUSE_DATEPICKCTRL
+    #include <wx/datectrl.h>
+#endif
+
+#include <wx/artprov.h>
+
+
+// -----------------------------------------------------------------------
+// wxSampleMultiButtonEditor
+//   A sample editor class that has multiple buttons.
+// -----------------------------------------------------------------------
+
+class wxSampleMultiButtonEditor : public wxPGTextCtrlEditor
+{
+    WX_PG_DECLARE_EDITOR_CLASS(wxSampleMultiButtonEditor)
+public:
+    wxSampleMultiButtonEditor() {}
+    virtual ~wxSampleMultiButtonEditor() {}
+
+    wxPG_DECLARE_CREATECONTROLS
+    virtual bool OnEvent( wxPropertyGrid* propGrid,
+                          wxPGProperty* property,
+                          wxWindow* ctrl,
+                          wxEvent& event ) const;
+
+};
+
+WX_PG_IMPLEMENT_EDITOR_CLASS(SampleMultiButtonEditor,wxSampleMultiButtonEditor,
+                             wxPGTextCtrlEditor)
+
+
+wxPGWindowList wxSampleMultiButtonEditor::CreateControls( wxPropertyGrid* propGrid,
+                                                          wxPGProperty* property,
+                                                          const wxPoint& pos,
+                                                          const wxSize& sz ) const
+{
+    // Create and populate buttons-subwindow
+    wxPGMultiButton* buttons = new wxPGMultiButton( propGrid, sz );
+
+    buttons->Add( "..." );
+    buttons->Add( "A" );
+#if wxUSE_BMPBUTTON
+    buttons->Add( wxArtProvider::GetBitmap(wxART_FOLDER) );
+#endif
+
+    // Create the 'primary' editor control (textctrl in this case)
+    wxPGWindowList wndList = wxPGTextCtrlEditor::CreateControls
+                             ( propGrid, property, pos, buttons->GetPrimarySize() );
+
+    // Finally, move buttons-subwindow to correct position and make sure
+    // returned wxPGWindowList contains our custom button list.
+    buttons->FinalizePosition(pos);
+
+    wndList.SetSecondary( buttons );
+    return wndList;
+}
+
+bool wxSampleMultiButtonEditor::OnEvent( wxPropertyGrid* propGrid,
+                                         wxPGProperty* property,
+                                         wxWindow* ctrl,
+                                         wxEvent& event ) const
+{
+    if ( event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED )
+    {
+        wxPGMultiButton* buttons = (wxPGMultiButton*) propGrid->GetEditorControlSecondary();
+
+        if ( event.GetId() == buttons->GetButtonId(1) )
+        {
+            wxMessageBox(wxT("Second button was pressed"));
+            return true;
+        }
+        if ( event.GetId() == buttons->GetButtonId(2) )
+        {
+            wxMessageBox(wxT("Third button was pressed"));
+            return true;
+        }
+    }
+    return wxPGTextCtrlEditor::OnEvent(propGrid, property, ctrl, event);
+}
+
+// -----------------------------------------------------------------------
+// Validator for wxValidator use sample
+// -----------------------------------------------------------------------
+
+#if wxUSE_VALIDATORS
+
+// wxValidator for testing
+
+class wxInvalidWordValidator : public wxValidator
+{
+public:
+
+    wxInvalidWordValidator( const wxString& invalidWord )
+        : wxValidator(), m_invalidWord(invalidWord)
+    {
+    }
+
+    virtual wxObject* Clone() const
+    {
+        return new wxInvalidWordValidator(m_invalidWord);
+    }
+
+    virtual bool Validate(wxWindow* WXUNUSED(parent))
+    {
+        wxTextCtrl* tc = wxDynamicCast(GetWindow(), wxTextCtrl);
+        wxCHECK_MSG(tc, true, wxT("validator window must be wxTextCtrl"));
+
+        wxString val = tc->GetValue();
+
+        if ( val.find(m_invalidWord) == wxString::npos )
+            return true;
+
+        ::wxMessageBox(wxString::Format(wxT("%s is not allowed word"),m_invalidWord.c_str()),
+                       wxT("Validation Failure"));
+
+        return false;
+    }
+
+private:
+    wxString    m_invalidWord;
+};
+
+#endif // wxUSE_VALIDATORS
+
+// -----------------------------------------------------------------------
+// AdvImageFile Property
+// -----------------------------------------------------------------------
+
+class wxMyImageInfo;
+
+WX_DECLARE_OBJARRAY(wxMyImageInfo, wxArrayMyImageInfo);
+
+class wxMyImageInfo
+{
+public:
+    wxString    m_path;
+    wxBitmap*   m_pThumbnail1; // smaller thumbnail
+    wxBitmap*   m_pThumbnail2; // larger thumbnail
+
+    wxMyImageInfo ( const wxString& str )
+    {
+        m_path = str;
+        m_pThumbnail1 = (wxBitmap*) NULL;
+        m_pThumbnail2 = (wxBitmap*) NULL;
+    }
+    virtual ~wxMyImageInfo()
+    {
+        if ( m_pThumbnail1 )
+            delete m_pThumbnail1;
+        if ( m_pThumbnail2 )
+            delete m_pThumbnail2;
+    }
+
+};
+
+
+#include <wx/arrimpl.cpp>
+WX_DEFINE_OBJARRAY(wxArrayMyImageInfo);
+
+wxArrayMyImageInfo  g_myImageArray;
+
+
+// Preferred thumbnail height.
+#define PREF_THUMBNAIL_HEIGHT       64
+
+
+wxPGChoices wxAdvImageFileProperty::ms_choices;
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxAdvImageFileProperty,wxFileProperty,
+                               wxString,const wxString&,ChoiceAndButton)
+
+
+wxAdvImageFileProperty::wxAdvImageFileProperty( const wxString& label,
+                                                          const wxString& name,
+                                                          const wxString& value)
+    : wxFileProperty(label,name,value)
+{
+    m_wildcard = wxPGGetDefaultImageWildcard();
+
+    m_index = -1;
+
+    m_pImage = (wxImage*) NULL;
+
+    // Only show names.
+    m_flags &= ~(wxPG_PROP_SHOW_FULL_FILENAME);
+}
+
+wxAdvImageFileProperty::~wxAdvImageFileProperty ()
+{
+    // Delete old image
+    if ( m_pImage )
+    {
+        delete m_pImage;
+        m_pImage = (wxImage*) NULL;
+    }
+}
+
+void wxAdvImageFileProperty::OnSetValue()
+{
+    wxFileProperty::OnSetValue();
+
+    // Delete old image
+    if ( m_pImage )
+    {
+        delete m_pImage;
+        m_pImage = (wxImage*) NULL;
+    }
+
+    wxString imagename = GetValueAsString(0);
+
+    if ( imagename.length() )
+    {
+        size_t prevCount = g_myImageArray.GetCount();
+        int index = ms_choices.Index(imagename);
+
+        // If not in table, add now.
+        if ( index == wxNOT_FOUND )
+        {
+            ms_choices.Add( imagename );
+            g_myImageArray.Add( new wxMyImageInfo( m_filename.GetFullPath() ) );
+
+            index = g_myImageArray.GetCount() - 1;
+        }
+
+        // If no thumbnail ready, then need to load image.
+        if ( !g_myImageArray[index].m_pThumbnail2 )
+        {
+            // Load if file exists.
+            if ( m_filename.FileExists() )
+                m_pImage = new wxImage( m_filename.GetFullPath() );
+        }
+
+        m_index = index;
+
+        wxPropertyGrid* pg = GetGrid();
+        wxWindow* control = pg->GetEditorControl();
+
+        if ( pg->GetSelection() == this && control )
+        {
+            wxString name = GetValueAsString(0);
+
+            if ( g_myImageArray.GetCount() != prevCount )
+            {
+                wxASSERT( g_myImageArray.GetCount() == (prevCount+1) );
+
+                // Add to the control's array.
+                // (should be added to own array earlier)
+
+                if ( control )
+                    GetEditorClass()->InsertItem(control, name, -1);
+            }
+
+            if ( control )
+               GetEditorClass()->UpdateControl(this, control);
+        }
+    }
+    else
+        m_index = -1;
+}
+
+int wxAdvImageFileProperty::GetChoiceInfo( wxPGChoiceInfo* choiceinfo )
+{
+    if ( choiceinfo )
+        choiceinfo->m_choices = &ms_choices;
+
+    return m_index;
+}
+
+bool wxAdvImageFileProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argFlags) ) const
+{
+    wxASSERT( number >= 0 );
+    return StringToValue( variant, ms_choices.GetLabel(number), wxPG_FULL_VALUE );
+}
+
+bool wxAdvImageFileProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* primary,
+   wxEvent& event )
+{
+    if ( propgrid->IsMainButtonEvent(event) )
+    {
+        return wxFileProperty::OnEvent(propgrid,primary,event);
+    }
+    return false;
+}
+
+wxSize wxAdvImageFileProperty::OnMeasureImage( int item ) const
+{
+    if ( item == -1 )
+        return wxPG_DEFAULT_IMAGE_SIZE;
+
+    return wxSize(PREF_THUMBNAIL_HEIGHT,PREF_THUMBNAIL_HEIGHT);
+}
+
+void wxAdvImageFileProperty::LoadThumbnails( size_t index )
+{
+    wxMyImageInfo& mii = g_myImageArray[index];
+
+    if ( !mii.m_pThumbnail2 )
+    {
+
+        if ( !m_pImage || !m_pImage->Ok() ||
+             m_filename != mii.m_path
+           )
+        {
+            if ( m_pImage )
+                delete m_pImage;
+            m_pImage = new wxImage( mii.m_path );
+        }
+
+        if ( m_pImage && m_pImage->Ok() )
+        {
+            int im_wid = m_pImage->GetWidth();
+            int im_hei = m_pImage->GetHeight();
+            if ( im_hei > PREF_THUMBNAIL_HEIGHT )
+            {
+                // TNW = (TNH*IW)/IH
+                im_wid = (PREF_THUMBNAIL_HEIGHT*m_pImage->GetWidth())/m_pImage->GetHeight();
+                im_hei = PREF_THUMBNAIL_HEIGHT;
+            }
+
+            m_pImage->Rescale( im_wid, im_hei );
+
+            mii.m_pThumbnail2 = new wxBitmap( *m_pImage );
+
+            wxSize cis = GetParentState()->GetGrid()->GetImageSize();
+            m_pImage->Rescale ( cis.x, cis.y );
+
+            mii.m_pThumbnail1 = new wxBitmap( *m_pImage );
+
+        }
+
+        if ( m_pImage )
+        {
+            delete m_pImage;
+            m_pImage = (wxImage*) NULL;
+        }
+    }
+}
+
+void wxAdvImageFileProperty::OnCustomPaint( wxDC& dc,
+                                                 const wxRect& rect,
+                                                 wxPGPaintData& pd )
+{
+    int index = m_index;
+    if ( pd.m_choiceItem >= 0 )
+        index = pd.m_choiceItem;
+
+    //wxLogDebug(wxT("%i"),index);
+
+    if ( index >= 0 )
+    {
+        LoadThumbnails(index);
+
+        // Is this a measure item call?
+        if ( rect.x < 0 )
+        {
+            // Variable height
+            //pd.m_drawnHeight = PREF_THUMBNAIL_HEIGHT;
+            wxBitmap* pBitmap = (wxBitmap*)g_myImageArray[index].m_pThumbnail2;
+            if ( pBitmap )
+                pd.m_drawnHeight = pBitmap->GetHeight();
+            else
+                pd.m_drawnHeight = 16;
+            return;
+        }
+
+        // Draw the thumbnail
+
+        wxBitmap* pBitmap;
+
+        if ( pd.m_choiceItem >= 0 )
+            pBitmap = (wxBitmap*)g_myImageArray[index].m_pThumbnail2;
+        else
+            pBitmap = (wxBitmap*)g_myImageArray[index].m_pThumbnail1;
+
+        if ( pBitmap )
+        {
+            dc.DrawBitmap ( *pBitmap, rect.x, rect.y, FALSE );
+
+            // Tell the caller how wide we drew.
+            pd.m_drawnWidth = pBitmap->GetWidth();
+
+            return;
+        }
+    }
+
+    // No valid file - just draw a white box.
+    dc.SetBrush ( *wxWHITE_BRUSH );
+    dc.DrawRectangle ( rect );
+}
+
+
+// -----------------------------------------------------------------------
+// wxVectorProperty
+// -----------------------------------------------------------------------
+
+// See propgridsample.h for wxVector3f class
+
+WX_PG_IMPLEMENT_VARIANT_DATA(wxVector3fVariantData, wxVector3f)
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxVectorProperty,wxPGProperty,
+                               wxVector3f,const wxVector3f&,TextCtrl)
+
+
+wxVectorProperty::wxVectorProperty( const wxString& label,
+                                              const wxString& name,
+                                              const wxVector3f& value )
+    : wxPGProperty(label,name)
+{
+    SetValue( wxVector3fToVariant(value) );
+    AddChild( new wxFloatProperty(wxT("X"),wxPG_LABEL,value.x) );
+    AddChild( new wxFloatProperty(wxT("Y"),wxPG_LABEL,value.y) );
+    AddChild( new wxFloatProperty(wxT("Z"),wxPG_LABEL,value.z) );
+}
+
+wxVectorProperty::~wxVectorProperty() { }
+
+void wxVectorProperty::RefreshChildren()
+{
+    if ( !GetChildCount() ) return;
+    wxVector3f& vector = wxVector3fFromVariant(m_value);
+    Item(0)->SetValue( vector.x );
+    Item(1)->SetValue( vector.y );
+    Item(2)->SetValue( vector.z );
+}
+
+void wxVectorProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+{
+    wxVector3f& vector = wxVector3fFromVariant(thisValue);
+    switch ( childIndex )
+    {
+        case 0: vector.x = childValue.GetDouble(); break;
+        case 1: vector.y = childValue.GetDouble(); break;
+        case 2: vector.z = childValue.GetDouble(); break;
+    }
+}
+
+
+// -----------------------------------------------------------------------
+// wxTriangleProperty
+// -----------------------------------------------------------------------
+
+// See propgridsample.h for wxTriangle class
+
+WX_PG_IMPLEMENT_VARIANT_DATA(wxTriangleVariantData, wxTriangle)
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxTriangleProperty,wxPGProperty,
+                               wxTriangle,const wxTriangle&,TextCtrl)
+
+
+wxTriangleProperty::wxTriangleProperty( const wxString& label,
+                                                  const wxString& name,
+                                                  const wxTriangle& value)
+    : wxPGProperty(label,name)
+{
+    SetValue( wxTriangleToVariant(value) );
+    AddChild( new wxVectorProperty(wxT("A"),wxPG_LABEL,value.a) );
+    AddChild( new wxVectorProperty(wxT("B"),wxPG_LABEL,value.b) );
+    AddChild( new wxVectorProperty(wxT("C"),wxPG_LABEL,value.c) );
+}
+
+wxTriangleProperty::~wxTriangleProperty() { }
+
+void wxTriangleProperty::RefreshChildren()
+{
+    if ( !GetChildCount() ) return;
+    wxTriangle& triangle = wxTriangleFromVariant(m_value);
+    Item(0)->SetValue( wxVector3fToVariant(triangle.a) );
+    Item(1)->SetValue( wxVector3fToVariant(triangle.b) );
+    Item(2)->SetValue( wxVector3fToVariant(triangle.c) );
+}
+
+void wxTriangleProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+{
+    wxTriangle& triangle = wxTriangleFromVariant(thisValue);
+    wxVector3f& vector = wxVector3fFromVariant(childValue);
+    switch ( childIndex )
+    {
+        case 0: triangle.a = vector; break;
+        case 1: triangle.b = vector; break;
+        case 2: triangle.c = vector; break;
+    }
+}
+
+
+// -----------------------------------------------------------------------
+// wxSingleChoiceDialogAdapter (wxPGEditorDialogAdapter sample)
+// -----------------------------------------------------------------------
+
+class wxSingleChoiceDialogAdapter : public wxPGEditorDialogAdapter
+{
+public:
+
+    wxSingleChoiceDialogAdapter( const wxPGChoices& choices )
+        : wxPGEditorDialogAdapter(), m_choices(choices)
+    {
+    }
+
+    virtual bool DoShowDialog( wxPropertyGrid* WXUNUSED(propGrid),
+                               wxPGProperty* WXUNUSED(property) )
+    {
+        wxString s = ::wxGetSingleChoice(wxT("Message"),
+                                         wxT("Caption"),
+                                         m_choices.GetLabels());
+        if ( s.length() )
+        {
+            SetValue(s);
+            return true;
+        }
+
+        return false;
+    }
+
+protected:
+    const wxPGChoices&  m_choices;
+};
+
+
+class SingleChoiceProperty : public wxStringProperty
+{
+public:
+
+    SingleChoiceProperty( const wxString& label,
+                          const wxString& name = wxPG_LABEL,
+                          const wxString& value = wxEmptyString )
+        : wxStringProperty(label, name, value)
+    {
+        // Prepare choices
+        m_choices.Add(wxT("Cat"));
+        m_choices.Add(wxT("Dog"));
+        m_choices.Add(wxT("Gibbon"));
+        m_choices.Add(wxT("Otter"));
+    }
+
+    // Set editor to have button
+    virtual const wxPGEditor* DoGetEditorClass() const
+    {
+        return wxPG_EDITOR(TextCtrlAndButton);
+    }
+
+    // Set what happens on button click
+    virtual wxPGEditorDialogAdapter* GetEditorDialog() const
+    {
+        return new wxSingleChoiceDialogAdapter(m_choices);
+    }
+
+protected:
+    wxPGChoices m_choices;
+};
+
+// -----------------------------------------------------------------------
+// Menu IDs
+// -----------------------------------------------------------------------
+
+enum
+{
+    PGID = 1,
+    TCID,
+    ID_ABOUT,
+    ID_QUIT,
+    ID_APPENDPROP,
+    ID_APPENDCAT,
+    ID_INSERTPROP,
+    ID_INSERTCAT,
+    ID_ENABLE,
+    ID_HIDE,
+    ID_DELETE,
+    ID_DELETER,
+    ID_DELETEALL,
+    ID_UNSPECIFY,
+    ID_ITERATE1,
+    ID_ITERATE2,
+    ID_ITERATE3,
+    ID_ITERATE4,
+    ID_CLEARMODIF,
+    ID_FREEZE,
+    ID_DUMPLIST,
+    ID_COLOURSCHEME1,
+    ID_COLOURSCHEME2,
+    ID_COLOURSCHEME3,
+    ID_CATCOLOURS,
+    ID_SETCOLOUR,
+    ID_STATICLAYOUT,
+    ID_CLEAR,
+    ID_POPULATE1,
+    ID_POPULATE2,
+    ID_COLLAPSE,
+    ID_COLLAPSEALL,
+    ID_GETVALUES,
+    ID_SETVALUES,
+    ID_SETVALUES2,
+    ID_RUNTESTFULL,
+    ID_RUNTESTPARTIAL,
+    ID_FITCOLUMNS,
+    ID_CHANGEFLAGSITEMS,
+    ID_TESTINSERTCHOICE,
+    ID_TESTDELETECHOICE,
+    ID_INSERTPAGE,
+    ID_REMOVEPAGE,
+    ID_SETSPINCTRLEDITOR,
+    ID_SETPROPERTYVALUE,
+    ID_TESTREPLACE,
+    ID_SETCOLUMNS,
+    ID_TESTXRC,
+    ID_ENABLECOMMONVALUES,
+    ID_SELECTSTYLE,
+    ID_SAVESTATE,
+    ID_RESTORESTATE,
+    ID_RUNMINIMAL
+};
+
+// -----------------------------------------------------------------------
+// Event table
+// -----------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(FormMain, wxFrame)
+    EVT_IDLE(FormMain::OnIdle)
+    EVT_MOVE(FormMain::OnMove)
+    EVT_SIZE(FormMain::OnResize)
+
+    // This occurs when a property is selected
+    EVT_PG_SELECTED( PGID, FormMain::OnPropertyGridSelect )
+    // This occurs when a property value changes
+    EVT_PG_CHANGED( PGID, FormMain::OnPropertyGridChange )
+    // This occurs just prior a property value is changed
+    EVT_PG_CHANGING( PGID, FormMain::OnPropertyGridChanging )
+    // This occurs when a mouse moves over another property
+    EVT_PG_HIGHLIGHTED( PGID, FormMain::OnPropertyGridHighlight )
+    // This occurs when mouse is right-clicked.
+    EVT_PG_RIGHT_CLICK( PGID, FormMain::OnPropertyGridItemRightClick )
+    // This occurs when mouse is double-clicked.
+    EVT_PG_DOUBLE_CLICK( PGID, FormMain::OnPropertyGridItemDoubleClick )
+    // This occurs when propgridmanager's page changes.
+    EVT_PG_PAGE_CHANGED( PGID, FormMain::OnPropertyGridPageChange )
+    // This occurs when property's editor button (if any) is clicked.
+    EVT_BUTTON( PGID, FormMain::OnPropertyGridButtonClick )
+
+    EVT_PG_ITEM_COLLAPSED( PGID, FormMain::OnPropertyGridItemCollapse )
+    EVT_PG_ITEM_EXPANDED( PGID, FormMain::OnPropertyGridItemExpand )
+
+    EVT_TEXT( PGID, FormMain::OnPropertyGridTextUpdate )
+
+    //
+    // Rest of the events are not property grid specific
+    EVT_KEY_DOWN( FormMain::OnPropertyGridKeyEvent )
+    EVT_KEY_UP( FormMain::OnPropertyGridKeyEvent )
+
+    EVT_MENU( ID_APPENDPROP, FormMain::OnAppendPropClick )
+    EVT_MENU( ID_APPENDCAT, FormMain::OnAppendCatClick )
+    EVT_MENU( ID_INSERTPROP, FormMain::OnInsertPropClick )
+    EVT_MENU( ID_INSERTCAT, FormMain::OnInsertCatClick )
+    EVT_MENU( ID_DELETE, FormMain::OnDelPropClick )
+    EVT_MENU( ID_DELETER, FormMain::OnDelPropRClick )
+    EVT_MENU( ID_UNSPECIFY, FormMain::OnMisc )
+    EVT_MENU( ID_DELETEALL, FormMain::OnClearClick )
+    EVT_MENU( ID_ENABLE, FormMain::OnEnableDisable )
+    EVT_MENU( ID_HIDE, FormMain::OnHideShow )
+    EVT_MENU( ID_ITERATE1, FormMain::OnIterate1Click )
+    EVT_MENU( ID_ITERATE2, FormMain::OnIterate2Click )
+    EVT_MENU( ID_ITERATE3, FormMain::OnIterate3Click )
+    EVT_MENU( ID_ITERATE4, FormMain::OnIterate4Click )
+    EVT_MENU( ID_SETCOLOUR, FormMain::OnMisc )
+    EVT_MENU( ID_CLEARMODIF, FormMain::OnClearModifyStatusClick )
+    EVT_MENU( ID_FREEZE, FormMain::OnFreezeClick )
+    EVT_MENU( ID_DUMPLIST, FormMain::OnDumpList )
+
+    EVT_MENU( ID_COLOURSCHEME1, FormMain::OnColourScheme )
+    EVT_MENU( ID_COLOURSCHEME2, FormMain::OnColourScheme )
+    EVT_MENU( ID_COLOURSCHEME3, FormMain::OnColourScheme )
+    EVT_MENU( ID_COLOURSCHEME4, FormMain::OnColourScheme )
+
+    EVT_MENU( ID_ABOUT, FormMain::OnAbout )
+    EVT_MENU( ID_QUIT, FormMain::OnCloseClick )
+
+    EVT_MENU( ID_CATCOLOURS, FormMain::OnCatColours )
+    EVT_MENU( ID_SETCOLUMNS, FormMain::OnSetColumns )
+    EVT_MENU( ID_TESTXRC, FormMain::OnTestXRC )
+    EVT_MENU( ID_ENABLECOMMONVALUES, FormMain::OnEnableCommonValues )
+    EVT_MENU( ID_SELECTSTYLE, FormMain::OnSelectStyle )
+
+    EVT_MENU( ID_STATICLAYOUT, FormMain::OnMisc )
+    EVT_MENU( ID_CLEAR, FormMain::OnMisc )
+    EVT_MENU( ID_COLLAPSE, FormMain::OnMisc )
+    EVT_MENU( ID_COLLAPSEALL, FormMain::OnMisc )
+
+    EVT_MENU( ID_POPULATE1, FormMain::OnPopulateClick )
+    EVT_MENU( ID_POPULATE2, FormMain::OnPopulateClick )
+
+    EVT_MENU( ID_GETVALUES, FormMain::OnMisc )
+    EVT_MENU( ID_SETVALUES, FormMain::OnMisc )
+    EVT_MENU( ID_SETVALUES2, FormMain::OnMisc )
+
+    EVT_MENU( ID_FITCOLUMNS, FormMain::OnFitColumnsClick )
+
+    EVT_MENU( ID_CHANGEFLAGSITEMS, FormMain::OnChangeFlagsPropItemsClick )
+
+    EVT_MENU( ID_RUNTESTFULL, FormMain::OnMisc )
+    EVT_MENU( ID_RUNTESTPARTIAL, FormMain::OnMisc )
+
+    EVT_MENU( ID_TESTINSERTCHOICE, FormMain::OnInsertChoice )
+    EVT_MENU( ID_TESTDELETECHOICE, FormMain::OnDeleteChoice )
+
+    EVT_MENU( ID_INSERTPAGE, FormMain::OnInsertPage )
+    EVT_MENU( ID_REMOVEPAGE, FormMain::OnRemovePage )
+
+    EVT_MENU( ID_SAVESTATE, FormMain::OnSaveState )
+    EVT_MENU( ID_RESTORESTATE, FormMain::OnRestoreState )
+
+    EVT_MENU( ID_SETSPINCTRLEDITOR, FormMain::OnSetSpinCtrlEditorClick )
+    EVT_MENU( ID_TESTREPLACE, FormMain::OnTestReplaceClick )
+    EVT_MENU( ID_SETPROPERTYVALUE, FormMain::OnSetPropertyValue )
+
+    EVT_MENU( ID_RUNMINIMAL, FormMain::OnRunMinimalClick )
+
+    EVT_CONTEXT_MENU( FormMain::OnContextMenu )
+END_EVENT_TABLE()
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnMove( wxMoveEvent& event )
+{
+    if ( !m_pPropGridManager )
+    {
+        // this check is here so the frame layout can be tested
+        // without creating propertygrid
+        event.Skip();
+        return;
+    }
+
+    // Update position properties
+    int x, y;
+    GetPosition(&x,&y);
+
+    wxPGProperty* id;
+
+    // Must check if properties exist (as they may be deleted).
+
+    // Using m_pPropGridManager, we can scan all pages automatically.
+    id = m_pPropGridManager->GetPropertyByName( wxT("X") );
+    if ( id )
+        m_pPropGridManager->SetPropertyValue( id, x );
+
+    id = m_pPropGridManager->GetPropertyByName( wxT("Y") );
+    if ( id )
+        m_pPropGridManager->SetPropertyValue( id, y );
+
+    id = m_pPropGridManager->GetPropertyByName( wxT("Position") );
+    if ( id )
+        m_pPropGridManager->SetPropertyValue( id, wxPoint(x,y) );
+
+    // Should always call event.Skip() in frame's MoveEvent handler
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnResize( wxSizeEvent& event )
+{
+    if ( !m_pPropGridManager )
+    {
+        // this check is here so the frame layout can be tested
+        // without creating propertygrid
+        event.Skip();
+        return;
+    }
+
+    // Update size properties
+    int w, h;
+    GetSize(&w,&h);
+
+    wxPGProperty* id;
+    wxPGProperty* p;
+
+    // Must check if properties exist (as they may be deleted).
+
+    // Using m_pPropGridManager, we can scan all pages automatically.
+    p = m_pPropGridManager->GetPropertyByName( wxT("Width") );
+    if ( p && !p->IsValueUnspecified() )
+        m_pPropGridManager->SetPropertyValue( p, w );
+
+    p = m_pPropGridManager->GetPropertyByName( wxT("Height") );
+    if ( p && !p->IsValueUnspecified() )
+        m_pPropGridManager->SetPropertyValue( p, h );
+
+    id = m_pPropGridManager->GetPropertyByName ( wxT("Size") );
+    if ( id )
+        m_pPropGridManager->SetPropertyValue( id, wxSize(w,h) );
+
+    // Should always call event.Skip() in frame's SizeEvent handler
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridChanging( wxPropertyGridEvent& event )
+{
+    wxPGProperty* p = event.GetProperty();
+
+    if ( p->GetName() == wxT("Font") )
+    {
+        int res =
+        wxMessageBox(wxString::Format(wxT("'%s' is about to change (to variant of type '%s')\n\nAllow or deny?"),
+                                      p->GetName().c_str(),event.GetValue().GetType().c_str()),
+                     wxT("Testing wxEVT_PG_CHANGING"), wxYES_NO, m_pPropGridManager);
+
+        if ( res == wxNO )
+        {
+            wxASSERT(event.CanVeto());
+
+            event.Veto();
+
+            // Since we ask a question, it is better if we omit any validation
+            // failure behavior.
+            event.SetValidationFailureBehavior(0);
+        }
+    }
+}
+
+//
+// Note how we use three types of value getting in this method:
+//   A) event.GetPropertyValueAsXXX
+//   B) event.GetPropertValue, and then variant's GetXXX
+//   C) grid's GetPropertyValueAsXXX(id)
+//
+void FormMain::OnPropertyGridChange( wxPropertyGridEvent& event )
+{
+    wxPGProperty* property = event.GetProperty();
+
+    const wxString& name = property->GetName();
+    wxVariant value = property->GetValue();
+
+    // Don't handle 'unspecified' values
+    if ( value.IsNull() )
+        return;
+
+    // Some settings are disabled outside Windows platform
+    if ( name == wxT("X") )
+        SetSize ( m_pPropGridManager->GetPropertyValueAsInt(property), -1, -1, -1, wxSIZE_USE_EXISTING );
+    else if ( name == wxT("Y") )
+    // wxPGVariantToInt is safe long int value getter
+        SetSize ( -1, wxPGVariantToInt(value), -1, -1, wxSIZE_USE_EXISTING );
+    else if ( name == wxT("Width") )
+        SetSize ( -1, -1, m_pPropGridManager->GetPropertyValueAsInt(property), -1, wxSIZE_USE_EXISTING );
+    else if ( name == wxT("Height") )
+        SetSize ( -1, -1, -1, wxPGVariantToInt(value), wxSIZE_USE_EXISTING );
+    else if ( name == wxT("Label") )
+    {
+        SetTitle ( m_pPropGridManager->GetPropertyValueAsString(property) );
+    }
+    else if ( name == wxT("Password") )
+    {
+        static int pwdMode = 0;
+
+        //m_pPropGridManager->SetPropertyAttribute(property, wxPG_STRING_PASSWORD, (long)pwdMode);
+
+        pwdMode++;
+        pwdMode &= 1;
+    }
+    else
+    if ( name == wxT("Font") )
+    {
+        wxFont& font = *wxDynamicCast(m_pPropGridManager->GetPropertyValueAsWxObjectPtr(property), wxFont);
+        wxASSERT( &font && font.Ok() );
+
+        m_pPropGridManager->SetFont( font );
+    }
+    else
+    if ( name == wxT("Margin Colour") )
+    {
+        wxColourPropertyValue& cpv = *wxGetVariantCast(value,wxColourPropertyValue);
+        m_pPropGridManager->GetGrid()->SetMarginColour ( cpv.m_colour );
+    }
+    else if ( name == wxT("Cell Colour") )
+    {
+        wxColourPropertyValue* cpv = wxGetVariantCast(value,wxColourPropertyValue);
+        wxASSERT( cpv );
+        m_pPropGridManager->GetGrid()->SetCellBackgroundColour( cpv->m_colour );
+    }
+    else if ( name == wxT("Line Colour") )
+    {
+        wxColourPropertyValue* cpv = wxGetVariantCast(value,wxColourPropertyValue);
+        wxASSERT( cpv );
+        m_pPropGridManager->GetGrid()->SetLineColour( cpv->m_colour );
+    }
+    else if ( name == wxT("Cell Text Colour") )
+    {
+        wxColourPropertyValue* cpv = wxGetVariantCast(value,wxColourPropertyValue);
+        wxASSERT( cpv );
+        m_pPropGridManager->GetGrid()->SetCellTextColour( cpv->m_colour );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridSelect( wxPropertyGridEvent& event )
+{
+    wxPGProperty* property = event.GetProperty();
+    if ( property )
+    {
+        m_itemEnable->Enable( TRUE );
+        if ( property->IsEnabled() )
+            m_itemEnable->SetItemLabel( wxT("Disable") );
+        else
+            m_itemEnable->SetItemLabel( wxT("Enable") );
+    }
+    else
+    {
+        m_itemEnable->Enable( FALSE );
+    }
+
+#if wxUSE_STATUSBAR
+    wxPGProperty* prop = event.GetProperty();
+    wxStatusBar* sb = GetStatusBar();
+    if ( prop )
+    {
+        wxString text(wxT("Selected: "));
+        text += m_pPropGridManager->GetPropertyLabel( prop );
+        sb->SetStatusText ( text );
+    }
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridPageChange( wxPropertyGridEvent& WXUNUSED(event) )
+{
+#if wxUSE_STATUSBAR
+    wxStatusBar* sb = GetStatusBar();
+    wxString text(wxT("Page Changed: "));
+    text += m_pPropGridManager->GetPageName(m_pPropGridManager->GetSelectedPage());
+    sb->SetStatusText( text );
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridHighlight( wxPropertyGridEvent& WXUNUSED(event) )
+{
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridItemRightClick( wxPropertyGridEvent& event )
+{
+#if wxUSE_STATUSBAR
+    wxPGProperty* prop = event.GetProperty();
+    wxStatusBar* sb = GetStatusBar();
+    if ( prop )
+    {
+        wxString text(wxT("Right-clicked: "));
+        text += prop->GetLabel();
+        text += wxT(", name=");
+        text += m_pPropGridManager->GetPropertyName(prop);
+        sb->SetStatusText( text );
+    }
+    else
+    {
+        sb->SetStatusText( wxEmptyString );
+    }
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridItemDoubleClick( wxPropertyGridEvent& event )
+{
+#if wxUSE_STATUSBAR
+    wxPGProperty* prop = event.GetProperty();
+    wxStatusBar* sb = GetStatusBar();
+    if ( prop )
+    {
+        wxString text(wxT("Double-clicked: "));
+        text += prop->GetLabel();
+        text += wxT(", name=");
+        text += m_pPropGridManager->GetPropertyName(prop);
+        sb->SetStatusText ( text );
+    }
+    else
+    {
+        sb->SetStatusText ( wxEmptyString );
+    }
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridButtonClick ( wxCommandEvent& )
+{
+#if wxUSE_STATUSBAR
+    wxPGProperty* prop = m_pPropGridManager->GetSelectedProperty();
+    wxStatusBar* sb = GetStatusBar();
+    if ( prop )
+    {
+        wxString text(wxT("Button clicked: "));
+        text += m_pPropGridManager->GetPropertyLabel(prop);
+        text += wxT(", name=");
+        text += m_pPropGridManager->GetPropertyName(prop);
+        sb->SetStatusText( text );
+    }
+    else
+    {
+        ::wxMessageBox(wxT("SHOULD NOT HAPPEN!!!"));
+    }
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridItemCollapse( wxPropertyGridEvent& )
+{
+    wxLogDebug(wxT("Item was Collapsed"));
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridItemExpand( wxPropertyGridEvent& )
+{
+    wxLogDebug(wxT("Item was Expanded"));
+}
+
+// -----------------------------------------------------------------------
+
+// EVT_TEXT handling
+void FormMain::OnPropertyGridTextUpdate( wxCommandEvent& event )
+{
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPropertyGridKeyEvent( wxKeyEvent& WXUNUSED(event) )
+{
+    // Occurs on wxGTK mostly, but not wxMSW.
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnLabelTextChange( wxCommandEvent& WXUNUSED(event) )
+{
+// Uncomment following to allow property label modify in real-time
+//    wxPGProperty& p = m_pPropGridManager->GetGrid()->GetSelection();
+//    if ( !p.IsOk() ) return;
+//    m_pPropGridManager->SetPropertyLabel( p, m_tcPropLabel->DoGetValue() );
+}
+
+// -----------------------------------------------------------------------
+
+static const wxChar* _fs_windowstyle_labels[] = {
+    wxT("wxSIMPLE_BORDER"),
+    wxT("wxDOUBLE_BORDER"),
+    wxT("wxSUNKEN_BORDER"),
+    wxT("wxRAISED_BORDER"),
+    wxT("wxNO_BORDER"),
+    wxT("wxTRANSPARENT_WINDOW"),
+    wxT("wxTAB_TRAVERSAL"),
+    wxT("wxWANTS_CHARS"),
+#if wxNO_FULL_REPAINT_ON_RESIZE
+    wxT("wxNO_FULL_REPAINT_ON_RESIZE"),
+#endif
+    wxT("wxVSCROLL"),
+    wxT("wxALWAYS_SHOW_SB"),
+    wxT("wxCLIP_CHILDREN"),
+#if wxFULL_REPAINT_ON_RESIZE
+    wxT("wxFULL_REPAINT_ON_RESIZE"),
+#endif
+    (const wxChar*) NULL // terminator is always needed
+};
+
+static const long _fs_windowstyle_values[] = {
+    wxSIMPLE_BORDER,
+    wxDOUBLE_BORDER,
+    wxSUNKEN_BORDER,
+    wxRAISED_BORDER,
+    wxNO_BORDER,
+    wxTRANSPARENT_WINDOW,
+    wxTAB_TRAVERSAL,
+    wxWANTS_CHARS,
+#if wxNO_FULL_REPAINT_ON_RESIZE
+    wxNO_FULL_REPAINT_ON_RESIZE,
+#endif
+    wxVSCROLL,
+    wxALWAYS_SHOW_SB,
+    wxCLIP_CHILDREN,
+#if wxFULL_REPAINT_ON_RESIZE
+    wxFULL_REPAINT_ON_RESIZE
+#endif
+};
+
+static const wxChar* _fs_framestyle_labels[] = {
+    wxT("wxCAPTION"),
+    wxT("wxMINIMIZE"),
+    wxT("wxMAXIMIZE"),
+    wxT("wxCLOSE_BOX"),
+    wxT("wxSTAY_ON_TOP"),
+    wxT("wxSYSTEM_MENU"),
+    wxT("wxRESIZE_BORDER"),
+    wxT("wxFRAME_TOOL_WINDOW"),
+    wxT("wxFRAME_NO_TASKBAR"),
+    wxT("wxFRAME_FLOAT_ON_PARENT"),
+    wxT("wxFRAME_SHAPED"),
+    (const wxChar*) NULL
+};
+
+static const long _fs_framestyle_values[] = {
+    wxCAPTION,
+    wxMINIMIZE,
+    wxMAXIMIZE,
+    wxCLOSE_BOX,
+    wxSTAY_ON_TOP,
+    wxSYSTEM_MENU,
+    wxRESIZE_BORDER,
+    wxFRAME_TOOL_WINDOW,
+    wxFRAME_NO_TASKBAR,
+    wxFRAME_FLOAT_ON_PARENT,
+    wxFRAME_SHAPED
+};
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnTestXRC(wxCommandEvent& WXUNUSED(event))
+{
+    wxMessageBox(wxT("Sorrt, not yet implemented"));
+}
+
+void FormMain::OnEnableCommonValues(wxCommandEvent& WXUNUSED(event))
+{
+    wxPGProperty* prop = m_pPropGridManager->GetSelectedProperty();
+    if ( prop )
+        prop->EnableCommonValue();
+    else
+        wxMessageBox(wxT("First select a property"));
+}
+
+void FormMain::PopulateWithStandardItems ()
+{
+    wxPropertyGridManager* pgman = m_pPropGridManager;
+    wxPropertyGridPage* pg = pgman->GetPage(wxT("Standard Items"));
+
+    // Append is ideal way to add items to wxPropertyGrid.
+    pg->Append( new wxPropertyCategory(wxT("Appearance"),wxPG_LABEL) );
+
+    pg->Append( new wxStringProperty(wxT("Label"),wxPG_LABEL,GetTitle()) );
+    pg->Append( new wxFontProperty(wxT("Font"),wxPG_LABEL) );
+    pg->SetPropertyHelpString ( wxT("Font"), wxT("Editing this will change font used in the property grid.") );
+
+    pg->Append( new wxSystemColourProperty(wxT("Margin Colour"),wxPG_LABEL,
+        pg->GetGrid()->GetMarginColour()) );
+
+    pg->Append( new wxSystemColourProperty(wxT("Cell Colour"),wxPG_LABEL,
+        pg->GetGrid()->GetCellBackgroundColour()) );
+    pg->Append( new wxSystemColourProperty(wxT("Cell Text Colour"),wxPG_LABEL,
+        pg->GetGrid()->GetCellTextColour()) );
+    pg->Append( new wxSystemColourProperty(wxT("Line Colour"),wxPG_LABEL,
+        pg->GetGrid()->GetLineColour()) );
+    pg->Append( new wxFlagsProperty(wxT("Window Styles"),wxPG_LABEL,
+        m_combinedFlags, GetWindowStyle()) );
+
+    //pg->SetPropertyAttribute(wxT("Window Styles"),wxPG_BOOL_USE_CHECKBOX,true,wxPG_RECURSE);
+
+    pg->Append( new wxCursorProperty(wxT("Cursor"),wxPG_LABEL) );
+
+    pg->Append( new wxPropertyCategory(wxT("Position"),wxT("PositionCategory")) );
+    pg->SetPropertyHelpString( wxT("PositionCategory"), wxT("Change in items in this category will cause respective changes in frame.") );
+
+    // Let's demonstrate 'Units' attribute here
+
+    // Note that we use many attribute constants instead of strings here
+    // (for instance, wxPG_ATTR_MIN, instead of wxT("min")).
+    // Using constant may reduce binary size.
+
+    pg->Append( new wxIntProperty(wxT("Height"),wxPG_LABEL,480) );
+    pg->SetPropertyAttribute(wxT("Height"), wxPG_ATTR_MIN, (long)10 );
+    pg->SetPropertyAttribute(wxT("Height"), wxPG_ATTR_MAX, (long)2048 );
+    pg->SetPropertyAttribute(wxT("Height"), wxPG_ATTR_UNITS, wxT("Pixels") );
+
+    // Set value to unspecified so that InlineHelp attribute will be demonstrated
+    pg->SetPropertyValueUnspecified(wxT("Height"));
+    pg->SetPropertyAttribute(wxT("Height"), wxPG_ATTR_INLINE_HELP, wxT("Enter new height for window") );
+    pg->SetPropertyHelpString(wxT("Height"), wxT("This property uses attributes \"Units\" and \"InlineHelp\".") );
+
+    pg->Append( new wxIntProperty(wxT("Width"),wxPG_LABEL,640) );
+    pg->SetPropertyAttribute(wxT("Width"), wxPG_ATTR_MIN, (long)10 );
+    pg->SetPropertyAttribute(wxT("Width"), wxPG_ATTR_MAX, (long)2048 );
+    pg->SetPropertyAttribute(wxT("Width"), wxPG_ATTR_UNITS, wxT("Pixels") );
+
+    pg->SetPropertyValueUnspecified(wxT("Width"));
+    pg->SetPropertyAttribute(wxT("Width"), wxPG_ATTR_INLINE_HELP, wxT("Enter new width for window") );
+    pg->SetPropertyHelpString(wxT("Width"), wxT("This property uses attributes \"Units\" and \"InlineHelp\".") );
+
+    pg->Append( new wxIntProperty(wxT("X"),wxPG_LABEL,10) );
+    pg->SetPropertyAttribute(wxT("X"), wxPG_ATTR_UNITS, wxT("Pixels") );
+    pg->SetPropertyHelpString(wxT("X"), wxT("This property uses \"Units\" attribute.") );
+
+    pg->Append( new wxIntProperty(wxT("Y"),wxPG_LABEL,10) );
+    pg->SetPropertyAttribute(wxT("Y"), wxPG_ATTR_UNITS, wxT("Pixels") );
+    pg->SetPropertyHelpString(wxT("Y"), wxT("This property uses \"Units\" attribute.") );
+
+    const wxChar* disabledHelpString = wxT("This property is simply disabled. Inorder to have label disabled as well, ")
+                                       wxT("you need to set wxPG_EX_GREY_LABEL_WHEN_DISABLED using SetExtraStyle.");
+
+    pg->Append( new wxPropertyCategory(wxT("Environment"),wxPG_LABEL) );
+    pg->Append( new wxStringProperty(wxT("Operating System"),wxPG_LABEL,::wxGetOsDescription()) );
+
+    pg->Append( new wxStringProperty(wxT("User Id"),wxPG_LABEL,::wxGetUserId()) );
+    pg->Append( new wxDirProperty(wxT("User Home"),wxPG_LABEL,::wxGetUserHome()) );
+    pg->Append( new wxStringProperty(wxT("User Name"),wxPG_LABEL,::wxGetUserName()) );
+
+    // Disable some of them
+    pg->DisableProperty( wxT("Operating System") );
+    pg->DisableProperty( wxT("User Id") );
+    pg->DisableProperty( wxT("User Name") );
+
+    pg->SetPropertyHelpString( wxT("Operating System"), disabledHelpString );
+    pg->SetPropertyHelpString( wxT("User Id"), disabledHelpString );
+    pg->SetPropertyHelpString( wxT("User Name"), disabledHelpString );
+
+    pg->Append( new wxPropertyCategory(wxT("More Examples"),wxPG_LABEL) );
+
+    pg->Append( new wxFontDataProperty( wxT("FontDataProperty"), wxPG_LABEL) );
+    pg->SetPropertyHelpString( wxT("FontDataProperty"),
+        wxT("This demonstrates wxFontDataProperty class defined in this sample app. ")
+        wxT("It is exactly like wxFontProperty from the library, but also has colour sub-property.")
+        );
+
+    pg->Append( new wxDirsProperty(wxT("DirsProperty"),wxPG_LABEL) );
+    pg->SetPropertyHelpString( wxT("DirsProperty"),
+        wxT("This demonstrates wxDirsProperty class defined in this sample app. ")
+        wxT("It is built with WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR macro, ")
+        wxT("with custom action (dir dialog popup) defined.")
+        );
+
+    pg->Append( new wxAdvImageFileProperty(wxT("AdvImageFileProperty"),wxPG_LABEL) );
+    pg->SetPropertyHelpString( wxT("AdvImageFileProperty"),
+        wxT("This demonstrates wxAdvImageFileProperty class defined in this sample app. ")
+        wxT("Button can be used to add new images to the popup list.")
+        );
+
+    wxArrayDouble arrdbl;
+    arrdbl.Add(-1.0);
+    arrdbl.Add(-0.5);
+    arrdbl.Add(0.0);
+    arrdbl.Add(0.5);
+    arrdbl.Add(1.0);
+
+    pg->Append( new wxArrayDoubleProperty(wxT("ArrayDoubleProperty"),wxPG_LABEL,arrdbl) );
+    //pg->SetPropertyAttribute(wxT("ArrayDoubleProperty"),wxPG_FLOAT_PRECISION,(long)2);
+    pg->SetPropertyHelpString( wxT("ArrayDoubleProperty"),
+        wxT("This demonstrates wxArrayDoubleProperty class defined in this sample app. ")
+        wxT("It is an example of a custom list editor property.")
+        );
+
+    pg->Append( new wxLongStringProperty(wxT("Information"),wxPG_LABEL,
+        wxT("Editing properties will have immediate effect on this window, ")
+        wxT("and vice versa (atleast in most cases, that is).")
+        ) );
+    pg->SetPropertyHelpString( wxT("Information"),
+                               wxT("This property is read-only.") );
+
+    pg->SetPropertyReadOnly( wxT("Information"), true );
+
+    //
+    // Set test information for cells in columns 3 and 4
+    // (reserve column 2 for displaying units)
+    wxPropertyGridIterator it;
+    wxBitmap bmp = wxArtProvider::GetBitmap(wxART_FOLDER);
+
+    for ( it = pg->GetGrid()->GetIterator();
+          !it.AtEnd();
+          it++ )
+    {
+        wxPGProperty* p = *it;
+        if ( p->IsCategory() )
+            continue;
+
+        pg->SetPropertyCell( p, 3, wxT("Cell 3"), bmp );
+        pg->SetPropertyCell( p, 4, wxT("Cell 4"), wxNullBitmap, *wxWHITE, *wxBLACK );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::PopulateWithExamples ()
+{
+    wxPropertyGridManager* pgman = m_pPropGridManager;
+    wxPropertyGridPage* pg = pgman->GetPage(wxT("Examples"));
+    wxPGProperty* pid;
+
+    //pg->Append( new wxPropertyCategory(wxT("Examples (low priority)"),wxT("Examples")) );
+    //pg->SetPropertyHelpString ( wxT("Examples"), wxT("This category has example of (almost) every built-in property class.") );
+
+#if wxUSE_SPINBTN
+    pg->Append( new wxIntProperty ( wxT("SpinCtrl"), wxPG_LABEL, 0 ) );
+
+    pg->SetPropertyEditor( wxT("SpinCtrl"), wxPG_EDITOR(SpinCtrl) );
+    pg->SetPropertyAttribute( wxT("SpinCtrl"), wxPG_ATTR_MIN, (long)-10 );  // Use constants instead of string
+    pg->SetPropertyAttribute( wxT("SpinCtrl"), wxPG_ATTR_MAX, (long)10 );   // for reduced binary size.
+    pg->SetPropertyAttribute( wxT("SpinCtrl"), wxT("Step"), (long)2 );
+    //pg->SetPropertyAttribute( wxT("SpinCtrl"), wxT("Wrap"), true );
+
+    pg->SetPropertyHelpString( wxT("SpinCtrl"),
+        wxT("This is regular wxIntProperty, which editor has been ")
+        wxT("changed to wxPG_EDITOR(SpinCtrl). Note however that ")
+        wxT("static wxPropertyGrid::RegisterAdditionalEditors() ")
+        wxT("needs to be called prior to using it."));
+
+#endif
+
+    // Add bool property
+    pg->Append( new wxBoolProperty( wxT("BoolProperty"), wxPG_LABEL, false ) );
+
+    // Add bool property with check box
+    pg->Append( new wxBoolProperty( wxT("BoolProperty with CheckBox"), wxPG_LABEL, false ) );
+    pg->SetPropertyAttribute( wxT("BoolProperty with CheckBox"),
+                              wxPG_BOOL_USE_CHECKBOX,
+                              true );
+
+    pg->SetPropertyHelpString( wxT("BoolProperty with CheckBox"),
+        wxT("Property attribute wxPG_BOOL_USE_CHECKBOX has been set to true.") );
+
+
+    wxPGProperty* lineThickProp;
+    wxPGProperty* lineThickUnitProp;
+    lineThickProp = new wxFloatProperty(wxT("Line Thickness"));
+    lineThickProp->SetEditor(wxPG_EDITOR(SpinCtrl));
+    lineThickProp->SetAttribute(wxT("Min"), wxVariant(0.01));
+
+     wxPGChoices choices;
+     choices.Add(wxT("millimetres"), 1);
+     choices.Add(wxT("inches"), 2);
+    lineThickUnitProp = new wxEnumProperty(
+             wxT("Unit"), wxPG_LABEL, choices,
+             static_cast<int>(1));
+
+     pg->Append(lineThickProp);
+     pg->AppendIn(lineThickProp, lineThickUnitProp);
+
+     lineThickProp->SetValue(wxVariant());
+     /*if (!pg->HideProperty(lineThickUnitProp, true))
+     {
+             return; 
+     }*/
+
+     pid = pg->Append( new wxFloatProperty( wxT("FloatProperty"),
+                                       wxPG_LABEL,
+                                       1234500.23 ) );
+
+    // A string property that can be edited in a separate editor dialog.
+    pg->Append( new wxLongStringProperty( wxT("LongStringProperty"), wxT("LongStringProp"),
+        wxT("This is much longer string than the first one. Edit it by clicking the button.") ) );
+
+    // A property that edits a wxArrayString.
+    wxArrayString example_array;
+    example_array.Add( wxT("String 1"));
+    example_array.Add( wxT("String 2"));
+    example_array.Add( wxT("String 3"));
+    pg->Append( new wxArrayStringProperty( wxT("ArrayStringProperty"), wxPG_LABEL,
+                                           example_array) );
+
+    // Test adding same category multiple times ( should not actually create a new one )
+    //pg->Append( new wxPropertyCategory(wxT("Examples (low priority)"),wxT("Examples")) );
+
+    // A file selector property. Note that argument between name
+    // and initial value is wildcard (format same as in wxFileDialog).
+    wxPGProperty* prop = new wxFileProperty( wxT("FileProperty"), wxT("TextFile") );
+    pg->Append( prop );
+
+    prop->SetAttribute(wxPG_FILE_WILDCARD,wxT("Text Files (*.txt)|*.txt"));
+    prop->SetAttribute(wxPG_FILE_DIALOG_TITLE,wxT("Custom File Dialog Title"));
+    prop->SetAttribute(wxPG_FILE_SHOW_FULL_PATH,false);
+
+#ifdef __WXMSW__
+    prop->SetAttribute(wxPG_FILE_SHOW_RELATIVE_PATH,wxT("C:\\Windows"));
+    pg->SetPropertyValue(prop,wxT("C:\\Windows\\System32\\msvcrt71.dll"));
+#endif
+
+#if wxUSE_IMAGE
+    // An image file property. Arguments are just like for FileProperty, but
+    // wildcard is missing (it is autogenerated from supported image formats).
+    // If you really need to override it, create property separately, and call
+    // its SetWildcard method.
+    pg->Append( new wxImageFileProperty( wxT("ImageFile"), wxPG_LABEL ) );
+#endif
+
+    pid = pg->Append( new wxColourProperty(wxT("ColourProperty"),wxPG_LABEL,*wxRED) );
+    //pg->SetPropertyAttribute(pid,wxPG_COLOUR_ALLOW_CUSTOM,false);
+    pg->SetPropertyEditor( wxT("ColourProperty"), wxPG_EDITOR(ComboBox) );
+    pg->GetProperty(wxT("ColourProperty"))->SetFlag(wxPG_PROP_AUTO_UNSPECIFIED);
+    pg->SetPropertyHelpString( wxT("ColourProperty"),
+        wxT("wxPropertyGrid::SetPropertyEditor method has been used to change ")
+        wxT("editor of this property to wxPG_EDITOR(ComboBox)"));
+
+    //
+    // This demonstrates using alternative editor for colour property
+    // to trigger colour dialog directly from button.
+    pg->Append( new wxColourProperty(wxT("ColourProperty2"),wxPG_LABEL,*wxGREEN) );
+
+    //
+    // wxEnumProperty does not store strings or even list of strings
+    // ( so that's why they are static in function ).
+    static const wxChar* enum_prop_labels[] = { wxT("One Item"),
+        wxT("Another Item"), wxT("One More"), wxT("This Is Last"), NULL };
+
+    // this value array would be optional if values matched string indexes
+    static long enum_prop_values[] = { 40, 80, 120, 160 };
+
+    // note that the initial value (the last argument) is the actual value,
+    // not index or anything like that. Thus, our value selects "Another Item".
+    //
+    // 0 before value is number of items. If it is 0, like in our example,
+    // number of items is calculated, and this requires that the string pointer
+    // array is terminated with NULL.
+    pg->Append( new wxEnumProperty(wxT("EnumProperty"),wxPG_LABEL,
+        enum_prop_labels, enum_prop_values, 80 ) );
+
+    wxPGChoices soc;
+
+    // use basic table from our previous example
+    // can also set/add wxArrayStrings and wxArrayInts directly.
+    soc.Set( enum_prop_labels, enum_prop_values );
+
+    // add extra items
+    soc.Add( wxT("Look, it continues"), 200 );
+    soc.Add( wxT("Even More"), 240 );
+    soc.Add( wxT("And More"), 280 );
+    soc.Add( wxT("True End of the List"), 320 );
+
+    // Test custom colours ([] operator of wxPGChoices returns
+    // references to wxPGChoiceEntry).
+    soc[1].SetFgCol(*wxRED);
+    soc[1].SetBgCol(*wxLIGHT_GREY);
+    soc[2].SetFgCol(*wxGREEN);
+    soc[2].SetBgCol(*wxLIGHT_GREY);
+    soc[3].SetFgCol(*wxBLUE);
+    soc[3].SetBgCol(*wxLIGHT_GREY);
+    soc[4].SetBitmap(wxArtProvider::GetBitmap(wxART_FOLDER));
+
+    pg->Append( new wxEnumProperty(wxT("EnumProperty 2"),
+                                   wxPG_LABEL,
+                                   soc,
+                                  240) );
+    pg->AddPropertyChoice(wxT("EnumProperty 2"),wxT("Testing Extra"),360);
+
+    // Add a second time to test that the caching works
+    pg->Append( new wxEnumProperty(wxT("EnumProperty 3"),wxPG_LABEL,
+        soc, 360 ) );
+    pg->SetPropertyHelpString(wxT("EnumProperty 3"),
+        wxT("Should have same choices as EnumProperty 2"));
+
+    pg->Append( new wxEnumProperty(wxT("EnumProperty 4"),wxPG_LABEL,
+        soc, 240 ) );
+    pg->SetPropertyHelpString(wxT("EnumProperty 4"),
+        wxT("Should have same choices as EnumProperty 2"));
+
+    pg->Append( new wxEnumProperty(wxT("EnumProperty 5"),wxPG_LABEL,
+        soc, 240 ) );
+    pg->SetPropertyChoicesExclusive(wxT("EnumProperty 5"));
+    pg->AddPropertyChoice(wxT("EnumProperty 5"),wxT("5th only"),360);
+    pg->SetPropertyHelpString(wxT("EnumProperty 5"),
+        wxT("Should have one extra item when compared to EnumProperty 4"));
+
+    // Password property example.
+    pg->Append( new wxStringProperty(wxT("Password"),wxPG_LABEL, wxT("password")) );
+    pg->SetPropertyAttribute( wxT("Password"), wxPG_STRING_PASSWORD, true );
+    pg->SetPropertyHelpString( wxT("Password"),
+        wxT("Has attribute wxPG_STRING_PASSWORD set to true") );
+
+    // String editor with dir selector button. Uses wxEmptyString as name, which
+    // is allowed (naturally, in this case property cannot be accessed by name).
+    pg->Append( new wxDirProperty( wxT("DirProperty"), wxPG_LABEL, ::wxGetUserHome()) );
+    pg->SetPropertyAttribute( wxT("DirProperty"),
+                              wxPG_DIR_DIALOG_MESSAGE,
+                              wxT("This is a custom dir dialog message") );
+
+    // Add string property - first arg is label, second name, and third initial value
+    pg->Append( new wxStringProperty ( wxT("StringProperty"), wxPG_LABEL ) );
+    pg->SetPropertyMaxLength( wxT("StringProperty"), 6 );
+    pg->SetPropertyHelpString( wxT("StringProperty"),
+        wxT("Max length of this text has been limited to 6, using wxPropertyGrid::SetPropertyMaxLength.") );
+
+    // Set value after limiting so that it will be applied
+    pg->SetPropertyValue( wxT("StringProperty"), wxT("some text") );
+
+
+    // this value array would be optional if values matched string indexes
+    //long flags_prop_values[] = { wxICONIZE, wxCAPTION, wxMINIMIZE_BOX, wxMAXIMIZE_BOX };
+
+    //pg->Append( wxFlagsProperty(wxT("Example of FlagsProperty"),wxT("FlagsProp"),
+    //    flags_prop_labels, flags_prop_values, 0, GetWindowStyle() ) );
+
+
+    // Multi choice dialog.
+    wxArrayString tchoices;
+    tchoices.Add(wxT("Cabbage"));
+    tchoices.Add(wxT("Carrot"));
+    tchoices.Add(wxT("Onion"));
+    tchoices.Add(wxT("Potato"));
+    tchoices.Add(wxT("Strawberry"));
+
+    wxArrayString tchoicesValues;
+    tchoicesValues.Add(wxT("Carrot"));
+    tchoicesValues.Add(wxT("Potato"));
+
+    pg->Append( new wxEnumProperty(wxT("EnumProperty X"),wxPG_LABEL, tchoices ) );
+
+    pg->Append( new wxMultiChoiceProperty( wxT("MultiChoiceProperty"), wxPG_LABEL,
+                                           tchoices, tchoicesValues ) );
+    pg->SetPropertyAttribute( wxT("MultiChoiceProperty"), wxT("UserStringMode"), true );
+
+    pg->Append( new wxSizeProperty( wxT("SizeProperty"), wxT("Size"), GetSize() ) );
+    pg->Append( new wxPointProperty( wxT("PointProperty"), wxT("Position"), GetPosition() ) );
+
+
+    // UInt samples
+    pg->Append( new wxUIntProperty( wxT("UIntProperty"), wxPG_LABEL, wxULongLong(wxULL(0xFEEEFEEEFEEE))));
+    pg->SetPropertyAttribute( wxT("UIntProperty"), wxPG_UINT_PREFIX, wxPG_PREFIX_NONE );
+    pg->SetPropertyAttribute( wxT("UIntProperty"), wxPG_UINT_BASE, wxPG_BASE_HEX );
+    //pg->SetPropertyAttribute( wxT("UIntProperty"), wxPG_UINT_PREFIX, wxPG_PREFIX_NONE );
+    //pg->SetPropertyAttribute( wxT("UIntProperty"), wxPG_UINT_BASE, wxPG_BASE_OCT );
+
+    //
+    // wxEditEnumProperty
+    wxPGChoices eech;
+    eech.Add(wxT("Choice 1"));
+    eech.Add(wxT("Choice 2"));
+    eech.Add(wxT("Choice 3"));
+    pg->Append( new wxEditEnumProperty(wxT("EditEnumProperty"), wxPG_LABEL, eech) ); // , wxT("Choice 2")
+
+    //wxString v_;
+    //wxTextValidator validator1(wxFILTER_NUMERIC,&v_);
+    //pg->SetPropertyValidator( wxT("EditEnumProperty"), validator1 );
+
+#if wxUSE_DATETIME
+    //
+    // wxDateTimeProperty
+    pg->Append( new wxDateProperty(wxT("DateProperty"), wxPG_LABEL, wxDateTime::Now() ) );
+
+#if wxUSE_DATEPICKCTRL
+    pg->SetPropertyAttribute( wxT("DateProperty"), wxPG_DATE_PICKER_STYLE,
+                              (long)(wxDP_DROPDOWN | wxDP_SHOWCENTURY) );
+
+    pg->SetPropertyHelpString( wxT("DateProperty"),
+        wxT("Attribute wxPG_DATE_PICKER_STYLE has been set to (long)(wxDP_DROPDOWN | wxDP_SHOWCENTURY).")
+        wxT("Also note that wxPG_ALLOW_WXADV needs to be defined inorder to use wxDatePickerCtrl.") );
+#endif
+
+#endif
+
+    //
+    // Add Triangle properties as both wxTriangleProperty and
+    // a generic parent property (using wxStringProperty).
+    //
+    wxPGProperty* topId = pg->Append( new wxStringProperty(wxT("3D Object"), wxPG_LABEL, wxT("<composed>")) );
+
+    pid = pg->AppendIn( topId, new wxStringProperty(wxT("Triangle 1"), wxT("Triangle 1"), wxT("<composed>")) );
+    pg->AppendIn( pid, new wxVectorProperty( wxT("A"), wxEmptyString ) );
+    pg->AppendIn( pid, new wxVectorProperty( wxT("B"), wxEmptyString ) );
+    pg->AppendIn( pid, new wxVectorProperty( wxT("C"), wxEmptyString ) );
+
+    pg->AppendIn( topId, new wxTriangleProperty( wxT("Triangle 2"), wxT("Triangle 2") ) );
+
+    pg->SetPropertyHelpString( wxT("3D Object"),
+        wxT("3D Object is wxStringProperty with value \"<composed>\". Two of its children are similar wxStringProperties with ")
+        wxT("three wxVectorProperty children, and other two are custom wxTriangleProperties.") );
+
+    pid = pg->AppendIn( topId, new wxStringProperty(wxT("Triangle 3"), wxT("Triangle 3"), wxT("<composed>")) );
+    pg->AppendIn( pid, new wxVectorProperty( wxT("A"), wxEmptyString ) );
+    pg->AppendIn( pid, new wxVectorProperty( wxT("B"), wxEmptyString ) );
+    pg->AppendIn( pid, new wxVectorProperty( wxT("C"), wxEmptyString ) );
+
+    pg->AppendIn( topId, new wxTriangleProperty( wxT("Triangle 4"), wxT("Triangle 4") ) );
+
+    //
+    // This snippet is a doc sample test
+    //
+    pid = pg->Append( new wxStringProperty(wxT("Car"),wxPG_LABEL,wxT("<composed>")) );
+
+    pg->AppendIn( pid, new wxStringProperty(wxT("Model"),
+                                            wxPG_LABEL,
+                                            wxT("Lamborghini Diablo SV")) );
+
+    pg->AppendIn( pid, new wxIntProperty(wxT("Engine Size (cc)"),
+                                         wxPG_LABEL,
+                                         5707) );
+
+    wxPGProperty* speedId = pg->AppendIn( pid, new wxStringProperty(wxT("Speeds"),wxPG_LABEL,wxT("<composed>")) );
+    pg->AppendIn( speedId, new wxIntProperty(wxT("Max. Speed (mph)"),wxPG_LABEL,290) );
+    pg->AppendIn( speedId, new wxFloatProperty(wxT("0-100 mph (sec)"),wxPG_LABEL,3.9) );
+    pg->AppendIn( speedId, new wxFloatProperty(wxT("1/4 mile (sec)"),wxPG_LABEL,8.6) );
+
+    pg->AppendIn( pid, new wxIntProperty(wxT("Price ($)"),
+                                         wxPG_LABEL,
+                                         300000) );
+
+    // Make sure the child properties can be accessed correctly
+    pg->SetPropertyValue( wxT("Car.Speeds.Max. Speed (mph)"), 300 );
+
+    // Displayed value of "Car" property is now:
+    // "Lamborghini Diablo SV; [300; 3.9; 8.6]; 300000"
+
+    //
+    // Test wxSampleMultiButtonEditor
+    wxPGRegisterEditorClass( SampleMultiButtonEditor );
+    pg->Append( new wxLongStringProperty(wxT("MultipleButtons"), wxPG_LABEL) );
+    pg->SetPropertyEditor(wxT("MultipleButtons"), wxPG_EDITOR(SampleMultiButtonEditor) );
+
+    // Test SingleChoiceProperty
+    pg->Append( new SingleChoiceProperty(wxT("SingleChoiceProperty")) );
+
+
+    //
+    // Test adding variable height bitmaps in wxPGChoices
+    wxPGChoices bc;
+
+    bc.Add(wxT("Wee"), wxBitmap(16, 16));
+    bc.Add(wxT("Not so wee"), wxBitmap(32, 32));
+    bc.Add(wxT("Friggin' huge"), wxBitmap(64, 64));
+
+    pg->Append( new wxEnumProperty(wxT("Variable Height Bitmaps"),
+                                   wxPG_LABEL,
+                                   bc,
+                                   0) );
+
+    //
+    // Test how non-editable composite strings appear
+    pid = pg->Append( new wxStringProperty(wxT("wxWidgets Traits"), wxPG_LABEL, wxT("<composed>")) );
+    pg->SetPropertyReadOnly(pid);
+
+    pg->AppendIn(pid, new wxStringProperty(wxT("Latest Release"), wxPG_LABEL, wxT("2.8.8")) );
+    pg->AppendIn(pid, new wxBoolProperty(wxT("Win API"), wxPG_LABEL, true) );
+    pg->AppendIn(pid, new wxBoolProperty(wxT("QT"), wxPG_LABEL, false) );
+    pg->AppendIn(pid, new wxBoolProperty(wxT("Cocoa"), wxPG_LABEL, true) );
+    pg->AppendIn(pid, new wxBoolProperty(wxT("BeOS"), wxPG_LABEL, false) );
+    pg->AppendIn(pid, new wxStringProperty(wxT("SVN Trunk Version"), wxPG_LABEL, wxT("2.9.0")) );
+    pg->AppendIn(pid, new wxBoolProperty(wxT("GTK+"), wxPG_LABEL, true) );
+    pg->AppendIn(pid, new wxBoolProperty(wxT("Sky OS"), wxPG_LABEL, false) );
+    pg->AppendIn(pid, new wxBoolProperty(wxT("QT"), wxPG_LABEL, false) );
+
+    AddTestProperties(pg);
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::PopulateWithLibraryConfig ()
+{
+    wxPropertyGridManager* pgman = m_pPropGridManager;
+    wxPropertyGridPage* pg = pgman->GetPage(wxT("wxWidgets Library Config"));
+
+    wxPGProperty* cat;
+
+    wxBitmap bmp = wxArtProvider::GetBitmap(wxART_REPORT_VIEW);
+
+    wxPGProperty* pid;
+
+#define ADD_WX_LIB_CONF_GROUP(A) \
+    cat = pg->AppendIn( pid, new wxPropertyCategory(A) ); \
+    pg->SetPropertyCell( cat, 0, wxPG_LABEL, bmp );
+
+#define ADD_WX_LIB_CONF(A) pg->Append( new wxBoolProperty(wxT(#A),wxPG_LABEL,(bool)((A>0)?true:false)));
+#define ADD_WX_LIB_CONF_NODEF(A) pg->Append( new wxBoolProperty(wxT(#A),wxPG_LABEL,(bool)false) ); \
+                            pg->DisableProperty(wxT(#A));
+
+    pid = pg->Append( new wxPropertyCategory( wxT("wxWidgets Library Configuration") ) );
+    pg->SetPropertyCell( pid, 0, wxPG_LABEL, bmp );
+
+    ADD_WX_LIB_CONF_GROUP(wxT("Global Settings"))
+    ADD_WX_LIB_CONF( wxUSE_GUI )
+
+    ADD_WX_LIB_CONF_GROUP(wxT("Compatibility Settings"))
+#if defined(WXWIN_COMPATIBILITY_2_2)
+    ADD_WX_LIB_CONF( WXWIN_COMPATIBILITY_2_2 )
+#endif
+#if defined(WXWIN_COMPATIBILITY_2_4)
+    ADD_WX_LIB_CONF( WXWIN_COMPATIBILITY_2_4 )
+#endif
+#if defined(WXWIN_COMPATIBILITY_2_6)
+    ADD_WX_LIB_CONF( WXWIN_COMPATIBILITY_2_6 )
+#endif
+#if defined(WXWIN_COMPATIBILITY_2_8)
+    ADD_WX_LIB_CONF( WXWIN_COMPATIBILITY_2_8 )
+#endif
+#ifdef wxFONT_SIZE_COMPATIBILITY
+    ADD_WX_LIB_CONF( wxFONT_SIZE_COMPATIBILITY )
+#else
+    ADD_WX_LIB_CONF_NODEF ( wxFONT_SIZE_COMPATIBILITY )
+#endif
+#ifdef wxDIALOG_UNIT_COMPATIBILITY
+    ADD_WX_LIB_CONF( wxDIALOG_UNIT_COMPATIBILITY )
+#else
+    ADD_WX_LIB_CONF_NODEF ( wxDIALOG_UNIT_COMPATIBILITY )
+#endif
+
+    ADD_WX_LIB_CONF_GROUP(wxT("Debugging Settings"))
+    ADD_WX_LIB_CONF( wxUSE_DEBUG_CONTEXT )
+    ADD_WX_LIB_CONF( wxUSE_MEMORY_TRACING )
+    ADD_WX_LIB_CONF( wxUSE_GLOBAL_MEMORY_OPERATORS )
+    ADD_WX_LIB_CONF( wxUSE_DEBUG_NEW_ALWAYS )
+    ADD_WX_LIB_CONF( wxUSE_ON_FATAL_EXCEPTION )
+
+    ADD_WX_LIB_CONF_GROUP(wxT("Unicode Support"))
+    ADD_WX_LIB_CONF( wxUSE_UNICODE )
+    ADD_WX_LIB_CONF( wxUSE_UNICODE_MSLU )
+    ADD_WX_LIB_CONF( wxUSE_WCHAR_T )
+
+    ADD_WX_LIB_CONF_GROUP(wxT("Global Features"))
+    ADD_WX_LIB_CONF( wxUSE_EXCEPTIONS )
+    ADD_WX_LIB_CONF( wxUSE_EXTENDED_RTTI )
+    ADD_WX_LIB_CONF( wxUSE_STL )
+    ADD_WX_LIB_CONF( wxUSE_LOG )
+    ADD_WX_LIB_CONF( wxUSE_LOGWINDOW )
+    ADD_WX_LIB_CONF( wxUSE_LOGGUI )
+    ADD_WX_LIB_CONF( wxUSE_LOG_DIALOG )
+    ADD_WX_LIB_CONF( wxUSE_CMDLINE_PARSER )
+    ADD_WX_LIB_CONF( wxUSE_THREADS )
+    ADD_WX_LIB_CONF( wxUSE_STREAMS )
+    ADD_WX_LIB_CONF( wxUSE_STD_IOSTREAM )
+
+    ADD_WX_LIB_CONF_GROUP(wxT("Non-GUI Features"))
+    ADD_WX_LIB_CONF( wxUSE_LONGLONG )
+    ADD_WX_LIB_CONF( wxUSE_FILE )
+    ADD_WX_LIB_CONF( wxUSE_FFILE )
+    ADD_WX_LIB_CONF( wxUSE_FSVOLUME )
+    ADD_WX_LIB_CONF( wxUSE_TEXTBUFFER )
+    ADD_WX_LIB_CONF( wxUSE_TEXTFILE )
+    ADD_WX_LIB_CONF( wxUSE_INTL )
+    ADD_WX_LIB_CONF( wxUSE_DATETIME )
+    ADD_WX_LIB_CONF( wxUSE_TIMER )
+    ADD_WX_LIB_CONF( wxUSE_STOPWATCH )
+    ADD_WX_LIB_CONF( wxUSE_CONFIG )
+#ifdef wxUSE_CONFIG_NATIVE
+    ADD_WX_LIB_CONF( wxUSE_CONFIG_NATIVE )
+#else
+    ADD_WX_LIB_CONF_NODEF ( wxUSE_CONFIG_NATIVE )
+#endif
+    ADD_WX_LIB_CONF( wxUSE_DIALUP_MANAGER )
+    ADD_WX_LIB_CONF( wxUSE_DYNLIB_CLASS )
+    ADD_WX_LIB_CONF( wxUSE_DYNAMIC_LOADER )
+    ADD_WX_LIB_CONF( wxUSE_SOCKETS )
+    ADD_WX_LIB_CONF( wxUSE_FILESYSTEM )
+    ADD_WX_LIB_CONF( wxUSE_FS_ZIP )
+    ADD_WX_LIB_CONF( wxUSE_FS_INET )
+    ADD_WX_LIB_CONF( wxUSE_ZIPSTREAM )
+    ADD_WX_LIB_CONF( wxUSE_ZLIB )
+    ADD_WX_LIB_CONF( wxUSE_APPLE_IEEE )
+    ADD_WX_LIB_CONF( wxUSE_JOYSTICK )
+    ADD_WX_LIB_CONF( wxUSE_FONTMAP )
+    ADD_WX_LIB_CONF( wxUSE_MIMETYPE )
+    ADD_WX_LIB_CONF( wxUSE_PROTOCOL )
+    ADD_WX_LIB_CONF( wxUSE_PROTOCOL_FILE )
+    ADD_WX_LIB_CONF( wxUSE_PROTOCOL_FTP )
+    ADD_WX_LIB_CONF( wxUSE_PROTOCOL_HTTP )
+    ADD_WX_LIB_CONF( wxUSE_URL )
+#ifdef wxUSE_URL_NATIVE
+    ADD_WX_LIB_CONF( wxUSE_URL_NATIVE )
+#else
+    ADD_WX_LIB_CONF_NODEF ( wxUSE_URL_NATIVE )
+#endif
+    ADD_WX_LIB_CONF( wxUSE_REGEX )
+    ADD_WX_LIB_CONF( wxUSE_SYSTEM_OPTIONS )
+    ADD_WX_LIB_CONF( wxUSE_SOUND )
+#ifdef wxUSE_XRC
+    ADD_WX_LIB_CONF( wxUSE_XRC )
+#else
+    ADD_WX_LIB_CONF_NODEF ( wxUSE_XRC )
+#endif
+    ADD_WX_LIB_CONF( wxUSE_XML )
+
+    // Set them to use check box.
+    pg->SetPropertyAttribute(pid,wxPG_BOOL_USE_CHECKBOX,true,wxPG_RECURSE);
+}
+
+
+//
+// Handle events of the third page here.
+class wxMyPropertyGridPage : public wxPropertyGridPage
+{
+public:
+
+    // Return false here to indicate unhandled events should be
+    // propagated to manager's parent, as normal.
+    virtual bool IsHandlingAllEvents() const { return false; }
+
+protected:
+
+    virtual wxPGProperty* DoInsert( wxPGProperty* parent,
+                                    int index,
+                                    wxPGProperty* property )
+    {
+        return wxPropertyGridPage::DoInsert(parent,index,property);
+    }
+
+    void OnPropertySelect( wxPropertyGridEvent& event );
+    void OnPropertyChanging( wxPropertyGridEvent& event );
+    void OnPropertyChange( wxPropertyGridEvent& event );
+    void OnPageChange( wxPropertyGridEvent& event );
+
+private:
+    DECLARE_EVENT_TABLE()
+};
+
+
+BEGIN_EVENT_TABLE(wxMyPropertyGridPage, wxPropertyGridPage)
+    EVT_PG_SELECTED( wxID_ANY, wxMyPropertyGridPage::OnPropertySelect )
+    EVT_PG_CHANGING( wxID_ANY, wxMyPropertyGridPage::OnPropertyChanging )
+    EVT_PG_CHANGED( wxID_ANY, wxMyPropertyGridPage::OnPropertyChange )
+    EVT_PG_PAGE_CHANGED( wxID_ANY, wxMyPropertyGridPage::OnPageChange )
+END_EVENT_TABLE()
+
+
+void wxMyPropertyGridPage::OnPropertySelect( wxPropertyGridEvent& WXUNUSED(event) )
+{
+    wxLogDebug(wxT("wxMyPropertyGridPage::OnPropertySelect()"));
+}
+
+void wxMyPropertyGridPage::OnPropertyChange( wxPropertyGridEvent& event )
+{
+    wxPGProperty* p = event.GetProperty();
+    wxLogDebug(wxT("wxMyPropertyGridPage::OnPropertyChange('%s', to value '%s')"),
+               p->GetName().c_str(),
+               p->GetDisplayedString().c_str());
+}
+
+void wxMyPropertyGridPage::OnPropertyChanging( wxPropertyGridEvent& event )
+{
+    wxPGProperty* p = event.GetProperty();
+    wxLogDebug(wxT("wxMyPropertyGridPage::OnPropertyChanging('%s', to value '%s')"),
+               p->GetName().c_str(),
+               event.GetValue().GetString().c_str());
+}
+
+void wxMyPropertyGridPage::OnPageChange( wxPropertyGridEvent& WXUNUSED(event) )
+{
+    wxLogDebug(wxT("wxMyPropertyGridPage::OnPageChange()"));
+}
+
+
+class wxPGKeyHandler : public wxEvtHandler
+{
+public:
+
+    void OnKeyEvent( wxKeyEvent& event )
+    {
+        wxMessageBox(wxString::Format(wxT("%i"),event.GetKeyCode()));
+        event.Skip();
+    }
+private:
+    DECLARE_EVENT_TABLE()
+};
+
+BEGIN_EVENT_TABLE(wxPGKeyHandler,wxEvtHandler)
+    EVT_KEY_DOWN( wxPGKeyHandler::OnKeyEvent )
+END_EVENT_TABLE()
+
+
+// -----------------------------------------------------------------------
+
+void FormMain::InitPanel()
+{
+    if ( m_panel )
+        m_panel->Destroy();
+
+    wxWindow* panel = new wxPanel(this,-1,wxPoint(0,0),wxSize(400,400));
+    m_panel = panel;
+
+    // Column
+    wxBoxSizer* topSizer = new wxBoxSizer ( wxVERTICAL );
+
+    m_topSizer = topSizer;
+}
+
+void FormMain::FinalizePanel( bool wasCreated )
+{
+    m_panel->SetSizer( m_topSizer );
+    m_topSizer->SetSizeHints( m_panel );
+
+    wxBoxSizer* panelSizer = new wxBoxSizer( wxHORIZONTAL );
+    panelSizer->Add( m_panel, 1, wxEXPAND|wxFIXED_MINSIZE );
+    SetSizer( panelSizer );
+    panelSizer->SetSizeHints( this );
+
+    if ( wasCreated )
+    {
+        SetSize(
+            (wxSystemSettings::GetMetric(wxSYS_SCREEN_X)/10)*4,
+            (wxSystemSettings::GetMetric(wxSYS_SCREEN_Y)/10)*8
+            );
+        Centre();
+    }
+}
+
+void FormMain::PopulateGrid()
+{
+    wxPropertyGridManager* pgman = m_pPropGridManager;
+    pgman->AddPage(wxT("Standard Items"));
+
+    PopulateWithStandardItems();
+
+    pgman->AddPage(wxT("wxWidgets Library Config"));
+
+    PopulateWithLibraryConfig();
+
+    wxPropertyGridPage* myPage = new wxMyPropertyGridPage();
+    myPage->Append( new wxIntProperty ( wxT("IntProperty"), wxPG_LABEL, 12345678 ) );
+
+    // Use wxMyPropertyGridPage (see above) to test the
+    // custom wxPropertyGridPage feature.
+    pgman->AddPage(wxT("Examples"),wxNullBitmap,myPage);
+
+    PopulateWithExamples();
+}
+
+void FormMain::CreateGrid( int style, int extraStyle )
+{
+    //
+    // This function (re)creates the property grid in our sample
+    //
+
+    if ( style == -1 )
+        style = // default style
+                wxPG_BOLD_MODIFIED |
+                wxPG_SPLITTER_AUTO_CENTER |
+                wxPG_AUTO_SORT |
+                //wxPG_HIDE_MARGIN|wxPG_STATIC_SPLITTER |
+                //wxPG_TOOLTIPS |
+                //wxPG_HIDE_CATEGORIES |
+                //wxPG_LIMITED_EDITING |
+                wxTAB_TRAVERSAL |
+                wxPG_TOOLBAR |
+                wxPG_DESCRIPTION;
+
+    if ( extraStyle == -1 )
+        // default extra style
+        extraStyle = wxPG_EX_MODE_BUTTONS;
+                //| wxPG_EX_AUTO_UNSPECIFIED_VALUES
+                //| wxPG_EX_GREY_LABEL_WHEN_DISABLED
+                //| wxPG_EX_NATIVE_DOUBLE_BUFFERING
+                //| wxPG_EX_HELP_AS_TOOLTIPS
+
+    bool wasCreated = m_panel ? false : true;
+
+    InitPanel();
+
+    //
+    // This shows how to combine two static choice descriptors
+    m_combinedFlags.Add( _fs_windowstyle_labels, _fs_windowstyle_values );
+    m_combinedFlags.Add( _fs_framestyle_labels, _fs_framestyle_values );
+
+    wxPropertyGridManager* pgman = m_pPropGridManager =
+        new wxPropertyGridManager(m_panel,
+                                  // Don't change this into wxID_ANY in the sample, or the
+                                  // event handling will obviously be broken.
+                                  PGID, /*wxID_ANY*/
+                                  wxDefaultPosition,
+                                  wxDefaultSize,
+                                  style );
+
+    m_propGrid = pgman->GetGrid();
+
+    pgman->SetExtraStyle(extraStyle);
+
+    m_pPropGridManager->SetValidationFailureBehavior( wxPG_VFB_BEEP | wxPG_VFB_MARK_CELL | wxPG_VFB_SHOW_MESSAGE );
+
+    m_pPropGridManager->GetGrid()->SetVerticalSpacing( 2 );
+
+    PopulateGrid();
+
+    // Change some attributes in all properties
+    //pgman->SetPropertyAttributeAll(wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING,true);
+    //pgman->SetPropertyAttributeAll(wxPG_BOOL_USE_CHECKBOX,true);
+
+    //m_pPropGridManager->SetSplitterLeft(true);
+    //m_pPropGridManager->SetSplitterPosition(137);
+
+    /*
+    // This would setup event handling without event table entries
+    Connect(m_pPropGridManager->GetId(), wxEVT_PG_SELECTED,
+            (wxObjectEventFunction) (wxEventFunction) (wxPropertyGridEventFunction)
+            &FormMain::OnPropertyGridSelect );
+    Connect(m_pPropGridManager->GetId(), wxEVT_PG_CHANGED,
+            (wxObjectEventFunction) (wxEventFunction) (wxPropertyGridEventFunction)
+            &FormMain::OnPropertyGridChange );
+    */
+
+    m_topSizer->Add( m_pPropGridManager, 1, wxEXPAND );
+
+    FinalizePanel(wasCreated);
+}
+
+// -----------------------------------------------------------------------
+
+FormMain::FormMain(const wxString& title, const wxPoint& pos, const wxSize& size) :
+           wxFrame((wxFrame *)NULL, -1, title, pos, size,
+               (wxMINIMIZE_BOX|wxMAXIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCAPTION|
+                wxTAB_TRAVERSAL|wxCLOSE_BOX|wxNO_FULL_REPAINT_ON_RESIZE) )
+{
+    m_propGrid = NULL;
+    m_panel = NULL;
+
+#ifdef __WXMAC__
+    // we need this in order to allow the about menu relocation, since ABOUT is
+    // not the default id of the about menu
+    wxApp::s_macAboutMenuItemId = ID_ABOUT;
+#endif
+
+#if wxUSE_IMAGE
+    // This is here to really test the wxImageFileProperty.
+    wxInitAllImageHandlers();
+#endif
+
+    CreateGrid( // style
+                wxPG_BOLD_MODIFIED |
+                wxPG_SPLITTER_AUTO_CENTER |
+                wxPG_AUTO_SORT |
+                //wxPG_HIDE_MARGIN|wxPG_STATIC_SPLITTER |
+                //wxPG_TOOLTIPS |
+                //wxPG_HIDE_CATEGORIES |
+                //wxPG_LIMITED_EDITING |
+                wxTAB_TRAVERSAL |
+                wxPG_TOOLBAR |
+                wxPG_DESCRIPTION,
+                // extra style
+                wxPG_EX_MODE_BUTTONS
+                //| wxPG_EX_AUTO_UNSPECIFIED_VALUES
+                //| wxPG_EX_GREY_LABEL_WHEN_DISABLED
+                //| wxPG_EX_NATIVE_DOUBLE_BUFFERING
+                //| wxPG_EX_HELP_AS_TOOLTIPS
+              );
+
+    // Register all editors (SpinCtrl etc.)
+    m_pPropGridManager->RegisterAdditionalEditors();
+
+    //
+    // Create menubar
+    wxMenu *menuFile = new wxMenu(wxEmptyString, wxMENU_TEAROFF);
+    wxMenu *menuTry = new wxMenu;
+    wxMenu *menuTools1 = new wxMenu;
+    wxMenu *menuTools2 = new wxMenu;
+    wxMenu *menuHelp = new wxMenu;
+
+    menuHelp->Append(ID_ABOUT, wxT("&About..."), wxT("Show about dialog") );
+
+    menuTools1->Append(ID_APPENDPROP, wxT("Append New Property") );
+    menuTools1->Append(ID_APPENDCAT, wxT("Append New Category\tCtrl-S") );
+    menuTools1->AppendSeparator();
+    menuTools1->Append(ID_INSERTPROP, wxT("Insert New Property\tCtrl-Q") );
+    menuTools1->Append(ID_INSERTCAT, wxT("Insert New Category\tCtrl-W") );
+    menuTools1->AppendSeparator();
+    menuTools1->Append(ID_DELETE, wxT("Delete Selected") );
+    menuTools1->Append(ID_DELETER, wxT("Delete Random") );
+    menuTools1->Append(ID_DELETEALL, wxT("Delete All") );
+    menuTools1->AppendSeparator();
+    menuTools1->Append(ID_SETCOLOUR, wxT("Set Bg Colour") );
+    menuTools1->Append(ID_UNSPECIFY, wxT("Set to Unspecified") );
+    menuTools1->Append(ID_CLEAR, wxT("Set Value to Default") );
+    menuTools1->AppendSeparator();
+    m_itemEnable = menuTools1->Append(ID_ENABLE, wxT("Enable"),
+        wxT("Toggles item's enabled state.") );
+    m_itemEnable->Enable( FALSE );
+    menuTools1->Append(ID_HIDE, wxT("Hide"), wxT("Shows or hides a property") );
+
+    menuTools2->Append(ID_ITERATE1, wxT("Iterate Over Properties") );
+    menuTools2->Append(ID_ITERATE2, wxT("Iterate Over Visible Items") );
+    menuTools2->Append(ID_ITERATE3, wxT("Reverse Iterate Over Properties") );
+    menuTools2->Append(ID_ITERATE4, wxT("Iterate Over Categories") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_SETPROPERTYVALUE, wxT("Set Property Value") );
+    menuTools2->Append(ID_CLEARMODIF, wxT("Clear Modified Status"), wxT("Clears wxPG_MODIFIED flag from all properties.") );
+    menuTools2->AppendSeparator();
+    m_itemFreeze = menuTools2->AppendCheckItem(ID_FREEZE, wxT("Freeze"),
+        wxT("Disables painting, auto-sorting, etc.") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_DUMPLIST, wxT("Display Values as wxVariant List"), wxT("Tests GetAllValues method and wxVariant conversion.") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_GETVALUES, wxT("Get Property Values"), wxT("Stores all property values.") );
+    menuTools2->Append(ID_SETVALUES, wxT("Set Property Values"), wxT("Reverts property values to those last stored.") );
+    menuTools2->Append(ID_SETVALUES2, wxT("Set Property Values 2"), wxT("Adds property values that should not initially be as items (so new items are created).") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_SAVESTATE, wxT("Save Editable State") );
+    menuTools2->Append(ID_RESTORESTATE, wxT("Restore Editable State") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_ENABLECOMMONVALUES, wxT("Enable Common Value"),
+        wxT("Enable values that are common to all properties, for selected property."));
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_COLLAPSE, wxT("Collapse Selected") );
+    menuTools2->Append(ID_COLLAPSEALL, wxT("Collapse All") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_INSERTPAGE, wxT("Add Page") );
+    menuTools2->Append(ID_REMOVEPAGE, wxT("Remove Page") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_FITCOLUMNS, wxT("Fit Columns") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_CHANGEFLAGSITEMS, wxT("Change Children of FlagsProp") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_TESTINSERTCHOICE, wxT("Test InsertPropertyChoice") );
+    menuTools2->Append(ID_TESTDELETECHOICE, wxT("Test DeletePropertyChoice") );
+    menuTools2->AppendSeparator();
+    menuTools2->Append(ID_SETSPINCTRLEDITOR, wxT("Use SpinCtrl Editor") );
+    menuTools2->Append(ID_TESTREPLACE, wxT("Test ReplaceProperty") );
+
+    menuTry->Append(ID_SELECTSTYLE, wxT("Set Window Style"),
+        wxT("Select window style flags used by the grid."));
+    menuTry->AppendSeparator();
+    menuTry->AppendRadioItem( ID_COLOURSCHEME1, wxT("Standard Colour Scheme") );
+    menuTry->AppendRadioItem( ID_COLOURSCHEME2, wxT("White Colour Scheme") );
+    menuTry->AppendRadioItem( ID_COLOURSCHEME3, wxT(".NET Colour Scheme") );
+    menuTry->AppendRadioItem( ID_COLOURSCHEME4, wxT("Cream Colour Scheme") );
+    menuTry->AppendSeparator();
+    m_itemCatColours = menuTry->AppendCheckItem(ID_CATCOLOURS, wxT("Category Specific Colours"),
+        wxT("Switches between category-specific cell colours and default scheme (actually done using SetPropertyTextColour and SetPropertyBackgroundColour).") );
+    menuTry->AppendSeparator();
+    menuTry->AppendCheckItem(ID_STATICLAYOUT, wxT("Static Layout"),
+        wxT("Switches between user-modifiedable and static layouts.") );
+    menuTry->Append(ID_SETCOLUMNS, wxT("Set Number of Columns") );
+    menuTry->AppendSeparator();
+    menuTry->Append(ID_TESTXRC, wxT("Display XRC sample") );
+    menuTry->AppendSeparator();
+    menuTry->Append(ID_RUNTESTFULL, wxT("Run Tests (full)") );
+    menuTry->Append(ID_RUNTESTPARTIAL, wxT("Run Tests (fast)") );
+
+    menuFile->Append(ID_RUNMINIMAL, wxT("Run Minimal Sample") );
+    menuFile->AppendSeparator();
+    menuFile->Append(ID_QUIT, wxT("E&xit\tAlt-X"), wxT("Quit this program") );
+
+    // Now append the freshly created menu to the menu bar...
+    wxMenuBar *menuBar = new wxMenuBar();
+    menuBar->Append(menuFile, wxT("&File") );
+    menuBar->Append(menuTry, wxT("&Try These!") );
+    menuBar->Append(menuTools1, wxT("&Basic") );
+    menuBar->Append(menuTools2, wxT("&Advanced") );
+    menuBar->Append(menuHelp, wxT("&Help") );
+
+    // ... and attach this menu bar to the frame
+    SetMenuBar(menuBar);
+
+#if wxUSE_STATUSBAR
+    // create a status bar
+    CreateStatusBar(1);
+    SetStatusText(wxEmptyString);
+#endif // wxUSE_STATUSBAR
+
+
+    //
+    // Finalize
+    //
+
+    SetSize(
+        (wxSystemSettings::GetMetric(wxSYS_SCREEN_X)/10)*4,
+        (wxSystemSettings::GetMetric(wxSYS_SCREEN_Y)/10)*8
+        );
+    Centre();
+}
+
+//
+// Normally, wxPropertyGrid does not check whether item with identical
+// label already exists. However, since in this sample we use labels for
+// identifying properties, we have to be sure not to generate identical
+// labels.
+//
+void GenerateUniquePropertyLabel( wxPropertyGridManager* pg, wxString& baselabel )
+{
+    int count = -1;
+    wxString newlabel;
+
+    if ( pg->GetPropertyByLabel( baselabel ) )
+    {
+        for (;;)
+        {
+            count++;
+            newlabel.Printf(wxT("%s%i"),baselabel.c_str(),count);
+            if ( !pg->GetPropertyByLabel( newlabel ) ) break;
+        }
+    }
+
+    if ( count >= 0 )
+    {
+        baselabel = newlabel;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnInsertPropClick( wxCommandEvent& WXUNUSED(event) )
+{
+    wxString propLabel;
+
+    if ( !m_pPropGridManager->GetChildrenCount() )
+    {
+        wxMessageBox(wxT("No items to relate - first add some with Append."));
+        return;
+    }
+
+    wxPGProperty* id = m_pPropGridManager->GetGrid()->GetSelection();
+    if ( !id )
+    {
+        wxMessageBox(wxT("First select a property - new one will be inserted right before that."));
+        return;
+    }
+    if ( propLabel.Len() < 1 ) propLabel = wxT("Property");
+
+    GenerateUniquePropertyLabel( m_pPropGridManager, propLabel );
+
+    m_pPropGridManager->Insert( m_pPropGridManager->GetPropertyParent(id),
+                            m_pPropGridManager->GetPropertyIndex(id),
+                            new wxStringProperty(propLabel) );
+
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnAppendPropClick( wxCommandEvent& WXUNUSED(event) )
+{
+    wxString propLabel;
+
+    if ( propLabel.Len() < 1 ) propLabel = wxT("Property");
+
+    GenerateUniquePropertyLabel( m_pPropGridManager, propLabel );
+
+    m_pPropGridManager->Append( new wxStringProperty(propLabel) );
+
+    m_pPropGridManager->Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnClearClick( wxCommandEvent& WXUNUSED(event) )
+{
+    m_pPropGridManager->GetGrid()->Clear();
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnAppendCatClick( wxCommandEvent& WXUNUSED(event) )
+{
+    wxString propLabel;
+
+    if ( propLabel.Len() < 1 ) propLabel = wxT("Category");
+
+    GenerateUniquePropertyLabel( m_pPropGridManager, propLabel );
+
+    m_pPropGridManager->Append( new wxPropertyCategory (propLabel) );
+
+    m_pPropGridManager->Refresh();
+
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnInsertCatClick( wxCommandEvent& WXUNUSED(event) )
+{
+    wxString propLabel;
+
+    if ( !m_pPropGridManager->GetChildrenCount() )
+    {
+        wxMessageBox(wxT("No items to relate - first add some with Append."));
+        return;
+    }
+
+    wxPGProperty* id = m_pPropGridManager->GetGrid()->GetSelection();
+    if ( !id )
+    {
+        wxMessageBox(wxT("First select a property - new one will be inserted right before that."));
+        return;
+    }
+
+    if ( propLabel.Len() < 1 ) propLabel = wxT("Category");
+
+    GenerateUniquePropertyLabel( m_pPropGridManager, propLabel );
+
+    m_pPropGridManager->Insert( m_pPropGridManager->GetPropertyParent(id),
+                            m_pPropGridManager->GetPropertyIndex(id),
+                            new wxPropertyCategory (propLabel) );
+
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnDelPropClick( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPGProperty* id = m_pPropGridManager->GetGrid()->GetSelection();
+    if ( !id )
+    {
+        wxMessageBox(wxT("First select a property."));
+        return;
+    }
+
+    m_pPropGridManager->DeleteProperty( id );
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnDelPropRClick( wxCommandEvent& WXUNUSED(event) )
+{
+    // Delete random property
+    wxPGProperty* p = m_pPropGridManager->GetGrid()->GetRoot();
+
+    for (;;)
+    {
+        if ( !p->IsCategory() )
+        {
+            m_pPropGridManager->DeleteProperty( p );
+            break;
+        }
+
+        if ( !p->GetChildCount() )
+            break;
+
+        int n = rand() % ((int)p->GetChildCount());
+
+        p = p->Item(n);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnContextMenu( wxContextMenuEvent& event )
+{
+    wxLogDebug(wxT("FormMain::OnContextMenu(%i,%i)"),
+        event.GetPosition().x,event.GetPosition().y);
+
+    //event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnCloseClick( wxCommandEvent& WXUNUSED(event) )
+{
+/*#ifdef __WXDEBUG__
+    m_pPropGridManager->GetGrid()->DumpAllocatedChoiceSets();
+    wxLogDebug(wxT("\\-> Don't worry, this is perfectly normal in this sample."));
+#endif*/
+
+    Close(false);
+}
+
+// -----------------------------------------------------------------------
+
+int IterateMessage( wxPGProperty* prop )
+{
+    wxString s;
+
+    s.Printf( wxT("\"%s\" class = %s, valuetype = %s"), prop->GetLabel().c_str(),
+        prop->GetClassInfo()->GetClassName(), prop->GetValueType().c_str() );
+
+    return wxMessageBox( s, wxT("Iterating... (press CANCEL to end)"), wxOK|wxCANCEL );
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnIterate1Click( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPropertyGridIterator it;
+
+    for ( it = m_pPropGridManager->GetCurrentPage()->
+            GetIterator();
+          !it.AtEnd();
+          it++ )
+    {
+        wxPGProperty* p = *it;
+        int res = IterateMessage( p );
+        if ( res == wxCANCEL ) break;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnIterate2Click( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPropertyGridIterator it;
+
+    for ( it = m_pPropGridManager->GetCurrentPage()->
+            GetIterator( wxPG_ITERATE_VISIBLE );
+          !it.AtEnd();
+          it++ )
+    {
+        wxPGProperty* p = *it;
+
+        int res = IterateMessage( p );
+        if ( res == wxCANCEL ) break;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnIterate3Click( wxCommandEvent& WXUNUSED(event) )
+{
+    // iterate over items in reverse order
+    wxPropertyGridIterator it;
+
+    for ( it = m_pPropGridManager->GetCurrentPage()->
+                GetIterator( wxPG_ITERATE_DEFAULT, wxBOTTOM );
+          !it.AtEnd();
+          it-- )
+    {
+        wxPGProperty* p = *it;
+
+        int res = IterateMessage( p );
+        if ( res == wxCANCEL ) break;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnIterate4Click( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPropertyGridIterator it;
+
+    for ( it = m_pPropGridManager->GetCurrentPage()->
+            GetIterator( wxPG_ITERATE_CATEGORIES );
+          !it.AtEnd();
+          it++ )
+    {
+        wxPGProperty* p = *it;
+
+        int res = IterateMessage( p );
+        if ( res == wxCANCEL ) break;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnFitColumnsClick( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPropertyGridPage* page = m_pPropGridManager->GetCurrentPage();
+
+    // Remove auto-centering
+    m_pPropGridManager->SetWindowStyle( m_pPropGridManager->GetWindowStyle() & ~wxPG_SPLITTER_AUTO_CENTER);
+
+    // Grow manager size just prior fit - otherwise
+    // column information may be lost.
+    wxSize oldGridSize = m_pPropGridManager->GetGrid()->GetClientSize();
+    wxSize oldFullSize = GetSize();
+    SetSize(1000, oldFullSize.y);
+
+    wxSize newSz = page->FitColumns();
+
+    int dx = oldFullSize.x - oldGridSize.x;
+    int dy = oldFullSize.y - oldGridSize.y;
+
+    newSz.x += dx;
+    newSz.y += dy;
+
+    SetSize(newSz);
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnChangeFlagsPropItemsClick( wxCommandEvent& WXUNUSED(event) )
+{
+
+    wxPGProperty* id = m_pPropGridManager->GetPropertyByName(wxT("Window Styles"));
+
+    wxPGChoices newChoices;
+
+    newChoices.Add(wxT("Fast"),0x1);
+    newChoices.Add(wxT("Powerful"),0x2);
+    newChoices.Add(wxT("Safe"),0x4);
+    newChoices.Add(wxT("Sleek"),0x8);
+
+    m_pPropGridManager->SetPropertyChoices(id,newChoices);
+    //m_pPropGridManager->ReplaceProperty(wxT("Window Styles"),
+    //    wxFlagsProperty(wxT("Window Styles"),wxPG_LABEL,newChoices));
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnEnableDisable( wxCommandEvent& )
+{
+    wxPGProperty* id = m_pPropGridManager->GetGrid()->GetSelection();
+    if ( !id )
+    {
+        wxMessageBox(wxT("First select a property."));
+        return;
+    }
+
+    if ( m_pPropGridManager->IsPropertyEnabled( id ) )
+    {
+        m_pPropGridManager->DisableProperty ( id );
+        m_itemEnable->SetItemLabel( wxT("Enable") );
+    }
+    else
+    {
+        m_pPropGridManager->EnableProperty ( id );
+        m_itemEnable->SetItemLabel( wxT("Disable") );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnHideShow( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPGProperty* id = m_pPropGridManager->GetGrid()->GetSelection();
+    if ( !id )
+    {
+        wxMessageBox(wxT("First select a property."));
+        return;
+    }
+
+    if ( m_pPropGridManager->IsPropertyShown( id ) )
+    {
+        m_pPropGridManager->HideProperty( id, true );
+        m_itemEnable->SetItemLabel( wxT("Show") );
+    }
+    else
+    {
+        m_pPropGridManager->HideProperty( id, false );
+        m_itemEnable->SetItemLabel( wxT("Hide") );
+    }
+
+    wxPropertyGridPage* curPage = m_pPropGridManager->GetCurrentPage();
+
+    // Check for bottomY precalculation validity
+    unsigned int byPre = curPage->GetVirtualHeight();
+    unsigned int byAct = curPage->GetActualVirtualHeight();
+
+    if ( byPre != byAct )
+    {
+        wxLogDebug(wxT("VirtualHeight is %u, should be %u"), byPre, byAct);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnInsertPage( wxCommandEvent& WXUNUSED(event) )
+{
+    m_pPropGridManager->AddPage(wxT("New Page"));
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnRemovePage( wxCommandEvent& WXUNUSED(event) )
+{
+    m_pPropGridManager->RemovePage(m_pPropGridManager->GetSelectedPage());
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnSaveState( wxCommandEvent& WXUNUSED(event) )
+{
+    m_savedState = m_pPropGridManager->SaveEditableState();
+    wxLogDebug(wxT("Saved editable state string: \"%s\""), m_savedState.c_str());
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnRestoreState( wxCommandEvent& WXUNUSED(event) )
+{
+    m_pPropGridManager->RestoreEditableState(m_savedState);
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnSetSpinCtrlEditorClick( wxCommandEvent& WXUNUSED(event) )
+{
+#if wxUSE_SPINBTN
+    wxPGProperty* pgId = m_pPropGridManager->GetSelectedProperty();
+    if ( pgId )
+        m_pPropGridManager->SetPropertyEditor( pgId, wxPG_EDITOR(SpinCtrl) );
+    else
+        wxMessageBox(wxT("First select a property"));
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnTestReplaceClick( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPGProperty* pgId = m_pPropGridManager->GetSelectedProperty();
+    if ( pgId )
+    {
+        wxPGChoices choices;
+        choices.Add(wxT("Flag 0"),0x0001);
+        choices.Add(wxT("Flag 1"),0x0002);
+        choices.Add(wxT("Flag 2"),0x0004);
+        choices.Add(wxT("Flag 3"),0x0008);
+        wxPGProperty* newId = m_pPropGridManager->ReplaceProperty( pgId,
+            new wxFlagsProperty(wxT("ReplaceFlagsProperty"), wxPG_LABEL, choices, 0x0003) );
+        m_pPropGridManager->SetPropertyAttribute( newId,
+                                              wxPG_BOOL_USE_CHECKBOX,
+                                              true,
+                                              wxPG_RECURSE );
+    }
+    else
+        wxMessageBox(wxT("First select a property"));
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnClearModifyStatusClick( wxCommandEvent& WXUNUSED(event) )
+{
+    m_pPropGridManager->ClearModifiedStatus();
+}
+
+// -----------------------------------------------------------------------
+
+// Freeze check-box checked?
+void FormMain::OnFreezeClick( wxCommandEvent& event )
+{
+    if ( !m_pPropGridManager ) return;
+
+    if ( event.IsChecked() )
+    {
+        if ( !m_pPropGridManager->IsFrozen() )
+        {
+            m_pPropGridManager->Freeze();
+        }
+    }
+    else
+    {
+        if ( m_pPropGridManager->IsFrozen() )
+        {
+            m_pPropGridManager->Thaw();
+            m_pPropGridManager->Refresh();
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnAbout(wxCommandEvent& WXUNUSED(event))
+{
+    wxString msg;
+    msg.Printf( wxT("wxPropertyGrid Sample")
+#if wxUSE_UNICODE
+  #if defined(wxUSE_UNICODE_UTF8) && wxUSE_UNICODE_UTF8
+                wxT(" <utf-8>")
+  #else
+                wxT(" <unicode>")
+  #endif
+#else
+                wxT(" <ansi>")
+#endif
+#ifdef __WXDEBUG__
+                wxT(" <debug>")
+#else
+                wxT(" <release>")
+#endif
+                wxT("\n\n")
+                wxT("Programmed by %s\n\n")
+                wxT("Using %s\n\n"),
+            wxT("Jaakko Salli"), wxVERSION_STRING
+            );
+
+    wxMessageBox(msg, _T("About"), wxOK | wxICON_INFORMATION, this);
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnColourScheme( wxCommandEvent& event )
+{
+    int id = event.GetId();
+    if ( id == ID_COLOURSCHEME1 )
+    {
+        m_pPropGridManager->GetGrid()->ResetColours();
+    }
+    else if ( id == ID_COLOURSCHEME2 )
+    {
+        // white
+        wxColour my_grey_1(212,208,200);
+        wxColour my_grey_3(113,111,100);
+        m_pPropGridManager->Freeze();
+        m_pPropGridManager->GetGrid()->SetMarginColour( *wxWHITE );
+        m_pPropGridManager->GetGrid()->SetCaptionBackgroundColour( *wxWHITE );
+        m_pPropGridManager->GetGrid()->SetCellBackgroundColour( *wxWHITE );
+        m_pPropGridManager->GetGrid()->SetCellTextColour( my_grey_3 );
+        m_pPropGridManager->GetGrid()->SetLineColour( my_grey_1 ); //wxColour(160,160,160)
+        m_pPropGridManager->Thaw();
+    }
+    else if ( id == ID_COLOURSCHEME3 )
+    {
+        // .NET
+        wxColour my_grey_1(212,208,200);
+        wxColour my_grey_2(236,233,216);
+        m_pPropGridManager->Freeze();
+        m_pPropGridManager->GetGrid()->SetMarginColour( my_grey_1 );
+        m_pPropGridManager->GetGrid()->SetCaptionBackgroundColour( my_grey_1 );
+        m_pPropGridManager->GetGrid()->SetLineColour( my_grey_1 );
+        m_pPropGridManager->Thaw();
+    }
+    else if ( id == ID_COLOURSCHEME4 )
+    {
+        // cream
+
+        wxColour my_grey_1(212,208,200);
+        wxColour my_grey_2(241,239,226);
+        wxColour my_grey_3(113,111,100);
+        m_pPropGridManager->Freeze();
+        m_pPropGridManager->GetGrid()->SetMarginColour( *wxWHITE );
+        m_pPropGridManager->GetGrid()->SetCaptionBackgroundColour( *wxWHITE );
+        m_pPropGridManager->GetGrid()->SetCellBackgroundColour( my_grey_2 );
+        m_pPropGridManager->GetGrid()->SetCellBackgroundColour( my_grey_2 );
+        m_pPropGridManager->GetGrid()->SetCellTextColour( my_grey_3 );
+        m_pPropGridManager->GetGrid()->SetLineColour( my_grey_1 );
+        m_pPropGridManager->Thaw();
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnCatColours( wxCommandEvent& event )
+{
+    wxPropertyGrid* pg = m_pPropGridManager->GetGrid();
+    m_pPropGridManager->Freeze();
+
+    if ( event.IsChecked() )
+    {
+        // Set custom colours.
+        pg->SetPropertyTextColour( wxT("Appearance"), wxColour(255,0,0), false );
+        pg->SetPropertyBackgroundColour( wxT("Appearance"), wxColour(255,255,183) );
+        pg->SetPropertyTextColour( wxT("Appearance"), wxColour(255,0,183) );
+        pg->SetPropertyTextColour( wxT("PositionCategory"), wxColour(0,255,0), false );
+        pg->SetPropertyBackgroundColour( wxT("PositionCategory"), wxColour(255,226,190) );
+        pg->SetPropertyTextColour( wxT("PositionCategory"), wxColour(255,0,190) );
+        pg->SetPropertyTextColour( wxT("Environment"), wxColour(0,0,255), false );
+        pg->SetPropertyBackgroundColour( wxT("Environment"), wxColour(208,240,175) );
+        pg->SetPropertyTextColour( wxT("Environment"), wxColour(255,255,255) );
+        pg->SetPropertyBackgroundColour( wxT("More Examples"), wxColour(172,237,255) );
+        pg->SetPropertyTextColour( wxT("More Examples"), wxColour(172,0,255) );
+    }
+    else
+    {
+        // Revert to original.
+        pg->SetPropertyColoursToDefault( wxT("Appearance") );
+        pg->SetPropertyColoursToDefault( wxT("PositionCategory") );
+        pg->SetPropertyColoursToDefault( wxT("Environment") );
+        pg->SetPropertyColoursToDefault( wxT("More Examples") );
+    }
+    m_pPropGridManager->Thaw();
+    m_pPropGridManager->Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+#define ADD_FLAG(FLAG) \
+        chs.Add(wxT(#FLAG)); \
+        vls.Add(FLAG); \
+        if ( (flags & FLAG) == FLAG ) sel.Add(ind); \
+        ind++;
+
+void FormMain::OnSelectStyle( wxCommandEvent& WXUNUSED(event) )
+{
+    int style;
+    int extraStyle;
+
+    {
+        wxArrayString chs;
+        wxArrayInt vls;
+        wxArrayInt sel;
+        unsigned int ind = 0;
+        int flags = m_pPropGridManager->GetWindowStyle();
+        ADD_FLAG(wxPG_HIDE_CATEGORIES)
+        ADD_FLAG(wxPG_AUTO_SORT)
+        ADD_FLAG(wxPG_BOLD_MODIFIED)
+        ADD_FLAG(wxPG_SPLITTER_AUTO_CENTER)
+        ADD_FLAG(wxPG_TOOLTIPS)
+        ADD_FLAG(wxPG_STATIC_SPLITTER)
+        ADD_FLAG(wxPG_HIDE_MARGIN)
+        ADD_FLAG(wxPG_LIMITED_EDITING)
+        ADD_FLAG(wxPG_TOOLBAR)
+        ADD_FLAG(wxPG_DESCRIPTION)
+        wxMultiChoiceDialog dlg( this, wxT("Select window styles to use"),
+                                 wxT("wxPropertyGrid Window Style"), chs );
+        dlg.SetSelections(sel);
+        if ( dlg.ShowModal() == wxID_CANCEL )
+            return;
+
+        flags = 0;
+        sel = dlg.GetSelections();
+        for ( ind = 0; ind < sel.size(); ind++ )
+            flags |= vls[sel[ind]];
+
+        style = flags;
+    }
+
+    {
+        wxArrayString chs;
+        wxArrayInt vls;
+        wxArrayInt sel;
+        unsigned int ind = 0;
+        int flags = m_pPropGridManager->GetExtraStyle();
+        ADD_FLAG(wxPG_EX_INIT_NOCAT)
+        ADD_FLAG(wxPG_EX_NO_FLAT_TOOLBAR)
+        ADD_FLAG(wxPG_EX_MODE_BUTTONS)
+        ADD_FLAG(wxPG_EX_HELP_AS_TOOLTIPS)
+        ADD_FLAG(wxPG_EX_NATIVE_DOUBLE_BUFFERING)
+        ADD_FLAG(wxPG_EX_AUTO_UNSPECIFIED_VALUES)
+        ADD_FLAG(wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES)
+        ADD_FLAG(wxPG_EX_LEGACY_VALIDATORS)
+        wxMultiChoiceDialog dlg( this, wxT("Select extra window styles to use"),
+                                 wxT("wxPropertyGrid Extra Style"), chs );
+        dlg.SetSelections(sel);
+        if ( dlg.ShowModal() == wxID_CANCEL )
+            return;
+
+        flags = 0;
+        sel = dlg.GetSelections();
+        for ( ind = 0; ind < sel.size(); ind++ )
+            flags |= vls[sel[ind]];
+
+        extraStyle = flags;
+    }
+
+    CreateGrid( style, extraStyle );
+
+    SetSize(
+        (wxSystemSettings::GetMetric(wxSYS_SCREEN_X)/10)*4,
+        (wxSystemSettings::GetMetric(wxSYS_SCREEN_Y)/10)*8
+        );
+    Centre();
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnSetColumns( wxCommandEvent& WXUNUSED(event) )
+{
+    long colCount = ::wxGetNumberFromUser(wxT("Enter number of columns (2-20)."),wxT("Columns:"),
+                                          wxT("Change Columns"),m_pPropGridManager->GetColumnCount(),
+                                          2,20);
+
+    if ( colCount >= 2 )
+    {
+        m_pPropGridManager->SetColumnCount(colCount);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnSetPropertyValue( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPropertyGrid* pg = m_pPropGridManager->GetGrid();
+    wxPGProperty* selected = pg->GetSelection();
+
+    if ( selected )
+    {
+        wxString value = ::wxGetTextFromUser( wxT("Enter new value:") );
+        pg->SetPropertyValue( selected, value );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnInsertChoice( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPropertyGrid* pg = m_pPropGridManager->GetGrid();
+
+    wxPGProperty* selected = pg->GetSelection();
+    wxPGChoices& choices = pg->GetPropertyChoices(selected);
+
+    // Insert new choice to the center of list
+
+    if ( choices.IsOk() )
+    {
+        int pos = choices.GetCount() / 2;
+        pg->InsertPropertyChoice(selected,wxT("New Choice"),pos);
+    }
+    else
+    {
+        ::wxMessageBox(wxT("First select a property with some choices."));
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnDeleteChoice( wxCommandEvent& WXUNUSED(event) )
+{
+    wxPropertyGrid* pg = m_pPropGridManager->GetGrid();
+
+    wxPGProperty* selected = pg->GetSelection();
+    wxPGChoices& choices = pg->GetPropertyChoices(selected);
+
+    // Deletes choice from the center of list
+
+    if ( choices.IsOk() )
+    {
+        int pos = choices.GetCount() / 2;
+        pg->DeletePropertyChoice(selected,pos);
+    }
+    else
+    {
+        ::wxMessageBox(wxT("First select a property with some choices."));
+    }
+}
+
+// -----------------------------------------------------------------------
+
+#include <wx/colordlg.h>
+
+void FormMain::OnMisc ( wxCommandEvent& event )
+{
+    int id = event.GetId();
+    if ( id == ID_STATICLAYOUT )
+    {
+        long wsf = m_pPropGridManager->GetWindowStyleFlag();
+        if ( event.IsChecked() ) m_pPropGridManager->SetWindowStyleFlag( wsf|wxPG_STATIC_LAYOUT );
+        else m_pPropGridManager->SetWindowStyleFlag( wsf&~(wxPG_STATIC_LAYOUT) );
+    }
+    else if ( id == ID_CLEAR )
+    {
+        m_pPropGridManager->ClearPropertyValue(m_pPropGridManager->GetGrid()->GetSelection());
+    }
+    else if ( id == ID_COLLAPSEALL )
+    {
+        wxPGVIterator it;
+        wxPropertyGrid* pg = m_pPropGridManager->GetGrid();
+
+        for ( it = pg->GetVIterator( wxPG_ITERATE_ALL ); !it.AtEnd(); it.Next() )
+            it.GetProperty()->SetExpanded( false );
+
+        pg->RefreshGrid();
+    }
+    else if ( id == ID_GETVALUES )
+    {
+        m_storedValues = m_pPropGridManager->GetGrid()->GetPropertyValues(wxT("Test"),
+                                                                      m_pPropGridManager->GetGrid()->GetRoot(),
+                                                                      wxPG_KEEP_STRUCTURE|wxPG_INC_ATTRIBUTES);
+    }
+    else if ( id == ID_SETVALUES )
+    {
+        if ( m_storedValues.GetType() == wxT("list") )
+        {
+            m_pPropGridManager->GetGrid()->SetPropertyValues(m_storedValues);
+        }
+        else
+            wxMessageBox(wxT("First use Get Property Values."));
+    }
+    else if ( id == ID_SETVALUES2 )
+    {
+        wxVariant list;
+        list.NullList();
+        list.Append( wxVariant((long)1234,wxT("VariantLong")) );
+        list.Append( wxVariant((bool)TRUE,wxT("VariantBool")) );
+        list.Append( wxVariant(wxT("Test Text"),wxT("VariantString")) );
+        m_pPropGridManager->GetGrid()->SetPropertyValues(list);
+    }
+    else if ( id == ID_COLLAPSE )
+    {
+        // Collapses selected.
+        wxPGProperty* id = m_pPropGridManager->GetSelectedProperty();
+        if ( id )
+        {
+            m_pPropGridManager->Collapse(id);
+        }
+    }
+    else if ( id == ID_RUNTESTFULL )
+    {
+        // Runs a regression test.
+        RunTests(true);
+    }
+    else if ( id == ID_RUNTESTPARTIAL )
+    {
+        // Runs a regression test.
+        RunTests(false);
+    }
+    else if ( id == ID_UNSPECIFY )
+    {
+        wxPGProperty* prop = m_pPropGridManager->GetSelectedProperty();
+        if ( prop )
+        {
+            m_pPropGridManager->SetPropertyValueUnspecified(prop);
+        }
+    }
+    else if ( id == ID_SETCOLOUR )
+    {
+        wxPGProperty* prop = m_pPropGridManager->GetSelectedProperty();
+        if ( prop )
+        {
+            wxColourData data;
+            data.SetChooseFull(true);
+            int i;
+            for ( i = 0; i < 16; i++)
+            {
+                wxColour colour(i*16, i*16, i*16);
+                data.SetCustomColour(i, colour);
+            }
+
+            wxColourDialog dialog(this, &data);
+            if ( dialog.ShowModal() == wxID_OK )
+            {
+                wxColourData retData = dialog.GetColourData();
+                m_pPropGridManager->GetGrid()->SetPropertyBackgroundColour(prop,retData.GetColour());
+            }
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnPopulateClick( wxCommandEvent& event )
+{
+    int id = event.GetId();
+    m_propGrid->Clear();
+    m_propGrid->Freeze();
+    if ( id == ID_POPULATE1 )
+    {
+        PopulateWithStandardItems();
+    }
+    else if ( id == ID_POPULATE2 )
+    {
+        PopulateWithLibraryConfig();
+    }
+    m_propGrid->Thaw();
+}
+
+// -----------------------------------------------------------------------
+
+void DisplayMinimalFrame(wxWindow* parent);  // in minimal.cpp
+
+void FormMain::OnRunMinimalClick( wxCommandEvent& WXUNUSED(event) )
+{
+    DisplayMinimalFrame(this);
+}
+
+// -----------------------------------------------------------------------
+
+FormMain::~FormMain()
+{
+}
+
+// -----------------------------------------------------------------------
+
+IMPLEMENT_APP(cxApplication)
+
+bool cxApplication::OnInit()
+{
+    //wxLocale Locale;
+    //Locale.Init(wxLANGUAGE_FINNISH);
+
+       FormMain* frame = Form1 = new FormMain( wxT("wxPropertyGrid Sample"), wxPoint(0,0), wxSize(300,500) );
+       frame->Show(true);
+
+    //
+    // Parse command-line
+    wxApp& app = wxGetApp();
+    if ( app.argc > 1 )
+    {
+        wxString s = app.argv[1];
+        if ( s == wxT("--run-tests") )
+        {
+            //
+            // Run tests
+            bool testResult = frame->RunTests(true);
+
+            if ( testResult )
+                return false;
+        }
+    }
+
+       return true;
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnIdle( wxIdleEvent& event )
+{
+    /*
+    // This code is useful for debugging focus problems
+    static wxWindow* last_focus = (wxWindow*) NULL;
+
+    wxWindow* cur_focus = ::wxWindow::FindFocus();
+
+    if ( cur_focus != last_focus )
+    {
+        const wxChar* class_name = wxT("<none>");
+        if ( cur_focus )
+            class_name = cur_focus->GetClassInfo()->GetClassName();
+        last_focus = cur_focus;
+        wxLogDebug( wxT("FOCUSED: %s %X"),
+            class_name,
+            (unsigned int)cur_focus);
+    }
+    */
+
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
diff --git a/samples/propgrid/propgrid.dsp b/samples/propgrid/propgrid.dsp
new file mode 100644 (file)
index 0000000..c509131
--- /dev/null
@@ -0,0 +1,276 @@
+# Microsoft Developer Studio Project File - Name="propgrid" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Application" 0x0101\r
+\r
+CFG=propgrid - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "propgrid.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "propgrid.mak" CFG="propgrid - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "propgrid - Win32 DLL Universal Release" (based on "Win32 (x86) Application")\r
+!MESSAGE "propgrid - Win32 DLL Universal Debug" (based on "Win32 (x86) Application")\r
+!MESSAGE "propgrid - Win32 DLL Release" (based on "Win32 (x86) Application")\r
+!MESSAGE "propgrid - Win32 DLL Debug" (based on "Win32 (x86) Application")\r
+!MESSAGE "propgrid - Win32 Universal Release" (based on "Win32 (x86) Application")\r
+!MESSAGE "propgrid - Win32 Universal Debug" (based on "Win32 (x86) Application")\r
+!MESSAGE "propgrid - Win32 Release" (based on "Win32 (x86) Application")\r
+!MESSAGE "propgrid - Win32 Debug" (based on "Win32 (x86) Application")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "propgrid - Win32 DLL Universal Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "vc_mswunivudll"\r
+# PROP BASE Intermediate_Dir "vc_mswunivudll\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "vc_mswunivudll"\r
+# PROP Intermediate_Dir "vc_mswunivudll\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MD /Zi /Fdvc_mswunivudll\propgrid.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivu" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD CPP /nologo /FD /MD /Zi /Fdvc_mswunivudll\propgrid.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivu" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+# ADD RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxmswuniv29u_propgrid.lib wxmswuniv29u_adv.lib wxmswuniv29u_core.lib wxbase29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivudll\propgrid.exe" /debug /pdb:"vc_mswunivudll\propgrid.pdb" /libpath:".\..\..\lib\vc_dll" /subsystem:windows\r
+# ADD LINK32 wxmswuniv29u_propgrid.lib wxmswuniv29u_adv.lib wxmswuniv29u_core.lib wxbase29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivudll\propgrid.exe" /debug /pdb:"vc_mswunivudll\propgrid.pdb" /libpath:".\..\..\lib\vc_dll" /subsystem:windows\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Universal Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "vc_mswunivuddll"\r
+# PROP BASE Intermediate_Dir "vc_mswunivuddll\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "vc_mswunivuddll"\r
+# PROP Intermediate_Dir "vc_mswunivuddll\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MDd /Zi /Fdvc_mswunivuddll\propgrid.pdb /Od /Gm /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivud" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD CPP /nologo /FD /MDd /Zi /Fdvc_mswunivuddll\propgrid.pdb /Od /Gm /GR /EHsc /I ".\..\..\lib\vc_dll\mswunivud" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswunivud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxmswuniv29ud_propgrid.lib wxmswuniv29ud_adv.lib wxmswuniv29ud_core.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivuddll\propgrid.exe" /debug /pdb:"vc_mswunivuddll\propgrid.pdb" /libpath:".\..\..\lib\vc_dll" /subsystem:windows\r
+# ADD LINK32 wxmswuniv29ud_propgrid.lib wxmswuniv29ud_adv.lib wxmswuniv29ud_core.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivuddll\propgrid.exe" /debug /pdb:"vc_mswunivuddll\propgrid.pdb" /libpath:".\..\..\lib\vc_dll" /subsystem:windows\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "vc_mswudll"\r
+# PROP BASE Intermediate_Dir "vc_mswudll\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "vc_mswudll"\r
+# PROP Intermediate_Dir "vc_mswudll\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MD /Zi /Fdvc_mswudll\propgrid.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswu" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD CPP /nologo /FD /MD /Zi /Fdvc_mswudll\propgrid.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_dll\mswu" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+# ADD RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswu" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxmsw29u_propgrid.lib wxmsw29u_adv.lib wxmsw29u_core.lib wxbase29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswudll\propgrid.exe" /debug /pdb:"vc_mswudll\propgrid.pdb" /libpath:".\..\..\lib\vc_dll" /subsystem:windows\r
+# ADD LINK32 wxmsw29u_propgrid.lib wxmsw29u_adv.lib wxmsw29u_core.lib wxbase29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswudll\propgrid.exe" /debug /pdb:"vc_mswudll\propgrid.pdb" /libpath:".\..\..\lib\vc_dll" /subsystem:windows\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 DLL Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "vc_mswuddll"\r
+# PROP BASE Intermediate_Dir "vc_mswuddll\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "vc_mswuddll"\r
+# PROP Intermediate_Dir "vc_mswuddll\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MDd /Zi /Fdvc_mswuddll\propgrid.pdb /Od /Gm /GR /EHsc /I ".\..\..\lib\vc_dll\mswud" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD CPP /nologo /FD /MDd /Zi /Fdvc_mswuddll\propgrid.pdb /Od /Gm /GR /EHsc /I ".\..\..\lib\vc_dll\mswud" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "WXUSINGDLL" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_dll\mswud" /i ".\..\..\include" /i "." /d "WXUSINGDLL" /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxmsw29ud_propgrid.lib wxmsw29ud_adv.lib wxmsw29ud_core.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswuddll\propgrid.exe" /debug /pdb:"vc_mswuddll\propgrid.pdb" /libpath:".\..\..\lib\vc_dll" /subsystem:windows\r
+# ADD LINK32 wxmsw29ud_propgrid.lib wxmsw29ud_adv.lib wxmsw29ud_core.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswuddll\propgrid.exe" /debug /pdb:"vc_mswuddll\propgrid.pdb" /libpath:".\..\..\lib\vc_dll" /subsystem:windows\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "vc_mswunivu"\r
+# PROP BASE Intermediate_Dir "vc_mswunivu\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "vc_mswunivu"\r
+# PROP Intermediate_Dir "vc_mswunivu\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MD /Zi /Fdvc_mswunivu\propgrid.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivu" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD CPP /nologo /FD /MD /Zi /Fdvc_mswunivu\propgrid.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivu" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivu" /i ".\..\..\include" /i "." /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+# ADD RSC /l 0x409 /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivu" /i ".\..\..\include" /i "." /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxmswuniv29u_propgrid.lib wxmswuniv29u_adv.lib wxmswuniv29u_core.lib wxbase29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivu\propgrid.exe" /debug /pdb:"vc_mswunivu\propgrid.pdb" /libpath:".\..\..\lib\vc_lib" /subsystem:windows\r
+# ADD LINK32 wxmswuniv29u_propgrid.lib wxmswuniv29u_adv.lib wxmswuniv29u_core.lib wxbase29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivu\propgrid.exe" /debug /pdb:"vc_mswunivu\propgrid.pdb" /libpath:".\..\..\lib\vc_lib" /subsystem:windows\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Universal Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "vc_mswunivud"\r
+# PROP BASE Intermediate_Dir "vc_mswunivud\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "vc_mswunivud"\r
+# PROP Intermediate_Dir "vc_mswunivud\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MDd /Zi /Fdvc_mswunivud\propgrid.pdb /Od /Gm /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivud" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD CPP /nologo /FD /MDd /Zi /Fdvc_mswunivud\propgrid.pdb /Od /Gm /GR /EHsc /I ".\..\..\lib\vc_lib\mswunivud" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXUNIVERSAL__" /D "__WXDEBUG__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivud" /i ".\..\..\include" /i "." /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXUNIVERSAL__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswunivud" /i ".\..\..\include" /i "." /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxmswuniv29ud_propgrid.lib wxmswuniv29ud_adv.lib wxmswuniv29ud_core.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivud\propgrid.exe" /debug /pdb:"vc_mswunivud\propgrid.pdb" /libpath:".\..\..\lib\vc_lib" /subsystem:windows\r
+# ADD LINK32 wxmswuniv29ud_propgrid.lib wxmswuniv29ud_adv.lib wxmswuniv29ud_core.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswunivud\propgrid.exe" /debug /pdb:"vc_mswunivud\propgrid.pdb" /libpath:".\..\..\lib\vc_lib" /subsystem:windows\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "vc_mswu"\r
+# PROP BASE Intermediate_Dir "vc_mswu\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "vc_mswu"\r
+# PROP Intermediate_Dir "vc_mswu\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MD /Zi /Fdvc_mswu\propgrid.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswu" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD CPP /nologo /FD /MD /Zi /Fdvc_mswu\propgrid.pdb /O2 /GR /EHsc /I ".\..\..\lib\vc_lib\mswu" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "__WXMSW__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswu" /i ".\..\..\include" /i "." /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+# ADD RSC /l 0x409 /d "__WXMSW__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswu" /i ".\..\..\include" /i "." /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxmsw29u_propgrid.lib wxmsw29u_adv.lib wxmsw29u_core.lib wxbase29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswu\propgrid.exe" /debug /pdb:"vc_mswu\propgrid.pdb" /libpath:".\..\..\lib\vc_lib" /subsystem:windows\r
+# ADD LINK32 wxmsw29u_propgrid.lib wxmsw29u_adv.lib wxmsw29u_core.lib wxbase29u.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregexu.lib wxexpat.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswu\propgrid.exe" /debug /pdb:"vc_mswu\propgrid.pdb" /libpath:".\..\..\lib\vc_lib" /subsystem:windows\r
+\r
+!ELSEIF  "$(CFG)" == "propgrid - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "vc_mswud"\r
+# PROP BASE Intermediate_Dir "vc_mswud\propgrid"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "vc_mswud"\r
+# PROP Intermediate_Dir "vc_mswud\propgrid"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /FD /MDd /Zi /Fdvc_mswud\propgrid.pdb /Od /Gm /GR /EHsc /I ".\..\..\lib\vc_lib\mswud" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD CPP /nologo /FD /MDd /Zi /Fdvc_mswud\propgrid.pdb /Od /Gm /GR /EHsc /I ".\..\..\lib\vc_lib\mswud" /I ".\..\..\include" /W4 /I "." /I ".\..\..\samples" /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /c\r
+# ADD BASE MTL /nologo /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "WIN32" /D "_DEBUG" /D "__WXMSW__" /D "__WXDEBUG__" /D "_UNICODE" /D "_WINDOWS" /D "NOPCH" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswud" /i ".\..\..\include" /i "." /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+# ADD RSC /l 0x409 /d "_DEBUG" /d "__WXMSW__" /d "__WXDEBUG__" /d "_UNICODE" /i ".\..\..\lib\vc_lib\mswud" /i ".\..\..\include" /i "." /d "_WINDOWS" /i ".\..\..\samples" /d NOPCH\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 wxmsw29ud_propgrid.lib wxmsw29ud_adv.lib wxmsw29ud_core.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswud\propgrid.exe" /debug /pdb:"vc_mswud\propgrid.pdb" /libpath:".\..\..\lib\vc_lib" /subsystem:windows\r
+# ADD LINK32 wxmsw29ud_propgrid.lib wxmsw29ud_adv.lib wxmsw29ud_core.lib wxbase29ud.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexud.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib /nologo /machine:i386 /out:"vc_mswud\propgrid.exe" /debug /pdb:"vc_mswud\propgrid.pdb" /libpath:".\..\..\lib\vc_lib" /subsystem:windows\r
+\r
+!ENDIF\r
+\r
+# Begin Target\r
+\r
+# Name "propgrid - Win32 DLL Universal Release"\r
+# Name "propgrid - Win32 DLL Universal Debug"\r
+# Name "propgrid - Win32 DLL Release"\r
+# Name "propgrid - Win32 DLL Debug"\r
+# Name "propgrid - Win32 Universal Release"\r
+# Name "propgrid - Win32 Universal Debug"\r
+# Name "propgrid - Win32 Release"\r
+# Name "propgrid - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=.\propgrid.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\propgrid_minimal.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\..\sample.rc\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\sampleprops.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=.\tests.cpp\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
+\r
diff --git a/samples/propgrid/propgrid.h b/samples/propgrid/propgrid.h
new file mode 100644 (file)
index 0000000..ef1048a
--- /dev/null
@@ -0,0 +1,256 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        samples/propgrid/propgrid.h
+// Purpose:     wxPropertyGrid sample
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2004-09-25
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_SAMPLES_PROPGRID_PROPGRID_H_
+#define _WX_SAMPLES_PROPGRID_PROPGRID_H_
+
+// -----------------------------------------------------------------------
+
+class wxAdvImageFileProperty : public wxFileProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxAdvImageFileProperty)
+public:
+
+    wxAdvImageFileProperty( const wxString& label = wxPG_LABEL,
+                            const wxString& name = wxPG_LABEL,
+                            const wxString& value = wxEmptyString );
+    virtual ~wxAdvImageFileProperty ();
+
+    virtual void OnSetValue();  // Override to allow image loading.
+
+    WX_PG_DECLARE_CHOICE_METHODS()
+    WX_PG_DECLARE_EVENT_METHODS()
+    WX_PG_DECLARE_CUSTOM_PAINT_METHODS()
+
+    void LoadThumbnails( size_t n );
+
+protected:
+    wxImage*    m_pImage; // Temporary thumbnail data.
+
+    static wxPGChoices ms_choices;
+
+    int m_index; // Index required for choice behaviour.
+};
+
+// -----------------------------------------------------------------------
+
+class wxVector3f
+{
+public:
+    wxVector3f()
+    {
+        x = y = z = 0.0;
+    }
+    wxVector3f( double x, double y, double z )
+    {
+        x = x; y = y; z = z;
+    }
+
+    double x, y, z;
+};
+
+inline bool operator == (const wxVector3f& a, const wxVector3f& b)
+{
+    return (a.x == b.x && a.y == b.y && a.z == b.z);
+}
+
+WX_PG_DECLARE_VARIANT_DATA(wxVector3fVariantData, wxVector3f, wxEMPTY_PARAMETER_VALUE)
+
+class wxVectorProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxVectorProperty)
+public:
+
+    wxVectorProperty( const wxString& label = wxPG_LABEL,
+                      const wxString& name = wxPG_LABEL,
+                      const wxVector3f& value = wxVector3f() );
+    virtual ~wxVectorProperty();
+
+    WX_PG_DECLARE_PARENTAL_METHODS()
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+class wxTriangle
+{
+public:
+    wxVector3f a, b, c;
+};
+
+inline bool operator == (const wxTriangle& a, const wxTriangle& b)
+{
+    return (a.a == b.a && a.b == b.b && a.c == b.c);
+}
+
+WX_PG_DECLARE_VARIANT_DATA(wxTriangleVariantData, wxTriangle, wxEMPTY_PARAMETER_VALUE)
+
+class wxTriangleProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxTriangleProperty)
+public:
+
+    wxTriangleProperty( const wxString& label = wxPG_LABEL,
+                        const wxString& name = wxPG_LABEL,
+                        const wxTriangle& value = wxTriangle() );
+    virtual ~wxTriangleProperty();
+
+    WX_PG_DECLARE_PARENTAL_METHODS()
+
+protected:
+};
+
+// -----------------------------------------------------------------------
+
+enum
+{
+    ID_COLOURSCHEME4 = 100
+};
+
+// -----------------------------------------------------------------------
+
+class FormMain : public wxFrame
+{
+public:
+    FormMain(const wxString& title, const wxPoint& pos, const wxSize& size );
+       ~FormMain();
+
+    wxPropertyGridManager*  m_pPropGridManager;
+    wxPropertyGrid*     m_propGrid;
+
+    wxTextCtrl*     m_tcPropLabel;
+    wxWindow*       m_panel;
+    wxBoxSizer*     m_topSizer;
+
+    wxPGChoices     m_combinedFlags;
+
+    wxMenuItem*     m_itemCatColours;
+    wxMenuItem*     m_itemFreeze;
+    wxMenuItem*     m_itemEnable;
+
+    wxVariant       m_storedValues;
+
+    wxString        m_savedState;
+
+
+    void CreateGrid( int style, int extraStyle );
+
+    // These are used in CreateGrid(), and in tests to compose
+    // grids for testing purposes.
+    void InitPanel();
+    void PopulateGrid();
+    void FinalizePanel( bool wasCreated = true );
+
+    void PopulateWithStandardItems();
+    void PopulateWithExamples();
+    void PopulateWithLibraryConfig();
+
+    void OnCloseClick( wxCommandEvent& event );
+    void OnLabelTextChange( wxCommandEvent& event );
+
+    void OnColourScheme( wxCommandEvent& event );
+
+    void OnInsertPropClick( wxCommandEvent& event );
+    void OnAppendPropClick( wxCommandEvent& event );
+    void OnClearClick( wxCommandEvent& event );
+    void OnAppendCatClick( wxCommandEvent& event );
+    void OnInsertCatClick( wxCommandEvent& event );
+    void OnDelPropClick( wxCommandEvent& event );
+    void OnDelPropRClick( wxCommandEvent& event );
+
+    void OnContextMenu( wxContextMenuEvent& event );
+
+    void OnEnableDisable( wxCommandEvent& event );
+    void OnHideShow( wxCommandEvent& event );
+    void OnClearModifyStatusClick( wxCommandEvent& event );
+    void OnFreezeClick( wxCommandEvent& event );
+    void OnDumpList( wxCommandEvent& event );
+    void OnCatColours( wxCommandEvent& event );
+    void OnSetColumns( wxCommandEvent& event );
+    void OnMisc( wxCommandEvent& event );
+    void OnPopulateClick( wxCommandEvent& event );
+    void OnSetSpinCtrlEditorClick( wxCommandEvent& event );
+    void OnTestReplaceClick( wxCommandEvent& event );
+    void OnTestXRC( wxCommandEvent& event );
+    void OnEnableCommonValues( wxCommandEvent& event );
+    void OnSelectStyle( wxCommandEvent& event );
+
+    void OnFitColumnsClick( wxCommandEvent& event );
+
+    void OnChangeFlagsPropItemsClick( wxCommandEvent& event );
+
+    void OnSaveToFileClick( wxCommandEvent& event );
+    void OnLoadFromFileClick( wxCommandEvent& event );
+
+    void OnSetPropertyValue( wxCommandEvent& event );
+    void OnInsertChoice( wxCommandEvent& event );
+    void OnDeleteChoice( wxCommandEvent& event );
+    void OnInsertPage( wxCommandEvent& event );
+    void OnRemovePage( wxCommandEvent& event );
+
+    void OnSaveState( wxCommandEvent& event );
+    void OnRestoreState( wxCommandEvent& event );
+
+    void OnRunMinimalClick( wxCommandEvent& event );
+
+    void OnIterate1Click( wxCommandEvent& event );
+    void OnIterate2Click( wxCommandEvent& event );
+    void OnIterate3Click( wxCommandEvent& event );
+    void OnIterate4Click( wxCommandEvent& event );
+
+    void OnPropertyGridChange( wxPropertyGridEvent& event );
+    void OnPropertyGridChanging( wxPropertyGridEvent& event );
+    void OnPropertyGridSelect( wxPropertyGridEvent& event );
+    void OnPropertyGridHighlight( wxPropertyGridEvent& event );
+    void OnPropertyGridItemRightClick( wxPropertyGridEvent& event );
+    void OnPropertyGridItemDoubleClick( wxPropertyGridEvent& event );
+    void OnPropertyGridPageChange( wxPropertyGridEvent& event );
+    void OnPropertyGridButtonClick( wxCommandEvent& event );
+    void OnPropertyGridTextUpdate( wxCommandEvent& event );
+    void OnPropertyGridKeyEvent( wxKeyEvent& event );
+    void OnPropertyGridItemCollapse( wxPropertyGridEvent& event );
+    void OnPropertyGridItemExpand( wxPropertyGridEvent& event );
+
+    void OnAbout( wxCommandEvent& event );
+
+    void OnMove( wxMoveEvent& event );
+    void OnResize( wxSizeEvent& event );
+    void OnPaint( wxPaintEvent& event );
+    void OnCloseEvent( wxCloseEvent& event );
+
+    void OnIdle( wxIdleEvent& event );
+
+    void AddTestProperties( wxPropertyGridPage* pg );
+
+    bool RunTests( bool fullTest, bool interactive = false );
+
+private:
+    DECLARE_EVENT_TABLE()
+};
+
+// -----------------------------------------------------------------------
+
+class cxApplication : public wxApp
+{
+public:
+
+    virtual bool OnInit();
+
+private:
+    FormMain    *Form1;
+};
+
+DECLARE_APP(cxApplication)
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_SAMPLES_PROPGRID_PROPGRID_H_
diff --git a/samples/propgrid/propgrid_minimal.cpp b/samples/propgrid/propgrid_minimal.cpp
new file mode 100644 (file)
index 0000000..cd0b4e0
--- /dev/null
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        samples/propgrid/propgrid_minimal.cpp
+// Purpose:     Minimal portion of wxPropertyGrid sample
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2008-08-23
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wx.h"
+#include "wx/propgrid/propgrid.h"
+
+class MyFrame : public wxFrame 
+{ 
+public: 
+    MyFrame(wxWindow* parent); 
+    void OnAction(wxCommandEvent& event); 
+    void OnPropertyGridChange(wxPropertyGridEvent& event); 
+
+private:
+    wxPropertyGrid* m_pg;
+    DECLARE_EVENT_TABLE()
+};
+
+//
+// Called from propgridsample.cpp
+//
+void DisplayMinimalFrame(wxWindow* parent)
+{
+    MyFrame *frame = new MyFrame(parent);
+    frame->Show(true);
+}
+
+BEGIN_EVENT_TABLE(MyFrame, wxFrame)
+    EVT_MENU(wxID_HIGHEST+1, MyFrame::OnAction)
+    EVT_PG_CHANGED( -1, MyFrame::OnPropertyGridChange )
+END_EVENT_TABLE()
+
+MyFrame::MyFrame(wxWindow* parent)
+    : wxFrame(parent, wxID_ANY, wxT("PropertyGrid Test"))
+{
+    wxMenu *Menu = new wxMenu; 
+    Menu->Append(wxID_HIGHEST+1, wxT("Action")); 
+    wxMenuBar *MenuBar = new wxMenuBar(); 
+    MenuBar->Append(Menu, wxT("Action")); 
+    SetMenuBar(MenuBar); 
+
+    wxPropertyGrid *pg = new wxPropertyGrid(this,-1,wxDefaultPosition,wxSize(400,400),
+                        wxPG_SPLITTER_AUTO_CENTER |
+                        wxPG_BOLD_MODIFIED );
+    m_pg = pg;
+
+    for ( int i=0; i< 20; i++ )
+        pg->Append(new wxStringProperty(wxString::Format(wxT("Item %i"),i), wxPG_LABEL));
+
+    wxPGProperty* topId;
+    wxPGProperty* medId;
+    wxPGProperty* botId;
+
+    topId = pg->Append( new wxStringProperty(wxT("Top Item"), wxPG_LABEL, wxT("<composed>")) );
+    pg->LimitPropertyEditing(topId, true);
+    medId = pg->AppendIn( topId, new wxStringProperty(wxT("Medium Level Item A"), wxPG_LABEL, wxT("<composed>")) );
+    pg->LimitPropertyEditing(medId, true);
+    botId = pg->AppendIn( medId, new wxStringProperty(wxT("Position"), wxPG_LABEL, wxT("<composed>")) );
+    pg->LimitPropertyEditing(botId, true);
+    pg->AppendIn( botId, new wxFloatProperty(wxT("x"), wxPG_LABEL, 1.0) );
+    pg->AppendIn( botId, new wxFloatProperty(wxT("y"), wxPG_LABEL, 2.0) );
+    pg->AppendIn( botId, new wxFloatProperty(wxT("z"), wxPG_LABEL, 3.0) );
+    pg->AppendIn( medId, new wxStringProperty(wxT("Name"), wxPG_LABEL, wxT("name")) );
+    medId = pg->AppendIn( topId, new wxStringProperty(wxT("Medium Level Item B"), wxPG_LABEL, wxT("<composed>")) );
+    pg->LimitPropertyEditing(medId, true);
+    botId = pg->AppendIn( medId, new wxStringProperty(wxT("Position"), wxPG_LABEL, wxT("<composed>")) );
+    pg->LimitPropertyEditing(botId, true);
+    pg->AppendIn( botId, new wxFloatProperty(wxT("x"), wxPG_LABEL, 1.0) );
+    pg->AppendIn( botId, new wxFloatProperty(wxT("y"), wxPG_LABEL, 2.0) );
+    pg->AppendIn( botId, new wxFloatProperty(wxT("z"), wxPG_LABEL, 3.0) );
+    pg->AppendIn( medId, new wxStringProperty(wxT("Name"), wxPG_LABEL, wxT("name")) );
+    medId = pg->AppendIn( topId, new wxStringProperty(wxT("Medium Level Item C"), wxPG_LABEL, wxT("<composed>")) );
+    pg->LimitPropertyEditing(medId, true);
+    botId = pg->AppendIn( medId, new wxStringProperty(wxT("Position"), wxPG_LABEL, wxT("<composed>")) );
+    pg->LimitPropertyEditing(botId, true);
+    pg->AppendIn( botId, new wxFloatProperty(wxT("x"), wxPG_LABEL, 1.0) );
+    pg->AppendIn( botId, new wxFloatProperty(wxT("y"), wxPG_LABEL, 2.0) );
+    pg->AppendIn( botId, new wxFloatProperty(wxT("z"), wxPG_LABEL, 3.0) );
+    pg->AppendIn( medId, new wxStringProperty(wxT("Name"), wxPG_LABEL, wxT("name")) );
+
+    SetSize(400, 600);
+}
+
+void MyFrame::OnPropertyGridChange(wxPropertyGridEvent &event)
+{
+    wxPGProperty* p = event.GetProperty();
+
+    wxLogDebug(wxT("OnPropertyGridChange(%s)"), p->GetName().c_str());
+
+    if ( p->GetBaseName() == wxT("x") )
+    {
+        wxLogDebug(wxT("double values=%.2f)"), m_pg->GetPropertyValueAsDouble(p));
+    }
+}
+
+void MyFrame::OnAction(wxCommandEvent &) 
+{
+}
diff --git a/samples/propgrid/propgrid_vc7.vcproj b/samples/propgrid/propgrid_vc7.vcproj
new file mode 100644 (file)
index 0000000..d3d81f5
--- /dev/null
@@ -0,0 +1,649 @@
+<?xml version="1.0" ?>\r
+<!--\r
+\r
+  This makefile was generated by\r
+  Bakefile 0.2.3 (http://www.bakefile.org)\r
+  Do not modify, all changes will be overwritten!\r
+\r
+-->\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="7.10"\r
+       Name="propgrid"\r
+       ProjectGUID="{6A7A28DD-C53E-50B0-B8E2-8D5A1D4206C7}">\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"/>\r
+       </Platforms>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="DLL Universal Release|Win32"\r
+                       OutputDirectory="vc_mswunivudll"\r
+                       IntermediateDirectory="vc_mswunivudll\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswunivu;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswunivudll\propgrid\"\r
+                               ObjectFile="vc_mswunivudll\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswunivudll\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswunivu;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmswuniv29u_propgrid.lib  wxmswuniv29u_adv.lib  wxmswuniv29u_core.lib  wxbase29u.lib   wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswunivudll\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_dll"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswunivudll\propgrid.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswunivudll\propgrid_vc7.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Universal Debug|Win32"\r
+                       OutputDirectory="vc_mswunivuddll"\r
+                       IntermediateDirectory="vc_mswunivuddll\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswunivud;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswunivuddll\propgrid\"\r
+                               ObjectFile="vc_mswunivuddll\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswunivuddll\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswunivud;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmswuniv29ud_propgrid.lib  wxmswuniv29ud_adv.lib  wxmswuniv29ud_core.lib  wxbase29ud.lib   wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswunivuddll\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_dll"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswunivuddll\propgrid.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswunivuddll\propgrid_vc7.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Release|Win32"\r
+                       OutputDirectory="vc_mswudll"\r
+                       IntermediateDirectory="vc_mswudll\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswu;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswudll\propgrid\"\r
+                               ObjectFile="vc_mswudll\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswudll\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswu;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmsw29u_propgrid.lib  wxmsw29u_adv.lib  wxmsw29u_core.lib  wxbase29u.lib   wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswudll\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_dll"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswudll\propgrid.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswudll\propgrid_vc7.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Debug|Win32"\r
+                       OutputDirectory="vc_mswuddll"\r
+                       IntermediateDirectory="vc_mswuddll\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswud;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswuddll\propgrid\"\r
+                               ObjectFile="vc_mswuddll\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswuddll\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswud;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmsw29ud_propgrid.lib  wxmsw29ud_adv.lib  wxmsw29ud_core.lib  wxbase29ud.lib   wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswuddll\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_dll"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswuddll\propgrid.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswuddll\propgrid_vc7.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Universal Release|Win32"\r
+                       OutputDirectory="vc_mswunivu"\r
+                       IntermediateDirectory="vc_mswunivu\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswunivu;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswunivu\propgrid\"\r
+                               ObjectFile="vc_mswunivu\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswunivu\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswunivu;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;_WINDOWS;NOPCH"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmswuniv29u_propgrid.lib  wxmswuniv29u_adv.lib  wxmswuniv29u_core.lib  wxbase29u.lib   wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswunivu\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_lib"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswunivu\propgrid.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswunivu\propgrid_vc7.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Universal Debug|Win32"\r
+                       OutputDirectory="vc_mswunivud"\r
+                       IntermediateDirectory="vc_mswunivud\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswunivud;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswunivud\propgrid\"\r
+                               ObjectFile="vc_mswunivud\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswunivud\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswunivud;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;_WINDOWS;NOPCH"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmswuniv29ud_propgrid.lib  wxmswuniv29ud_adv.lib  wxmswuniv29ud_core.lib  wxbase29ud.lib   wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswunivud\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_lib"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswunivud\propgrid.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswunivud\propgrid_vc7.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="vc_mswu"\r
+                       IntermediateDirectory="vc_mswu\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswu;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswu\propgrid\"\r
+                               ObjectFile="vc_mswu\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswu\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswu;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;_WINDOWS;NOPCH"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmsw29u_propgrid.lib  wxmsw29u_adv.lib  wxmsw29u_core.lib  wxbase29u.lib   wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswu\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_lib"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswu\propgrid.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswu\propgrid_vc7.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="vc_mswud"\r
+                       IntermediateDirectory="vc_mswud\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1">\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"/>\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"/>\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"/>\r
+                       <Tool\r
+                               Name="VCIDLTool"/>\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswud;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswud\propgrid\"\r
+                               ObjectFile="vc_mswud\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswud\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"/>\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswud;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;_WINDOWS;NOPCH"/>\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"/>\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmsw29ud_propgrid.lib  wxmsw29ud_adv.lib  wxmsw29ud_core.lib  wxbase29ud.lib   wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswud\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_lib"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswud\propgrid.pdb"\r
+                               TargetMachine="1"/>\r
+                       <Tool\r
+                               Name="VCALinkTool"/>\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"/>\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswud\propgrid_vc7.bsc"\r
+                               SuppressStartupBanner="true"/>\r
+                       <Tool\r
+                               Name="VCFxCopTool"/>\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"/>\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"/>\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"/>\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+               \r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx">\r
+                       <File\r
+                               RelativePath=".\propgrid.cpp"/>\r
+                       <File\r
+                               RelativePath=".\propgrid_minimal.cpp"/>\r
+                       <File\r
+                               RelativePath=".\sampleprops.cpp"/>\r
+                       <File\r
+                               RelativePath=".\tests.cpp"/>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav">\r
+                       <File\r
+                               RelativePath=".\..\sample.rc"/>\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+               \r
+       </Globals>\r
+</VisualStudioProject>\r
+\r
diff --git a/samples/propgrid/propgrid_vc8.vcproj b/samples/propgrid/propgrid_vc8.vcproj
new file mode 100644 (file)
index 0000000..6d3f241
--- /dev/null
@@ -0,0 +1,813 @@
+<?xml version="1.0" ?>\r
+<!--\r
+\r
+  This makefile was generated by\r
+  Bakefile 0.2.3 (http://www.bakefile.org)\r
+  Do not modify, all changes will be overwritten!\r
+\r
+-->\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8.00"\r
+       Name="propgrid"\r
+       ProjectGUID="{67938AAC-80E6-5FE3-BA5F-1B02DB39DBAC}"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+               \r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="DLL Universal Release|Win32"\r
+                       OutputDirectory="vc_mswunivudll"\r
+                       IntermediateDirectory="vc_mswunivudll\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswunivu;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswunivudll\propgrid\"\r
+                               ObjectFile="vc_mswunivudll\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswunivudll\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswunivu;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmswuniv29u_propgrid.lib  wxmswuniv29u_adv.lib  wxmswuniv29u_core.lib  wxbase29u.lib   wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswunivudll\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_dll"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswunivudll\propgrid.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswunivudll\propgrid_vc8.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Universal Debug|Win32"\r
+                       OutputDirectory="vc_mswunivuddll"\r
+                       IntermediateDirectory="vc_mswunivuddll\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswunivud;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswunivuddll\propgrid\"\r
+                               ObjectFile="vc_mswunivuddll\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswunivuddll\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswunivud;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmswuniv29ud_propgrid.lib  wxmswuniv29ud_adv.lib  wxmswuniv29ud_core.lib  wxbase29ud.lib   wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswunivuddll\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_dll"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswunivuddll\propgrid.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswunivuddll\propgrid_vc8.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Release|Win32"\r
+                       OutputDirectory="vc_mswudll"\r
+                       IntermediateDirectory="vc_mswudll\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswu;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswudll\propgrid\"\r
+                               ObjectFile="vc_mswudll\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswudll\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswu;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmsw29u_propgrid.lib  wxmsw29u_adv.lib  wxmsw29u_core.lib  wxbase29u.lib   wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswudll\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_dll"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswudll\propgrid.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswudll\propgrid_vc8.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="DLL Debug|Win32"\r
+                       OutputDirectory="vc_mswuddll"\r
+                       IntermediateDirectory="vc_mswuddll\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswud;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswuddll\propgrid\"\r
+                               ObjectFile="vc_mswuddll\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswuddll\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_dll\mswud;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmsw29ud_propgrid.lib  wxmsw29ud_adv.lib  wxmsw29ud_core.lib  wxbase29ud.lib   wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswuddll\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_dll"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswuddll\propgrid.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswuddll\propgrid_vc8.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Universal Release|Win32"\r
+                       OutputDirectory="vc_mswunivu"\r
+                       IntermediateDirectory="vc_mswunivu\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswunivu;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswunivu\propgrid\"\r
+                               ObjectFile="vc_mswunivu\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswunivu\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswunivu;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="__WXMSW__;__WXUNIVERSAL__;_UNICODE;_WINDOWS;NOPCH"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmswuniv29u_propgrid.lib  wxmswuniv29u_adv.lib  wxmswuniv29u_core.lib  wxbase29u.lib   wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswunivu\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_lib"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswunivu\propgrid.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswunivu\propgrid_vc8.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Universal Debug|Win32"\r
+                       OutputDirectory="vc_mswunivud"\r
+                       IntermediateDirectory="vc_mswunivud\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswunivud;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswunivud\propgrid\"\r
+                               ObjectFile="vc_mswunivud\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswunivud\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswunivud;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXUNIVERSAL__;__WXDEBUG__;_UNICODE;_WINDOWS;NOPCH"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmswuniv29ud_propgrid.lib  wxmswuniv29ud_adv.lib  wxmswuniv29ud_core.lib  wxbase29ud.lib   wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswunivud\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_lib"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswunivud\propgrid.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswunivud\propgrid_vc8.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="vc_mswu"\r
+                       IntermediateDirectory="vc_mswu\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="2"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswu;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="false"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="2"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswu\propgrid\"\r
+                               ObjectFile="vc_mswu\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswu\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswu;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="__WXMSW__;_UNICODE;_WINDOWS;NOPCH"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmsw29u_propgrid.lib  wxmsw29u_adv.lib  wxmsw29u_core.lib  wxbase29u.lib   wxtiff.lib wxjpeg.lib wxpng.lib  wxzlib.lib wxregexu.lib wxexpat.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswu\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_lib"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswu\propgrid.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswu\propgrid_vc8.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="vc_mswud"\r
+                       IntermediateDirectory="vc_mswud\propgrid"\r
+                       ConfigurationType="1"\r
+                       UseOfMFC="0"\r
+                       ATLMinimizesCRunTimeLibraryUsage="false"\r
+                       CharacterSet="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               Optimization="0"\r
+                               InlineFunctionExpansion="1"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswud;.\..\..\include;.;.\..\..\samples"\r
+                               MinimalRebuild="true"\r
+                               ExceptionHandling="1"\r
+                               AdditionalOptions=""\r
+                               RuntimeLibrary="3"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;_WINDOWS;NOPCH"\r
+                               BasicRuntimeChecks="3"\r
+                               DebugInformationFormat="3"\r
+                               Detect64BitPortabilityProblems="true"\r
+                               RuntimeTypeInfo="true"\r
+                               AssemblerListingLocation="vc_mswud\propgrid\"\r
+                               ObjectFile="vc_mswud\propgrid\"\r
+                               ProgramDataBaseFileName="vc_mswud\propgrid.pdb"\r
+                               WarningLevel="4"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                               Culture="1033"\r
+                               AdditionalIncludeDirectories=".\..\..\lib\vc_lib\mswud;.\..\..\include;.;.\..\..\samples"\r
+                               PreprocessorDefinitions="_DEBUG;__WXMSW__;__WXDEBUG__;_UNICODE;_WINDOWS;NOPCH"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalDependencies="wxmsw29ud_propgrid.lib  wxmsw29ud_adv.lib  wxmsw29ud_core.lib  wxbase29ud.lib   wxtiffd.lib wxjpegd.lib wxpngd.lib  wxzlibd.lib wxregexud.lib wxexpatd.lib    kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib"\r
+                               AdditionalOptions=""\r
+                               OutputFile="vc_mswud\propgrid.exe"\r
+                               LinkIncremental="2"\r
+                               SubSystem="2"\r
+                               SuppressStartupBanner="true"\r
+                               AdditionalLibraryDirectories=".\..\..\lib\vc_lib"\r
+                               GenerateManifest="true"\r
+                               GenerateDebugInformation="true"\r
+                               ProgramDatabaseFile="vc_mswud\propgrid.pdb"\r
+                               TargetMachine="1"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                               OutputFile="vc_mswud\propgrid_vc8.bsc"\r
+                               SuppressStartupBanner="true"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+               \r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\propgrid.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath=".\propgrid_minimal.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath=".\sampleprops.cpp"\r
+                       />\r
+                       <File\r
+                               RelativePath=".\tests.cpp"\r
+                       />\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\..\sample.rc"\r
+                       />\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+               \r
+       </Globals>\r
+</VisualStudioProject>\r
+\r
diff --git a/samples/propgrid/sampleprops.cpp b/samples/propgrid/sampleprops.cpp
new file mode 100644 (file)
index 0000000..03978de
--- /dev/null
@@ -0,0 +1,613 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        samples/propgrid/sampleprops.cpp
+// Purpose:     wxPropertyGrid Sample Properties
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2006-03-05
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+// for all others, include the necessary headers (this file is usually all you
+// need because it includes almost all "standard" wxWidgets headers)
+#ifndef WX_PRECOMP
+    #include "wx/wx.h"
+#endif
+
+// -----------------------------------------------------------------------
+
+
+#include <wx/propgrid/propgrid.h>
+#include <wx/propgrid/advprops.h>
+
+#ifndef WX_PROPGRID_SAMPLEPROPS_H
+    #include "sampleprops.h"
+#endif
+
+
+// -----------------------------------------------------------------------
+// wxFontDataProperty
+// -----------------------------------------------------------------------
+
+// Dummy comparison required by value type implementation.
+bool operator == (const wxFontData&, const wxFontData&)
+{
+    return FALSE;
+}
+
+// Custom version of wxFontProperty that also holds colour in the value.
+// Original version by Vladimir Vainer.
+
+#include <wx/fontdlg.h>
+
+WX_PG_IMPLEMENT_WXOBJECT_VARIANT_DATA(wxPGVariantDataFontData, wxFontData)
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFontDataProperty,wxFontProperty,
+                               wxFontData,const wxFontData&,TextCtrlAndButton)
+
+wxFontDataProperty::wxFontDataProperty( const wxString& label, const wxString& name,
+   const wxFontData& value ) : wxFontProperty(label,name,value.GetInitialFont())
+{
+    // Set initial value - should be done in a simpler way like this
+    // (instead of calling SetValue) in derived (wxObject) properties.
+    m_value_wxFontData << value;
+
+    wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData);
+
+    // Fix value.
+    fontData.SetChosenFont(value.GetInitialFont());
+    if ( !fontData.GetColour().Ok() )
+        fontData.SetColour(*wxBLACK);
+
+    // Add extra children.
+    AddChild( new wxColourProperty(_("Colour"),wxPG_LABEL,
+                                   fontData.GetColour() ) );
+
+}
+
+wxFontDataProperty::~wxFontDataProperty () { }
+
+void wxFontDataProperty::OnSetValue()
+{
+    if ( !(&wxFontDataFromVariant(m_value)) )
+    {
+        wxFont* pFont = &wxFontFromVariant(m_value);
+        if ( pFont )
+        {
+            wxFontData fontData;
+            fontData.SetChosenFont(*pFont);
+            m_value = WXVARIANT(fontData);
+        }
+        else
+        {
+            wxFAIL_MSG(wxT("Value to wxFontDataProperty must be eithe wxFontData or wxFont"));
+        }
+    }
+
+    // Set m_value to wxFont so that wxFontProperty methods will work
+    // correctly.
+    m_value_wxFontData = m_value;
+    wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData);
+
+    wxFont font = fontData.GetChosenFont();
+    if ( !font.Ok() )
+        font = wxFont(10,wxSWISS,wxNORMAL,wxNORMAL);
+    m_value = WXVARIANT(font);
+}
+
+wxVariant wxFontDataProperty::DoGetValue() const
+{
+    return m_value_wxFontData;
+}
+
+// Must re-create font dialog displayer.
+bool wxFontDataProperty::OnEvent( wxPropertyGrid* propgrid,
+                                  wxWindow* WXUNUSED(primary), wxEvent& event )
+{
+    if ( propgrid->IsMainButtonEvent(event) )
+    {
+        // Update value from last minute changes
+        PrepareValueForDialogEditing(propgrid);
+
+        wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData);
+
+        fontData.SetInitialFont(fontData.GetChosenFont());
+
+        wxFontDialog dlg(propgrid, fontData);
+
+        if ( dlg.ShowModal() == wxID_OK )
+        {
+            SetValueInEvent( wxFontDataToVariant(dlg.GetFontData()) );
+            return true;
+        }
+    }
+    return false;
+}
+
+void wxFontDataProperty::RefreshChildren()
+{
+    wxFontProperty::RefreshChildren();
+    if ( GetChildCount() < 6 ) // Number is count of inherit prop's children + 1.
+        return;
+    wxFontData& fontData = wxFontDataFromVariant(m_value_wxFontData);
+    wxVariant variant; variant << fontData.GetColour();
+    Item(6)->SetValue( variant );
+}
+
+void wxFontDataProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+{
+    wxFontData& fontData = wxFontDataFromVariant(thisValue);
+    wxColour col;
+    wxVariant variant;
+
+    switch ( childIndex )
+    {
+        case 6:
+            col << childValue;
+            fontData.SetColour( col );
+            break;
+        default:
+            // Transfer between subset to superset.
+            variant = WXVARIANT(fontData.GetChosenFont());
+            wxFontProperty::ChildChanged( variant, childIndex, childValue );
+            fontData.SetChosenFont(wxFontFromVariant(variant));
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxSizeProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxSizeProperty,wxPGProperty,
+                               wxSize,const wxSize&,TextCtrl)
+
+wxSizeProperty::wxSizeProperty( const wxString& label, const wxString& name,
+    const wxSize& value) : wxPGProperty(label,name)
+{
+    SetValueI(value);
+    AddChild( new wxIntProperty(wxT("Width"),wxPG_LABEL,value.x) );
+    AddChild( new wxIntProperty(wxT("Height"),wxPG_LABEL,value.y) );
+}
+
+wxSizeProperty::~wxSizeProperty() { }
+
+void wxSizeProperty::RefreshChildren()
+{
+    if ( !GetChildCount() ) return;
+    const wxSize& size = wxSizeFromVariant(m_value);
+    Item(0)->SetValue( (long)size.x );
+    Item(1)->SetValue( (long)size.y );
+}
+
+void wxSizeProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+{
+    wxSize& size = wxSizeFromVariant(thisValue);
+    int val = wxPGVariantToInt(childValue);
+    switch ( childIndex )
+    {
+        case 0: size.x = val; break;
+        case 1: size.y = val; break;
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPointProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxPointProperty,wxPGProperty,
+                               wxPoint,const wxPoint&,TextCtrl)
+
+wxPointProperty::wxPointProperty( const wxString& label, const wxString& name,
+    const wxPoint& value) : wxPGProperty(label,name)
+{
+    SetValueI(value);
+    AddChild( new wxIntProperty(wxT("X"),wxPG_LABEL,value.x) );
+    AddChild( new wxIntProperty(wxT("Y"),wxPG_LABEL,value.y) );
+}
+
+wxPointProperty::~wxPointProperty() { }
+
+void wxPointProperty::RefreshChildren()
+{
+    if ( !GetChildCount() ) return;
+    const wxPoint& point = wxPointFromVariant(m_value);
+    Item(0)->SetValue( (long)point.x );
+    Item(1)->SetValue( (long)point.y );
+}
+
+void wxPointProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+{
+    wxPoint& point = wxPointFromVariant(thisValue);
+    int val = wxPGVariantToInt(childValue);
+    switch ( childIndex )
+    {
+        case 0: point.x = val; break;
+        case 1: point.y = val; break;
+    }
+}
+
+
+// -----------------------------------------------------------------------
+// Dirs Property
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR(wxDirsProperty,wxT(','),wxT("Browse"))
+
+#if wxUSE_VALIDATORS
+
+wxValidator* wxDirsProperty::DoGetValidator() const
+{
+    return wxFileProperty::GetClassValidator();
+}
+
+#endif
+
+
+bool wxDirsProperty::OnCustomStringEdit( wxWindow* parent, wxString& value )
+{
+    wxDirDialog dlg(parent,
+                    _("Select a directory to be added to the list:"),
+                    value,
+                    0);
+
+    if ( dlg.ShowModal() == wxID_OK )
+    {
+        value = dlg.GetPath();
+        return TRUE;
+    }
+    return FALSE;
+}
+
+// -----------------------------------------------------------------------
+// wxArrayDoubleEditorDialog
+// -----------------------------------------------------------------------
+
+
+//
+// You can *almost* convert wxArrayDoubleEditorDialog to wxArrayXXXEditorDialog
+// by replacing each ArrayDouble with ArrayXXX.
+//
+
+class wxArrayDoubleEditorDialog : public wxArrayEditorDialog
+{
+public:
+    wxArrayDoubleEditorDialog();
+
+    void Init();
+
+    wxArrayDoubleEditorDialog(wxWindow *parent,
+                              const wxString& message,
+                              const wxString& caption,
+                              wxArrayDouble& array,
+                              long style = wxAEDIALOG_STYLE,
+                              const wxPoint& pos = wxDefaultPosition,
+                              const wxSize& sz = wxDefaultSize );
+
+    bool Create(wxWindow *parent,
+                const wxString& message,
+                const wxString& caption,
+                wxArrayDouble& array,
+                long style = wxAEDIALOG_STYLE,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& sz = wxDefaultSize );
+
+    const wxArrayDouble& GetArray() const { return m_array; }
+
+    // Extra method for this type of array
+    void SetPrecision ( int precision )
+    {
+        m_precision = precision;
+        m_dtoaTemplate.Empty();
+    }
+
+protected:
+    // Mandatory array of type
+    wxArrayDouble   m_array;
+
+    // Use this to avoid extra wxString creation+Printf
+    // on double-to-wxString conversion.
+    wxString        m_dtoaTemplate;
+
+    int             m_precision;
+
+    // Mandatory overridden methods
+    virtual wxString ArrayGet( size_t index );
+    virtual size_t ArrayGetCount();
+    virtual bool ArrayInsert( const wxString& str, int index );
+    virtual bool ArraySet( size_t index, const wxString& str );
+    virtual void ArrayRemoveAt( int index );
+    virtual void ArraySwap( size_t first, size_t second );
+
+private:
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxArrayDoubleEditorDialog)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxArrayDoubleEditorDialog, wxArrayEditorDialog)
+
+//
+// Array dialog array access and manipulation
+//
+
+wxString wxArrayDoubleEditorDialog::ArrayGet( size_t index )
+{
+    wxString str;
+    wxPropertyGrid::DoubleToString(str,m_array[index],m_precision,true,&m_dtoaTemplate);
+    return str;
+}
+
+size_t wxArrayDoubleEditorDialog::ArrayGetCount()
+{
+    return m_array.GetCount();
+}
+
+bool wxArrayDoubleEditorDialog::ArrayInsert( const wxString& str, int index )
+{
+    double d;
+    if ( !str.ToDouble(&d) )
+        return FALSE;
+
+    if (index<0)
+        m_array.Add(d);
+    else
+        m_array.Insert(d,index);
+    return TRUE;
+}
+
+bool wxArrayDoubleEditorDialog::ArraySet( size_t index, const wxString& str )
+{
+    double d;
+    if ( !str.ToDouble(&d) )
+        return FALSE;
+    m_array[index] = d;
+    return TRUE;
+}
+
+void wxArrayDoubleEditorDialog::ArrayRemoveAt( int index )
+{
+    m_array.RemoveAt(index);
+}
+
+void wxArrayDoubleEditorDialog::ArraySwap( size_t first, size_t second )
+{
+    double a = m_array[first];
+    double b = m_array[second];
+    m_array[first] = b;
+    m_array[second] = a;
+}
+
+//
+// Array dialog construction etc.
+//
+
+wxArrayDoubleEditorDialog::wxArrayDoubleEditorDialog()
+    : wxArrayEditorDialog()
+{
+    Init();
+}
+
+void wxArrayDoubleEditorDialog::Init()
+{
+    wxArrayEditorDialog::Init();
+    SetPrecision(-1);
+}
+
+wxArrayDoubleEditorDialog::wxArrayDoubleEditorDialog(wxWindow *parent,
+                              const wxString& message,
+                              const wxString& caption,
+                              wxArrayDouble& array,
+                              long style,
+                              const wxPoint& pos,
+                              const wxSize& sz )
+                              : wxArrayEditorDialog()
+{
+    Init();
+    Create(parent,message,caption,array,style,pos,sz);
+}
+
+bool wxArrayDoubleEditorDialog::Create(wxWindow *parent,
+                const wxString& message,
+                const wxString& caption,
+                wxArrayDouble& array,
+                long style,
+                const wxPoint& pos,
+                const wxSize& sz )
+{
+
+    m_array = array;
+
+    return wxArrayEditorDialog::Create (parent,message,caption,style,pos,sz);
+}
+
+// -----------------------------------------------------------------------
+// wxArrayDoubleProperty
+// -----------------------------------------------------------------------
+
+#include <math.h> // for fabs
+
+// Comparison required by value type implementation.
+bool operator == (const wxArrayDouble& a, const wxArrayDouble& b)
+{
+    if ( a.GetCount() != b.GetCount() )
+        return FALSE;
+
+    size_t i;
+
+    for ( i=0; i<a.GetCount(); i++ )
+    {
+        // Can't do direct equality comparison with floating point numbers.
+        if ( fabs(a[i] - b[i]) > 0.0000000001 )
+        {
+            //wxLogDebug(wxT("%f != %f"),a[i],b[i]);
+            return FALSE;
+        }
+    }
+    return TRUE;
+}
+
+WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataArrayDouble, wxArrayDouble)
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxArrayDoubleProperty,
+                               wxPGProperty,
+                               wxArrayDouble,
+                               const wxArrayDouble&,
+                               TextCtrlAndButton)
+
+
+wxArrayDoubleProperty::wxArrayDoubleProperty (const wxString& label,
+                                                        const wxString& name,
+                                                        const wxArrayDouble& array )
+    : wxPGProperty(label,name)
+{
+    m_precision = -1;
+
+    //
+    // Need to figure out delimiter needed for this locale
+    // (ie. can't use comma when comma acts as decimal point in float).
+    wxChar use_delimiter = wxT(',');
+
+    if (wxString::Format(wxT("%.2f"),12.34).Find(use_delimiter) >= 0)
+        use_delimiter = wxT(';');
+
+    m_delimiter = use_delimiter;
+
+    SetValue( wxArrayDoubleToVariant(array) );
+}
+
+wxArrayDoubleProperty::~wxArrayDoubleProperty () { }
+
+void wxArrayDoubleProperty::OnSetValue()
+{
+    GenerateValueAsString( m_display, m_precision, true );
+}
+
+wxString wxArrayDoubleProperty::GetValueAsString( int arg_flags ) const
+{
+    if ( !(arg_flags & wxPG_FULL_VALUE ))
+        return m_display;
+
+    wxString s;
+    GenerateValueAsString(s,-1,false);
+    return s;
+}
+
+void wxArrayDoubleProperty::GenerateValueAsString( wxString& target, int prec, bool removeZeroes ) const
+{
+    wxString s;
+    wxString template_str;
+    wxChar between[3] = wxT(", ");
+    size_t i;
+
+    between[0] = m_delimiter;
+
+    target.Empty();
+
+    const wxArrayDouble& value = wxArrayDoubleFromVariant(m_value);
+
+    for ( i=0; i<value.GetCount(); i++ )
+    {
+
+        wxPropertyGrid::DoubleToString(s,value[i],prec,removeZeroes,&template_str);
+
+        target += s;
+
+        if ( i<(value.GetCount()-1) )
+            target += between;
+    }
+}
+
+bool wxArrayDoubleProperty::OnEvent( wxPropertyGrid* propgrid,
+                                     wxWindow* WXUNUSED(primary),
+                                     wxEvent& event)
+{
+    if ( propgrid->IsMainButtonEvent(event) )
+    {
+        wxArrayDouble& value = wxArrayDoubleFromVariant(m_value);
+
+        // Update the value in case of last minute changes
+        PrepareValueForDialogEditing(propgrid);
+
+        // Create editor dialog.
+        wxArrayDoubleEditorDialog dlg;
+        dlg.SetPrecision(m_precision);
+        dlg.Create( propgrid, wxEmptyString, m_label, value );
+        dlg.Move( propgrid->GetGoodEditorDialogPosition(this,dlg.GetSize()) );
+
+        // Execute editor dialog
+        int res = dlg.ShowModal();
+        if ( res == wxID_OK && dlg.IsModified() )
+        {
+            SetValueInEvent( wxArrayDoubleToVariant(dlg.GetArray()) );
+            return true;
+        }
+        return false;
+    }
+    return false;
+}
+
+bool wxArrayDoubleProperty::StringToValue( wxVariant& variant, const wxString& text, int ) const
+{
+    double tval;
+    wxString tstr;
+    // Add values to a temporary array so that in case
+    // of error we can opt not to use them.
+    wxArrayDouble new_array;
+
+    bool ok = true;
+
+    wxChar delimiter = m_delimiter;
+
+    WX_PG_TOKENIZER1_BEGIN(text,delimiter)
+
+        if ( token.length() )
+        {
+
+            // If token was invalid, exit the loop now
+            if ( !token.ToDouble(&tval) )
+            {
+                tstr.Printf ( _("\"%s\" is not a floating-point number."), token.c_str() );
+                ok = false;
+                break;
+            }
+            // TODO: Put validator code here
+
+            new_array.Add(tval);
+
+        }
+
+    WX_PG_TOKENIZER1_END()
+
+    // When invalid token found, show error message and don't change anything
+    if ( !ok )
+    {
+        //ShowError( tstr );
+        return false;
+    }
+
+    if ( !(wxArrayDoubleFromVariant(m_value) == new_array) )
+    {
+        variant = wxArrayDoubleToVariant(new_array);
+        return true;
+    }
+
+    return false;
+}
+
+bool wxArrayDoubleProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+    if ( name == wxPG_FLOAT_PRECISION )
+    {
+        m_precision = value.GetLong();
+        GenerateValueAsString( m_display, m_precision, true );
+        return true;
+    }
+    return false;
+}
+
diff --git a/samples/propgrid/sampleprops.h b/samples/propgrid/sampleprops.h
new file mode 100644 (file)
index 0000000..f363fdf
--- /dev/null
@@ -0,0 +1,125 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        samples/propgrid/sampleprops.h
+// Purpose:     wxPropertyGrid Sample Properties Header
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2006-03-05
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_SAMPLES_PROPGRID_SAMPLEPROPS_H_
+#define _WX_SAMPLES_PROPGRID_SAMPLEPROPS_H_
+
+
+WX_PG_DECLARE_WXOBJECT_VARIANT_DATA(wxPGVariantDataFontData, wxFontData, wxEMPTY_PARAMETER_VALUE)
+
+
+class wxFontDataProperty : public wxFontProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxFontDataProperty)
+public:
+
+    wxFontDataProperty( const wxString& label = wxPG_LABEL,
+                        const wxString& name = wxPG_LABEL,
+                        const wxFontData& value = wxFontData() );
+    virtual ~wxFontDataProperty ();
+
+    void OnSetValue();
+
+    // Inorder to have different value type in a derived property
+    // class, we will override GetValue to return custom variant,
+    // instead of changing the base m_value. This allows the methods
+    // in base class to function properly.
+    virtual wxVariant DoGetValue() const;
+
+    WX_PG_DECLARE_PARENTAL_METHODS()
+    WX_PG_DECLARE_EVENT_METHODS()
+
+protected:
+    // Value must be stored as variant - otherwise it will be
+    // decreffed to oblivion on GetValue().
+    wxVariant  m_value_wxFontData;
+};
+
+// -----------------------------------------------------------------------
+
+class wxSizeProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxSizeProperty)
+public:
+
+    wxSizeProperty( const wxString& label = wxPG_LABEL, const wxString& name = wxPG_LABEL,
+                    const wxSize& value = wxSize() );
+    virtual ~wxSizeProperty();
+
+    WX_PG_DECLARE_PARENTAL_METHODS()
+
+protected:
+
+    // I stands for internal
+    void SetValueI( const wxSize& value )
+    {
+        m_value = wxSizeToVariant(value);
+    }
+};
+
+// -----------------------------------------------------------------------
+
+class wxPointProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxPointProperty)
+public:
+
+    wxPointProperty( const wxString& label = wxPG_LABEL, const wxString& name = wxPG_LABEL,
+                     const wxPoint& value = wxPoint() );
+    virtual ~wxPointProperty();
+
+    WX_PG_DECLARE_PARENTAL_METHODS()
+
+protected:
+
+    // I stands for internal
+    void SetValueI( const wxPoint& value )
+    {
+        m_value = wxPointToVariant(value);
+    }
+};
+
+// -----------------------------------------------------------------------
+
+WX_PG_DECLARE_ARRAYSTRING_PROPERTY_WITH_VALIDATOR_WITH_DECL(wxDirsProperty, class wxEMPTY_PARAMETER_VALUE)
+
+// -----------------------------------------------------------------------
+
+WX_PG_DECLARE_VARIANT_DATA(wxPGVariantDataArrayDouble, wxArrayDouble, wxEMPTY_PARAMETER_VALUE)
+
+class wxArrayDoubleProperty : public wxPGProperty
+{
+    WX_PG_DECLARE_PROPERTY_CLASS(wxArrayDoubleProperty)
+public:
+
+    wxArrayDoubleProperty( const wxString& label = wxPG_LABEL,
+                           const wxString& name = wxPG_LABEL,
+                           const wxArrayDouble& value = wxArrayDouble() );
+
+    virtual ~wxArrayDoubleProperty ();
+
+    virtual void OnSetValue();
+    WX_PG_DECLARE_BASIC_TYPE_METHODS()
+    WX_PG_DECLARE_EVENT_METHODS()
+    WX_PG_DECLARE_ATTRIBUTE_METHODS()
+
+    // Generates cache for displayed text
+    virtual void GenerateValueAsString ( wxString& target, int prec, bool removeZeroes ) const;
+
+protected:
+    wxString        m_display; // Stores cache for displayed text
+    int             m_precision; // Used when formatting displayed string.
+    wxChar          m_delimiter; // Delimiter between array entries.
+};
+
+// -----------------------------------------------------------------------
+
+#endif // _WX_SAMPLES_PROPGRID_SAMPLEPROPS_H_
diff --git a/samples/propgrid/tests.cpp b/samples/propgrid/tests.cpp
new file mode 100644 (file)
index 0000000..4f13184
--- /dev/null
@@ -0,0 +1,1334 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        samples/propgrid/tests.cpp
+// Purpose:     wxPropertyGrid tests
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2007-05-16
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/wx.h"
+#endif
+
+#include <wx/propgrid/propgrid.h>
+#include <wx/propgrid/advprops.h>
+#include <wx/propgrid/manager.h>
+
+#include "propgrid.h"
+#include "sampleprops.h"
+
+
+// -----------------------------------------------------------------------
+// Declare custom test properties
+// -----------------------------------------------------------------------
+
+WX_PG_DECLARE_CUSTOM_FLAGS_PROPERTY(wxTestCustomFlagsProperty)
+
+WX_PG_DECLARE_CUSTOM_ENUM_PROPERTY(wxTestCustomEnumProperty)
+
+
+// -----------------------------------------------------------------------
+// wxTestCustomFlagsProperty
+// -----------------------------------------------------------------------
+
+//
+// Constant definitions required by wxFlagsProperty examples.
+//
+
+static const wxChar* _fs_framestyle_labels[] = {
+    wxT("wxCAPTION"),
+    wxT("wxMINIMIZE"),
+    wxT("wxMAXIMIZE"),
+    wxT("wxCLOSE_BOX"),
+    wxT("wxSTAY_ON_TOP"),
+    wxT("wxSYSTEM_MENU"),
+    wxT("wxRESIZE_BORDER"),
+    wxT("wxFRAME_TOOL_WINDOW"),
+    wxT("wxFRAME_NO_TASKBAR"),
+    wxT("wxFRAME_FLOAT_ON_PARENT"),
+    wxT("wxFRAME_SHAPED"),
+    (const wxChar*) NULL
+};
+
+static const long _fs_framestyle_values[] = {
+    wxCAPTION,
+    wxMINIMIZE,
+    wxMAXIMIZE,
+    wxCLOSE_BOX,
+    wxSTAY_ON_TOP,
+    wxSYSTEM_MENU,
+    wxRESIZE_BORDER,
+    wxFRAME_TOOL_WINDOW,
+    wxFRAME_NO_TASKBAR,
+    wxFRAME_FLOAT_ON_PARENT,
+    wxFRAME_SHAPED
+};
+
+
+WX_PG_IMPLEMENT_CUSTOM_FLAGS_PROPERTY(wxTestCustomFlagsProperty,
+                                      _fs_framestyle_labels,
+                                      _fs_framestyle_values,
+                                      wxDEFAULT_FRAME_STYLE)
+
+WX_PG_IMPLEMENT_CUSTOM_ENUM_PROPERTY(wxTestCustomEnumProperty,
+                                      _fs_framestyle_labels,
+                                      _fs_framestyle_values,
+                                      wxCAPTION)
+
+
+// Colour labels. Last (before NULL, if any) must be Custom.
+static const wxChar* mycolprop_labels[] = {
+    wxT("Black"),
+    wxT("Blue"),
+    wxT("Brown"),
+    wxT("Custom"),
+    (const wxChar*) NULL
+};
+
+// Relevant colour values as unsigned longs.
+static unsigned long mycolprop_colours[] = {
+    wxPG_COLOUR(0,0,0),
+    wxPG_COLOUR(0,0,255),
+    wxPG_COLOUR(166,124,81),
+    wxPG_COLOUR(0,0,0)
+};
+
+// Implement property class. Third argument is optional values array,
+// but in this example we are only interested in creating a shortcut
+// for user to access the colour values. Last arg is itemcount, but
+// it will be deprecated in the future.
+WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR(wxMyColourProperty)
+WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR(wxMyColourProperty,
+                                                     mycolprop_labels,
+                                                     (long*)NULL,
+                                                     mycolprop_colours)
+
+
+WX_PG_DECLARE_CUSTOM_COLOUR_PROPERTY(wxMyColour2Property)
+WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY(wxMyColour2Property,
+                                       mycolprop_labels,
+                                       (long*)NULL,
+                                       mycolprop_colours)
+
+
+
+// Just testing the macros
+WX_PG_DECLARE_STRING_PROPERTY(wxTestStringProperty)
+WX_PG_IMPLEMENT_STRING_PROPERTY(wxTestStringProperty,wxPG_NO_ESCAPE)
+bool wxTestStringProperty::OnButtonClick( wxPropertyGrid*,
+                                          wxString& )
+{
+    ::wxMessageBox(wxT("Button Clicked"));
+    return true;
+}
+
+WX_PG_DECLARE_STRING_PROPERTY(wxTextStringPropertyWithValidator)
+WX_PG_IMPLEMENT_STRING_PROPERTY_WITH_VALIDATOR(wxTextStringPropertyWithValidator,
+                                               wxPG_NO_ESCAPE)
+
+bool wxTextStringPropertyWithValidator::OnButtonClick( wxPropertyGrid* WXUNUSED(propgrid),
+                                                       wxString& WXUNUSED(value) )
+{
+    ::wxMessageBox(wxT("Button Clicked"));
+    return true;
+}
+
+wxValidator* wxTextStringPropertyWithValidator::DoGetValidator() const
+{
+#if wxUSE_VALIDATORS
+    WX_PG_DOGETVALIDATOR_ENTRY()
+    wxTextValidator* validator = new
+        wxTextValidator(wxFILTER_INCLUDE_CHAR_LIST);
+    wxArrayString oValid;
+    oValid.Add(wxT("0"));
+    oValid.Add(wxT("1"));
+    oValid.Add(wxT("2"));
+    oValid.Add(wxT("3"));
+    oValid.Add(wxT("4"));
+    oValid.Add(wxT("5"));
+    oValid.Add(wxT("6"));
+    oValid.Add(wxT("7"));
+    oValid.Add(wxT("8"));
+    oValid.Add(wxT("9"));
+    oValid.Add(wxT("$"));
+    validator->SetIncludes(oValid);
+    WX_PG_DOGETVALIDATOR_EXIT(validator)
+#else
+    return NULL;
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+//
+// Test customizing wxColourProperty via subclassing
+//
+// * Includes custom colour entry.
+// * Includes extra custom entry.
+//
+class MyColourProperty3 : public wxColourProperty
+{
+public:
+    MyColourProperty3( const wxString& label = wxPG_LABEL,
+                       const wxString& name = wxPG_LABEL,
+                       const wxColour& value = *wxWHITE )
+        : wxColourProperty(label, name, value)
+    {
+        wxPGChoices colours;
+        colours.Add(wxT("White"));
+        colours.Add(wxT("Black"));
+        colours.Add(wxT("Red"));
+        colours.Add(wxT("Green"));
+        colours.Add(wxT("Blue"));
+        colours.Add(wxT("Custom"));
+        colours.Add(wxT("None"));
+        m_choices = colours;
+        SetIndex(0);
+        wxVariant variant;
+        variant << value;
+        SetValue(variant);
+    }
+
+    virtual ~MyColourProperty3()
+    {
+    }
+
+    virtual wxColour GetColour( int index ) const
+    {
+        switch (index)
+        {
+            case 0: return *wxWHITE;
+            case 1: return *wxBLACK;
+            case 2: return *wxRED;
+            case 3: return *wxGREEN;
+            case 4: return *wxBLUE;
+            case 5:
+                // Return current colour for the custom entry
+                wxColour col;
+                if ( GetIndex() == GetCustomColourIndex() )
+                {
+                    if ( m_value.IsNull() )
+                        return col;
+                    col << m_value;
+                    return col;
+                }
+                return *wxWHITE;
+        };
+        return wxColour();
+    }
+
+    virtual wxString ColourToString( const wxColour& col, int index ) const
+    {
+        if ( index == (int)(m_choices.GetCount()-1) )
+            return wxT("");
+
+        return wxColourProperty::ColourToString(col, index);
+    }
+
+    virtual int GetCustomColourIndex() const
+    {
+        return m_choices.GetCount()-2;
+    }
+};
+
+
+void FormMain::AddTestProperties( wxPropertyGridPage* pg )
+{
+    pg->Append( new wxTestCustomFlagsProperty(wxT("Custom FlagsProperty"), wxPG_LABEL ) );
+    pg->SetPropertyEditor( wxT("Custom FlagsProperty"), wxPG_EDITOR(TextCtrlAndButton) );
+
+    pg->Append( new wxTestCustomEnumProperty(wxT("Custom EnumProperty"), wxPG_LABEL ) );
+
+    pg->Append( new wxMyColourProperty(wxT("CustomColourProperty1")) );
+
+    pg->SetPropertyHelpString(wxT("CustomColourProperty1"),
+        wxT("This is a wxMyColourProperty from the sample app. ")
+        wxT("It is built with WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR macro ")
+        wxT("and has wxColour as its data type"));
+
+    pg->Append( new wxMyColour2Property(wxT("CustomColourProperty2")) );
+
+    pg->SetPropertyHelpString(wxT("CustomColourProperty2"),
+        wxT("This is a wxMyColour2Property from the sample app. ")
+        wxT("It is built with WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY macro ")
+        wxT("and has wxColourPropertyValue as its data type"));
+
+    pg->Append( new MyColourProperty3(wxT("CustomColourProperty3"), wxPG_LABEL, *wxGREEN) );
+    pg->GetProperty(wxT("CustomColourProperty3"))->SetFlag(wxPG_PROP_AUTO_UNSPECIFIED);
+    pg->SetPropertyEditor( wxT("CustomColourProperty3"), wxPG_EDITOR(ComboBox) );
+
+    pg->SetPropertyHelpString(wxT("CustomColourProperty3"),
+        wxT("This is a MyColourProperty3 from the sample app. ")
+        wxT("It is built by subclassing wxColourProperty."));
+
+    pg->Append( new wxTextStringPropertyWithValidator(wxT("TestProp1"), wxPG_LABEL) );
+}
+
+// -----------------------------------------------------------------------
+
+void FormMain::OnDumpList( wxCommandEvent& WXUNUSED(event) )
+{
+    wxVariant values = m_pPropGridManager->GetPropertyValues(wxT("list"), wxNullProperty, wxPG_INC_ATTRIBUTES);
+    wxString text = wxT("This only tests that wxVariant related routines do not crash.");
+    wxString t;
+
+    wxDialog* dlg = new wxDialog(this,-1,wxT("wxVariant Test"),
+        wxDefaultPosition,wxDefaultSize,wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER);
+
+    unsigned int i;
+    for ( i = 0; i < (unsigned int)values.GetCount(); i++ )
+    {
+        wxVariant& v = values[i];
+
+        wxString strValue = v.GetString();
+
+#if wxCHECK_VERSION(2,8,0)
+        if ( v.GetName().EndsWith(wxT("@attr")) )
+#else
+        if ( v.GetName().Right(5) == wxT("@attr") )
+#endif
+        {
+            text += wxString::Format(wxT("Attributes:\n"));
+
+            unsigned int n;
+            for ( n = 0; n < (unsigned int)v.GetCount(); n++ )
+            {
+                wxVariant& a = v[n];
+
+                t.Printf(wxT("  atribute %i: name=\"%s\"  (type=\"%s\"  value=\"%s\")\n"),(int)n,
+                    a.GetName().c_str(),a.GetType().c_str(),a.GetString().c_str());
+                text += t;
+            }
+        }
+        else
+        {
+            t.Printf(wxT("%i: name=\"%s\"  type=\"%s\"  value=\"%s\"\n"),(int)i,
+                v.GetName().c_str(),v.GetType().c_str(),strValue.c_str());
+            text += t;
+        }
+    }
+
+    // multi-line text editor dialog
+    const int spacing = 8;
+    wxBoxSizer* topsizer = new wxBoxSizer( wxVERTICAL );
+    wxBoxSizer* rowsizer = new wxBoxSizer( wxHORIZONTAL );
+    wxTextCtrl* ed = new wxTextCtrl(dlg,11,text,
+        wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE|wxTE_READONLY);
+    rowsizer->Add( ed, 1, wxEXPAND|wxALL, spacing );
+    topsizer->Add( rowsizer, 1, wxEXPAND, 0 );
+    rowsizer = new wxBoxSizer( wxHORIZONTAL );
+    const int butSzFlags =
+        wxALIGN_CENTRE_HORIZONTAL|wxALIGN_CENTRE_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT;
+    rowsizer->Add( new wxButton(dlg,wxID_OK,wxT("Ok")),
+        0, butSzFlags, spacing );
+    topsizer->Add( rowsizer, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL, 0 );
+
+    dlg->SetSizer( topsizer );
+    topsizer->SetSizeHints( dlg );
+
+    dlg->SetSize(400,300);
+    dlg->Centre();
+    dlg->ShowModal();
+}
+
+// -----------------------------------------------------------------------
+
+class TestRunner
+{
+public:
+
+    TestRunner( const wxString& name, wxPropertyGridManager* man, wxTextCtrl* ed, wxArrayString* errorMessages )
+    {
+        m_name = name;
+        m_man = man;
+        m_ed = ed;
+        m_errorMessages = errorMessages;
+#ifdef __WXDEBUG__
+        m_preWarnings = wxPGGlobalVars->m_warnings;
+#endif
+
+        if ( name != wxT("none") )
+            Msg(name+wxT("\n"));
+    }
+
+    ~TestRunner()
+    {
+#ifdef __WXDEBUG__
+        int warningsOccurred = wxPGGlobalVars->m_warnings - m_preWarnings;
+        if ( warningsOccurred )
+        {
+            wxString s = wxString::Format(wxT("%i warnings occurred during test '%s'"), warningsOccurred, m_name.c_str());
+            m_errorMessages->push_back(s);
+            Msg(s);
+        }
+#endif
+    }
+
+    void Msg( const wxString& text )
+    {
+        if ( m_ed )
+        {
+            m_ed->AppendText(text);
+            m_ed->AppendText(wxT("\n"));
+        }
+        wxLogDebug(text);
+    }
+
+protected:
+    wxPropertyGridManager* m_man;
+    wxTextCtrl* m_ed;
+    wxArrayString* m_errorMessages;
+    wxString m_name;
+#ifdef __WXDEBUG__
+    int m_preWarnings;
+#endif
+};
+
+
+#define RT_START_TEST(TESTNAME) \
+    TestRunner tr(wxT(#TESTNAME), pgman, ed, &errorMessages);
+
+#define RT_MSG(S) \
+    tr.Msg(S);
+
+#define RT_FAILURE() \
+    { \
+        wxString s1 = wxString::Format(wxT("Test failure in tests.cpp, line %i."),__LINE__-1); \
+        errorMessages.push_back(s1); \
+        wxLogDebug(s1); \
+        failures++; \
+    }
+
+#define RT_FAILURE_MSG(MSG) \
+    { \
+        wxString s1 = wxString::Format(wxT("Test failure in tests.cpp, line %i."),__LINE__-1); \
+        errorMessages.push_back(s1); \
+        wxLogDebug(s1); \
+        wxString s2 = wxString::Format(wxT("Message: %s"),MSG); \
+        errorMessages.push_back(s2); \
+        wxLogDebug(s2); \
+        failures++; \
+    }
+
+#define RT_VALIDATE_VIRTUAL_HEIGHT(PROPS, EXTRATEXT) \
+    { \
+        unsigned int h1_ = PROPS->GetVirtualHeight(); \
+        unsigned int h2_ = PROPS->GetActualVirtualHeight(); \
+        if ( h1_ != h2_ ) \
+        { \
+            wxString s_ = wxString::Format(wxT("VirtualHeight = %i, should be %i (%s)"), h1_, h2_, EXTRATEXT.c_str()); \
+            RT_FAILURE_MSG(s_.c_str()); \
+            _failed_ = true; \
+        } \
+        else \
+        { \
+            _failed_ = false; \
+        } \
+    }
+
+
+int gpiro_cmpfunc(const void* a, const void* b)
+{
+    const wxPGProperty* p1 = (const wxPGProperty*) a;
+    const wxPGProperty* p2 = (const wxPGProperty*) b;
+    return (int) (((size_t)p1->GetClientData()) - ((size_t)p2->GetClientData()));
+}
+
+wxArrayPGProperty GetPropertiesInRandomOrder( wxPropertyGridInterface* props, int iterationFlags = wxPG_ITERATE_ALL )
+{
+    wxArrayPGProperty arr;
+
+    wxPropertyGridIterator it;
+
+    for ( it = props->GetIterator(iterationFlags);
+          !it.AtEnd();
+          it++ )
+    {
+        wxPGProperty* p = *it;
+        size_t randomNumber = rand();
+        p->SetClientData(reinterpret_cast<void*>(randomNumber));
+        arr.push_back(p);
+    }
+
+    wxPGProperty** firstEntry = &arr[0];
+    qsort(firstEntry, arr.size(), sizeof(wxPGProperty*), gpiro_cmpfunc);
+
+    return arr;
+}
+
+static void PropertiesToNames( wxPropertyGridInterface* WXUNUSED(iface),
+                               wxArrayString* names,
+                               const wxArrayPGProperty& properties )
+{
+    unsigned int i;
+    for ( i=0; i<properties.size(); i++ )
+        names->Add( properties[i]->GetName() );
+}
+
+static void NamesToProperties( wxPropertyGridInterface* iface,
+                               wxArrayPGProperty* properties,
+                               const wxArrayString& names )
+{
+    unsigned int i;
+    for ( i=0; i<names.size(); i++ )
+    {
+        wxPGProperty* p = iface->GetPropertyByName(names[i]);
+        if ( p )
+            properties->push_back(p);
+    }
+}
+
+bool FormMain::RunTests( bool fullTest, bool interactive )
+{
+    wxString t;
+
+    wxPropertyGridManager* pgman = m_pPropGridManager;
+    wxPropertyGrid* pg;
+
+    size_t i;
+
+    pgman->ClearSelection();
+
+    int failures = 0;
+    bool _failed_ = false;
+    wxArrayString errorMessages;
+    wxDialog* dlg = NULL;
+
+    dlg = new wxDialog(this,-1,wxT("wxPropertyGrid Regression Tests"),
+        wxDefaultPosition,wxDefaultSize,wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER);
+
+    // multi-line text editor dialog
+    const int spacing = 8;
+    wxBoxSizer* topsizer = new wxBoxSizer( wxVERTICAL );
+    wxBoxSizer* rowsizer = new wxBoxSizer( wxHORIZONTAL );
+    wxTextCtrl* ed = new wxTextCtrl(dlg,11,wxEmptyString,
+        wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE|wxTE_READONLY);
+    rowsizer->Add( ed, 1, wxEXPAND|wxALL, spacing );
+    topsizer->Add( rowsizer, 1, wxEXPAND, 0 );
+    rowsizer = new wxBoxSizer( wxHORIZONTAL );
+    const int butSzFlags =
+        wxALIGN_CENTRE_HORIZONTAL|wxALIGN_CENTRE_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT;
+    rowsizer->Add( new wxButton(dlg,wxID_OK,wxT("Ok")),
+        0, butSzFlags, spacing );
+    topsizer->Add( rowsizer, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL, 0 );
+
+    dlg->SetSizer( topsizer );
+    topsizer->SetSizeHints( dlg );
+
+    dlg->SetSize(400,300);
+    dlg->Move(wxSystemSettings::GetMetric(wxSYS_SCREEN_X)-dlg->GetSize().x,
+              wxSystemSettings::GetMetric(wxSYS_SCREEN_Y)-dlg->GetSize().y);
+    dlg->Show();
+
+    {
+        //
+        // Basic iterator tests
+        RT_START_TEST(GetIterator)
+
+        wxPGVIterator it;
+        int count;
+
+        count = 0;
+        for ( it = pgman->GetVIterator(wxPG_ITERATE_PROPERTIES);
+              !it.AtEnd();
+              it.Next() )
+        {
+            wxPGProperty* p = it.GetProperty();
+            if ( p->IsCategory() )
+                RT_FAILURE_MSG(wxString::Format(wxT("'%s' is a category (non-private child property expected)"),p->GetLabel().c_str()).c_str())
+            else if ( p->GetParent()->HasFlag(wxPG_PROP_AGGREGATE) )
+                RT_FAILURE_MSG(wxString::Format(wxT("'%s' is a private child (non-private child property expected)"),p->GetLabel().c_str()).c_str())
+            count++;
+        }
+
+        RT_MSG(wxString::Format(wxT("GetVIterator(wxPG_ITERATE_PROPERTIES) -> %i entries"), count));
+
+        count = 0;
+        for ( it = pgman->GetVIterator(wxPG_ITERATE_CATEGORIES);
+              !it.AtEnd();
+              it.Next() )
+        {
+            wxPGProperty* p = it.GetProperty();
+            if ( !p->IsCategory() )
+                RT_FAILURE_MSG(wxString::Format(wxT("'%s' is not a category (only category was expected)"),p->GetLabel().c_str()).c_str())
+            count++;
+        }
+
+        RT_MSG(wxString::Format(wxT("GetVIterator(wxPG_ITERATE_CATEGORIES) -> %i entries"), count));
+
+        count = 0;
+        for ( it = pgman->GetVIterator(wxPG_ITERATE_PROPERTIES|wxPG_ITERATE_CATEGORIES);
+              !it.AtEnd();
+              it.Next() )
+        {
+            wxPGProperty* p = it.GetProperty();
+            if ( p->GetParent()->HasFlag(wxPG_PROP_AGGREGATE) )
+                RT_FAILURE_MSG(wxString::Format(wxT("'%s' is a private child (non-private child property or category expected)"),p->GetLabel().c_str()).c_str())
+            count++;
+        }
+
+        RT_MSG(wxString::Format(wxT("GetVIterator(wxPG_ITERATE_PROPERTIES|wxPG_ITERATE_CATEGORIES) -> %i entries"), count));
+
+        count = 0;
+        for ( it = pgman->GetVIterator(wxPG_ITERATE_VISIBLE);
+              !it.AtEnd();
+              it.Next() )
+        {
+            wxPGProperty* p = it.GetProperty();
+            if ( (p->GetParent() != p->GetParentState()->DoGetRoot() && !p->GetParent()->IsExpanded()) )
+                RT_FAILURE_MSG(wxString::Format(wxT("'%s' had collapsed parent (only visible properties expected)"),p->GetLabel().c_str()).c_str())
+            else if ( p->HasFlag(wxPG_PROP_HIDDEN) )
+                RT_FAILURE_MSG(wxString::Format(wxT("'%s' was hidden (only visible properties expected)"),p->GetLabel().c_str()).c_str())
+            count++;
+        }
+
+        RT_MSG(wxString::Format(wxT("GetVIterator(wxPG_ITERATE_VISIBLE) -> %i entries"), count));
+    }
+
+    if ( fullTest )
+    {
+        // Test that setting focus to properties does not crash things
+        RT_START_TEST(SelectProperty)
+
+        wxPropertyGridIterator it;
+        size_t ind;
+
+        for ( ind=0; ind<pgman->GetPageCount(); ind++ )
+        {
+            wxPropertyGridPage* page = pgman->GetPage(ind);
+            pgman->SelectPage(page);
+
+            for ( it = page->GetIterator(wxPG_ITERATE_VISIBLE);
+                  !it.AtEnd();
+                  it++ )
+            {
+                wxPGProperty* p = *it;
+                RT_MSG(p->GetLabel());
+                pgman->GetGrid()->SelectProperty(p, true);
+                ::wxMilliSleep(150);
+                Update();
+            }
+        }
+    }
+
+    {
+        RT_START_TEST(GetPropertiesWithFlag)
+
+        //
+        // Get list of expanded properties
+        wxArrayPGProperty array = pgman->GetExpandedProperties();
+
+        // Make sure list only has items with children
+        for ( i=0; i<array.size(); i++ )
+        {
+            wxPGProperty* p = array[i];
+            if ( !p->IsKindOf(CLASSINFO(wxPGProperty)) )
+                RT_FAILURE_MSG(wxString::Format(wxT("'%s' was returned by GetExpandedProperties(), but was not a parent"),p->GetName().c_str()).c_str());
+        }
+
+        wxArrayString names;
+        PropertiesToNames( pgman, &names, array );
+
+        //
+        // ... and then collapse them
+        wxArrayPGProperty array2;
+        NamesToProperties( pgman, &array2, names );
+
+        for ( i=0; i<array2.size(); i++ )
+        {
+            wxPGProperty* p = array[i];
+            p->SetExpanded(false);
+        }
+
+        // Make sure everything is collapsed
+        wxPGVIterator it;
+
+        for ( it = pgman->GetVIterator(wxPG_ITERATE_ALL);
+              !it.AtEnd();
+              it.Next() )
+        {
+            wxPGProperty* p = it.GetProperty();
+            if ( p->IsExpanded() )
+                RT_FAILURE_MSG(wxString::Format(wxT("'%s.%s' was expanded"),p->GetParent()->GetName().c_str(),p->GetName().c_str()).c_str());
+        }
+
+        pgman->Refresh();
+    }
+
+    {
+        //
+        // Delete everything in reverse order
+        RT_START_TEST(DeleteProperty)
+
+        wxPGVIterator it;
+        wxArrayPGProperty array;
+
+        for ( it = pgman->GetVIterator(wxPG_ITERATE_ALL&~(wxPG_IT_CHILDREN(wxPG_PROP_AGGREGATE)));
+              !it.AtEnd();
+              it.Next() )
+            array.push_back(it.GetProperty());
+
+        wxArrayPGProperty::reverse_iterator it2;
+
+        for ( it2 = array.rbegin(); it2 != array.rend(); it2++ )
+        {
+            wxPGProperty* p = (wxPGProperty*)*it2;
+            RT_MSG(wxString::Format(wxT("Deleting '%s' ('%s')"),p->GetLabel().c_str(),p->GetName().c_str()));
+            pgman->DeleteProperty(p);
+        }
+
+        // Recreate grid
+        CreateGrid( -1, -1 );
+        pgman = m_pPropGridManager;
+    }
+
+    {
+        //
+        // Clear property value
+        RT_START_TEST(ClearPropertyValue)
+
+        wxPGVIterator it;
+
+        for ( it = pgman->GetVIterator(wxPG_ITERATE_PROPERTIES);
+              !it.AtEnd();
+              it.Next() )
+        {
+            RT_MSG(wxString::Format(wxT("Clearing value of '%s'"),it.GetProperty()->GetLabel().c_str()));
+            pgman->ClearPropertyValue(it.GetProperty());
+        }
+
+        // Recreate grid
+        CreateGrid( -1, -1 );
+        pgman = m_pPropGridManager;
+    }
+
+    {
+        RT_START_TEST(GetPropertyValues)
+
+        for ( i=0; i<3; i++ )
+        {
+            wxString text;
+
+            wxPropertyGridPage* page = pgman->GetPage(i);
+
+            wxVariant values = page->GetPropertyValues();
+
+            unsigned int i;
+            for ( i = 0; i < (unsigned int)values.GetCount(); i++ )
+            {
+                wxVariant& v = values[i];
+
+                t.Printf(wxT("%i: name=\"%s\"  type=\"%s\"\n"),(int)i,
+                    v.GetName().c_str(),v.GetType().c_str());
+
+                text += t;
+            }
+            ed->AppendText(text);
+        }
+    }
+
+    {
+        RT_START_TEST(SetPropertyValue_and_GetPropertyValue)
+
+        //pg = (wxPropertyGrid*) NULL;
+
+        wxArrayString test_arrstr_1;
+        test_arrstr_1.Add(wxT("Apple"));
+        test_arrstr_1.Add(wxT("Orange"));
+        test_arrstr_1.Add(wxT("Lemon"));
+
+        wxArrayString test_arrstr_2;
+        test_arrstr_2.Add(wxT("Potato"));
+        test_arrstr_2.Add(wxT("Cabbage"));
+        test_arrstr_2.Add(wxT("Cucumber"));
+
+        wxArrayInt test_arrint_1;
+        test_arrint_1.Add(1);
+        test_arrint_1.Add(2);
+        test_arrint_1.Add(3);
+
+        wxArrayInt test_arrint_2;
+        test_arrint_2.Add(0);
+        test_arrint_2.Add(1);
+        test_arrint_2.Add(4);
+
+#if wxUSE_DATETIME
+        wxDateTime dt1 = wxDateTime::Now();
+        dt1.SetYear(dt1.GetYear()-1);
+
+        wxDateTime dt2 = wxDateTime::Now();
+        dt2.SetYear(dt2.GetYear()-10);
+#endif
+
+#define FLAG_TEST_SET1 (wxCAPTION|wxCLOSE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER)
+#define FLAG_TEST_SET2 (wxSTAY_ON_TOP|wxCAPTION|wxICONIZE|wxSYSTEM_MENU)
+
+        pgman->SetPropertyValue(wxT("StringProperty"),wxT("Text1"));
+        pgman->SetPropertyValue(wxT("IntProperty"),1024);
+        pgman->SetPropertyValue(wxT("FloatProperty"),1024.0000000001);
+        pgman->SetPropertyValue(wxT("BoolProperty"),FALSE);
+        pgman->SetPropertyValue(wxT("EnumProperty"),120);
+        pgman->SetPropertyValue(wxT("Custom FlagsProperty"),FLAG_TEST_SET1);
+        pgman->SetPropertyValue(wxT("ArrayStringProperty"),test_arrstr_1);
+        wxColour emptyCol;
+        pgman->SetPropertyValue(wxT("ColourProperty"),emptyCol);
+        pgman->SetPropertyValue(wxT("ColourProperty"),(wxObject*)wxBLACK);
+        pgman->SetPropertyValue(wxT("Size"),wxSize(150,150));
+        pgman->SetPropertyValue(wxT("Position"),wxPoint(150,150));
+        pgman->SetPropertyValue(wxT("MultiChoiceProperty"),test_arrint_1);
+#if wxUSE_DATETIME
+        pgman->SetPropertyValue(wxT("DateProperty"),dt1);
+#endif
+
+        pgman->SelectPage(2);
+        pg = pgman->GetGrid();
+
+        if ( pg->GetPropertyValueAsString(wxT("StringProperty")) != wxT("Text1") )
+            RT_FAILURE();
+        if ( pg->GetPropertyValueAsInt(wxT("IntProperty")) != 1024 )
+            RT_FAILURE();
+        if ( pg->GetPropertyValueAsDouble(wxT("FloatProperty")) != 1024.0000000001 )
+            RT_FAILURE();
+        if ( pg->GetPropertyValueAsBool(wxT("BoolProperty")) != FALSE )
+            RT_FAILURE();
+        if ( pg->GetPropertyValueAsLong(wxT("EnumProperty")) != 120 )
+            RT_FAILURE();
+        if ( pg->GetPropertyValueAsArrayString(wxT("ArrayStringProperty")) != test_arrstr_1 )
+            RT_FAILURE();
+        if ( pg->GetPropertyValueAsLong(wxT("Custom FlagsProperty")) != FLAG_TEST_SET1 )
+            RT_FAILURE();
+        wxColour col;
+        col << pgman->GetPropertyValue(wxT("ColourProperty"));
+        if ( col != *wxBLACK )
+            RT_FAILURE();
+        if ( pg->GetPropertyValueAsSize(wxT("Size")) != wxSize(150,150) )
+            RT_FAILURE();
+        if ( pg->GetPropertyValueAsPoint(wxT("Position")) != wxPoint(150,150) )
+            RT_FAILURE();
+        if ( !(pg->GetPropertyValueAsArrayInt(wxT("MultiChoiceProperty")) == test_arrint_1) )
+            RT_FAILURE();
+#if wxUSE_DATETIME
+        if ( !(pg->GetPropertyValueAsDateTime(wxT("DateProperty")) == dt1) )
+            RT_FAILURE();
+#endif
+
+        pgman->SetPropertyValue(wxT("IntProperty"),wxLL(10000000000));
+        if ( pg->GetPropertyValueAsLongLong(wxT("IntProperty")) != wxLL(10000000000) )
+            RT_FAILURE();
+
+        pg->SetPropertyValue(wxT("StringProperty"),wxT("Text2"));
+        pg->SetPropertyValue(wxT("IntProperty"),512);
+        pg->SetPropertyValue(wxT("FloatProperty"),512.0);
+        pg->SetPropertyValue(wxT("BoolProperty"),TRUE);
+        pg->SetPropertyValue(wxT("EnumProperty"),80);
+        pg->SetPropertyValue(wxT("ArrayStringProperty"),test_arrstr_2);
+        pg->SetPropertyValue(wxT("Custom FlagsProperty"),FLAG_TEST_SET2);
+        pg->SetPropertyValue(wxT("ColourProperty"),(wxObject*)wxWHITE);
+        pg->SetPropertyValue(wxT("Size"),wxSize(300,300));
+        pg->SetPropertyValue(wxT("Position"),wxPoint(300,300));
+        pg->SetPropertyValue(wxT("MultiChoiceProperty"),test_arrint_2);
+#if wxUSE_DATETIME
+        pg->SetPropertyValue(wxT("DateProperty"),dt2);
+#endif
+
+        //pg = (wxPropertyGrid*) NULL;
+
+        pgman->SelectPage(0);
+
+        if ( pgman->GetPropertyValueAsString(wxT("StringProperty")) != wxT("Text2") )
+            RT_FAILURE();
+        if ( pgman->GetPropertyValueAsInt(wxT("IntProperty")) != 512 )
+            RT_FAILURE();
+        if ( pgman->GetPropertyValueAsDouble(wxT("FloatProperty")) != 512.0 )
+            RT_FAILURE();
+        if ( pgman->GetPropertyValueAsBool(wxT("BoolProperty")) != TRUE )
+            RT_FAILURE();
+        if ( pgman->GetPropertyValueAsLong(wxT("EnumProperty")) != 80 )
+            RT_FAILURE();
+        if ( pgman->GetPropertyValueAsArrayString(wxT("ArrayStringProperty")) != test_arrstr_2 )
+            RT_FAILURE();
+        if ( pgman->GetPropertyValueAsLong(wxT("Custom FlagsProperty")) != FLAG_TEST_SET2 )
+            RT_FAILURE();
+        col << pgman->GetPropertyValue(wxT("ColourProperty"));
+        if ( col != *wxWHITE )
+            RT_FAILURE();
+        if ( pgman->GetPropertyValueAsSize(wxT("Size")) != wxSize(300,300) )
+            RT_FAILURE();
+        if ( pgman->GetPropertyValueAsPoint(wxT("Position")) != wxPoint(300,300) )
+            RT_FAILURE();
+        if ( !(pgman->GetPropertyValueAsArrayInt(wxT("MultiChoiceProperty")) == test_arrint_2) )
+            RT_FAILURE();
+#if wxUSE_DATETIME
+        if ( !(pgman->GetPropertyValueAsDateTime(wxT("DateProperty")) == dt2) )
+            RT_FAILURE();
+#endif
+
+        pgman->SetPropertyValue(wxT("IntProperty"),wxLL(-80000000000));
+        if ( pgman->GetPropertyValueAsLongLong(wxT("IntProperty")) != wxLL(-80000000000) )
+            RT_FAILURE();
+    }
+
+    {
+        RT_START_TEST(SetPropertyValueUnspecified)
+
+        // Null variant setter tests
+        pgman->SetPropertyValueUnspecified(wxT("StringProperty"));
+        pgman->SetPropertyValueUnspecified(wxT("IntProperty"));
+        pgman->SetPropertyValueUnspecified(wxT("FloatProperty"));
+        pgman->SetPropertyValueUnspecified(wxT("BoolProperty"));
+        pgman->SetPropertyValueUnspecified(wxT("EnumProperty"));
+        pgman->SetPropertyValueUnspecified(wxT("ArrayStringProperty"));
+        pgman->SetPropertyValueUnspecified(wxT("Custom FlagsProperty"));
+        pgman->SetPropertyValueUnspecified(wxT("ColourProperty"));
+        pgman->SetPropertyValueUnspecified(wxT("Size"));
+        pgman->SetPropertyValueUnspecified(wxT("Position"));
+        pgman->SetPropertyValueUnspecified(wxT("MultiChoiceProperty"));
+#if wxUSE_DATETIME
+        pgman->SetPropertyValueUnspecified(wxT("DateProperty"));
+#endif
+    }
+
+    {
+        wxPropertyGridPage* page1;
+        wxPropertyGridPage* page2;
+        wxPropertyGridPage* page3;
+        wxVariant pg1_values;
+        wxVariant pg2_values;
+        wxVariant pg3_values;
+
+        {
+            RT_START_TEST(GetPropertyValues)
+
+            page1 = pgman->GetPage(0);
+            pg1_values = page1->GetPropertyValues(wxT("Page1"),NULL,wxPG_KEEP_STRUCTURE);
+            page2 = pgman->GetPage(1);
+            pg2_values = page2->GetPropertyValues(wxT("Page2"),NULL,wxPG_KEEP_STRUCTURE);
+            page3 = pgman->GetPage(2);
+            pg3_values = page3->GetPropertyValues(wxT("Page3"),NULL,wxPG_KEEP_STRUCTURE);
+        }
+
+        {
+            RT_START_TEST(SetPropertyValues)
+
+            page1->SetPropertyValues(pg3_values);
+            page2->SetPropertyValues(pg1_values);
+            page3->SetPropertyValues(pg2_values);
+        }
+    }
+
+    if ( !(pgman->GetWindowStyleFlag()&wxPG_HIDE_CATEGORIES) )
+    {
+        RT_START_TEST(Collapse_and_GetFirstCategory_and_GetNextCategory)
+
+        for ( i=0; i<3; i++ )
+        {
+            wxPropertyGridPage* page = pgman->GetPage(i);
+
+            wxPropertyGridIterator it;
+
+            for ( it = page->GetIterator( wxPG_ITERATE_CATEGORIES );
+                  !it.AtEnd();
+                  it++ )
+            {
+                wxPGProperty* p = *it;
+
+                if ( !page->IsPropertyCategory(p) )
+                    RT_FAILURE();
+
+                page->Collapse( p );
+
+                t.Printf(wxT("Collapsing: %s\n"),page->GetPropertyLabel(p).c_str());
+                ed->AppendText(t);
+            }
+        }
+    }
+
+    {
+        RT_START_TEST(Save_And_RestoreEditableState)
+
+        for ( i=0; i<3; i++ )
+        {
+            pgman->SelectPage(i);
+
+            wxString stringState = pgman->SaveEditableState();
+            bool res = pgman->RestoreEditableState(stringState);
+            if ( !res )
+                RT_FAILURE();
+        }
+    }
+
+    //if ( !(pgman->GetWindowStyleFlag()&wxPG_HIDE_CATEGORIES) )
+    {
+        RT_START_TEST(Expand_and_GetFirstCategory_and_GetNextCategory)
+
+        for ( i=0; i<3; i++ )
+        {
+            wxPropertyGridPage* page = pgman->GetPage(i);
+
+            wxPropertyGridIterator it;
+
+            for ( it = page->GetIterator( wxPG_ITERATE_CATEGORIES );
+                  !it.AtEnd();
+                  it++ )
+            {
+                wxPGProperty* p = *it;
+
+                if ( !page->IsPropertyCategory(p) )
+                    RT_FAILURE();
+
+                page->Expand( p );
+
+                t.Printf(wxT("Expand: %s\n"),page->GetPropertyLabel(p).c_str());
+                ed->AppendText(t);
+            }
+        }
+    }
+
+    //if ( !(pgman->GetWindowStyleFlag()&wxPG_HIDE_CATEGORIES) )
+    {
+        RT_START_TEST(RandomCollapse)
+
+        // Select the most error prone page as visible.
+        pgman->SelectPage(1);
+
+        for ( i=0; i<3; i++ )
+        {
+            wxArrayPtrVoid arr;
+
+            wxPropertyGridPage* page = pgman->GetPage(i);
+
+            wxPropertyGridIterator it;
+
+            for ( it = page->GetIterator( wxPG_ITERATE_CATEGORIES );
+                  !it.AtEnd();
+                  it++ )
+            {
+                arr.Add((void*)*it);
+            }
+
+            if ( arr.GetCount() )
+            {
+                size_t n;
+
+                pgman->Collapse( (wxPGProperty*)arr.Item(0) );
+
+                for ( n=arr.GetCount()-1; n>0; n-- )
+                {
+                    pgman->Collapse( (wxPGProperty*)arr.Item(n) );
+                }
+            }
+
+        }
+    }
+
+    {
+        RT_START_TEST(EnsureVisible)
+        pgman->EnsureVisible(wxT("Cell Colour"));
+    }
+
+    {
+        RT_START_TEST(SetPropertyBackgroundColour)
+        wxCommandEvent evt;
+        evt.SetInt(1); // IsChecked() will return TRUE.
+        evt.SetId(ID_COLOURSCHEME4);
+        OnCatColours(evt);
+        OnColourScheme(evt);
+    }
+
+    {
+        // Test ClearPropertyValue
+        RT_START_TEST(ClearPropertyValue)
+
+        for ( i=0; i<3; i++ )
+        {
+            wxPropertyGridPage* page = pgman->GetPage(i);
+
+            // Iterate over all properties.
+            wxPropertyGridIterator it;
+
+            for ( it = page->GetIterator();
+                  !it.AtEnd();
+                  it++ )
+            {
+                wxLogDebug((*it)->GetLabel());
+                pgman->ClearPropertyValue( *it );
+            }
+        }
+
+    }
+
+    {
+        RT_START_TEST(ManagerClear)
+        pgman->Clear();
+
+        if ( pgman->GetPageCount() )
+            RT_FAILURE();
+
+        // Recreate the original grid
+        CreateGrid( -1, -1 );
+        pgman = m_pPropGridManager;
+    }
+
+    /*
+    {
+        // TODO: This test fails.
+        RT_START_TEST(SetSplitterPosition)
+
+        InitPanel();
+
+        const int trySplitterPos = 50;
+    
+        int style = wxPG_AUTO_SORT;  // wxPG_SPLITTER_AUTO_CENTER;
+        pgman = m_pPropGridManager =
+            new wxPropertyGridManager(m_panel, wxID_ANY,
+                                      wxDefaultPosition,
+                                      wxDefaultSize,
+                                      style );
+
+        PopulateGrid();
+        pgman->SetSplitterPosition(trySplitterPos);
+
+        if ( pgman->GetGrid()->GetSplitterPosition() != trySplitterPos )
+            RT_FAILURE_MSG(wxString::Format(wxT("Splitter position was %i (should have been %i)"),(int)pgman->GetGrid()->GetSplitterPosition(),trySplitterPos).c_str());
+
+        m_topSizer->Add( m_pPropGridManager, 1, wxEXPAND );
+        FinalizePanel();
+
+        wxSize sz = GetSize();
+        wxSize origSz = sz;
+        sz.x += 5;
+        sz.y += 5;
+
+        if ( pgman->GetGrid()->GetSplitterPosition() != trySplitterPos )
+            RT_FAILURE_MSG(wxString::Format(wxT("Splitter position was %i (should have been %i)"),(int)pgman->GetGrid()->GetSplitterPosition(),trySplitterPos).c_str());
+
+        SetSize(origSz);
+
+        // Recreate the original grid
+        CreateGrid( -1, -1 );
+        pgman = m_pPropGridManager;
+    }
+    */
+
+    {
+        RT_START_TEST(HideProperty)
+
+        wxPropertyGridPage* page = pgman->GetPage(0);
+
+        srand(0x1234);
+
+        wxArrayPGProperty arr1;
+        
+        arr1 = GetPropertiesInRandomOrder(page);
+
+        if ( !_failed_ )
+        {
+            for ( i=0; i<arr1.size(); i++ )
+            {
+                wxPGProperty* p = arr1[i];
+                page->HideProperty(p, true);
+
+                wxString s = wxString::Format(wxT("HideProperty(%i, %s)"), i, p->GetLabel().c_str());
+                RT_VALIDATE_VIRTUAL_HEIGHT(page, s)
+                if ( _failed_ )
+                    break;
+            }
+        }
+
+        if ( !_failed_ )
+        {
+            wxArrayPGProperty arr2 = GetPropertiesInRandomOrder(page);
+
+            for ( i=0; i<arr2.size(); i++ )
+            {
+                wxPGProperty* p = arr2[i];
+                page->HideProperty(p, false);
+
+                wxString s = wxString::Format(wxT("ShowProperty(%i, %s)"), i, p->GetLabel().c_str());
+                RT_VALIDATE_VIRTUAL_HEIGHT(page, s)
+                if ( _failed_ )
+                    break;
+            }
+        }
+
+        //
+        // Let's do some more, for better consistency
+        arr1 = GetPropertiesInRandomOrder(page);
+
+        if ( !_failed_ )
+        {
+            for ( i=0; i<arr1.size(); i++ )
+            {
+                wxPGProperty* p = arr1[i];
+                page->HideProperty(p, true);
+
+                wxString s = wxString::Format(wxT("HideProperty(%i, %s)"), i, p->GetLabel().c_str());
+                RT_VALIDATE_VIRTUAL_HEIGHT(page, s)
+                if ( _failed_ )
+                    break;
+            }
+        }
+
+        if ( !_failed_ )
+        {
+            wxArrayPGProperty arr2 = GetPropertiesInRandomOrder(page);
+
+            for ( i=0; i<arr2.size(); i++ )
+            {
+                wxPGProperty* p = arr2[i];
+                page->HideProperty(p, false);
+
+                wxString s = wxString::Format(wxT("ShowProperty(%i, %s)"), i, p->GetLabel().c_str());
+                RT_VALIDATE_VIRTUAL_HEIGHT(page, s)
+                if ( _failed_ )
+                    break;
+            }
+        }
+
+        //
+        // Ok, this time only hide half of them
+        arr1 = GetPropertiesInRandomOrder(page);
+#if wxCHECK_VERSION(2,8,0)
+        arr1.resize(arr1.size()/2);
+#else
+        arr1.SetCount(arr1.size()/2);
+#endif
+
+        if ( !_failed_ )
+        {
+            for ( i=0; i<arr1.size(); i++ )
+            {
+                wxPGProperty* p = arr1[i];
+                page->HideProperty(p, true);
+
+                wxString s = wxString::Format(wxT("HideProperty(%i, %s)"), i, p->GetLabel().c_str());
+                RT_VALIDATE_VIRTUAL_HEIGHT(page, s)
+                if ( _failed_ )
+                    break;
+            }
+        }
+
+        if ( !_failed_ )
+        {
+            wxArrayPGProperty arr2 = GetPropertiesInRandomOrder(page);
+
+            for ( i=0; i<arr2.size(); i++ )
+            {
+                wxPGProperty* p = arr2[i];
+                page->HideProperty(p, false);
+
+                wxString s = wxString::Format(wxT("ShowProperty(%i, %s)"), i, p->GetLabel().c_str());
+                RT_VALIDATE_VIRTUAL_HEIGHT(page, s)
+                if ( _failed_ )
+                    break;
+            }
+        }
+
+        // Recreate the original grid
+        CreateGrid( -1, -1 );
+        pgman = m_pPropGridManager;
+    }
+
+    if ( fullTest )
+    {
+        RT_START_TEST(MultipleColumns)
+
+        // Test with multiple columns
+        // FIXME: Does not display changes.
+        for ( i=3; i<12; i+=2 )
+        {
+            RT_MSG(wxString::Format(wxT("%i columns"),i));
+            CreateGrid( -1, -1 );
+            pgman = m_pPropGridManager;
+            pgman->SetColumnCount(i);
+            Refresh();
+            Update();
+            wxMilliSleep(500);
+        }
+    }
+
+    if ( fullTest )
+    {
+        RT_START_TEST(WindowStyles)
+
+        // Recreate grid with all possible (single) flags
+        wxASSERT(wxPG_AUTO_SORT == 0x000000010);
+
+        for ( i=4; i<16; i++ )
+        {
+            int flag = 1<<i;
+            RT_MSG(wxString::Format(wxT("Style: 0x%X"),flag));
+            CreateGrid( flag, -1 );
+            pgman = m_pPropGridManager;
+            Update();
+            wxMilliSleep(500);
+        }
+
+        wxASSERT(wxPG_EX_INIT_NOCAT == 0x00001000);
+
+        for ( i=12; i<24; i++ )
+        {
+            int flag = 1<<i;
+            RT_MSG(wxString::Format(wxT("ExStyle: 0x%X"),flag));
+            CreateGrid( -1, flag );
+            pgman = m_pPropGridManager;
+            Update();
+            wxMilliSleep(500);
+        }
+
+        // Recreate the original grid
+        CreateGrid( -1, -1 );
+        pgman = m_pPropGridManager;
+    }
+
+    RT_START_TEST(none)
+
+    bool retVal;
+
+    if ( failures || errorMessages.size() )
+    {
+        retVal = false;
+
+        wxString s;
+#ifdef __WXDEBUG__
+        if ( failures )
+#endif
+            s = wxString::Format(wxT("%i tests failed!!!"), failures);
+#ifdef __WXDEBUG__
+        else
+            s = wxString::Format(wxT("All tests were succesfull, but there were %i warnings!"), wxPGGlobalVars->m_warnings);
+#endif
+        RT_MSG(s)
+        for ( i=0; i<errorMessages.size(); i++ )
+            RT_MSG(errorMessages[i])
+        wxMessageBox(s, wxT("Some Tests Failed"));
+    }
+    else
+    {
+        RT_MSG(wxT("All tests succesfull"))
+        retVal = true;
+
+        if ( !interactive )
+            dlg->Close();
+    }
+
+    pgman->SelectPage(0);
+
+    // Test may screw up the toolbar, so we need to refresh it.
+    wxToolBar* toolBar = pgman->GetToolBar();
+    if ( toolBar )
+        toolBar->Refresh();
+
+    return retVal;
+}
+
+// -----------------------------------------------------------------------
index 498fd6f323ba2453086858849616a4d25bcddf69..eff79923b1c4a9d901f9df2e837191480d99b424 100644 (file)
 
 #define wxUSE_AUI       0
 
 
 #define wxUSE_AUI       0
 
+#define wxUSE_PROPGRID  0
+
 #define wxUSE_STC 0
 
 
 #define wxUSE_STC 0
 
 
index 715332eda844279de1c785a770ae1d7e7536a1ef..2cc1868ba0f9fcee80639ce039ce5cdea6c230dc 100644 (file)
@@ -328,6 +328,8 @@ typedef pid_t GPid;
 
 #define wxUSE_AUI       1
 
 
 #define wxUSE_AUI       1
 
+#define wxUSE_PROPGRID  1
+
 #ifndef wxUSE_GRAPHICS_CONTEXT
 #define wxUSE_GRAPHICS_CONTEXT 0
 #endif
 #ifndef wxUSE_GRAPHICS_CONTEXT
 #define wxUSE_GRAPHICS_CONTEXT 0
 #endif
diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp
new file mode 100644 (file)
index 0000000..45ea5fd
--- /dev/null
@@ -0,0 +1,1993 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/propgrid/advprops.cpp
+// Purpose:     wxPropertyGrid Advanced Properties (font, colour, etc.)
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2004-09-25
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/defs.h"
+    #include "wx/object.h"
+    #include "wx/hash.h"
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/event.h"
+    #include "wx/window.h"
+    #include "wx/panel.h"
+    #include "wx/dc.h"
+    #include "wx/dcclient.h"
+    #include "wx/button.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/settings.h"
+    #include "wx/msgdlg.h"
+    #include "wx/choice.h"
+    #include "wx/stattext.h"
+    #include "wx/textctrl.h"
+    #include "wx/scrolwin.h"
+    #include "wx/dirdlg.h"
+    #include "wx/combobox.h"
+    #include "wx/layout.h"
+    #include "wx/sizer.h"
+    #include "wx/textdlg.h"
+    #include "wx/filedlg.h"
+    #include "wx/intl.h"
+#endif
+
+#define __wxPG_SOURCE_FILE__
+
+#include <wx/propgrid/propgrid.h>
+
+#if wxPG_INCLUDE_ADVPROPS
+
+#include <wx/propgrid/advprops.h>
+
+#ifdef __WXMSW__
+    #include <wx/msw/private.h>
+    #include <wx/msw/dc.h>
+#endif
+
+// -----------------------------------------------------------------------
+
+#if defined(__WXMSW__)
+    #define wxPG_CAN_DRAW_CURSOR           1
+#elif defined(__WXGTK__)
+    #define wxPG_CAN_DRAW_CURSOR           0
+#elif defined(__WXMAC__)
+    #define wxPG_CAN_DRAW_CURSOR           0
+#else
+    #define wxPG_CAN_DRAW_CURSOR           0
+#endif
+
+
+// -----------------------------------------------------------------------
+// Value type related
+// -----------------------------------------------------------------------
+
+
+bool operator == (const wxFont&, const wxFont&)
+{
+    return false;
+}
+
+// Implement dynamic class for type value.
+IMPLEMENT_DYNAMIC_CLASS(wxColourPropertyValue, wxObject)
+
+bool operator == (const wxColourPropertyValue& a, const wxColourPropertyValue& b)
+{
+    return ( ( a.m_colour == b.m_colour ) && (a.m_type == b.m_type) );
+}
+
+bool operator == (const wxArrayInt& array1, const wxArrayInt& array2)
+{
+    if ( array1.size() != array2.size() )
+        return false;
+    size_t i;
+    for ( i=0; i<array1.size(); i++ )
+    {
+        if ( array1[i] != array2[i] )
+            return false;
+    }
+    return true;
+}
+
+// -----------------------------------------------------------------------
+// wxSpinCtrl-based property editor
+// -----------------------------------------------------------------------
+
+#if wxUSE_SPINBTN
+
+
+// This macro also defines global wxPGEditor_SpinCtrl for storing
+// the singleton class instance.
+WX_PG_IMPLEMENT_EDITOR_CLASS(SpinCtrl,wxPGSpinCtrlEditor,wxPGEditor)
+
+
+// Trivial destructor.
+wxPGSpinCtrlEditor::~wxPGSpinCtrlEditor()
+{
+}
+
+
+// Create controls and initialize event handling.
+wxPGWindowList wxPGSpinCtrlEditor::CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property,
+                                                   const wxPoint& pos, const wxSize& sz ) const
+{
+    const int margin = 1;
+    wxSize butSz(18, sz.y);
+    wxSize tcSz(sz.x - butSz.x - margin, sz.y);
+    wxPoint butPos(pos.x + tcSz.x + margin, pos.y);
+
+    wxSpinButton* wnd2 = new wxSpinButton();
+#ifdef __WXMSW__
+    wnd2->Hide();
+#endif
+    wnd2->Create( propgrid->GetPanel(), wxPG_SUBID2, butPos, butSz, wxSP_VERTICAL );
+
+    wnd2->SetRange( INT_MIN, INT_MAX );
+    wnd2->SetValue( 0 );
+
+    propgrid->Connect( wxPG_SUBID2, wxEVT_SCROLL_LINEUP,
+                       (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
+                       &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid );
+    propgrid->Connect( wxPG_SUBID2, wxEVT_SCROLL_LINEDOWN,
+                       (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
+                       &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid );
+    propgrid->Connect( wxPG_SUBID1, wxEVT_KEY_DOWN,
+                       (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
+                       &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid );
+
+    // Let's add validator to make sure only numbers can be entered
+    wxTextValidator validator(wxFILTER_NUMERIC, &m_tempString);
+
+    wxTextCtrl* wnd1 = (wxTextCtrl*) wxPGTextCtrlEditor::CreateControls( propgrid, property, pos, tcSz ).m_primary;
+    wnd1->SetValidator(validator);
+
+    return wxPGWindowList(wnd1, wnd2);
+}
+
+// Control's events are redirected here
+bool wxPGSpinCtrlEditor::OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
+                                  wxWindow* wnd, wxEvent& event ) const
+{
+    int evtType = event.GetEventType();
+    int keycode = -1;
+    bool bigStep = false;
+
+    if ( evtType == wxEVT_KEY_DOWN )
+    {
+        wxKeyEvent& keyEvent = (wxKeyEvent&)event;
+        keycode = keyEvent.GetKeyCode();
+
+        if ( keycode == WXK_UP )
+            evtType = wxEVT_SCROLL_LINEUP;
+        else if ( keycode == WXK_DOWN )
+            evtType = wxEVT_SCROLL_LINEDOWN;
+        else if ( keycode == WXK_PAGEUP )
+        {
+            evtType = wxEVT_SCROLL_LINEUP;
+            bigStep = true;
+        }
+        else if ( keycode == WXK_PAGEDOWN )
+        {
+            evtType = wxEVT_SCROLL_LINEDOWN;
+            bigStep = true;
+        }
+    }
+
+    if ( evtType == wxEVT_SCROLL_LINEUP || evtType == wxEVT_SCROLL_LINEDOWN )
+    {
+        wxString s;
+        // Can't use wnd since it might be clipper window
+        wxTextCtrl* tc = wxDynamicCast(propgrid->GetEditorControl(), wxTextCtrl);
+
+        if ( tc )
+            s = tc->GetValue();
+        else
+            s = property->GetValueAsString(wxPG_FULL_VALUE);
+
+        int mode = wxPG_PROPERTY_VALIDATION_SATURATE;
+
+        if ( property->GetAttributeAsLong(wxT("Wrap"), 0) )
+            mode = wxPG_PROPERTY_VALIDATION_WRAP;
+
+        if ( property->GetValueType() == wxT("double") )
+        {
+            double v_d;
+            double step = property->GetAttributeAsDouble(wxT("Step"), 1.0);
+
+            // Try double
+            if ( s.ToDouble(&v_d) )
+            {
+                if ( bigStep )
+                    step *= 10.0;
+
+                if ( evtType == wxEVT_SCROLL_LINEUP ) v_d += step;
+                else v_d -= step;
+
+                // Min/Max check
+                wxFloatProperty::DoValidation(property, v_d, NULL, mode);
+
+                wxPropertyGrid::DoubleToString(s, v_d, 6, true, NULL);
+            }
+            else
+            {
+                return false;
+            }
+        }
+        else
+        {
+            wxLongLong_t v_ll;
+            wxLongLong_t step = property->GetAttributeAsLong(wxT("Step"), 1);
+
+            // Try (long) long
+            if ( s.ToLongLong(&v_ll, 10) )
+            {
+                if ( bigStep )
+                    step *= 10;
+
+                if ( evtType == wxEVT_SCROLL_LINEUP ) v_ll += step;
+                else v_ll -= step;
+
+                // Min/Max check
+                wxIntProperty::DoValidation(property, v_ll, NULL, mode);
+
+                s = wxLongLong(v_ll).ToString();
+            }
+            else
+            {
+                return false;
+            }
+        }
+
+        if ( tc )
+        {
+            int ip = tc->GetInsertionPoint();
+            int lp = tc->GetLastPosition();
+            tc->SetValue(s);
+            tc->SetInsertionPoint(ip+(tc->GetLastPosition()-lp));
+        }
+
+        return true;
+    }
+
+    return wxPGTextCtrlEditor::OnEvent(propgrid,property,wnd,event);
+}
+
+#endif // wxUSE_SPINBTN
+
+
+// -----------------------------------------------------------------------
+// wxDatePickerCtrl-based property editor
+// -----------------------------------------------------------------------
+
+#if wxUSE_DATEPICKCTRL
+
+
+#include <wx/datectrl.h>
+#include <wx/dateevt.h>
+
+class wxPGDatePickerCtrlEditor : public wxPGEditor
+{
+    WX_PG_DECLARE_EDITOR_CLASS(wxPGDatePickerCtrlEditor)
+public:
+    virtual ~wxPGDatePickerCtrlEditor();
+
+    wxPG_DECLARE_CREATECONTROLS
+
+    virtual void UpdateControl( wxPGProperty* property, wxWindow* wnd ) const;
+    virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
+        wxWindow* wnd, wxEvent& event ) const;
+    virtual bool GetValueFromControl( wxVariant& variant, wxPGProperty* property, wxWindow* wnd ) const;
+    virtual void SetValueToUnspecified( wxPGProperty* WXUNUSED(property), wxWindow* wnd ) const;
+};
+
+
+WX_PG_IMPLEMENT_EDITOR_CLASS(DatePickerCtrl,wxPGDatePickerCtrlEditor,wxPGEditor)
+
+
+wxPGDatePickerCtrlEditor::~wxPGDatePickerCtrlEditor()
+{
+}
+
+wxPGWindowList wxPGDatePickerCtrlEditor::CreateControls( wxPropertyGrid* propgrid,
+                                                         wxPGProperty* property,
+                                                         const wxPoint& pos,
+                                                         const wxSize& sz ) const
+{
+    wxCHECK_MSG( property->IsKindOf(CLASSINFO(wxDateProperty)),
+                 NULL,
+                 wxT("DatePickerCtrl editor can only be used with wxDateProperty or derivative.") );
+
+    wxDateProperty* prop = (wxDateProperty*) property;
+
+    // Use two stage creation to allow cleaner display on wxMSW
+    wxDatePickerCtrl* ctrl = new wxDatePickerCtrl();
+#ifdef __WXMSW__
+    ctrl->Hide();
+    wxSize useSz = wxDefaultSize;
+    useSz.x = sz.x;
+#else
+    wxSize useSz = sz;
+#endif
+    ctrl->Create(propgrid->GetPanel(),
+                 wxPG_SUBID1,
+                 prop->GetDateValue(),
+                 pos,
+                 useSz,
+                 prop->GetDatePickerStyle() | wxNO_BORDER);
+
+    // Connect all required events to grid's OnCustomEditorEvent
+    // (all relevenat wxTextCtrl, wxComboBox and wxButton events are
+    // already connected)
+    propgrid->Connect( wxPG_SUBID1, wxEVT_DATE_CHANGED,
+                       (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
+                       &wxPropertyGrid::OnCustomEditorEvent );
+
+#ifdef __WXMSW__
+    ctrl->Show();
+#endif
+
+    return ctrl;
+}
+
+// Copies value from property to control
+void wxPGDatePickerCtrlEditor::UpdateControl( wxPGProperty* property, wxWindow* wnd ) const
+{
+    wxDatePickerCtrl* ctrl = (wxDatePickerCtrl*) wnd;
+    wxASSERT( ctrl && ctrl->IsKindOf(CLASSINFO(wxDatePickerCtrl)) );
+
+    // We assume that property's data type is 'int' (or something similar),
+    // thus allowing us to get raw, unchecked value via DoGetValue.
+    ctrl->SetValue( property->GetValue().GetDateTime() );
+}
+
+// Control's events are redirected here
+bool wxPGDatePickerCtrlEditor::OnEvent( wxPropertyGrid* WXUNUSED(propgrid),
+                                        wxPGProperty* WXUNUSED(property),
+                                        wxWindow* WXUNUSED(wnd),
+                                        wxEvent& event ) const
+{
+    if ( event.GetEventType() == wxEVT_DATE_CHANGED )
+        return true;
+
+    return false;
+}
+
+bool wxPGDatePickerCtrlEditor::GetValueFromControl( wxVariant& variant, wxPGProperty* WXUNUSED(property), wxWindow* wnd ) const
+{
+    wxDatePickerCtrl* ctrl = (wxDatePickerCtrl*) wnd;
+    wxASSERT( ctrl && ctrl->IsKindOf(CLASSINFO(wxDatePickerCtrl)) );
+
+    variant = ctrl->GetValue();
+
+    return true;
+}
+
+void wxPGDatePickerCtrlEditor::SetValueToUnspecified( wxPGProperty* WXUNUSED(property), wxWindow* WXUNUSED(wnd) ) const
+{
+    // TODO?
+    //wxDateProperty* prop = (wxDateProperty*) property;
+    //ctrl->SetValue(?);
+}
+
+#endif // wxUSE_DATEPICKCTRL
+
+
+// -----------------------------------------------------------------------
+// wxFontProperty
+// -----------------------------------------------------------------------
+
+#include <wx/fontdlg.h>
+#include <wx/fontenum.h>
+
+static const wxChar* gs_fp_es_family_labels[] = {
+    wxT("Default"), wxT("Decorative"),
+    wxT("Roman"), wxT("Script"),
+    wxT("Swiss"), wxT("Modern"),
+    (const wxChar*) NULL
+};
+
+static long gs_fp_es_family_values[] = {
+    wxDEFAULT, wxDECORATIVE,
+    wxROMAN, wxSCRIPT,
+    wxSWISS, wxMODERN
+};
+
+static const wxChar* gs_fp_es_style_labels[] = {
+    wxT("Normal"),
+    wxT("Slant"),
+    wxT("Italic"),
+    (const wxChar*) NULL
+};
+
+static long gs_fp_es_style_values[] = {
+    wxNORMAL,
+    wxSLANT,
+    wxITALIC
+};
+
+static const wxChar* gs_fp_es_weight_labels[] = {
+    wxT("Normal"),
+    wxT("Light"),
+    wxT("Bold"),
+    (const wxChar*) NULL
+};
+
+static long gs_fp_es_weight_values[] = {
+    wxNORMAL,
+    wxLIGHT,
+    wxBOLD
+};
+
+// Class body is in advprops.h
+
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFontProperty,wxPGProperty,
+                               wxFont,const wxFont&,TextCtrlAndButton)
+
+
+wxFontProperty::wxFontProperty( const wxString& label, const wxString& name,
+                                const wxFont& value )
+    : wxPGProperty(label,name)
+{
+    SetValue( wxFontToVariant(value) );
+
+    // Initialize font family choices list
+    if ( !wxPGGlobalVars->m_fontFamilyChoices )
+    {
+        wxFontEnumerator enumerator;
+        enumerator.EnumerateFacenames();
+
+#if wxMINOR_VERSION > 6
+        wxArrayString faceNames = enumerator.GetFacenames();
+#else
+        wxArrayString& faceNames = *enumerator.GetFacenames();
+#endif
+
+        faceNames.Sort();
+
+        wxPGGlobalVars->m_fontFamilyChoices = new wxPGChoices(faceNames);
+    }
+
+    wxString emptyString(wxEmptyString);
+
+    wxFont& font = wxFontFromVariant(m_value);
+
+    AddChild( new wxIntProperty( _("Point Size"),emptyString,(long)font.GetPointSize() ) );
+
+    AddChild( new wxEnumProperty(_("Family"), emptyString,
+              gs_fp_es_family_labels,gs_fp_es_family_values,
+              font.GetFamily()) );
+
+    wxString faceName = font.GetFaceName();
+    // If font was not in there, add it now
+    if ( faceName.length() &&
+         wxPGGlobalVars->m_fontFamilyChoices->Index(faceName) == wxNOT_FOUND )
+        wxPGGlobalVars->m_fontFamilyChoices->AddAsSorted(faceName);
+
+    wxPGProperty* p = new wxEnumProperty(_("Face Name"),emptyString,
+                                         *wxPGGlobalVars->m_fontFamilyChoices);
+
+    p->SetValueFromString(faceName, wxPG_FULL_VALUE);
+
+    AddChild( p );
+
+    AddChild( new wxEnumProperty(_("Style"),emptyString,
+              gs_fp_es_style_labels,gs_fp_es_style_values,font.GetStyle()) );
+
+    AddChild( new wxEnumProperty(_("Weight"),emptyString,
+              gs_fp_es_weight_labels,gs_fp_es_weight_values,font.GetWeight()) );
+
+    AddChild( new wxBoolProperty(_("Underlined"),emptyString,
+              font.GetUnderlined()) );
+}
+
+wxFontProperty::~wxFontProperty() { }
+
+void wxFontProperty::OnSetValue()
+{
+    wxFont& font = wxFontFromVariant(m_value);
+    wxASSERT(&font);
+
+    wxFont font2;
+    if ( !font.Ok() )
+        font2 = wxFont(10,wxSWISS,wxNORMAL,wxNORMAL);
+    else
+        font2 = font;
+
+    m_value = wxFontToVariant(font2);
+}
+
+wxString wxFontProperty::GetValueAsString( int argFlags ) const
+{
+    return wxPGProperty::GetValueAsString(argFlags);
+}
+
+bool wxFontProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* WXUNUSED(primary),
+                              wxEvent& event )
+{
+    if ( propgrid->IsMainButtonEvent(event) )
+    {
+        // Update value from last minute changes
+        PrepareValueForDialogEditing(propgrid);
+
+        wxFontData data;
+        data.SetInitialFont( wxFontFromVariant(m_value) );
+        data.SetColour(*wxBLACK);
+
+        wxFontDialog dlg(propgrid, data);
+        if ( dlg.ShowModal() == wxID_OK )
+        {
+            propgrid->EditorsValueWasModified();
+
+            wxVariant variant = wxFontToVariant(dlg.GetFontData().GetChosenFont());
+            SetValueInEvent( variant );
+            return true;
+        }
+    }
+    return false;
+}
+
+void wxFontProperty::RefreshChildren()
+{
+    if ( !GetChildCount() ) return;
+    const wxFont& font = wxFontFromVariant(m_value);
+    Item(0)->SetValue( (long)font.GetPointSize() );
+    Item(1)->SetValue( (long)font.GetFamily() );
+    Item(2)->SetValueFromString( font.GetFaceName(), wxPG_FULL_VALUE );
+    Item(3)->SetValue( (long)font.GetStyle() );
+    Item(4)->SetValue( (long)font.GetWeight() );
+    Item(5)->SetValue( font.GetUnderlined() );
+}
+
+void wxFontProperty::ChildChanged( wxVariant& thisValue, int ind, wxVariant& childValue ) const
+{
+    wxFont& font = wxFontFromVariant(thisValue);
+
+    if ( ind == 0 )
+    {
+        font.SetPointSize( wxPGVariantToInt(childValue) );
+    }
+    else if ( ind == 1 )
+    {
+        int fam = childValue.GetLong();
+        if ( fam < wxDEFAULT ||
+             fam > wxTELETYPE )
+             fam = wxDEFAULT;
+        font.SetFamily( fam );
+    }
+    else if ( ind == 2 )
+    {
+        wxString faceName;
+        int faceIndex = childValue.GetLong();
+
+        if ( faceIndex >= 0 )
+            faceName = wxPGGlobalVars->m_fontFamilyChoices->GetLabel(faceIndex);
+
+        font.SetFaceName( faceName );
+    }
+    else if ( ind == 3 )
+    {
+        int st = childValue.GetLong();
+        if ( st != wxFONTSTYLE_NORMAL &&
+             st != wxFONTSTYLE_SLANT &&
+             st != wxFONTSTYLE_ITALIC )
+             st = wxFONTWEIGHT_NORMAL;
+        font.SetStyle( st );
+    }
+    else if ( ind == 4 )
+    {
+        int wt = childValue.GetLong();
+        if ( wt != wxFONTWEIGHT_NORMAL &&
+             wt != wxFONTWEIGHT_LIGHT &&
+             wt != wxFONTWEIGHT_BOLD )
+             wt = wxFONTWEIGHT_NORMAL;
+        font.SetWeight( wt );
+    }
+    else if ( ind == 5 )
+    {
+        font.SetUnderlined( childValue.GetBool() );
+    }
+}
+
+/*
+wxSize wxFontProperty::OnMeasureImage() const
+{
+    return wxSize(-1,-1);
+}
+
+void wxFontProperty::OnCustomPaint(wxDC& dc,
+                                        const wxRect& rect,
+                                        wxPGPaintData& paintData)
+{
+    wxString drawFace;
+    if ( paintData.m_choiceItem >= 0 )
+        drawFace = wxPGGlobalVars->m_fontFamilyChoices->GetLabel(paintData.m_choiceItem);
+    else
+        drawFace = m_value_wxFont.GetFaceName();
+
+    if ( drawFace.length() )
+    {
+        // Draw the background
+        dc.SetBrush( wxColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)) );
+        //dc.SetBrush( *wxWHITE_BRUSH );
+        //dc.SetPen( *wxMEDIUM_GREY_PEN );
+        dc.DrawRectangle( rect );
+
+        wxFont oldFont = dc.GetFont();
+        wxFont drawFont(oldFont.GetPointSize(),
+                        wxDEFAULT,wxNORMAL,wxBOLD,false,drawFace);
+        dc.SetFont(drawFont);
+
+        dc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT) );
+        dc.DrawText( wxT("Aa"), rect.x+2, rect.y+1 );
+
+        dc.SetFont(oldFont);
+    }
+    else
+    {
+        // No file - just draw a white box
+        dc.SetBrush ( *wxWHITE_BRUSH );
+        dc.DrawRectangle ( rect );
+    }
+}
+*/
+
+
+// -----------------------------------------------------------------------
+// wxSystemColourProperty
+// -----------------------------------------------------------------------
+
+// wxEnumProperty based classes cannot use wxPG_PROP_CLASS_SPECIFIC_1
+#define wxPG_PROP_HIDE_CUSTOM_COLOUR        wxPG_PROP_CLASS_SPECIFIC_2
+
+#include <wx/colordlg.h>
+
+//#define wx_cp_es_syscolours_len 25
+static const wxChar* gs_cp_es_syscolour_labels[] = {
+    wxT("AppWorkspace"),
+    wxT("ActiveBorder"),
+    wxT("ActiveCaption"),
+    wxT("ButtonFace"),
+    wxT("ButtonHighlight"),
+    wxT("ButtonShadow"),
+    wxT("ButtonText"),
+    wxT("CaptionText"),
+    wxT("ControlDark"),
+    wxT("ControlLight"),
+    wxT("Desktop"),
+    wxT("GrayText"),
+    wxT("Highlight"),
+    wxT("HighlightText"),
+    wxT("InactiveBorder"),
+    wxT("InactiveCaption"),
+    wxT("InactiveCaptionText"),
+    wxT("Menu"),
+    wxT("Scrollbar"),
+    wxT("Tooltip"),
+    wxT("TooltipText"),
+    wxT("Window"),
+    wxT("WindowFrame"),
+    wxT("WindowText"),
+    wxT("Custom"),
+    (const wxChar*) NULL
+};
+
+static long gs_cp_es_syscolour_values[] = {
+    wxSYS_COLOUR_APPWORKSPACE,
+    wxSYS_COLOUR_ACTIVEBORDER,
+    wxSYS_COLOUR_ACTIVECAPTION,
+    wxSYS_COLOUR_BTNFACE,
+    wxSYS_COLOUR_BTNHIGHLIGHT,
+    wxSYS_COLOUR_BTNSHADOW,
+    wxSYS_COLOUR_BTNTEXT ,
+    wxSYS_COLOUR_CAPTIONTEXT,
+    wxSYS_COLOUR_3DDKSHADOW,
+    wxSYS_COLOUR_3DLIGHT,
+    wxSYS_COLOUR_BACKGROUND,
+    wxSYS_COLOUR_GRAYTEXT,
+    wxSYS_COLOUR_HIGHLIGHT,
+    wxSYS_COLOUR_HIGHLIGHTTEXT,
+    wxSYS_COLOUR_INACTIVEBORDER,
+    wxSYS_COLOUR_INACTIVECAPTION,
+    wxSYS_COLOUR_INACTIVECAPTIONTEXT,
+    wxSYS_COLOUR_MENU,
+    wxSYS_COLOUR_SCROLLBAR,
+    wxSYS_COLOUR_INFOBK,
+    wxSYS_COLOUR_INFOTEXT,
+    wxSYS_COLOUR_WINDOW,
+    wxSYS_COLOUR_WINDOWFRAME,
+    wxSYS_COLOUR_WINDOWTEXT,
+    wxPG_COLOUR_CUSTOM
+};
+
+
+WX_PG_IMPLEMENT_WXOBJECT_VARIANT_DATA(wxPGVariantDataColourPropertyValue, wxColourPropertyValue)
+
+
+// Class body is in advprops.h
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxSystemColourProperty,wxEnumProperty,
+                               wxColourPropertyValue,const wxColourPropertyValue&,Choice)
+
+
+void wxSystemColourProperty::Init( int type, const wxColour& colour )
+{
+    wxColourPropertyValue cpv;
+
+    if ( colour.Ok() )
+        cpv.Init( type, colour );
+    else
+        cpv.Init( type, *wxWHITE );
+
+    m_flags |= wxPG_PROP_STATIC_CHOICES; // Colour selection cannot be changed.
+
+    m_value = wxColourPropertyValueToVariant(cpv);
+
+    OnSetValue();
+}
+
+
+static wxPGChoices gs_wxSystemColourProperty_choicesCache;
+
+
+wxSystemColourProperty::wxSystemColourProperty( const wxString& label, const wxString& name,
+    const wxColourPropertyValue& value )
+    : wxEnumProperty( label,
+                      name,
+                      gs_cp_es_syscolour_labels,
+                      gs_cp_es_syscolour_values,
+                      &gs_wxSystemColourProperty_choicesCache )
+{
+    if ( &value )
+        Init( value.m_type, value.m_colour );
+    else
+        Init( wxPG_COLOUR_CUSTOM, *wxWHITE );
+}
+
+
+wxSystemColourProperty::wxSystemColourProperty( const wxString& label, const wxString& name,
+    const wxChar** labels, const long* values, wxPGChoices* choicesCache,
+    const wxColourPropertyValue& value )
+    : wxEnumProperty( label, name, labels, values, choicesCache )
+{
+    if ( &value )
+        Init( value.m_type, value.m_colour );
+    else
+        Init( wxPG_COLOUR_CUSTOM, *wxWHITE );
+}
+
+
+wxSystemColourProperty::wxSystemColourProperty( const wxString& label, const wxString& name,
+    const wxChar** labels, const long* values, wxPGChoices* choicesCache,
+    const wxColour& value )
+    : wxEnumProperty( label, name, labels, values, choicesCache )
+{
+    if ( &value )
+        Init( wxPG_COLOUR_CUSTOM, value );
+    else
+        Init( wxPG_COLOUR_CUSTOM, *wxWHITE );
+}
+
+
+wxSystemColourProperty::~wxSystemColourProperty() { }
+
+
+wxColourPropertyValue wxSystemColourProperty::GetVal( const wxVariant* pVariant ) const
+{
+    if ( !pVariant )
+        pVariant = &m_value;
+
+    if ( pVariant->IsNull() )
+        return wxColourPropertyValue(wxPG_COLOUR_UNSPECIFIED, wxColour());
+
+    wxColourPropertyValue* v1 = &wxColourPropertyValueFromVariant(*pVariant);
+    if ( v1 )
+        return *v1;
+
+    wxColour* pCol = wxGetVariantCast(*pVariant, wxColour);
+    wxColour col;
+    bool variantProcessed = true;
+
+    if ( pCol )
+    {
+        col = *pCol;
+    }
+    else if ( pVariant->GetType() == wxT("wxArrayInt") )
+    {
+        wxArrayInt arr;
+        arr << *pVariant;
+
+        if ( arr.size() >= 3 )
+        {
+            int r, g, b;
+            int a = 255;
+
+            r = arr[0];
+            g = arr[1];
+            b = arr[2];
+            if ( arr.size() >= 4 )
+                a = arr[3];
+
+            col = wxColour(r, g, b, a);
+        }
+        else
+        {
+            variantProcessed = false;
+        }
+    }
+    else if ( pVariant->GetType() == wxT("wxColour") )
+    {
+        col << *pVariant;
+    }
+    else
+    {
+        variantProcessed = false;
+    }
+
+    if ( !variantProcessed )
+        return wxColourPropertyValue(wxPG_COLOUR_UNSPECIFIED, wxColour());
+
+    wxColourPropertyValue v2( wxPG_COLOUR_CUSTOM, col );
+
+    int colInd = ColToInd(col);
+    if ( colInd != wxNOT_FOUND )
+        v2.m_type = colInd;
+
+    return v2;
+}
+
+wxVariant wxSystemColourProperty::DoTranslateVal( wxColourPropertyValue& v ) const
+{
+    return wxColourPropertyValueToVariant(v);
+}
+
+int wxSystemColourProperty::ColToInd( const wxColour& colour ) const
+{
+    size_t i;
+    size_t i_max = m_choices.GetCount() - 1;
+
+    for ( i=0; i<i_max; i++ )
+    {
+        int ind = m_choices[i].GetValue();
+
+        if ( colour == GetColour(ind) )
+        {
+            /*wxLogDebug(wxT("%s(%s): Index %i for ( getcolour(%i,%i,%i), colour(%i,%i,%i))"),
+                GetClassName(),GetLabel().c_str(),
+                (int)i,(int)GetColour(ind).Red(),(int)GetColour(ind).Green(),(int)GetColour(ind).Blue(),
+                (int)colour.Red(),(int)colour.Green(),(int)colour.Blue());*/
+            return ind;
+        }
+    }
+    return wxNOT_FOUND;
+}
+
+
+static inline wxColour wxColourFromPGLong( long col )
+{
+    return wxColour((col&0xFF),((col>>8)&0xFF),((col>>16)&0xFF));
+}
+
+
+void wxSystemColourProperty::OnSetValue()
+{
+    // Convert from generic wxobject ptr to wxPGVariantDataColour
+    if ( wxPGIsVariantType(m_value, wxobject) )
+    {
+        wxASSERT( m_value.IsValueKindOf(CLASSINFO(wxColour)) );
+        wxColour* pCol = (wxColour*) m_value.GetWxObjectPtr();
+        m_value << *pCol;
+    }
+
+    wxColourPropertyValue val = GetVal(&m_value);
+
+    if ( val.m_type == wxPG_COLOUR_UNSPECIFIED )
+    {
+        m_value.MakeNull();
+        return;
+    }
+    else
+    {
+
+        if ( val.m_type < wxPG_COLOUR_WEB_BASE )
+            val.m_colour = GetColour( val.m_type );
+
+        m_value = TranslateVal(val);
+    }
+
+    wxColourPropertyValue* pCpv = &wxColourPropertyValueFromVariant(m_value);
+    wxColour col;
+    if ( pCpv )
+        col = pCpv->m_colour;
+    else
+        col << m_value;
+
+    if ( !col.Ok() )
+    {
+        SetValueToUnspecified();
+        SetIndex(wxNOT_FOUND);
+        return;
+    }
+
+    int ind;
+
+    if ( pCpv )
+    {
+        if ( pCpv->m_type < wxPG_COLOUR_WEB_BASE )
+        {
+            if ( m_choices.HasValues() )
+                ind = GetIndexForValue(pCpv->m_type);
+            else
+                ind = ColToInd(col);
+        }
+        else
+        {
+            pCpv->m_type = wxPG_COLOUR_CUSTOM;
+            ind = GetCustomColourIndex();
+        }
+    }
+    else
+    {
+        ind = ColToInd(col);
+
+        if ( ind == wxNOT_FOUND )
+            ind = GetCustomColourIndex();
+    }
+
+    SetIndex(ind);
+}
+
+
+wxColour wxSystemColourProperty::GetColour( int index ) const
+{
+    return wxSystemSettings::GetColour( (wxSystemColour)index );
+}
+
+wxString wxSystemColourProperty::ColourToString( const wxColour& col, int index ) const
+{
+    if ( index == wxNOT_FOUND )
+        return wxString::Format(wxT("(%i,%i,%i)"),
+                                (int)col.Red(),
+                                (int)col.Green(),
+                                (int)col.Blue());
+    else
+        return m_choices.GetLabel(index);
+}
+
+wxString wxSystemColourProperty::GetValueAsString( int argFlags ) const
+{
+    wxColourPropertyValue val = GetVal();
+
+    int ind = GetIndex();
+
+    // Always show custom colour for textctrl-editor
+    if ( val.m_type == wxPG_COLOUR_CUSTOM ||
+         ind == GetCustomColourIndex() ||
+         (argFlags & wxPG_PROPERTY_SPECIFIC) )
+    {
+        return ColourToString(val.m_colour, wxNOT_FOUND);
+    }
+
+    if ( ind == -1 )
+        return wxEmptyString;
+
+    return ColourToString(val.m_colour, ind);
+}
+
+
+wxSize wxSystemColourProperty::OnMeasureImage( int ) const
+{
+    return wxPG_DEFAULT_IMAGE_SIZE;
+}
+
+
+int wxSystemColourProperty::GetCustomColourIndex() const
+{
+    return m_choices.GetCount() - 1;
+}
+
+
+bool wxSystemColourProperty::QueryColourFromUser( wxVariant& variant ) const
+{
+    wxASSERT( m_value.GetType() != wxT("string") );
+    bool res = false;
+
+    wxPropertyGrid* propgrid = GetGrid();
+    wxASSERT( propgrid );
+
+    // Must only occur when user triggers event
+    if ( !(propgrid->GetInternalFlags() & wxPG_FL_IN_ONCUSTOMEDITOREVENT) )
+        return res;
+
+    wxColourPropertyValue val = GetVal();
+
+    val.m_type = wxPG_COLOUR_CUSTOM;
+
+    wxColourData data;
+    data.SetChooseFull(true);
+    data.SetColour(val.m_colour);
+    int i;
+    for ( i = 0; i < 16; i++)
+    {
+        wxColour colour(i*16, i*16, i*16);
+        data.SetCustomColour(i, colour);
+    }
+
+    wxColourDialog dialog(propgrid, &data);
+    if ( dialog.ShowModal() == wxID_OK )
+    {
+        wxColourData retData = dialog.GetColourData();
+        val.m_colour = retData.GetColour();
+
+        variant = DoTranslateVal(val);
+
+        SetValueInEvent(variant);
+
+        res = true;
+    }
+
+    return res;
+}
+
+
+bool wxSystemColourProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argFlags) ) const
+{
+    int index = number;
+    int type = GetValueForIndex(index);
+    bool hasValue = m_choices[index].HasValue();
+
+    if ( ( hasValue && type == wxPG_COLOUR_CUSTOM ) ||
+         ( !hasValue && (index == (int)GetCustomColourIndex() &&
+                                      !(m_flags & wxPG_PROP_HIDE_CUSTOM_COLOUR))
+         )
+       )
+    {
+        QueryColourFromUser(variant);
+    }
+    else
+    {
+        variant = TranslateVal( type, GetColour(type) );
+    }
+
+    return true;
+}
+
+// Need to do some extra event handling.
+bool wxSystemColourProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* WXUNUSED(primary), wxEvent& event )
+{
+    if ( propgrid->IsMainButtonEvent(event) )
+    {
+        // We need to handle button click in case editor has been
+        // switched to one that has wxButton as well.
+        wxVariant variant;
+        if ( QueryColourFromUser(variant) )
+            return true;
+    }
+    return false;
+}
+
+/*class wxPGColourPropertyRenderer : public wxPGDefaultRenderer
+{
+public:
+    virtual void Render( wxDC& dc, const wxRect& rect,
+                         const wxPropertyGrid* propertyGrid, wxPGProperty* property,
+                         int WXUNUSED(column), int item, int WXUNUSED(flags) ) const
+    {
+        wxASSERT( property->IsKindOf(CLASSINFO(wxSystemColourProperty)) );
+        wxSystemColourProperty* prop = wxStaticCast(property, wxSystemColourProperty);
+
+        dc.SetPen(*wxBLACK_PEN);
+        if ( item >= 0 &&
+             ( item < (int)(GetCustomColourIndex) || (prop->HasFlag(wxPG_PROP_HIDE_CUSTOM_COLOUR)))
+           )
+        {
+            int colInd;
+            const wxArrayInt& values = prop->GetValues();
+            if ( values.GetChildCount() )
+                colInd = values[item];
+            else
+                colInd = item;
+            dc.SetBrush( wxColour( prop->GetColour( colInd ) ) );
+        }
+        else if ( !prop->IsValueUnspecified() )
+            dc.SetBrush( prop->GetVal().m_colour );
+        else
+            dc.SetBrush( *wxWHITE );
+
+        wxRect imageRect = propertyGrid->GetImageRect(property, item);
+        wxLogDebug(wxT("%i, %i"),imageRect.x,imageRect.y);
+        dc.DrawRectangle( rect.x+imageRect.x, rect.y+imageRect.y,
+                          imageRect.width, imageRect.height );
+
+        wxString text;
+        if ( item == -1 )
+            text = property->GetValueAsString();
+        else
+            text = property->GetChoiceString(item);
+        DrawText( dc, rect, imageRect.width, text );
+    }
+protected:
+};
+
+wxPGColourPropertyRenderer g_wxPGColourPropertyRenderer;
+
+wxPGCellRenderer* wxSystemColourProperty::GetCellRenderer( int column ) const
+{
+    if ( column == 1 )
+        return &g_wxPGColourPropertyRenderer;
+    return wxEnumProperty::GetCellRenderer(column);
+}*/
+
+void wxSystemColourProperty::OnCustomPaint( wxDC& dc, const wxRect& rect,
+                                            wxPGPaintData& paintdata )
+{
+    wxColour col;
+
+    if ( paintdata.m_choiceItem >= 0 && paintdata.m_choiceItem < (int)m_choices.GetCount() &&
+         paintdata.m_choiceItem != GetCustomColourIndex() )
+    {
+        int colInd = m_choices[paintdata.m_choiceItem].GetValue();
+        col = GetColour( colInd );
+    }
+    else if ( !IsValueUnspecified() )
+    {
+        col = GetVal().m_colour;
+    }
+
+    if ( col.Ok() )
+    {
+        dc.SetBrush(col);
+        dc.DrawRectangle(rect);
+    }
+}
+
+
+bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& text, int argFlags ) const
+{
+    //
+    // Accept colour format "[Name] [(R,G,B)]"
+    // Name takes precedence.
+    //
+    wxString colourName;
+    wxString colourRGB;
+
+    int ppos = text.Find(wxT("("));
+
+    if ( ppos == wxNOT_FOUND )
+    {
+        colourName = text;
+    }
+    else
+    {
+        colourName = text.substr(0, ppos);
+        colourRGB = text.substr(ppos, text.length()-ppos);
+    }
+
+    // Strip spaces from extremities
+    colourName.Trim(true);
+    colourName.Trim(false);
+    colourRGB.Trim(true);
+
+    // Validate colourRGB string - (1,1,1) is shortest allowed
+    if ( colourRGB.length() < 7 )
+        colourRGB.clear();
+
+    if ( colourRGB.length() == 0 && m_choices.GetCount() &&
+         colourName == m_choices.GetLabel(GetCustomColourIndex()) )
+    {
+        if ( !(argFlags & wxPG_EDITABLE_VALUE ))
+        {
+            // This really should not occurr...
+            // wxASSERT(false);
+            ResetNextIndex();
+            return false;
+        }
+
+        QueryColourFromUser(value);
+    }
+    else
+    {
+        wxColourPropertyValue val;
+
+        bool done = false;
+
+        if ( colourName.length() )
+        {
+            // Try predefined colour first
+            bool res = wxEnumProperty::StringToValue(value, colourName, argFlags);
+            if ( res && GetIndex() >= 0 )
+            {
+                val.m_type = GetIndex();
+                if ( val.m_type >= 0 && val.m_type < m_choices.GetCount() && m_choices[val.m_type].HasValue() )
+                    val.m_type = m_choices[val.m_type].GetValue();
+
+                // Get proper colour for type.
+                val.m_colour = GetColour(val.m_type);
+
+                done = true;
+            }
+        }
+        if ( colourRGB.length() && !done )
+        {
+            // Then check custom colour.
+            val.m_type = wxPG_COLOUR_CUSTOM;
+
+            int r = -1, g = -1, b = -1;
+            wxSscanf(colourRGB.c_str(),wxT("(%i,%i,%i)"),&r,&g,&b);
+
+            if ( r >= 0 && r <= 255 &&
+                 g >= 0 && g <= 255 &&
+                 b >= 0 && b <= 255 )
+            {
+                val.m_colour.Set(r,g,b);
+
+                done = true;
+            }
+        }
+
+        if ( !done )
+        {
+            ResetNextIndex();
+            return false;
+        }
+
+        value = DoTranslateVal(val);
+    }
+
+    return true;
+}
+
+
+bool wxSystemColourProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+    if ( name == wxPG_COLOUR_ALLOW_CUSTOM )
+    {
+        int ival = wxPGVariantToInt(value);
+
+        SetChoicesExclusive(); // Make sure we don't corrupt colour lists of other properties
+
+        if ( ival && (m_flags & wxPG_PROP_HIDE_CUSTOM_COLOUR) )
+        {
+            // Show custom choice
+            m_choices.Insert(wxT("Custom"), GetCustomColourIndex(), wxPG_COLOUR_CUSTOM);
+            m_flags &= ~(wxPG_PROP_HIDE_CUSTOM_COLOUR);
+        }
+        else if ( !ival && !(m_flags & wxPG_PROP_HIDE_CUSTOM_COLOUR) )
+        {
+            // Hide custom choice
+            m_choices.RemoveAt(GetCustomColourIndex());
+            m_flags |= wxPG_PROP_HIDE_CUSTOM_COLOUR;
+        }
+        return true;
+    }
+    return false;
+}
+
+
+// -----------------------------------------------------------------------
+// wxColourProperty
+// -----------------------------------------------------------------------
+
+static const wxChar* gs_cp_es_normcolour_labels[] = {
+    wxT("Black"),
+    wxT("Maroon"),
+    wxT("Navy"),
+    wxT("Purple"),
+    wxT("Teal"),
+    wxT("Gray"),
+    wxT("Green"),
+    wxT("Olive"),
+    wxT("Brown"),
+    wxT("Blue"),
+    wxT("Fuchsia"),
+    wxT("Red"),
+    wxT("Orange"),
+    wxT("Silver"),
+    wxT("Lime"),
+    wxT("Aqua"),
+    wxT("Yellow"),
+    wxT("White"),
+    wxT("Custom"),
+    (const wxChar*) NULL
+};
+
+static unsigned long gs_cp_es_normcolour_colours[] = {
+    wxPG_COLOUR(0,0,0),
+    wxPG_COLOUR(128,0,0),
+    wxPG_COLOUR(0,0,128),
+    wxPG_COLOUR(128,0,128),
+    wxPG_COLOUR(0,128,128),
+    wxPG_COLOUR(128,128,128),
+    wxPG_COLOUR(0,128,0),
+    wxPG_COLOUR(128,128,0),
+    wxPG_COLOUR(166,124,81),
+    wxPG_COLOUR(0,0,255),
+    wxPG_COLOUR(255,0,255),
+    wxPG_COLOUR(255,0,0),
+    wxPG_COLOUR(247,148,28),
+    wxPG_COLOUR(192,192,192),
+    wxPG_COLOUR(0,255,0),
+    wxPG_COLOUR(0,255,255),
+    wxPG_COLOUR(255,255,0),
+    wxPG_COLOUR(255,255,255),
+    wxPG_COLOUR(0,0,0)
+};
+
+WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR2(wxColourProperty,
+                                                     gs_cp_es_normcolour_labels,
+                                                     (const long*)NULL,
+                                                     gs_cp_es_normcolour_colours,
+                                                     TextCtrlAndButton)
+
+// -----------------------------------------------------------------------
+// wxCursorProperty
+// -----------------------------------------------------------------------
+
+#define wxPG_CURSOR_IMAGE_WIDTH     32
+
+#define NUM_CURSORS 28
+
+//#define wx_cp_es_syscursors_len 28
+static const wxChar* gs_cp_es_syscursors_labels[NUM_CURSORS+1] = {
+    wxT("Default"),
+    wxT("Arrow"),
+    wxT("Right Arrow"),
+    wxT("Blank"),
+    wxT("Bullseye"),
+    wxT("Character"),
+    wxT("Cross"),
+    wxT("Hand"),
+    wxT("I-Beam"),
+    wxT("Left Button"),
+    wxT("Magnifier"),
+    wxT("Middle Button"),
+    wxT("No Entry"),
+    wxT("Paint Brush"),
+    wxT("Pencil"),
+    wxT("Point Left"),
+    wxT("Point Right"),
+    wxT("Question Arrow"),
+    wxT("Right Button"),
+    wxT("Sizing NE-SW"),
+    wxT("Sizing N-S"),
+    wxT("Sizing NW-SE"),
+    wxT("Sizing W-E"),
+    wxT("Sizing"),
+    wxT("Spraycan"),
+    wxT("Wait"),
+    wxT("Watch"),
+    wxT("Wait Arrow"),
+    (const wxChar*) NULL
+};
+
+static long gs_cp_es_syscursors_values[NUM_CURSORS] = {
+    wxCURSOR_NONE,
+    wxCURSOR_ARROW,
+    wxCURSOR_RIGHT_ARROW,
+    wxCURSOR_BLANK,
+    wxCURSOR_BULLSEYE,
+    wxCURSOR_CHAR,
+    wxCURSOR_CROSS,
+    wxCURSOR_HAND,
+    wxCURSOR_IBEAM,
+    wxCURSOR_LEFT_BUTTON,
+    wxCURSOR_MAGNIFIER,
+    wxCURSOR_MIDDLE_BUTTON,
+    wxCURSOR_NO_ENTRY,
+    wxCURSOR_PAINT_BRUSH,
+    wxCURSOR_PENCIL,
+    wxCURSOR_POINT_LEFT,
+    wxCURSOR_POINT_RIGHT,
+    wxCURSOR_QUESTION_ARROW,
+    wxCURSOR_RIGHT_BUTTON,
+    wxCURSOR_SIZENESW,
+    wxCURSOR_SIZENS,
+    wxCURSOR_SIZENWSE,
+    wxCURSOR_SIZEWE,
+    wxCURSOR_SIZING,
+    wxCURSOR_SPRAYCAN,
+    wxCURSOR_WAIT,
+    wxCURSOR_WATCH,
+    wxCURSOR_ARROWWAIT
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxCursorProperty, wxEnumProperty)
+
+wxCursorProperty::wxCursorProperty( const wxString& label, const wxString& name,
+    int value )
+    : wxEnumProperty( label,
+                      name,
+                      gs_cp_es_syscursors_labels,
+                      gs_cp_es_syscursors_values,
+                      value )
+{
+    m_flags |= wxPG_PROP_STATIC_CHOICES; // Cursor selection cannot be changed.
+}
+
+wxCursorProperty::~wxCursorProperty()
+{
+}
+
+wxSize wxCursorProperty::OnMeasureImage( int item ) const
+{
+#if wxPG_CAN_DRAW_CURSOR
+    if ( item != -1 && item < NUM_CURSORS )
+        return wxSize(wxPG_CURSOR_IMAGE_WIDTH,wxPG_CURSOR_IMAGE_WIDTH);
+#else
+    wxUnusedVar(item);
+#endif
+    return wxSize(0,0);
+}
+
+#if wxPG_CAN_DRAW_CURSOR
+
+void wxCursorProperty::OnCustomPaint( wxDC& dc,
+                                      const wxRect& rect,
+                                      wxPGPaintData& paintdata )
+{
+    // Background brush
+    dc.SetBrush( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
+
+    if ( paintdata.m_choiceItem >= 0 )
+    {
+        dc.DrawRectangle( rect );
+
+        if ( paintdata.m_choiceItem < NUM_CURSORS )
+        {
+            int cursorindex = gs_cp_es_syscursors_values[paintdata.m_choiceItem];
+
+            {
+                if ( cursorindex == wxCURSOR_NONE )
+                    cursorindex = wxCURSOR_ARROW;
+
+                wxCursor cursor( cursorindex );
+
+            #ifdef __WXMSW__
+                HDC hDc = (HDC)((const wxMSWDCImpl *)dc.GetImpl())->GetHDC();
+                ::DrawIconEx( hDc,
+                              rect.x,
+                              rect.y,
+                              (HICON)cursor.GetHandle(),
+                              0,
+                              0,
+                              0,
+                              NULL,
+                              DI_COMPAT | DI_DEFAULTSIZE | DI_NORMAL
+                            );
+            #endif
+            }
+        }
+    }
+}
+
+#else
+void wxCursorProperty::OnCustomPaint( wxDC&, const wxRect&, wxPGPaintData& ) { }
+/*wxPGCellRenderer* wxCursorProperty::GetCellRenderer( int column ) const
+{
+    return wxEnumProperty::GetCellRenderer(column);
+}*/
+#endif
+
+// -----------------------------------------------------------------------
+// wxImageFileProperty
+// -----------------------------------------------------------------------
+
+#if wxUSE_IMAGE
+
+const wxString& wxPGGetDefaultImageWildcard()
+{
+    // Form the wildcard, if not done yet
+    if ( !wxPGGlobalVars->m_pDefaultImageWildcard.length() )
+    {
+
+        wxString str;
+
+        // TODO: This section may require locking (using global).
+
+        wxList& handlers = wxImage::GetHandlers();
+
+        wxList::iterator node;
+
+        // Let's iterate over the image handler list.
+        //for ( wxList::Node *node = handlers.GetFirst(); node; node = node->GetNext() )
+        for ( node = handlers.begin(); node != handlers.end(); node++ )
+        {
+            wxImageHandler *handler = (wxImageHandler*)*node;
+
+            wxString ext_lo = handler->GetExtension();
+            wxString ext_up = ext_lo.Upper();
+
+            str.append( ext_up );
+            str.append( wxT(" files (*.") );
+            str.append( ext_up );
+            str.append( wxT(")|*.") );
+            str.append( ext_lo );
+            str.append( wxT("|") );
+        }
+
+        str.append ( wxT("All files (*.*)|*.*") );
+
+        wxPGGlobalVars->m_pDefaultImageWildcard = str;
+    }
+
+    return wxPGGlobalVars->m_pDefaultImageWildcard;
+}
+
+WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(wxImageFileProperty,
+                                       wxFileProperty,
+                                       const wxString&)
+
+wxImageFileProperty::wxImageFileProperty( const wxString& label, const wxString& name,
+    const wxString& value )
+    : wxFileProperty(label,name,value)
+{
+    SetAttribute( wxPG_FILE_WILDCARD, wxPGGetDefaultImageWildcard() );
+
+    m_pImage = (wxImage*) NULL;
+    m_pBitmap = (wxBitmap*) NULL;
+}
+
+wxImageFileProperty::~wxImageFileProperty()
+{
+    if ( m_pBitmap )
+        delete m_pBitmap;
+    if ( m_pImage )
+        delete m_pImage;
+}
+
+void wxImageFileProperty::OnSetValue()
+{
+    wxFileProperty::OnSetValue();
+
+    // Delete old image
+    if ( m_pImage )
+    {
+        delete m_pImage;
+        m_pImage = NULL;
+    }
+    if ( m_pBitmap )
+    {
+        delete m_pBitmap;
+        m_pBitmap = NULL;
+    }
+
+    // Create the image thumbnail
+    if ( m_filename.FileExists() )
+    {
+        m_pImage = new wxImage( m_filename.GetFullPath() );
+    }
+}
+
+wxSize wxImageFileProperty::OnMeasureImage( int ) const
+{
+    return wxPG_DEFAULT_IMAGE_SIZE;
+}
+
+void wxImageFileProperty::OnCustomPaint( wxDC& dc,
+                                         const wxRect& rect,
+                                         wxPGPaintData& )
+{
+    if ( m_pBitmap || (m_pImage && m_pImage->Ok() ) )
+    {
+        // Draw the thumbnail
+
+        // Create the bitmap here because required size is not known in OnSetValue().
+        if ( !m_pBitmap )
+        {
+            m_pImage->Rescale( rect.width, rect.height );
+            m_pBitmap = new wxBitmap( *m_pImage );
+            delete m_pImage;
+            m_pImage = NULL;
+        }
+
+        dc.DrawBitmap( *m_pBitmap, rect.x, rect.y, false );
+    }
+    else
+    {
+        // No file - just draw a white box
+        dc.SetBrush( *wxWHITE_BRUSH );
+        dc.DrawRectangle ( rect );
+    }
+}
+
+#endif // wxUSE_IMAGE
+
+// -----------------------------------------------------------------------
+// wxMultiChoiceProperty
+// -----------------------------------------------------------------------
+
+#if wxUSE_CHOICEDLG
+
+#include <wx/choicdlg.h>
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxMultiChoiceProperty,wxPGProperty,
+                               wxArrayInt,const wxArrayInt&,TextCtrlAndButton)
+
+wxMultiChoiceProperty::wxMultiChoiceProperty( const wxString& label,
+                                              const wxString& name,
+                                              const wxPGChoices& choices,
+                                              const wxArrayString& value)
+                                                : wxPGProperty(label,name)
+{
+    m_choices.Assign(choices);
+    SetValue(value);
+}
+
+wxMultiChoiceProperty::wxMultiChoiceProperty( const wxString& label,
+                                              const wxString& name,
+                                              const wxArrayString& strings,
+                                              const wxArrayString& value)
+                                                : wxPGProperty(label,name)
+{
+    m_choices.Set(strings);
+    SetValue(value);
+}
+
+wxMultiChoiceProperty::wxMultiChoiceProperty( const wxString& label,
+                                              const wxString& name,
+                                              const wxArrayString& value)
+                                                : wxPGProperty(label,name)
+{
+    wxArrayString strings;
+    m_choices.Set(strings);
+    SetValue(value);
+}
+
+wxMultiChoiceProperty::~wxMultiChoiceProperty()
+{
+}
+
+void wxMultiChoiceProperty::OnSetValue()
+{
+    GenerateValueAsString();
+}
+
+wxString wxMultiChoiceProperty::GetValueAsString( int ) const
+{
+    return m_display;
+}
+
+void wxMultiChoiceProperty::GenerateValueAsString()
+{
+    wxArrayString strings;
+
+    if ( wxPGIsVariantType(m_value, arrstring) )
+        strings = m_value.GetArrayString();
+
+    wxString& tempStr = m_display;
+    unsigned int i;
+    unsigned int itemCount = strings.size();
+
+    tempStr.Empty();
+
+    if ( itemCount )
+        tempStr.append( wxT("\"") );
+
+    for ( i = 0; i < itemCount; i++ )
+    {
+        tempStr.append( strings[i] );
+        tempStr.append( wxT("\"") );
+        if ( i < (itemCount-1) )
+            tempStr.append ( wxT(" \"") );
+    }
+}
+
+wxArrayInt wxMultiChoiceProperty::GetValueAsIndices() const
+{
+    const wxArrayInt& valueArr = wxArrayIntFromVariant(GetValue());
+    unsigned int i;
+
+    // Translate values to string indices.
+    wxArrayInt selections;
+
+    if ( !m_choices.IsOk() || !m_choices.GetCount() || !(&valueArr) )
+    {
+        for ( i=0; i<valueArr.size(); i++ )
+            selections.Add(-1);
+    }
+    else
+    {
+        for ( i=0; i<valueArr.size(); i++ )
+        {
+            int sIndex = m_choices.Index(valueArr[i]);
+            if ( sIndex >= 0 )
+                selections.Add(sIndex);
+        }
+    }
+
+    return selections;
+}
+
+bool wxMultiChoiceProperty::OnEvent( wxPropertyGrid* propgrid,
+                                     wxWindow* WXUNUSED(primary),
+                                     wxEvent& event )
+{
+    if ( propgrid->IsMainButtonEvent(event) )
+    {
+        // Update the value
+        PrepareValueForDialogEditing(propgrid);
+
+        wxArrayString labels = m_choices.GetLabels();
+        unsigned int choiceCount;
+
+        if ( m_choices.IsOk() )
+            choiceCount = m_choices.GetCount();
+        else
+            choiceCount = 0;
+
+        // launch editor dialog
+        wxMultiChoiceDialog dlg( propgrid,
+                                 _("Make a selection:"),
+                                 m_label,
+                                 choiceCount,
+                                 choiceCount?&labels[0]:NULL,
+                                 wxCHOICEDLG_STYLE );
+
+        dlg.Move( propgrid->GetGoodEditorDialogPosition(this,dlg.GetSize()) );
+
+        wxArrayString strings = m_value.GetArrayString();
+        wxArrayString extraStrings;
+
+        dlg.SetSelections(m_choices.GetIndicesForStrings(strings, &extraStrings));
+
+        if ( dlg.ShowModal() == wxID_OK && choiceCount )
+        {
+            int userStringMode = GetAttributeAsLong(wxT("UserStringMode"), 0);
+
+            wxArrayInt arrInt = dlg.GetSelections();
+
+            wxVariant variant;
+
+            // Strings that were not in list of choices
+            wxArrayString value;
+
+            // Translate string indices to strings
+
+            unsigned int n;
+            if ( userStringMode == 1 )
+            {
+                for (n=0;n<extraStrings.size();n++)
+                    value.push_back(extraStrings[n]);
+            }
+
+            unsigned int i;
+            for ( i=0; i<arrInt.size(); i++ )
+                value.Add(m_choices.GetLabel(arrInt.Item(i)));
+
+            if ( userStringMode == 2 )
+            {
+                for (n=0;n<extraStrings.size();n++)
+                    value.push_back(extraStrings[n]);
+            }
+
+            variant = WXVARIANT(value);
+
+            SetValueInEvent(variant);
+
+            return true;
+        }
+    }
+    return false;
+}
+
+int wxMultiChoiceProperty::GetChoiceInfo( wxPGChoiceInfo* choiceinfo )
+{
+    if ( choiceinfo )
+        choiceinfo->m_choices = &m_choices;
+    return -1;
+}
+
+bool wxMultiChoiceProperty::StringToValue( wxVariant& variant, const wxString& text, int ) const
+{
+    wxArrayString arr;
+
+    int userStringMode = GetAttributeAsLong(wxT("UserStringMode"), 0);
+
+    WX_PG_TOKENIZER2_BEGIN(text,wxT('"'))
+        if ( userStringMode > 0 || (m_choices.IsOk() && m_choices.Index( token ) != wxNOT_FOUND) )
+            arr.Add(token);
+    WX_PG_TOKENIZER2_END()
+
+    wxVariant v( WXVARIANT(arr) );
+    variant = v;
+
+    return true;
+}
+
+#endif // wxUSE_CHOICEDLG
+
+
+// -----------------------------------------------------------------------
+// wxDateProperty
+// -----------------------------------------------------------------------
+
+#if wxUSE_DATETIME
+
+
+#if wxUSE_DATEPICKCTRL
+    #define dtCtrl      DatePickerCtrl
+#else
+    #define dtCtrl      TextCtrl
+#endif
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxDateProperty,
+                               wxPGProperty,
+                               wxDateTime,
+                               const wxDateTime&,
+                               dtCtrl)
+
+
+wxString wxDateProperty::ms_defaultDateFormat;
+
+
+wxDateProperty::wxDateProperty( const wxString& label,
+                                const wxString& name,
+                                const wxDateTime& value )
+    : wxPGProperty(label,name)
+{
+    //wxPGRegisterDefaultValueType(wxDateTime)
+
+#if wxUSE_DATEPICKCTRL
+    wxPGRegisterEditorClass(DatePickerCtrl);
+
+    m_dpStyle = wxDP_DEFAULT | wxDP_SHOWCENTURY;
+#else
+    m_dpStyle = 0;
+#endif
+
+    SetValue( value );
+}
+
+wxDateProperty::~wxDateProperty()
+{
+}
+
+bool wxDateProperty::StringToValue( wxVariant& variant, const wxString& text,
+                                    int WXUNUSED(argFlags) ) const
+{
+    wxDateTime dt;
+
+    const char* c = dt.ParseFormat(text, wxString(wxDefaultDateTimeFormat), wxDefaultDateTime, NULL);
+
+    if ( c )
+    {
+        variant = dt;
+        return true;
+    }
+
+    return false;
+}
+
+wxString wxDateProperty::GetValueAsString( int argFlags ) const
+{
+    const wxChar* format = (const wxChar*) NULL;
+
+    wxDateTime dateTime = m_value.GetDateTime();
+
+    if ( !dateTime.IsValid() )
+        return wxT("Invalid");
+
+    if ( !ms_defaultDateFormat.length() )
+    {
+#if wxUSE_DATEPICKCTRL
+        bool showCentury = m_dpStyle & wxDP_SHOWCENTURY ? true : false;
+#else
+        bool showCentury = true;
+#endif
+        ms_defaultDateFormat = DetermineDefaultDateFormat( showCentury );
+    }
+
+    if ( m_format.length() &&
+         !(argFlags & wxPG_FULL_VALUE) )
+            format = m_format.c_str();
+
+    // Determine default from locale
+    // NB: This is really simple stuff, but can't figure anything
+    //     better without proper support in wxLocale
+    if ( !format )
+        format = ms_defaultDateFormat.c_str();
+
+    return dateTime.Format(format);
+}
+
+wxString wxDateProperty::DetermineDefaultDateFormat( bool showCentury )
+{
+    // This code is basicly copied from datectlg.cpp's SetFormat
+    //
+    wxString format;
+
+    wxDateTime dt;
+    dt.ParseFormat(wxT("2003-10-13"), wxT("%Y-%m-%d"));
+    wxString str(dt.Format(wxT("%x")));
+
+    const wxChar *p = str.c_str();
+    while ( *p )
+    {
+        int n=wxAtoi(p);
+        if (n == dt.GetDay())
+        {
+            format.Append(wxT("%d"));
+            p += 2;
+        }
+        else if (n == (int)dt.GetMonth()+1)
+        {
+            format.Append(wxT("%m"));
+            p += 2;
+        }
+        else if (n == dt.GetYear())
+        {
+            format.Append(wxT("%Y"));
+            p += 4;
+        }
+        else if (n == (dt.GetYear() % 100))
+        {
+            if (showCentury)
+                format.Append(wxT("%Y"));
+            else
+                format.Append(wxT("%y"));
+            p += 2;
+        }
+        else
+            format.Append(*p++);
+    }
+
+    return format;
+}
+
+bool wxDateProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+    if ( name == wxPG_DATE_FORMAT )
+    {
+        m_format = value.GetString();
+        return true;
+    }
+    else if ( name == wxPG_DATE_PICKER_STYLE )
+    {
+        m_dpStyle = value.GetLong();
+        ms_defaultDateFormat.clear();  // This may need recalculation
+        return true;
+    }
+    return false;
+}
+
+#endif  // wxUSE_DATETIME
+
+
+// -----------------------------------------------------------------------
+// wxPropertyGridInterface
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::InitAllTypeHandlers()
+{
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::RegisterAdditionalEditors()
+{
+#if wxUSE_SPINBTN
+    wxPGRegisterEditorClass(SpinCtrl);
+#endif
+#if wxUSE_DATEPICKCTRL
+    wxPGRegisterEditorClass(DatePickerCtrl);
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+#endif // wxPG_INCLUDE_ADVPROPS
diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp
new file mode 100644 (file)
index 0000000..6e677a2
--- /dev/null
@@ -0,0 +1,2149 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/propgrid/editors.cpp
+// Purpose:     wxPropertyGrid editors
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2007-04-14
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/defs.h"
+    #include "wx/object.h"
+    #include "wx/hash.h"
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/event.h"
+    #include "wx/window.h"
+    #include "wx/panel.h"
+    #include "wx/dc.h"
+    #include "wx/dcclient.h"
+    #include "wx/dcmemory.h"
+    #include "wx/button.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/settings.h"
+    #include "wx/msgdlg.h"
+    #include "wx/choice.h"
+    #include "wx/stattext.h"
+    #include "wx/scrolwin.h"
+    #include "wx/dirdlg.h"
+    #include "wx/layout.h"
+    #include "wx/sizer.h"
+    #include "wx/textdlg.h"
+    #include "wx/filedlg.h"
+    #include "wx/statusbr.h"
+    #include "wx/intl.h"
+    #include "wx/frame.h"
+#endif
+
+
+#include "wx/timer.h"
+#include "wx/dcbuffer.h"
+#include "wx/bmpbuttn.h"
+
+
+// This define is necessary to prevent macro clearing
+#define __wxPG_SOURCE_FILE__
+
+#include <wx/propgrid/propgrid.h>
+#include <wx/propgrid/editors.h>
+#include <wx/propgrid/props.h>
+
+#if wxPG_USE_RENDERER_NATIVE
+    #include <wx/renderer.h>
+#endif
+
+// How many pixels between textctrl and button
+#ifdef __WXMAC__
+    #define wxPG_TEXTCTRL_AND_BUTTON_SPACING        8
+#else
+    #define wxPG_TEXTCTRL_AND_BUTTON_SPACING        2
+#endif 
+
+#define wxPG_BUTTON_SIZEDEC                         0
+
+#include <wx/odcombo.h>
+
+#ifdef __WXMSW__
+    #include <wx/msw/private.h>
+#endif
+
+// -----------------------------------------------------------------------
+
+#if defined(__WXMSW__)
+    // tested
+    #define wxPG_NAT_TEXTCTRL_BORDER_X          0 // Unremovable border of native textctrl.
+    #define wxPG_NAT_TEXTCTRL_BORDER_Y          0 // Unremovable border of native textctrl.
+
+    #define wxPG_NAT_BUTTON_BORDER_ANY          1
+    #define wxPG_NAT_BUTTON_BORDER_X            1
+    #define wxPG_NAT_BUTTON_BORDER_Y            1
+
+    #define wxPG_CHECKMARK_XADJ                 1
+    #define wxPG_CHECKMARK_YADJ                 (-1)
+    #define wxPG_CHECKMARK_WADJ                 0
+    #define wxPG_CHECKMARK_HADJ                 0
+    #define wxPG_CHECKMARK_DEFLATE              0
+
+    #define wxPG_TEXTCTRLYADJUST                (m_spacingy+0)
+
+#elif defined(__WXGTK__)
+    // tested
+    #define wxPG_CHECKMARK_XADJ                 0
+    #define wxPG_CHECKMARK_YADJ                 0
+    #define wxPG_CHECKMARK_WADJ                 (-1)
+    #define wxPG_CHECKMARK_HADJ                 (-1)
+    #define wxPG_CHECKMARK_DEFLATE              3
+
+    #define wxPG_NAT_TEXTCTRL_BORDER_X      3 // Unremovable border of native textctrl.
+    #define wxPG_NAT_TEXTCTRL_BORDER_Y      3 // Unremovable border of native textctrl.
+
+    #define wxPG_NAT_BUTTON_BORDER_ANY      1
+    #define wxPG_NAT_BUTTON_BORDER_X        1
+    #define wxPG_NAT_BUTTON_BORDER_Y        1
+
+    #define wxPG_TEXTCTRLYADJUST            0
+
+#elif defined(__WXMAC__)
+    // *not* tested
+    #define wxPG_CHECKMARK_XADJ                 0
+    #define wxPG_CHECKMARK_YADJ                 0
+    #define wxPG_CHECKMARK_WADJ                 0
+    #define wxPG_CHECKMARK_HADJ                 0
+    #define wxPG_CHECKMARK_DEFLATE              0
+
+    #define wxPG_NAT_TEXTCTRL_BORDER_X      0 // Unremovable border of native textctrl.
+    #define wxPG_NAT_TEXTCTRL_BORDER_Y      0 // Unremovable border of native textctrl.
+
+    #define wxPG_NAT_BUTTON_BORDER_ANY      0
+    #define wxPG_NAT_BUTTON_BORDER_X        0
+    #define wxPG_NAT_BUTTON_BORDER_Y        0
+
+    #define wxPG_TEXTCTRLYADJUST            3
+
+#else
+    // defaults
+    #define wxPG_CHECKMARK_XADJ                 0
+    #define wxPG_CHECKMARK_YADJ                 0
+    #define wxPG_CHECKMARK_WADJ                 0
+    #define wxPG_CHECKMARK_HADJ                 0
+    #define wxPG_CHECKMARK_DEFLATE              0
+
+    #define wxPG_NAT_TEXTCTRL_BORDER_X      0 // Unremovable border of native textctrl.
+    #define wxPG_NAT_TEXTCTRL_BORDER_Y      0 // Unremovable border of native textctrl.
+
+    #define wxPG_NAT_BUTTON_BORDER_ANY      0
+    #define wxPG_NAT_BUTTON_BORDER_X        0
+    #define wxPG_NAT_BUTTON_BORDER_Y        0
+
+    #define wxPG_TEXTCTRLYADJUST            0
+
+#endif
+
+#if (!wxPG_NAT_TEXTCTRL_BORDER_X && !wxPG_NAT_TEXTCTRL_BORDER_Y)
+    #define wxPG_ENABLE_CLIPPER_WINDOW      0
+#else
+    #define wxPG_ENABLE_CLIPPER_WINDOW      1
+#endif
+
+
+// for odcombo
+#define wxPG_CHOICEXADJUST           0
+#define wxPG_CHOICEYADJUST           0
+
+#define ODCB_CUST_PAINT_MARGIN               6  // Number added to image width for SetCustomPaintWidth
+
+// Milliseconds to wait for two mouse-ups after focus inorder
+// to trigger a double-click.
+#define DOUBLE_CLICK_CONVERSION_TRESHOLD        500
+
+// -----------------------------------------------------------------------
+// wxPGEditor
+// -----------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxPGEditor, wxObject)
+
+
+wxPGEditor::~wxPGEditor()
+{
+}
+
+void wxPGEditor::DrawValue( wxDC& dc, const wxRect& rect, wxPGProperty* property, const wxString& text ) const
+{
+    if ( !property->IsValueUnspecified() )
+        dc.DrawText( text, rect.x+wxPG_XBEFORETEXT, rect.y );
+}
+
+bool wxPGEditor::GetValueFromControl( wxVariant&, wxPGProperty*, wxWindow* ) const
+{
+    return false;
+}
+
+void wxPGEditor::SetControlStringValue( wxPGProperty* WXUNUSED(property), wxWindow*, const wxString& ) const
+{
+}
+
+
+void wxPGEditor::SetControlIntValue( wxPGProperty* WXUNUSED(property), wxWindow*, int ) const
+{
+}
+
+
+int wxPGEditor::InsertItem( wxWindow*, const wxString&, int ) const
+{
+    return -1;
+}
+
+
+void wxPGEditor::DeleteItem( wxWindow*, int ) const
+{
+    return;
+}
+
+
+void wxPGEditor::OnFocus( wxPGProperty*, wxWindow* ) const
+{
+}
+
+
+bool wxPGEditor::CanContainCustomImage() const
+{
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxPGClipperWindow
+// -----------------------------------------------------------------------
+
+
+#if wxPG_ENABLE_CLIPPER_WINDOW
+
+//
+// Clipper window is used to "remove" borders from controls
+// which otherwise insist on having them despite of supplied
+// wxNO_BORDER window style.
+//
+class wxPGClipperWindow : public wxWindow
+{
+    DECLARE_CLASS(wxPGClipperWindow)
+public:
+
+    wxPGClipperWindow()
+        : wxWindow()
+    {
+        wxPGClipperWindow::Init();
+    }
+
+    wxPGClipperWindow(wxWindow* parent,
+                      wxWindowID id,
+                      const wxPoint& pos = wxDefaultPosition,
+                      const wxSize& size = wxDefaultSize)
+    {
+        Init();
+        Create(parent,id,pos,size);
+    }
+
+    void Create(wxWindow* parent,
+                wxWindowID id,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize);
+
+    virtual ~wxPGClipperWindow();
+
+    virtual bool ProcessEvent(wxEvent& event);
+
+    inline wxWindow* GetControl() const { return m_ctrl; }
+
+    // This is called before wxControl is constructed.
+    void GetControlRect( int xadj, int yadj, wxPoint& pt, wxSize& sz );
+
+    // This is caleed after wxControl has been constructed.
+    void SetControl( wxWindow* ctrl );
+
+    virtual void Refresh( bool eraseBackground = true,
+                          const wxRect *rect = (const wxRect *) NULL );
+    virtual void SetFocus();
+
+    virtual bool SetFont(const wxFont& font);
+
+    inline int GetXClip() const { return m_xadj; }
+
+    inline int GetYClip() const { return m_yadj; }
+
+protected:
+    wxWindow*       m_ctrl;
+
+    int             m_xadj; // Horizontal border clip.
+
+    int             m_yadj; // Vertical border clip.
+
+private:
+    void Init ()
+    {
+        m_ctrl = (wxWindow*) NULL;
+    }
+};
+
+
+IMPLEMENT_CLASS(wxPGClipperWindow,wxWindow)
+
+
+// This is called before wxControl is constructed.
+void wxPGClipperWindow::GetControlRect( int xadj, int yadj, wxPoint& pt, wxSize& sz )
+{
+    m_xadj = xadj;
+    m_yadj = yadj;
+    pt.x = -xadj;
+    pt.y = -yadj;
+    wxSize own_size = GetSize();
+    sz.x = own_size.x+(xadj*2);
+    sz.y = own_size.y+(yadj*2);
+}
+
+
+// This is caleed after wxControl has been constructed.
+void wxPGClipperWindow::SetControl( wxWindow* ctrl )
+{
+    m_ctrl = ctrl;
+
+    // GTK requires this.
+    ctrl->SetSizeHints(3,3);
+
+    // Correct size of this window to match the child.
+    wxSize sz = GetSize();
+    wxSize chsz = ctrl->GetSize();
+
+    int hei_adj = chsz.y - (sz.y+(m_yadj*2));
+    if ( hei_adj )
+        SetSize(sz.x,chsz.y-(m_yadj*2));
+
+}
+
+
+void wxPGClipperWindow::Refresh( bool eraseBackground, const wxRect *rect )
+{
+    wxWindow::Refresh(false,rect);
+    if ( m_ctrl )
+        m_ctrl->Refresh(eraseBackground);
+}
+
+
+// Pass focus to control
+void wxPGClipperWindow::SetFocus()
+{
+    if ( m_ctrl )
+        m_ctrl->SetFocus();
+    else
+        wxWindow::SetFocus();
+}
+
+
+bool wxPGClipperWindow::SetFont(const wxFont& font)
+{
+    bool res = wxWindow::SetFont(font);
+    if ( m_ctrl )
+        return m_ctrl->SetFont(font);
+    return res;
+}
+
+
+void wxPGClipperWindow::Create(wxWindow* parent,
+                               wxWindowID id,
+                               const wxPoint& pos,
+                               const wxSize& size )
+{
+    wxWindow::Create(parent,id,pos,size);
+}
+
+
+wxPGClipperWindow::~wxPGClipperWindow()
+{
+}
+
+
+bool wxPGClipperWindow::ProcessEvent(wxEvent& event)
+{
+    if ( event.GetEventType() == wxEVT_SIZE )
+    {
+        if ( m_ctrl )
+        {
+            // Maintain correct size relationship.
+            wxSize sz = GetSize();
+            m_ctrl->SetSize(sz.x+(m_xadj*2),sz.y+(m_yadj*2));
+            event.Skip();
+            return false;
+        }
+    }
+    return wxWindow::ProcessEvent(event);
+}
+
+#endif // wxPG_ENABLE_CLIPPER_WINDOW
+
+/*wxWindow* wxPropertyGrid::GetActualEditorControl( wxWindow* ctrl )
+{
+#if wxPG_ENABLE_CLIPPER_WINDOW
+    // Pass real control instead of clipper window
+    if ( ctrl->IsKindOf(CLASSINFO(wxPGClipperWindow)) )
+    {
+        return ((wxPGClipperWindow*)ctrl)->GetControl();
+    }
+#else
+    return ctrl;
+#endif
+}*/
+
+// -----------------------------------------------------------------------
+// wxPGTextCtrlEditor
+// -----------------------------------------------------------------------
+
+// Clipper window support macro (depending on whether it is used
+// for this editor or not)
+#if wxPG_NAT_TEXTCTRL_BORDER_X || wxPG_NAT_TEXTCTRL_BORDER_Y
+    #define wxPG_NAT_TEXTCTRL_BORDER_ANY    1
+#else
+    #define wxPG_NAT_TEXTCTRL_BORDER_ANY    0
+#endif
+
+WX_PG_IMPLEMENT_EDITOR_CLASS(TextCtrl,wxPGTextCtrlEditor,wxPGEditor)
+
+
+wxPGWindowList wxPGTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid,
+                                                   wxPGProperty* property,
+                                                   const wxPoint& pos,
+                                                   const wxSize& sz ) const
+{
+    wxString text;
+
+    //
+    // If has children, and limited editing is specified, then don't create.
+    if ( (property->GetFlags() & wxPG_PROP_NOEDITOR) &&
+         property->GetChildCount() )
+        return (wxWindow*) NULL;
+
+    if ( !property->IsValueUnspecified() )
+        text = property->GetValueString(property->HasFlag(wxPG_PROP_READONLY)?0:wxPG_EDITABLE_VALUE);
+
+    int flags = 0;
+    if ( (property->GetFlags() & wxPG_PROP_PASSWORD) &&
+         property->IsKindOf(CLASSINFO(wxStringProperty)) )
+        flags |= wxTE_PASSWORD;
+
+    wxWindow* wnd = propGrid->GenerateEditorTextCtrl(pos,sz,text,(wxWindow*)NULL,flags,
+                                                     property->GetMaxLength());
+
+    return wnd;
+}
+
+#if 0
+void wxPGTextCtrlEditor::DrawValue( wxDC& dc, wxPGProperty* property, const wxRect& rect ) const
+{
+    if ( !property->IsValueUnspecified() )
+    {
+        wxString drawStr = property->GetDisplayedString();
+
+        // Code below should no longer be needed, as the obfuscation
+        // is now done in GetValueAsString.
+        /*if ( (property->GetFlags() & wxPG_PROP_PASSWORD) &&
+             property->IsKindOf(WX_PG_CLASSINFO(wxStringProperty)) )
+        {
+            size_t a = drawStr.length();
+            drawStr.Empty();
+            drawStr.Append(wxS('*'),a);
+        }*/
+        dc.DrawText( drawStr, rect.x+wxPG_XBEFORETEXT, rect.y );
+    }
+}
+#endif
+
+void wxPGTextCtrlEditor::UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const
+{
+    wxTextCtrl* tc = wxStaticCast(ctrl, wxTextCtrl);
+
+    wxString s;
+
+    if ( tc->HasFlag(wxTE_PASSWORD) )
+        s = property->GetValueAsString(wxPG_FULL_VALUE);
+    else
+        s = property->GetDisplayedString();
+
+    tc->SetValue(s);    
+}
+
+
+// Provided so that, for example, ComboBox editor can use the same code
+// (multiple inheritance would get way too messy).
+bool wxPGTextCtrlEditor::OnTextCtrlEvent( wxPropertyGrid* propGrid,
+                                          wxPGProperty* WXUNUSED(property),
+                                          wxWindow* ctrl,
+                                          wxEvent& event )
+{
+    if ( !ctrl )
+        return false;
+
+    if ( event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER )
+    {
+        if ( propGrid->IsEditorsValueModified() )
+        {
+            return true;
+        }
+    }
+    else if ( event.GetEventType() == wxEVT_COMMAND_TEXT_UPDATED )
+    {
+        //
+        // Pass this event outside wxPropertyGrid so that,
+        // if necessary, program can tell when user is editing
+        // a textctrl.
+        // FIXME: Is it safe to change event id in the middle of event
+        //        processing (seems to work, but...)?
+        event.Skip();
+        event.SetId(propGrid->GetId());
+
+        propGrid->EditorsValueWasModified();
+    }
+    return false;
+}
+
+
+bool wxPGTextCtrlEditor::OnEvent( wxPropertyGrid* propGrid,
+                                  wxPGProperty* property,
+                                  wxWindow* ctrl,
+                                  wxEvent& event ) const
+{
+    return wxPGTextCtrlEditor::OnTextCtrlEvent(propGrid,property,ctrl,event);
+}
+
+
+bool wxPGTextCtrlEditor::GetTextCtrlValueFromControl( wxVariant& variant, wxPGProperty* property, wxWindow* ctrl )
+{
+    wxTextCtrl* tc = wxStaticCast(ctrl, wxTextCtrl);
+    wxString textVal = tc->GetValue();
+
+    if ( property->UsesAutoUnspecified() && !textVal.length() )
+    {
+        variant.MakeNull();
+        return true;
+    }
+
+    bool res = property->StringToValue(variant, textVal, wxPG_EDITABLE_VALUE);
+
+    // Changing unspecified always causes event (returning
+    // true here should be enough to trigger it).
+    // TODO: Move to propgrid.cpp
+    if ( !res && variant.IsNull() )
+        res = true;
+
+    return res;
+}
+
+
+bool wxPGTextCtrlEditor::GetValueFromControl( wxVariant& variant, wxPGProperty* property, wxWindow* ctrl ) const
+{
+    return wxPGTextCtrlEditor::GetTextCtrlValueFromControl(variant, property, ctrl);
+}
+
+
+void wxPGTextCtrlEditor::SetValueToUnspecified( wxPGProperty* property, wxWindow* ctrl ) const
+{
+    wxTextCtrl* tc = wxStaticCast(ctrl, wxTextCtrl);
+
+    wxPropertyGrid* pg = property->GetGrid();
+    wxASSERT(pg);  // Really, property grid should exist if editor does
+    if ( pg )
+        tc->SetValue(wxEmptyString);
+}
+
+
+void wxPGTextCtrlEditor::SetControlStringValue( wxPGProperty* property, wxWindow* ctrl, const wxString& txt ) const
+{
+    wxTextCtrl* tc = wxStaticCast(ctrl, wxTextCtrl);
+
+    wxPropertyGrid* pg = property->GetGrid();
+    wxASSERT(pg);  // Really, property grid should exist if editor does
+    if ( pg )
+        tc->SetValue(txt);
+}
+
+
+void wxPGTextCtrlEditor::OnFocus( wxPGProperty*, wxWindow* wnd ) const
+{
+    wxTextCtrl* tc = wxStaticCast(wnd, wxTextCtrl);
+
+    tc->SetSelection(-1,-1);
+}
+
+
+wxPGTextCtrlEditor::~wxPGTextCtrlEditor() { }
+
+
+// -----------------------------------------------------------------------
+// wxPGChoiceEditor
+// -----------------------------------------------------------------------
+
+
+WX_PG_IMPLEMENT_EDITOR_CLASS(Choice,wxPGChoiceEditor,wxPGEditor)
+
+
+// This is a special enhanced double-click processor class.
+// In essence, it allows for double-clicks for which the
+// first click "created" the control.
+class wxPGDoubleClickProcessor : public wxEvtHandler
+{
+public:
+
+    wxPGDoubleClickProcessor( wxOwnerDrawnComboBox* combo, wxPGProperty* property )
+        : wxEvtHandler()
+    {
+        m_timeLastMouseUp = 0;
+        m_combo = combo;
+        m_property = property;
+        m_downReceived = false;
+    }
+
+protected:
+
+    void OnMouseEvent( wxMouseEvent& event )
+    {
+        wxLongLong t = ::wxGetLocalTimeMillis();
+        int evtType = event.GetEventType();
+
+        if ( m_property->HasFlag(wxPG_PROP_USE_DCC) &&
+             m_property->IsKindOf(CLASSINFO(wxBoolProperty)) &&
+             !m_combo->IsPopupShown() )
+        {
+            // Just check that it is in the text area
+            wxPoint pt = event.GetPosition();
+            if ( m_combo->GetTextRect().Contains(pt) )
+            {
+                if ( evtType == wxEVT_LEFT_DOWN )
+                {
+                    // Set value to avoid up-events without corresponding downs
+                    m_downReceived = true;
+                }
+                else if ( evtType == wxEVT_LEFT_DCLICK )
+                {
+                    // We'll make our own double-clicks
+                    event.SetEventType(0);
+                    return;
+                }
+                else if ( evtType == wxEVT_LEFT_UP )
+                {
+                    if ( m_downReceived || m_timeLastMouseUp == 1 )
+                    {
+                        wxLongLong timeFromLastUp = (t-m_timeLastMouseUp);
+
+                        if ( timeFromLastUp < DOUBLE_CLICK_CONVERSION_TRESHOLD )
+                        {
+                            event.SetEventType(wxEVT_LEFT_DCLICK);
+                            m_timeLastMouseUp = 1;
+                        }
+                        else
+                        {
+                            m_timeLastMouseUp = t;
+                        }
+                    }
+                }
+            }
+        }
+
+        event.Skip();
+    }
+
+    void OnSetFocus( wxFocusEvent& event )
+    {
+        m_timeLastMouseUp = ::wxGetLocalTimeMillis();
+        event.Skip();
+    }
+
+private:
+    wxLongLong                  m_timeLastMouseUp;
+    wxOwnerDrawnComboBox*       m_combo;
+    wxPGProperty*               m_property;  // Selected property
+    bool                        m_downReceived;
+
+    DECLARE_EVENT_TABLE()
+};
+
+BEGIN_EVENT_TABLE(wxPGDoubleClickProcessor, wxEvtHandler)
+    EVT_MOUSE_EVENTS(wxPGDoubleClickProcessor::OnMouseEvent)
+    EVT_SET_FOCUS(wxPGDoubleClickProcessor::OnSetFocus)
+END_EVENT_TABLE()
+
+
+
+class wxPGComboBox : public wxOwnerDrawnComboBox
+{
+public:
+
+    wxPGComboBox()
+        : wxOwnerDrawnComboBox()
+    {
+        m_dclickProcessor = (wxPGDoubleClickProcessor*) NULL;
+        m_sizeEventCalled = false;
+    }
+
+    ~wxPGComboBox()
+    {
+        if ( m_dclickProcessor )
+        {
+            RemoveEventHandler(m_dclickProcessor);
+            delete m_dclickProcessor;
+        }
+    }
+
+    bool Create(wxWindow *parent,
+                wxWindowID id,
+                const wxString& value,
+                const wxPoint& pos,
+                const wxSize& size,
+                const wxArrayString& choices,
+                long style = 0,
+                const wxValidator& validator = wxDefaultValidator,
+                const wxString& name = wxS("wxOwnerDrawnComboBox"))
+    {
+        if ( !wxOwnerDrawnComboBox::Create( parent,
+                                            id,
+                                            value,
+                                            pos,
+                                            size,
+                                            choices,
+                                            style,
+                                            validator,
+                                            name ) )
+            return false;
+
+        m_dclickProcessor = new wxPGDoubleClickProcessor(this, GetGrid()->GetSelection() );
+
+        PushEventHandler(m_dclickProcessor);
+
+        return true;
+    }
+
+    virtual void OnDrawItem( wxDC& dc, const wxRect& rect, int item, int flags ) const
+    {
+        wxPropertyGrid* pg = GetGrid();
+        pg->OnComboItemPaint((wxPGCustomComboControl*)this,item,dc,(wxRect&)rect,flags);
+    }
+    virtual wxCoord OnMeasureItem( size_t item ) const
+    {
+        wxPropertyGrid* pg = GetGrid();
+        wxRect rect;
+        rect.x = -1;
+        rect.width = 0;
+        pg->OnComboItemPaint((wxPGCustomComboControl*)this,item,*((wxDC*)NULL),rect,0);
+        return rect.height;
+    }
+
+    wxPropertyGrid* GetGrid() const
+    {
+        wxPropertyGrid* pg = wxDynamicCast(GetParent()->GetParent(),wxPropertyGrid);
+        wxASSERT(pg);
+        return pg;
+    }
+
+    virtual wxCoord OnMeasureItemWidth( size_t item ) const
+    {
+        wxPropertyGrid* pg = GetGrid();
+        wxRect rect;
+        rect.x = -1;
+        rect.width = -1;
+        pg->OnComboItemPaint((wxPGCustomComboControl*)this,item,*((wxDC*)NULL),rect,0);
+        return rect.width;
+    }
+
+    virtual void PositionTextCtrl( int WXUNUSED(textCtrlXAdjust), int WXUNUSED(textCtrlYAdjust) )
+    {
+        wxPropertyGrid* pg = GetGrid();
+        wxOwnerDrawnComboBox::PositionTextCtrl(
+            wxPG_TEXTCTRLXADJUST - (wxPG_XBEFOREWIDGET+wxPG_CONTROL_MARGIN+1) - 1,
+            pg->GetSpacingY() + 2
+        );
+    }
+
+private:
+    wxPGDoubleClickProcessor*   m_dclickProcessor;
+    bool                        m_sizeEventCalled;
+};
+
+
+void wxPropertyGrid::OnComboItemPaint( wxPGCustomComboControl* pCc,
+                                       int item,
+                                       wxDC& dc,
+                                       wxRect& rect,
+                                       int flags )
+{
+    wxPGComboBox* pCb = (wxPGComboBox*)pCc;
+
+    // Sanity check
+    wxASSERT( IsKindOf(CLASSINFO(wxPropertyGrid)) );
+
+    wxPGProperty* p = m_selected;
+    wxString text;
+
+    const wxPGChoices* pChoices = &p->GetChoices();
+    const wxPGCommonValue* comVal = NULL;
+    int choiceCount = p->GetChoiceCount();
+    int comVals = p->GetDisplayedCommonValueCount();
+    int comValIndex = -1;
+    if ( item >= choiceCount && comVals > 0 )
+    {
+        comValIndex = item - choiceCount;
+        comVal = GetCommonValue(comValIndex);
+        if ( !p->IsValueUnspecified() )
+            text = comVal->GetLabel();
+    }
+    else
+    {
+        if ( !(flags & wxODCB_PAINTING_CONTROL) )
+        {
+            text = pCb->GetString(item);
+        }
+        else
+        {
+            if ( !p->IsValueUnspecified() )
+                text = p->GetValueString(0);
+        }
+    }
+
+    if ( item < 0 )
+        return;
+
+    wxSize cis;
+
+    const wxBitmap* itemBitmap = NULL;
+
+    if ( item >= 0 && pChoices && pChoices->Item(item).GetBitmap().Ok() && comValIndex == -1 )
+        itemBitmap = &pChoices->Item(item).GetBitmap();
+
+    //
+    // Decide what custom image size to use
+    if ( itemBitmap )
+    {
+        cis.x = itemBitmap->GetWidth();
+        cis.y = itemBitmap->GetHeight();
+    }
+    else
+    {
+        cis = GetImageSize(p, item);
+    }
+
+    if ( rect.x < 0 )
+    {
+        // Default measure behaviour (no flexible, custom paint image only)
+        if ( rect.width < 0 )
+        {
+            wxCoord x, y;
+            GetTextExtent(text, &x, &y, 0, 0, &m_font);
+            rect.width = cis.x + wxCC_CUSTOM_IMAGE_MARGIN1 + wxCC_CUSTOM_IMAGE_MARGIN2 + 9 + x;
+        }
+
+        rect.height = cis.y + 2;
+        return;
+    }
+
+    wxPGPaintData paintdata;
+    paintdata.m_parent = NULL;
+    paintdata.m_choiceItem = item;
+
+    // This is by the current (1.0.0b) spec - if painting control, item is -1
+    if ( (flags & wxODCB_PAINTING_CONTROL) )
+        paintdata.m_choiceItem = -1;
+
+    if ( &dc )
+        dc.SetBrush(*wxWHITE_BRUSH);
+
+    if ( rect.x >= 0 )
+    {
+        //
+        // DrawItem call
+
+        wxPoint pt(rect.x + wxPG_CONTROL_MARGIN - wxPG_CHOICEXADJUST - 1,
+                   rect.y + 1);
+
+        int renderFlags = 0;
+
+        if ( flags & wxODCB_PAINTING_CONTROL )
+            renderFlags |= wxPGCellRenderer::Control;
+
+        if ( flags & wxODCB_PAINTING_SELECTED )
+            renderFlags |= wxPGCellRenderer::Selected;
+
+        if ( cis.x > 0 && (p->HasFlag(wxPG_PROP_CUSTOMIMAGE) || !(flags & wxODCB_PAINTING_CONTROL)) &&
+             ( !p->m_valueBitmap || item == pCb->GetSelection() ) &&
+             ( item >= 0 || (flags & wxODCB_PAINTING_CONTROL) ) &&
+             !itemBitmap
+           )
+        {
+            pt.x += wxCC_CUSTOM_IMAGE_MARGIN1;
+            wxRect r(pt.x,pt.y,cis.x,cis.y);
+
+            if ( flags & wxODCB_PAINTING_CONTROL )
+            {
+                //r.width = cis.x;
+                r.height = wxPG_STD_CUST_IMAGE_HEIGHT(m_lineHeight);
+            }
+
+            paintdata.m_drawnWidth = r.width;
+
+            dc.SetPen(m_colPropFore);
+            if ( comValIndex >= 0 )
+            {
+                const wxPGCommonValue* cv = GetCommonValue(comValIndex);
+                wxPGCellRenderer* renderer = cv->GetRenderer();
+                r.width = rect.width;
+                renderer->Render( dc, r, this, p, m_selColumn, comValIndex, renderFlags );
+                return;
+            }
+            else if ( item >= 0 )
+            {
+                p->OnCustomPaint( dc, r, paintdata );
+            }
+            else
+            {
+                dc.DrawRectangle( r );
+            }
+
+            pt.x += paintdata.m_drawnWidth + wxCC_CUSTOM_IMAGE_MARGIN2 - 1;
+        }
+        else
+        {
+            // TODO: This aligns text so that it seems to be horizontally
+            //       on the same line as property values. Not really
+            //       sure if its needed, but seems to not cause any harm.
+            pt.x -= 1;
+
+            if ( item < 0 && (flags & wxODCB_PAINTING_CONTROL) )
+                item = pCb->GetSelection();
+
+            if ( pChoices && item >= 0 && comValIndex < 0 )
+            {
+                const wxPGChoiceEntry& cell = pChoices->Item(item);
+                wxPGCellRenderer* renderer = wxPGGlobalVars->m_defaultRenderer;
+                int imageOffset = renderer->PreDrawCell( dc, rect, cell, renderFlags );
+                if ( imageOffset )
+                    imageOffset += wxCC_CUSTOM_IMAGE_MARGIN1 + wxCC_CUSTOM_IMAGE_MARGIN2;
+                pt.x += imageOffset;
+            }
+        }
+
+        //
+        // Draw text
+        //
+
+        pt.y += (rect.height-m_fontHeight)/2 - 1;
+
+        pt.x += 1;
+
+        dc.DrawText( text, pt.x + wxPG_XBEFORETEXT, pt.y );
+    }
+    else
+    {
+        //
+        // MeasureItem call
+
+        p->OnCustomPaint( dc, rect, paintdata );
+        rect.height = paintdata.m_drawnHeight + 2;
+        rect.width = cis.x + wxCC_CUSTOM_IMAGE_MARGIN1 + wxCC_CUSTOM_IMAGE_MARGIN2 + 9;
+    }
+}
+
+bool wxPGChoiceEditor_SetCustomPaintWidth( wxPropertyGrid* propGrid, wxPGComboBox* cb, int cmnVal )
+{
+    wxPGProperty* property = propGrid->GetSelectedProperty();
+    wxASSERT( property );
+
+    if ( cmnVal >= 0 )
+    {
+        // Yes, a common value is being selected
+        property->SetCommonValue( cmnVal );
+        wxSize imageSize = propGrid->GetCommonValue(cmnVal)->
+                            GetRenderer()->GetImageSize(property, 1, cmnVal);
+        if ( imageSize.x ) imageSize.x += ODCB_CUST_PAINT_MARGIN;
+        cb->SetCustomPaintWidth( imageSize.x );
+        return false;
+    }
+    else
+    {
+        wxSize imageSize = propGrid->GetImageSize(property, -1);
+        if ( imageSize.x ) imageSize.x += ODCB_CUST_PAINT_MARGIN;
+        cb->SetCustomPaintWidth( imageSize.x );
+        return true;
+    }
+}
+
+// CreateControls calls this with CB_READONLY in extraStyle
+wxWindow* wxPGChoiceEditor::CreateControlsBase( wxPropertyGrid* propGrid,
+                                                wxPGProperty* property,
+                                                const wxPoint& pos,
+                                                const wxSize& sz,
+                                                long extraStyle ) const
+{
+    wxString        defString;
+
+    // Get choices.
+    int index = property->GetChoiceInfo( NULL );
+
+    bool isUnspecified = property->IsValueUnspecified();
+
+    if ( isUnspecified )
+        index = -1;
+    else
+        defString = property->GetDisplayedString();
+
+    const wxPGChoices& choices = property->GetChoices();
+
+    wxArrayString labels = choices.GetLabels();
+
+    wxPGComboBox* cb;
+
+    wxPoint po(pos);
+    wxSize si(sz);
+    po.y += wxPG_CHOICEYADJUST;
+    si.y -= (wxPG_CHOICEYADJUST*2);
+
+    po.x += wxPG_CHOICEXADJUST;
+    si.x -= wxPG_CHOICEXADJUST;
+    wxWindow* ctrlParent = propGrid->GetPanel();
+
+    int odcbFlags = extraStyle | wxNO_BORDER | wxTE_PROCESS_ENTER;
+
+    //
+    // If common value specified, use appropriate index
+    unsigned int cmnVals = property->GetDisplayedCommonValueCount();
+    if ( cmnVals )
+    {
+        if ( !isUnspecified )
+        {
+            int cmnVal = property->GetCommonValue();
+            if ( cmnVal >= 0 )
+            {
+                index = labels.size() + cmnVal;
+            }
+        }
+
+        unsigned int i;
+        for ( i=0; i<cmnVals; i++ )
+            labels.Add(propGrid->GetCommonValueLabel(i));
+    }
+
+    cb = new wxPGComboBox();
+#ifdef __WXMSW__
+    cb->Hide();
+#endif
+    cb->Create(ctrlParent,
+               wxPG_SUBID1,
+               wxString(),
+               po,
+               si,
+               labels,
+               odcbFlags);
+
+    //int extRight = propGrid->GetClientSize().x - (po.x+si.x);
+    //int extRight =  - (po.x+si.x);
+
+    cb->SetButtonPosition(si.y,0,wxRIGHT);
+    //cb->SetPopupExtents( 1, extRight );
+    cb->SetTextIndent(wxPG_XBEFORETEXT-1);
+
+    wxPGChoiceEditor_SetCustomPaintWidth( propGrid, cb, property->GetCommonValue() );
+    /*if ( property->GetFlags() & wxPG_PROP_CUSTOMIMAGE )
+    {
+        wxSize imageSize = propGrid->GetImageSize(property, index);
+        if ( imageSize.x ) imageSize.x += ODCB_CUST_PAINT_MARGIN;
+        cb->SetCustomPaintWidth( imageSize.x );
+    }*/
+
+    if ( index >= 0 && index < (int)cb->GetCount() )
+    {
+        cb->SetSelection( index );
+        if ( defString.length() )
+            cb->SetText( defString );
+    }
+    else if ( !(extraStyle & wxCB_READONLY) && defString.length() )
+        cb->SetValue( defString );
+    else
+        cb->SetSelection( -1 );
+
+#ifdef __WXMSW__
+    cb->Show();
+#endif
+
+    return (wxWindow*) cb;
+}
+
+
+void wxPGChoiceEditor::UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const
+{
+    wxASSERT( ctrl );
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    wxASSERT( cb->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)));
+    int ind = property->GetChoiceInfo( (wxPGChoiceInfo*)NULL );
+    cb->SetSelection(ind);
+}
+
+wxPGWindowList wxPGChoiceEditor::CreateControls( wxPropertyGrid* propGrid, wxPGProperty* property,
+        const wxPoint& pos, const wxSize& sz ) const
+{
+    return CreateControlsBase(propGrid,property,pos,sz,wxCB_READONLY);
+}
+
+
+int wxPGChoiceEditor::InsertItem( wxWindow* ctrl, const wxString& label, int index ) const
+{
+    wxASSERT( ctrl );
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    wxASSERT( cb->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)));
+
+    if (index < 0)
+        index = cb->GetCount();
+
+    return cb->Insert(label,index);
+}
+
+
+void wxPGChoiceEditor::DeleteItem( wxWindow* ctrl, int index ) const
+{
+    wxASSERT( ctrl );
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    wxASSERT( cb->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)));
+
+    cb->Delete(index);
+}
+
+bool wxPGChoiceEditor::OnEvent( wxPropertyGrid* propGrid, wxPGProperty* property,
+    wxWindow* ctrl, wxEvent& event ) const
+{
+    if ( event.GetEventType() == wxEVT_COMMAND_COMBOBOX_SELECTED )
+    {
+        wxPGComboBox* cb = (wxPGComboBox*)ctrl;
+        int index = cb->GetSelection();
+        int cmnValIndex = -1;
+        int cmnVals = property->GetDisplayedCommonValueCount();
+        int items = cb->GetCount();
+
+        if ( index >= (items-cmnVals) )
+        {
+            // Yes, a common value is being selected
+            cmnValIndex = index - (items-cmnVals);
+            property->SetCommonValue( cmnValIndex );
+
+            // Truly set value to unspecified?
+            if ( propGrid->GetUnspecifiedCommonValue() == cmnValIndex )
+            {
+                if ( !property->IsValueUnspecified() )
+                    propGrid->SetInternalFlag(wxPG_FL_VALUE_CHANGE_IN_EVENT);
+                property->SetValueToUnspecified();
+                if ( !cb->HasFlag(wxCB_READONLY) )
+                    cb->GetTextCtrl()->SetValue(wxEmptyString);
+                return false;
+            }
+        }
+        return wxPGChoiceEditor_SetCustomPaintWidth( propGrid, cb, cmnValIndex );        
+    }
+    return false;
+}
+
+
+bool wxPGChoiceEditor::GetValueFromControl( wxVariant& variant, wxPGProperty* property, wxWindow* ctrl ) const
+{
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+
+    int index = cb->GetSelection();
+
+    if ( index != property->GetChoiceInfo( (wxPGChoiceInfo*) NULL ) ||
+        // Changing unspecified always causes event (returning
+        // true here should be enough to trigger it).
+         property->IsValueUnspecified()
+       )
+    {
+        return property->IntToValue( variant, index, 0 );
+    }
+    return false;
+}
+
+
+void wxPGChoiceEditor::SetControlStringValue( wxPGProperty* WXUNUSED(property), wxWindow* ctrl, const wxString& txt ) const
+{
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    wxASSERT( cb );
+    cb->SetValue(txt);
+}
+
+
+void wxPGChoiceEditor::SetControlIntValue( wxPGProperty* WXUNUSED(property), wxWindow* ctrl, int value ) const
+{
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    wxASSERT( cb );
+    cb->SetSelection(value);
+}
+
+
+void wxPGChoiceEditor::SetValueToUnspecified( wxPGProperty* WXUNUSED(property), wxWindow* ctrl ) const
+{
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    cb->SetSelection(-1);
+}
+
+
+bool wxPGChoiceEditor::CanContainCustomImage() const
+{
+    return true;
+}
+
+
+wxPGChoiceEditor::~wxPGChoiceEditor() { }
+
+
+// -----------------------------------------------------------------------
+// wxPGComboBoxEditor
+// -----------------------------------------------------------------------
+
+
+WX_PG_IMPLEMENT_EDITOR_CLASS(ComboBox,wxPGComboBoxEditor,wxPGChoiceEditor)
+
+
+void wxPGComboBoxEditor::UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const
+{
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    cb->SetValue(property->GetValueString(wxPG_EDITABLE_VALUE));
+
+    // TODO: If string matches any selection, then select that.
+}
+
+
+wxPGWindowList wxPGComboBoxEditor::CreateControls( wxPropertyGrid* propGrid,
+                                                   wxPGProperty* property,
+                                                   const wxPoint& pos,
+                                                   const wxSize& sz ) const
+{
+    return CreateControlsBase(propGrid,property,pos,sz,0);
+}
+
+
+bool wxPGComboBoxEditor::OnEvent( wxPropertyGrid* propGrid,
+                                  wxPGProperty* property,
+                                  wxWindow* ctrl,
+                                  wxEvent& event ) const
+{
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*) NULL;
+    wxWindow* textCtrl = (wxWindow*) NULL;
+
+    if ( ctrl )
+    {
+        cb = (wxOwnerDrawnComboBox*)ctrl;
+        textCtrl = cb->GetTextCtrl();
+    }
+
+    if ( wxPGTextCtrlEditor::OnTextCtrlEvent(propGrid,property,textCtrl,event) )
+        return true;
+
+    return wxPGChoiceEditor::OnEvent(propGrid,property,ctrl,event);
+}
+
+
+bool wxPGComboBoxEditor::GetValueFromControl( wxVariant& variant, wxPGProperty* property, wxWindow* ctrl ) const
+{
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    wxString textVal = cb->GetValue();
+
+    if ( property->UsesAutoUnspecified() && !textVal.length() )
+    {
+        variant.MakeNull();
+        return true;
+    }
+
+    bool res = property->StringToValue(variant, textVal, wxPG_EDITABLE_VALUE);
+
+    // Changing unspecified always causes event (returning
+    // true here should be enough to trigger it).
+    if ( !res && variant.IsNull() )
+        res = true;
+
+    return res;
+}
+
+
+void wxPGComboBoxEditor::OnFocus( wxPGProperty*, wxWindow* ctrl ) const
+{
+    wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl;
+    cb->GetTextCtrl()->SetSelection(-1,-1);
+}
+
+
+wxPGComboBoxEditor::~wxPGComboBoxEditor() { }
+
+
+// -----------------------------------------------------------------------
+// wxPGChoiceAndButtonEditor
+// -----------------------------------------------------------------------
+
+
+// This simpler implement_editor macro doesn't define class body.
+WX_PG_IMPLEMENT_EDITOR_CLASS(ChoiceAndButton,wxPGChoiceAndButtonEditor,wxPGChoiceEditor)
+
+
+wxPGWindowList wxPGChoiceAndButtonEditor::CreateControls( wxPropertyGrid* propGrid,
+                                                          wxPGProperty* property,
+                                                          const wxPoint& pos,
+                                                          const wxSize& sz ) const
+{
+    // Use one two units smaller to match size of the combo's dropbutton.
+    // (normally a bigger button is used because it looks better)
+    int bt_wid = sz.y;
+    bt_wid -= 2;
+    wxSize bt_sz(bt_wid,bt_wid);
+
+    // Position of button.
+    wxPoint bt_pos(pos.x+sz.x-bt_sz.x,pos.y);
+#ifdef __WXMAC__
+    bt_pos.y -= 1;
+#else
+    bt_pos.y += 1;
+#endif
+
+    wxWindow* bt = propGrid->GenerateEditorButton( bt_pos, bt_sz );
+
+    // Size of choice.
+    wxSize ch_sz(sz.x-bt->GetSize().x,sz.y);
+
+#ifdef __WXMAC__
+    ch_sz.x -= wxPG_TEXTCTRL_AND_BUTTON_SPACING;
+#endif
+
+    wxWindow* ch = wxPG_EDITOR(Choice)->CreateControls(propGrid,property,
+        pos,ch_sz).m_primary;
+
+#ifdef __WXMSW__
+    bt->Show();
+#endif
+
+    return wxPGWindowList(ch, bt);
+}
+
+
+wxPGChoiceAndButtonEditor::~wxPGChoiceAndButtonEditor() { }
+
+
+// -----------------------------------------------------------------------
+// wxPGTextCtrlAndButtonEditor
+// -----------------------------------------------------------------------
+
+
+// This simpler implement_editor macro doesn't define class body.
+WX_PG_IMPLEMENT_EDITOR_CLASS(TextCtrlAndButton,wxPGTextCtrlAndButtonEditor,wxPGTextCtrlEditor)
+
+
+wxPGWindowList wxPGTextCtrlAndButtonEditor::CreateControls( wxPropertyGrid* propGrid,
+                                                            wxPGProperty* property,
+                                                            const wxPoint& pos,
+                                                            const wxSize& sz ) const
+{
+    wxWindow* wnd2;
+    wxWindow* wnd = propGrid->GenerateEditorTextCtrlAndButton( pos, sz, &wnd2,
+        property->GetFlags() & wxPG_PROP_NOEDITOR, property);
+
+    return wxPGWindowList(wnd, wnd2);
+}
+
+
+wxPGTextCtrlAndButtonEditor::~wxPGTextCtrlAndButtonEditor() { }
+
+
+// -----------------------------------------------------------------------
+// wxPGCheckBoxEditor
+// -----------------------------------------------------------------------
+
+#if wxPG_INCLUDE_CHECKBOX
+
+WX_PG_IMPLEMENT_EDITOR_CLASS(CheckBox,wxPGCheckBoxEditor,wxPGEditor)
+
+
+// state argument: 0x01 = set if checked
+//                 0x02 = set if rectangle should be bold
+static void DrawSimpleCheckBox( wxDC& dc, const wxRect& rect, int box_hei, int state, const wxColour& linecol )
+{
+
+    // Box rectangle.
+    wxRect r(rect.x+wxPG_XBEFORETEXT,rect.y+((rect.height-box_hei)/2),box_hei,box_hei);
+
+    // Draw check mark first because it is likely to overdraw the
+    // surrounding rectangle.
+    if ( state & 1 )
+    {
+        wxRect r2(r.x+wxPG_CHECKMARK_XADJ,
+                  r.y+wxPG_CHECKMARK_YADJ,
+                  r.width+wxPG_CHECKMARK_WADJ,
+                  r.height+wxPG_CHECKMARK_HADJ);
+    #if wxPG_CHECKMARK_DEFLATE
+        r2.Deflate(wxPG_CHECKMARK_DEFLATE);
+    #endif
+        dc.DrawCheckMark(r2);
+
+        // This would draw a simple cross check mark.
+        // dc.DrawLine(r.x,r.y,r.x+r.width-1,r.y+r.height-1);
+        // dc.DrawLine(r.x,r.y+r.height-1,r.x+r.width-1,r.y);
+
+    }
+
+    if ( !(state & 2) )
+    {
+        // Pen for thin rectangle.
+        dc.SetPen(linecol);
+    }
+    else
+    {
+        // Pen for bold rectangle.
+        wxPen linepen(linecol,2,wxSOLID);
+        linepen.SetJoin(wxJOIN_MITER); // This prevents round edges.
+        dc.SetPen(linepen);
+        r.x++;
+        r.y++;
+        r.width--;
+        r.height--;
+    }
+
+    dc.SetBrush(*wxTRANSPARENT_BRUSH);
+
+    dc.DrawRectangle(r);
+    dc.SetPen(*wxTRANSPARENT_PEN);
+}
+
+//
+// Real simple custom-drawn checkbox-without-label class.
+//
+class wxSimpleCheckBox : public wxControl
+{
+public:
+
+    void SetValue( int value );
+
+    wxSimpleCheckBox( wxWindow* parent,
+                      wxWindowID id,
+                      const wxPoint& pos = wxDefaultPosition,
+                      const wxSize& size = wxDefaultSize )
+        : wxControl(parent,id,pos,size,wxNO_BORDER|wxWANTS_CHARS)
+    {
+        // Due to SetOwnFont stuff necessary for GTK+ 1.2, we need to have this
+        SetFont( parent->GetFont() );
+
+        m_state = 0;
+        wxPropertyGrid* pg = (wxPropertyGrid*) parent->GetParent();
+        wxASSERT( pg->IsKindOf(CLASSINFO(wxPropertyGrid)) );
+        m_boxHeight = pg->GetFontHeight();
+        SetBackgroundStyle( wxBG_STYLE_COLOUR );
+    }
+
+    virtual ~wxSimpleCheckBox();
+
+    virtual bool ProcessEvent(wxEvent& event);
+
+    int m_state;
+    int m_boxHeight;
+
+    static wxBitmap* ms_doubleBuffer;
+
+};
+
+wxSimpleCheckBox::~wxSimpleCheckBox()
+{
+    delete ms_doubleBuffer;
+    ms_doubleBuffer = NULL;
+}
+
+
+wxBitmap* wxSimpleCheckBox::ms_doubleBuffer = (wxBitmap*) NULL;
+
+// value = 2 means toggle (sorry, too lazy to do constants)
+void wxSimpleCheckBox::SetValue( int value )
+{
+    if ( value > 1 )
+    {
+        m_state++;
+        if ( m_state > 1 ) m_state = 0;
+    }
+    else
+    {
+        m_state = value;
+    }
+    Refresh();
+
+    wxCommandEvent evt(wxEVT_COMMAND_CHECKBOX_CLICKED,GetParent()->GetId());
+
+    wxPropertyGrid* propGrid = (wxPropertyGrid*) GetParent()->GetParent();
+    wxASSERT( propGrid->IsKindOf(CLASSINFO(wxPropertyGrid)) );
+    propGrid->OnCustomEditorEvent(evt);
+}
+
+
+bool wxSimpleCheckBox::ProcessEvent(wxEvent& event)
+{
+    wxPropertyGrid* propGrid = (wxPropertyGrid*) GetParent()->GetParent();
+    wxASSERT( propGrid->IsKindOf(CLASSINFO(wxPropertyGrid)) );
+
+    if ( event.GetEventType() == wxEVT_NAVIGATION_KEY )
+    {
+        //wxLogDebug(wxT("wxEVT_NAVIGATION_KEY"));
+        //SetFocusFromKbd();
+        //event.Skip();
+        //return wxControl::ProcessEvent(event);
+    }
+    else
+    if ( ( (event.GetEventType() == wxEVT_LEFT_DOWN || event.GetEventType() == wxEVT_LEFT_DCLICK)
+          && ((wxMouseEvent&)event).m_x > (wxPG_XBEFORETEXT-2)
+          && ((wxMouseEvent&)event).m_x <= (wxPG_XBEFORETEXT-2+m_boxHeight) )
+       )
+    {
+        SetValue(2);
+        return true;
+    }
+    else if ( event.GetEventType() == wxEVT_PAINT )
+    {
+        wxSize clientSize = GetClientSize();
+        wxPaintDC dc(this);
+
+        /*
+        // Buffered paint DC doesn't seem to do much good
+        if ( !ms_doubleBuffer ||
+             clientSize.x > ms_doubleBuffer->GetWidth() ||
+             clientSize.y > ms_doubleBuffer->GetHeight() )
+        {
+            delete ms_doubleBuffer;
+            ms_doubleBuffer = new wxBitmap(clientSize.x+25,clientSize.y+25);
+        }
+
+        wxBufferedPaintDC dc(this,*ms_doubleBuffer);
+        */
+
+        wxRect rect(0,0,clientSize.x,clientSize.y);
+        //rect.x -= 1;
+        rect.y += 1;
+        rect.width += 1;
+
+        m_boxHeight = propGrid->GetFontHeight();
+
+        wxColour bgcol = GetBackgroundColour();
+        dc.SetBrush( bgcol );
+        dc.SetPen( bgcol );
+        dc.DrawRectangle( rect );
+
+        wxColour txcol = GetForegroundColour();
+
+        int state = m_state;
+        if ( m_font.GetWeight() == wxBOLD )
+            state |= 2;
+
+        DrawSimpleCheckBox(dc,rect,m_boxHeight,state,txcol);
+
+        // If focused, indicate it somehow.
+        /*
+        if ( wxWindow::FindFocus() == this )
+        {
+            rect.x += 1;
+            rect.width -= 1;
+
+            wxPGDrawFocusRect(dc,rect);
+        }
+        */
+
+        return true;
+    }
+    else if ( event.GetEventType() == wxEVT_SIZE ||
+              event.GetEventType() == wxEVT_SET_FOCUS ||
+              event.GetEventType() == wxEVT_KILL_FOCUS
+            )
+    {
+        Refresh();
+    }
+    else if ( event.GetEventType() == wxEVT_KEY_DOWN )
+    {
+        wxKeyEvent& keyEv = (wxKeyEvent&) event;
+
+        if ( keyEv.GetKeyCode() == WXK_TAB )
+        {
+            propGrid->SendNavigationKeyEvent( keyEv.ShiftDown()?0:1 );
+            return true;
+        }
+        else
+        if ( keyEv.GetKeyCode() == WXK_SPACE )
+        {
+            SetValue(2);
+            return true;
+        }
+    }
+    return wxControl::ProcessEvent(event);
+}
+
+
+wxPGWindowList wxPGCheckBoxEditor::CreateControls( wxPropertyGrid* propGrid,
+                                                   wxPGProperty* property,
+                                                   const wxPoint& pos,
+                                                   const wxSize& size ) const
+{
+    wxPoint pt = pos;
+    pt.x -= wxPG_XBEFOREWIDGET;
+    wxSize sz = size;
+    sz.x = propGrid->GetFontHeight() + (wxPG_XBEFOREWIDGET*2) + 4;
+
+    wxSimpleCheckBox* cb = new wxSimpleCheckBox(propGrid->GetPanel(),wxPG_SUBID1,pt,sz);
+
+    cb->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
+
+    cb->Connect( wxPG_SUBID1, wxEVT_LEFT_DOWN,
+            (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
+            &wxPropertyGrid::OnCustomEditorEvent, NULL, propGrid );
+
+    cb->Connect( wxPG_SUBID1, wxEVT_LEFT_DCLICK,
+            (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
+            &wxPropertyGrid::OnCustomEditorEvent, NULL, propGrid );
+
+    if ( property->GetChoiceInfo((wxPGChoiceInfo*)NULL) &&
+         !property->IsValueUnspecified() )
+        cb->m_state = 1;
+
+    // If mouse cursor was on the item, toggle the value now.
+    if ( propGrid->GetInternalFlags() & wxPG_FL_ACTIVATION_BY_CLICK )
+    {
+        wxPoint pt = cb->ScreenToClient(::wxGetMousePosition());
+        if ( pt.x <= (wxPG_XBEFORETEXT-2+cb->m_boxHeight) )
+        {
+            cb->m_state++;
+
+            if ( cb->m_state > 1 )
+                cb->m_state = 0;
+
+            // Makes sure wxPG_EVT_CHANGING etc. is sent for this initial click 
+            propGrid->ChangePropertyValue(property, wxPGVariant_Bool(cb->m_state));
+        }
+    }
+
+    propGrid->SetInternalFlag( wxPG_FL_FIXED_WIDTH_EDITOR );
+
+    return cb;
+}
+
+/*
+class wxPGCheckBoxRenderer : public wxPGDefaultRenderer
+{
+public:
+
+    virtual void Render( wxDC& dc, const wxRect& rect,
+                         const wxPropertyGrid* WXUNUSED(propertyGrid), wxPGProperty* property,
+                         int WXUNUSED(column), int WXUNUSED(item), int WXUNUSED(flags) ) const
+    {
+        int state = 0;
+        if ( !(property->GetFlags() & wxPG_PROP_UNSPECIFIED) )
+        {
+            state = ((wxPGProperty*)property)->GetChoiceInfo((wxPGChoiceInfo*)NULL);
+            if ( dc.GetFont().GetWeight() == wxBOLD ) state |= 2;
+        }
+        DrawSimpleCheckBox(dc,rect,dc.GetCharHeight(),state,dc.GetTextForeground());
+    }
+
+protected:
+};
+
+wxPGCheckBoxRenderer g_wxPGCheckBoxRenderer;
+
+wxPGCellRenderer* wxPGCheckBoxEditor::GetCellRenderer() const
+{
+    return &g_wxPGCheckBoxRenderer;
+}
+*/
+
+void wxPGCheckBoxEditor::DrawValue( wxDC& dc, const wxRect& rect, wxPGProperty* property, const wxString& WXUNUSED(text) ) const
+{
+    int state = 0;
+    if ( !property->IsValueUnspecified() )
+    {
+        state = property->GetChoiceInfo((wxPGChoiceInfo*)NULL);
+        if ( dc.GetFont().GetWeight() == wxBOLD ) state |= 2;
+    }
+    DrawSimpleCheckBox(dc,rect,dc.GetCharHeight(),state,dc.GetTextForeground());
+}
+
+void wxPGCheckBoxEditor::UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const
+{
+    wxASSERT( ctrl );
+    ((wxSimpleCheckBox*)ctrl)->m_state = property->GetChoiceInfo((wxPGChoiceInfo*)NULL);
+    ctrl->Refresh();
+}
+
+
+bool wxPGCheckBoxEditor::OnEvent( wxPropertyGrid* WXUNUSED(propGrid), wxPGProperty* WXUNUSED(property),
+    wxWindow* WXUNUSED(ctrl), wxEvent& event ) const
+{
+    if ( event.GetEventType() == wxEVT_COMMAND_CHECKBOX_CLICKED )
+    {
+        return true;
+    }
+    return false;
+}
+
+
+bool wxPGCheckBoxEditor::GetValueFromControl( wxVariant& variant, wxPGProperty* property, wxWindow* ctrl ) const
+{
+    wxSimpleCheckBox* cb = (wxSimpleCheckBox*)ctrl;
+
+    int index = cb->m_state;
+
+    if ( index != property->GetChoiceInfo( (wxPGChoiceInfo*) NULL ) ||
+         // Changing unspecified always causes event (returning
+         // true here should be enough to trigger it).
+         property->IsValueUnspecified()
+       )
+    {
+        return property->IntToValue(variant, index, 0);
+    }
+    return false;
+}
+
+
+void wxPGCheckBoxEditor::SetControlIntValue( wxPGProperty* WXUNUSED(property), wxWindow* ctrl, int value ) const
+{
+    if ( value != 0 ) value = 1;
+    ((wxSimpleCheckBox*)ctrl)->m_state = value;
+    ctrl->Refresh();
+}
+
+
+void wxPGCheckBoxEditor::SetValueToUnspecified( wxPGProperty* WXUNUSED(property), wxWindow* ctrl ) const
+{
+    ((wxSimpleCheckBox*)ctrl)->m_state = 0;
+    ctrl->Refresh();
+}
+
+
+wxPGCheckBoxEditor::~wxPGCheckBoxEditor() { }
+
+
+#endif // wxPG_INCLUDE_CHECKBOX
+
+// -----------------------------------------------------------------------
+
+wxWindow* wxPropertyGrid::GetEditorControl() const
+{
+    wxWindow* ctrl = m_wndEditor;
+
+    if ( !ctrl )
+        return ctrl;
+
+    // If it's clipper window, return its child instead
+#if wxPG_ENABLE_CLIPPER_WINDOW
+    if ( ctrl->IsKindOf(CLASSINFO(wxPGClipperWindow)) )
+    {
+        return ((wxPGClipperWindow*)ctrl)->GetControl();
+    }
+#endif
+
+    return ctrl;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::CorrectEditorWidgetSizeX()
+{
+    if ( m_selColumn == -1 )
+        return;
+
+    int secWid = 0;
+    int newSplitterx = m_pState->DoGetSplitterPosition(m_selColumn-1);
+    int newWidth = newSplitterx + m_pState->m_colWidths[m_selColumn];
+
+    if ( m_wndEditor2 )
+    {
+        // if width change occurred, move secondary wnd by that amount
+        wxRect r = m_wndEditor2->GetRect();
+        secWid = r.width;
+        r.x = newWidth - secWid;
+
+        m_wndEditor2->SetSize( r );
+
+        // if primary is textctrl, then we have to add some extra space
+#ifdef __WXMAC__
+        if ( m_wndEditor )
+#else
+        if ( m_wndEditor && m_wndEditor->IsKindOf(CLASSINFO(wxTextCtrl)) )
+#endif
+            secWid += wxPG_TEXTCTRL_AND_BUTTON_SPACING;
+    }
+
+    if ( m_wndEditor )
+    {
+        wxRect r = m_wndEditor->GetRect();
+
+        r.x = newSplitterx+m_ctrlXAdjust;
+
+        if ( !(m_iFlags & wxPG_FL_FIXED_WIDTH_EDITOR) )
+            r.width = newWidth - r.x - secWid;
+
+        m_wndEditor->SetSize(r);
+    }
+
+    if ( m_wndEditor2 )
+        m_wndEditor2->Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::CorrectEditorWidgetPosY()
+{
+    if ( m_selected && (m_wndEditor || m_wndEditor2) ) 
+    {
+        wxRect r = GetEditorWidgetRect(m_selected, m_selColumn);
+
+        if ( m_wndEditor )
+        {
+            wxPoint pos = m_wndEditor->GetPosition();
+
+            // Calculate y offset
+            int offset = pos.y % m_lineHeight;
+
+            m_wndEditor->Move(pos.x, r.y + offset);
+        }
+
+        if ( m_wndEditor2 )
+        {
+            wxPoint pos = m_wndEditor2->GetPosition();
+
+            m_wndEditor2->Move(pos.x, r.y);
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::AdjustPosForClipperWindow( wxWindow* topCtrlWnd, int* x, int* y )
+{
+#if wxPG_ENABLE_CLIPPER_WINDOW
+    // Take clipper window into account
+    if (topCtrlWnd->GetPosition().x < 1 &&
+        !topCtrlWnd->IsKindOf(CLASSINFO(wxPGClipperWindow)))
+    {
+        topCtrlWnd = topCtrlWnd->GetParent();
+        wxASSERT( topCtrlWnd->IsKindOf(CLASSINFO(wxPGClipperWindow)) );
+        *x -= ((wxPGClipperWindow*)topCtrlWnd)->GetXClip();
+        *y -= ((wxPGClipperWindow*)topCtrlWnd)->GetYClip();
+        return true;
+    }
+#else
+    wxUnusedVar(topCtrlWnd);
+    wxUnusedVar(x);
+    wxUnusedVar(y);
+#endif
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+// Fixes position of wxTextCtrl-like control (wxSpinCtrl usually
+// fits into that category as well).
+void wxPropertyGrid::FixPosForTextCtrl( wxWindow* ctrl, const wxPoint& offset )
+{
+    // Center the control vertically
+    wxRect finalPos = ctrl->GetRect();
+    int y_adj = (m_lineHeight - finalPos.height)/2 + wxPG_TEXTCTRLYADJUST;
+
+    // Prevent over-sized control
+    int sz_dec = (y_adj + finalPos.height) - m_lineHeight;
+    if ( sz_dec < 0 ) sz_dec = 0;
+
+    finalPos.y += y_adj;
+    finalPos.height -= (y_adj+sz_dec);
+
+    const int textCtrlXAdjust = wxPG_TEXTCTRLXADJUST;
+
+    finalPos.x += textCtrlXAdjust;
+    finalPos.width -= textCtrlXAdjust;
+
+    finalPos.x += offset.x;
+    finalPos.y += offset.y;
+
+    ctrl->SetSize(finalPos);
+}
+
+// -----------------------------------------------------------------------
+
+wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos,
+                                                  const wxSize& sz,
+                                                  const wxString& value,
+                                                  wxWindow* secondary,
+                                                  int extraStyle,
+                                                  int maxLen )
+{
+    wxPGProperty* selected = m_selected;
+    wxASSERT(selected);
+
+    int tcFlags = wxTE_PROCESS_ENTER | extraStyle;
+
+    if ( selected->HasFlag(wxPG_PROP_READONLY) )
+        tcFlags |= wxTE_READONLY;
+
+    wxPoint p(pos.x,pos.y);
+    wxSize s(sz.x,sz.y);
+
+   // Need to reduce width of text control on Mac
+#if defined(__WXMAC__)
+   s.x -= 8;
+#endif
+
+     // Take button into acccount
+    if ( secondary )
+    {
+        s.x -= (secondary->GetSize().x + wxPG_TEXTCTRL_AND_BUTTON_SPACING);
+        m_iFlags &= ~(wxPG_FL_PRIMARY_FILLS_ENTIRE);
+    }
+
+    // If the height is significantly higher, then use border, and fill the rect exactly.
+    bool hasSpecialSize = false;
+
+    if ( (sz.y - m_lineHeight) > 5 )
+        hasSpecialSize = true;
+
+#if wxPG_NAT_TEXTCTRL_BORDER_ANY
+
+    // Create clipper window
+    wxPGClipperWindow* wnd = new wxPGClipperWindow();
+#if defined(__WXMSW__)
+    wnd->Hide();
+#endif
+    wnd->Create(GetPanel(),wxPG_SUBID1,p,s);
+
+    // This generates rect of the control inside the clipper window
+    if ( !hasSpecialSize )
+        wnd->GetControlRect(wxPG_NAT_TEXTCTRL_BORDER_X, wxPG_NAT_TEXTCTRL_BORDER_Y, p, s);
+    else
+        wnd->GetControlRect(0, 0, p, s);
+
+    wxWindow* ctrlParent = wnd;
+
+#else
+
+    wxWindow* ctrlParent = GetPanel();
+
+    if ( !hasSpecialSize )
+        tcFlags |= wxNO_BORDER;
+
+#endif
+
+    wxTextCtrl* tc = new wxTextCtrl();
+
+#if defined(__WXMSW__) && !wxPG_NAT_TEXTCTRL_BORDER_ANY
+    tc->Hide();
+#endif
+    SetupTextCtrlValue(value);
+    tc->Create(ctrlParent,wxPG_SUBID1,value, p, s,tcFlags);
+
+#if wxPG_NAT_TEXTCTRL_BORDER_ANY
+    wxWindow* ed = wnd;
+    wnd->SetControl(tc);
+#else
+    wxWindow* ed = tc;
+#endif
+
+    // Center the control vertically
+    if ( !hasSpecialSize )
+        FixPosForTextCtrl(ed);
+
+#ifdef __WXMSW__
+    ed->Show();
+    if ( secondary )
+        secondary->Show();
+#endif
+
+    // Set maximum length
+    if ( maxLen > 0 )
+        tc->SetMaxLength( maxLen );
+
+    return (wxWindow*) ed;
+}
+
+// -----------------------------------------------------------------------
+
+wxWindow* wxPropertyGrid::GenerateEditorButton( const wxPoint& pos, const wxSize& sz )
+{
+    wxPGProperty* selected = m_selected;
+    wxASSERT(selected);
+
+#ifdef __WXMAC__
+   // Decorations are chunky on Mac, and we can't make the button square, so
+   // do things a bit differently on this platform.
+
+   wxPoint p(pos.x+sz.x,
+             pos.y+wxPG_BUTTON_SIZEDEC-wxPG_NAT_BUTTON_BORDER_Y);
+   wxSize s(25, -1);
+
+   wxButton* but = new wxButton();
+   but->Create(GetPanel(),wxPG_SUBID2,wxS("..."),p,s,wxWANTS_CHARS);
+
+   // Now that we know the size, move to the correct position
+   p.x = pos.x + sz.x - but->GetSize().x - 2;
+   but->Move(p);
+
+#else 
+    wxSize s(sz.y-(wxPG_BUTTON_SIZEDEC*2)+(wxPG_NAT_BUTTON_BORDER_Y*2),
+        sz.y-(wxPG_BUTTON_SIZEDEC*2)+(wxPG_NAT_BUTTON_BORDER_Y*2));
+
+    // Reduce button width to lineheight
+    if ( s.x > m_lineHeight )
+        s.x = m_lineHeight;
+
+    wxPoint p(pos.x+sz.x-s.x,
+        pos.y+wxPG_BUTTON_SIZEDEC-wxPG_NAT_BUTTON_BORDER_Y);
+
+    wxButton* but = new wxButton();
+#ifdef __WXMSW__
+    but->Hide();
+#endif
+    but->Create(GetPanel(),wxPG_SUBID2,wxS("..."),p,s,wxWANTS_CHARS);
+
+    but->SetFont( m_captionFont );
+#endif
+
+    if ( selected->HasFlag(wxPG_PROP_READONLY) )
+        but->Disable();
+
+    return but;
+}
+
+// -----------------------------------------------------------------------
+
+wxWindow* wxPropertyGrid::GenerateEditorTextCtrlAndButton( const wxPoint& pos,
+                                                           const wxSize& sz,
+                                                           wxWindow** psecondary,
+                                                           int limitedEditing,
+                                                           wxPGProperty* property )
+{
+    wxButton* but = (wxButton*)GenerateEditorButton(pos,sz);
+    *psecondary = (wxWindow*)but;
+
+    if ( limitedEditing )
+    {
+    #ifdef __WXMSW__
+        // There is button Show in GenerateEditorTextCtrl as well
+        but->Show();
+    #endif
+        return (wxWindow*) NULL;
+    }
+
+    wxString text;
+
+    if ( !property->IsValueUnspecified() )
+        text = property->GetValueString(property->HasFlag(wxPG_PROP_READONLY)?0:wxPG_EDITABLE_VALUE);
+
+    return GenerateEditorTextCtrl(pos,sz,text,but,property->m_maxLen);
+}
+
+// -----------------------------------------------------------------------
+
+wxTextCtrl* wxPropertyGrid::GetEditorTextCtrl() const
+{
+    wxWindow* wnd = GetEditorControl();
+
+    if ( !wnd )
+        return NULL;
+
+    if ( wnd->IsKindOf(CLASSINFO(wxTextCtrl)) )
+        return wxStaticCast(wnd, wxTextCtrl);
+
+    if ( wnd->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)) )
+    {
+        wxOwnerDrawnComboBox* cb = wxStaticCast(wnd, wxOwnerDrawnComboBox);
+        return cb->GetTextCtrl();
+    }
+
+    return NULL;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGEditor* wxPropertyGridInterface::GetEditorByName( const wxString& editorName )
+{
+    wxPGHashMapS2P::const_iterator it;
+
+    it = wxPGGlobalVars->m_mapEditorClasses.find(editorName);
+    if ( it == wxPGGlobalVars->m_mapEditorClasses.end() )
+        return NULL;
+    return (wxPGEditor*) it->second;
+}
+
+// -----------------------------------------------------------------------
+// wxPGEditorDialogAdapter
+// -----------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxPGEditorDialogAdapter, wxObject)
+
+bool wxPGEditorDialogAdapter::ShowDialog( wxPropertyGrid* propGrid, wxPGProperty* property )
+{
+    if ( !propGrid->EditorValidate() )
+        return false;
+
+    bool res = DoShowDialog( propGrid, property );
+
+    if ( res )
+    {
+        propGrid->ValueChangeInEvent( m_value );
+        return true;
+    }
+
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxPGMultiButton
+// -----------------------------------------------------------------------
+
+wxPGMultiButton::wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz )
+    : wxWindow( pg->GetPanel(), wxPG_SUBID2, wxPoint(-100,-100), wxSize(0, sz.y) ),
+      m_fullEditorSize(sz), m_buttonsWidth(0)
+{
+    SetBackgroundColour(pg->GetCellBackgroundColour());
+}
+
+int wxPGMultiButton::GenId( int id ) const
+{
+    if ( id < -1 )
+    {
+        if ( m_buttons.size() )
+            id = GetButton(m_buttons.size()-1)->GetId() + 1;
+        else
+            id = wxPG_SUBID2;
+    }
+    return id;
+}
+
+#if wxUSE_BMPBUTTON
+void wxPGMultiButton::Add( const wxBitmap& bitmap, int id )
+{
+    id = GenId(id);
+    wxSize sz = GetSize();
+    wxButton* button = new wxBitmapButton( this, id, bitmap, wxPoint(sz.x, 0), wxSize(sz.y, sz.y) );
+    m_buttons.push_back(button);
+    int bw = button->GetSize().x;
+    SetSize(wxSize(sz.x+bw,sz.y));
+    m_buttonsWidth += bw;
+}
+#endif
+
+void wxPGMultiButton::Add( const wxString& label, int id )
+{
+    id = GenId(id);
+    wxSize sz = GetSize();
+    wxButton* button = new wxButton( this, id, label, wxPoint(sz.x, 0), wxSize(sz.y, sz.y) );
+    m_buttons.push_back(button);
+    int bw = button->GetSize().x;
+    SetSize(wxSize(sz.x+bw,sz.y));
+    m_buttonsWidth += bw;
+}
+
+// -----------------------------------------------------------------------
diff --git a/src/propgrid/manager.cpp b/src/propgrid/manager.cpp
new file mode 100644 (file)
index 0000000..6d7338d
--- /dev/null
@@ -0,0 +1,1692 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/propgrid/manager.cpp
+// Purpose:     wxPropertyGridManager
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2005-01-14
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/defs.h"
+    #include "wx/object.h"
+    #include "wx/hash.h"
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/event.h"
+    #include "wx/window.h"
+    #include "wx/panel.h"
+    #include "wx/dc.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/settings.h"
+    #include "wx/msgdlg.h"
+    #include "wx/choice.h"
+    #include "wx/textctrl.h"
+    #include "wx/dirdlg.h"
+    #include "wx/combobox.h"
+    #include "wx/layout.h"
+    #include "wx/sizer.h"
+    #include "wx/textdlg.h"
+    #include "wx/filedlg.h"
+    #include "wx/statusbr.h"
+    #include "wx/intl.h"
+#endif
+
+// This define is necessary to prevent macro clearing
+#define __wxPG_SOURCE_FILE__
+
+#include <wx/propgrid/propgrid.h>
+
+#include <wx/propgrid/manager.h>
+
+
+#define wxPG_MAN_ALTERNATE_BASE_ID          11249 // Needed for wxID_ANY madnesss
+
+
+// -----------------------------------------------------------------------
+
+// For wxMSW cursor consistency, we must do mouse capturing even
+// when using custom controls
+
+#define BEGIN_MOUSE_CAPTURE \
+    if ( !(m_iFlags & wxPG_FL_MOUSE_CAPTURED) ) \
+    { \
+        CaptureMouse(); \
+        m_iFlags |= wxPG_FL_MOUSE_CAPTURED; \
+    }
+
+#define END_MOUSE_CAPTURE \
+    if ( m_iFlags & wxPG_FL_MOUSE_CAPTURED ) \
+    { \
+        ReleaseMouse(); \
+        m_iFlags &= ~(wxPG_FL_MOUSE_CAPTURED); \
+    }
+
+// -----------------------------------------------------------------------
+// wxPropertyGridManager
+// -----------------------------------------------------------------------
+
+const wxChar *wxPropertyGridManagerNameStr = wxT("wxPropertyGridManager");
+
+
+// Categoric Mode Icon
+static const char* gs_xpm_catmode[] = {
+"16 16 5 1",
+". c none",
+"B c black",
+"D c #868686",
+"L c #CACACA",
+"W c #FFFFFF",
+".DDD............",
+".DLD.BBBBBB.....",
+".DDD............",
+".....DDDDD.DDD..",
+"................",
+".....DDDDD.DDD..",
+"................",
+".....DDDDD.DDD..",
+"................",
+".....DDDDD.DDD..",
+"................",
+".DDD............",
+".DLD.BBBBBB.....",
+".DDD............",
+".....DDDDD.DDD..",
+"................"
+};
+
+// Alphabetic Mode Icon
+static const char* gs_xpm_noncatmode[] = {
+"16 16 5 1",
+". c none",
+"B c black",
+"D c #868686",
+"L c #000080",
+"W c #FFFFFF",
+"..DBD...DDD.DDD.",
+".DB.BD..........",
+".BBBBB..DDD.DDD.",
+".B...B..........",
+"...L....DDD.DDD.",
+"...L............",
+".L.L.L..DDD.DDD.",
+"..LLL...........",
+"...L....DDD.DDD.",
+"................",
+".BBBBB..DDD.DDD.",
+"....BD..........",
+"...BD...DDD.DDD.",
+"..BD............",
+".BBBBB..DDD.DDD.",
+"................"
+};
+
+// Default Page Icon.
+static const char* gs_xpm_defpage[] = {
+"16 16 5 1",
+". c none",
+"B c black",
+"D c #868686",
+"L c #000080",
+"W c #FFFFFF",
+"................",
+"................",
+"..BBBBBBBBBBBB..",
+"..B..........B..",
+"..B.BB.LLLLL.B..",
+"..B..........B..",
+"..B.BB.LLLLL.B..",
+"..B..........B..",
+"..B.BB.LLLLL.B..",
+"..B..........B..",
+"..B.BB.LLLLL.B..",
+"..B..........B..",
+"..BBBBBBBBBBBB..",
+"................",
+"................",
+"................"
+};
+
+#define GETPAGESTATE(page) ((wxPropertyGridPage*)m_arrPages.Item(page))->GetStatePtr()
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPage
+// -----------------------------------------------------------------------
+
+
+IMPLEMENT_CLASS(wxPropertyGridPage, wxEvtHandler)
+
+
+BEGIN_EVENT_TABLE(wxPropertyGridPage, wxEvtHandler)
+END_EVENT_TABLE()
+
+
+wxPropertyGridPage::wxPropertyGridPage()
+    : wxEvtHandler(), wxPropertyGridInterface(), wxPropertyGridPageState()
+{
+    m_pState = this; // wxPropertyGridInterface to point to State
+    m_manager = NULL;
+    m_isDefault = false;
+}
+
+wxPropertyGridPage::~wxPropertyGridPage()
+{
+}
+
+void wxPropertyGridPage::Clear()
+{
+    GetStatePtr()->DoClear();
+}
+
+wxSize wxPropertyGridPage::FitColumns()
+{
+    wxSize sz = DoFitColumns();
+    return sz;
+}
+
+void wxPropertyGridPage::RefreshProperty( wxPGProperty* p )
+{
+    if ( m_manager )
+        m_manager->RefreshProperty(p);
+}
+
+void wxPropertyGridPage::OnShow()
+{
+}
+
+void wxPropertyGridPage::SetSplitterPosition( int splitterPos, int col )
+{
+    wxPropertyGrid* pg = GetGrid();
+    if ( pg->GetState() == this )
+        pg->SetSplitterPosition(splitterPos);
+    else
+        DoSetSplitterPosition(splitterPos, col, false);
+}
+
+void wxPropertyGridPage::DoSetSplitterPosition( int pos, int splitterColumn, bool allPages )
+{
+    if ( allPages && m_manager->GetPageCount() )
+        m_manager->SetSplitterPosition( pos, splitterColumn );
+    else
+        DoSetSplitterPositionThisPage( pos, splitterColumn );
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridManager
+// -----------------------------------------------------------------------
+
+// Final default splitter y is client height minus this.
+#define wxPGMAN_DEFAULT_NEGATIVE_SPLITTER_Y         100
+
+// -----------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxPropertyGridManager, wxPanel)
+
+#define ID_ADVTOOLBAR_OFFSET        1
+#define ID_ADVHELPCAPTION_OFFSET    2
+#define ID_ADVHELPCONTENT_OFFSET    3
+#define ID_ADVBUTTON_OFFSET         4
+#define ID_ADVTBITEMSBASE_OFFSET    5   // Must be last.
+
+// -----------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(wxPropertyGridManager, wxPanel)
+  EVT_MOTION(wxPropertyGridManager::OnMouseMove)
+  EVT_SIZE(wxPropertyGridManager::OnResize)
+  EVT_PAINT(wxPropertyGridManager::OnPaint)
+  EVT_LEFT_DOWN(wxPropertyGridManager::OnMouseClick)
+  EVT_LEFT_UP(wxPropertyGridManager::OnMouseUp)
+  EVT_LEAVE_WINDOW(wxPropertyGridManager::OnMouseEntry)
+  //EVT_ENTER_WINDOW(wxPropertyGridManager::OnMouseEntry)
+END_EVENT_TABLE()
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridManager::wxPropertyGridManager()
+    : wxPanel()
+{
+    Init1();
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridManager::wxPropertyGridManager( wxWindow *parent,
+                                              wxWindowID id,
+                                              const wxPoint& pos,
+                                              const wxSize& size,
+                                              long style,
+                                              const wxChar* name )
+    : wxPanel()
+{
+    Init1();
+    Create(parent,id,pos,size,style,name);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridManager::Create( wxWindow *parent,
+                                    wxWindowID id,
+                                    const wxPoint& pos,
+                                    const wxSize& size,
+                                    long style,
+                                    const wxChar* name )
+{
+
+    bool res = wxPanel::Create( parent, id, pos, size,
+                                (style&0xFFFF0000)|wxWANTS_CHARS,
+                                name );
+    Init2(style);
+
+    return res;
+}
+
+// -----------------------------------------------------------------------
+
+//
+// Initialize values to defaults
+//
+void wxPropertyGridManager::Init1()
+{
+
+    //m_pPropGrid = (wxPropertyGrid*) NULL;
+    m_pPropGrid = CreatePropertyGrid();
+
+#if wxUSE_TOOLBAR
+    m_pToolbar = (wxToolBar*) NULL;
+#endif
+    m_pTxtHelpCaption = (wxStaticText*) NULL;
+    m_pTxtHelpContent = (wxStaticText*) NULL;
+
+    m_emptyPage = (wxPropertyGridPage*) NULL;
+
+    m_selPage = -1;
+
+    m_width = m_height = 0;
+
+    m_splitterHeight = 5;
+
+    m_splitterY = -1; // -1 causes default to be set.
+
+    m_nextDescBoxSize = -1;
+
+    m_extraHeight = 0;
+    m_dragStatus = 0;
+    m_onSplitter = 0;
+    m_iFlags = 0;
+}
+
+// -----------------------------------------------------------------------
+
+// These flags are always used in wxPropertyGrid integrated in wxPropertyGridManager.
+#ifndef __WXMAC__
+  #define wxPG_MAN_PROPGRID_FORCED_FLAGS (wxSIMPLE_BORDER| \
+                                          wxNO_FULL_REPAINT_ON_RESIZE| \
+                                          wxCLIP_CHILDREN)
+#else
+  #define wxPG_MAN_PROPGRID_FORCED_FLAGS (wxNO_BORDER| \
+                                          wxNO_FULL_REPAINT_ON_RESIZE| \
+                                          wxCLIP_CHILDREN)
+#endif
+
+// Which flags can be passed to underlying wxPropertyGrid.
+#define wxPG_MAN_PASS_FLAGS_MASK       (0xFFF0|wxTAB_TRAVERSAL)
+
+//
+// Initialize after parent etc. set
+//
+void wxPropertyGridManager::Init2( int style )
+{
+
+    if ( m_iFlags & wxPG_FL_INITIALIZED )
+        return;
+
+    m_windowStyle |= (style&0x0000FFFF);
+
+    wxSize csz = GetClientSize();
+
+    m_cursorSizeNS = wxCursor(wxCURSOR_SIZENS);
+
+    // Prepare the first page
+    // NB: But just prepare - you still need to call Add/InsertPage
+    //     to actually add properties on it.
+    wxPropertyGridPage* pd = new wxPropertyGridPage();
+    pd->m_isDefault = true;
+    pd->m_manager = this;
+    wxPropertyGridPageState* state = pd->GetStatePtr();
+    state->m_pPropGrid = m_pPropGrid;
+    m_arrPages.Add( (void*)pd );
+    m_pPropGrid->m_pState = state;
+
+    wxWindowID baseId = GetId();
+    wxWindowID useId = baseId;
+    if ( baseId < 0 )
+        baseId = wxPG_MAN_ALTERNATE_BASE_ID;
+
+    m_baseId = baseId;
+
+#ifdef __WXMAC__
+   // Smaller controls on Mac
+   SetWindowVariant(wxWINDOW_VARIANT_SMALL);
+#endif 
+
+    // Create propertygrid.
+    m_pPropGrid->Create(this,baseId,wxPoint(0,0),csz,
+                        (m_windowStyle&wxPG_MAN_PASS_FLAGS_MASK)
+                            |wxPG_MAN_PROPGRID_FORCED_FLAGS);
+
+    m_pPropGrid->m_eventObject = this;
+
+    m_pPropGrid->SetId(useId);
+
+    m_pPropGrid->m_iFlags |= wxPG_FL_IN_MANAGER;
+
+    m_pState = m_pPropGrid->m_pState;
+
+    m_pPropGrid->SetExtraStyle(wxPG_EX_INIT_NOCAT);
+
+    m_nextTbInd = baseId+ID_ADVTBITEMSBASE_OFFSET + 2;
+
+
+    // Connect to property grid onselect event.
+    // NB: Even if wxID_ANY is used, this doesn't connect properly in wxPython
+    //     (see wxPropertyGridManager::ProcessEvent).
+    Connect(m_pPropGrid->GetId()/*wxID_ANY*/,
+            wxEVT_PG_SELECTED,
+            wxPropertyGridEventHandler(wxPropertyGridManager::OnPropertyGridSelect) );
+
+    // Connect to toolbar button events.
+    Connect(baseId+ID_ADVTBITEMSBASE_OFFSET,baseId+ID_ADVTBITEMSBASE_OFFSET+50,
+            wxEVT_COMMAND_TOOL_CLICKED,
+            wxCommandEventHandler(wxPropertyGridManager::OnToolbarClick) );
+
+    // Optional initial controls.
+    m_width = -12345;
+
+    m_iFlags |= wxPG_FL_INITIALIZED;
+
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridManager::~wxPropertyGridManager()
+{
+    END_MOUSE_CAPTURE
+
+    m_pPropGrid->DoSelectProperty(NULL);
+    m_pPropGrid->m_pState = NULL;
+
+    size_t i;
+    for ( i=0; i<m_arrPages.GetCount(); i++ )
+    {
+        delete (wxPropertyGridPage*)m_arrPages.Item(i);
+    }
+
+    delete m_emptyPage;
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGrid* wxPropertyGridManager::CreatePropertyGrid() const
+{
+    return new wxPropertyGrid();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetId( wxWindowID winid )
+{
+    wxWindow::SetId(winid);
+
+    // TODO: Reconnect propgrid event handler(s).
+
+    m_pPropGrid->SetId(winid);
+}
+
+// -----------------------------------------------------------------------
+
+wxSize wxPropertyGridManager::DoGetBestSize() const
+{
+    return wxSize(60,150);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridManager::SetFont( const wxFont& font )
+{
+    bool res = wxWindow::SetFont(font);
+    m_pPropGrid->SetFont(font);
+
+    // TODO: Need to do caption recacalculations for other pages as well.
+    unsigned int i;
+    for ( i=0; i<m_arrPages.GetCount(); i++ )
+    {
+        wxPropertyGridPage* page = GetPage(i);
+
+        if ( page != m_pPropGrid->GetState() )
+            page->CalculateFontAndBitmapStuff(-1);
+    }
+
+    return res;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetExtraStyle( long exStyle )
+{
+    wxWindow::SetExtraStyle( exStyle );
+    m_pPropGrid->SetExtraStyle( exStyle & 0xFFFFF000 );
+#if wxUSE_TOOLBAR
+    if ( (exStyle & wxPG_EX_NO_FLAT_TOOLBAR) && m_pToolbar )
+        RecreateControls();
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::Freeze()
+{
+    m_pPropGrid->Freeze();
+    wxWindow::Freeze();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::Thaw()
+{
+    wxWindow::Thaw();
+    m_pPropGrid->Thaw();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetWindowStyleFlag( long style )
+{
+    wxWindow::SetWindowStyleFlag( style );
+    m_pPropGrid->SetWindowStyleFlag( (m_pPropGrid->GetWindowStyleFlag()&~(wxPG_MAN_PASS_FLAGS_MASK)) |
+                                   (style&wxPG_MAN_PASS_FLAGS_MASK) );
+}
+
+// -----------------------------------------------------------------------
+
+// Actually shows given page.
+bool wxPropertyGridManager::DoSelectPage( int index )
+{
+    // -1 means no page was selected
+    //wxASSERT( m_selPage >= 0 );
+
+    wxCHECK_MSG( index >= -1 && index < (int)GetPageCount(),
+                 false,
+                 wxT("invalid page index") );
+
+    if ( m_selPage == index )
+        return true;
+
+    if ( m_pPropGrid->m_selected )
+    {
+        if ( !m_pPropGrid->ClearSelection() )
+            return false;
+    }
+
+    wxPropertyGridPage* prevPage;
+
+    if ( m_selPage >= 0 )
+        prevPage = GetPage(m_selPage);
+    else
+        prevPage = m_emptyPage;
+
+    wxPropertyGridPage* nextPage;
+
+    if ( index >= 0 )
+    {
+        nextPage = (wxPropertyGridPage*)m_arrPages.Item(index);
+
+        nextPage->OnShow();
+    }
+    else
+    {
+        if ( !m_emptyPage )
+        {
+            m_emptyPage = new wxPropertyGridPage();
+            m_emptyPage->m_pPropGrid = m_pPropGrid;
+        }
+
+        nextPage = m_emptyPage;
+    }
+
+    m_iFlags |= wxPG_FL_DESC_REFRESH_REQUIRED;
+
+    m_pPropGrid->SwitchState( nextPage->GetStatePtr() );
+
+    m_pState = m_pPropGrid->m_pState;
+
+    m_selPage = index;
+
+#if wxUSE_TOOLBAR
+    if ( m_pToolbar )
+    {
+        if ( index >= 0 )
+            m_pToolbar->ToggleTool( nextPage->m_id, true );
+        else
+            m_pToolbar->ToggleTool( prevPage->m_id, false );
+    }
+#endif
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+// Changes page *and* set the target page for insertion operations.
+void wxPropertyGridManager::SelectPage( int index )
+{
+    DoSelectPage(index);
+}
+
+// -----------------------------------------------------------------------
+
+int wxPropertyGridManager::GetPageByName( const wxString& name ) const
+{
+    size_t i;
+    for ( i=0; i<GetPageCount(); i++ )
+    {
+        if ( ((wxPropertyGridPage*)m_arrPages.Item(i))->m_label == name )
+            return i;
+    }
+    return wxNOT_FOUND;
+}
+
+// -----------------------------------------------------------------------
+
+int wxPropertyGridManager::GetPageByState( const wxPropertyGridPageState* pState ) const
+{
+    wxASSERT( pState );
+
+    size_t i;
+    for ( i=0; i<GetPageCount(); i++ )
+    {
+        if ( pState == ((wxPropertyGridPage*)m_arrPages.Item(i))->GetStatePtr() )
+            return i;
+    }
+
+    return wxNOT_FOUND;
+}
+
+// -----------------------------------------------------------------------
+
+const wxString& wxPropertyGridManager::GetPageName( int index ) const
+{
+    wxASSERT( index >= 0 && index < (int)GetPageCount() );
+    return ((wxPropertyGridPage*)m_arrPages.Item(index))->m_label;
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridPageState* wxPropertyGridManager::GetPageState( int page ) const
+{
+    // Do not change this into wxCHECK because returning NULL is important
+    // for wxPropertyGridInterface page enumeration mechanics.
+    if ( page >= (int)GetPageCount() )
+        return NULL;
+
+    if ( page == -1 )
+        return m_pState;
+    return GETPAGESTATE(page);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::Clear()
+{
+    m_pPropGrid->Freeze();
+
+    int i;
+    for ( i=(int)GetPageCount()-1; i>=0; i-- )
+        RemovePage(i);
+
+    // Reset toolbar ids
+    m_nextTbInd = m_baseId+ID_ADVTBITEMSBASE_OFFSET + 2;
+
+    m_pPropGrid->Thaw();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::ClearPage( int page )
+{
+    wxASSERT( page >= 0 );
+    wxASSERT( page < (int)GetPageCount() );
+
+    if ( page >= 0 && page < (int)GetPageCount() )
+    {
+        wxPropertyGridPageState* state = GETPAGESTATE(page);
+
+        if ( state == m_pPropGrid->GetState() )
+            m_pPropGrid->Clear();
+        else
+            state->DoClear();
+    }
+}
+
+// -----------------------------------------------------------------------
+
+int wxPropertyGridManager::GetColumnCount( int page ) const
+{
+    wxASSERT( page >= -1 );
+    wxASSERT( page < (int)GetPageCount() );
+
+    return GetPageState(page)->GetColumnCount();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetColumnCount( int colCount, int page )
+{
+    wxASSERT( page >= -1 );
+    wxASSERT( page < (int)GetPageCount() );
+
+    GetPageState(page)->SetColumnCount( colCount );
+    GetGrid()->Refresh();
+}
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetPropertyAttributeAll( const wxString& attrName, wxVariant value )
+{
+    size_t i;
+    for ( i=0; i<GetPageCount(); i++ )
+    {
+        wxPropertyGridPage* page = (wxPropertyGridPage*)m_arrPages.Item(i);
+
+        DoSetPropertyAttribute(page->GetStatePtr()->m_properties, attrName, value, wxPG_RECURSE);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+size_t wxPropertyGridManager::GetPageCount() const
+{
+       if ( !(m_iFlags & wxPG_MAN_FL_PAGE_INSERTED) )
+               return 0;
+
+       return m_arrPages.GetCount();
+}
+
+// -----------------------------------------------------------------------
+
+int wxPropertyGridManager::InsertPage( int index, const wxString& label,
+                                       const wxBitmap& bmp, wxPropertyGridPage* pageObj )
+{
+    if ( index < 0 )
+        index = GetPageCount();
+
+    wxCHECK_MSG( (size_t)index == GetPageCount(), -1,
+        wxT("wxPropertyGridManager currently only supports appending pages (due to wxToolBar limitation)."));
+
+    bool needInit = true;
+    bool isPageInserted = m_iFlags & wxPG_MAN_FL_PAGE_INSERTED ? true : false;
+
+    wxASSERT( index == 0 || isPageInserted );
+
+    if ( !pageObj )
+    {
+        // No custom page object was given, so we will either re-use the default base
+        // page (if index==0), or create a new default page object.
+        if ( !isPageInserted )
+        {
+            pageObj = GetPage(0);
+            // Of course, if the base page was custom, we need to delete and
+            // re-create it.
+            if ( !pageObj->m_isDefault )
+            {
+                delete pageObj;
+                pageObj = new wxPropertyGridPage();
+                m_arrPages[0] = pageObj;
+            }
+            needInit = false;
+        }
+        else
+        {
+            pageObj = new wxPropertyGridPage();
+        }
+        pageObj->m_isDefault = true;
+    }
+    else
+    {
+        if ( !isPageInserted )
+        {
+            // Initial page needs to be deleted and replaced
+            delete GetPage(0);
+            m_arrPages[0] = pageObj;
+            m_pPropGrid->m_pState = pageObj->GetStatePtr();
+        }
+    }
+
+    wxPropertyGridPageState* state = pageObj->GetStatePtr();
+
+    pageObj->m_manager = this;
+
+    if ( needInit )
+    {
+        state->m_pPropGrid = m_pPropGrid;
+        state->InitNonCatMode();
+    }
+
+    if ( label.length() )
+    {
+        wxASSERT_MSG( !pageObj->m_label.length(),
+                      wxT("If page label is given in constructor, empty label must be given in AddPage"));
+        pageObj->m_label = label;
+    }
+
+    pageObj->m_id = m_nextTbInd;
+
+    if ( isPageInserted )
+        m_arrPages.Add( (void*)pageObj );
+
+#if wxUSE_TOOLBAR
+    if ( m_windowStyle & wxPG_TOOLBAR )
+    {
+        if ( !m_pToolbar )
+            RecreateControls();
+
+        if ( !(GetExtraStyle()&wxPG_EX_HIDE_PAGE_BUTTONS) )
+        {
+            wxASSERT( m_pToolbar );
+
+            // Add separator before first page.
+            if ( GetPageCount() < 2 && (GetExtraStyle()&wxPG_EX_MODE_BUTTONS) &&
+                 m_pToolbar->GetToolsCount() < 3 )
+                m_pToolbar->AddSeparator();
+
+            if ( &bmp != &wxNullBitmap )
+                m_pToolbar->AddTool(m_nextTbInd,label,bmp,label,wxITEM_RADIO);
+                //m_pToolbar->InsertTool(index+3,m_nextTbInd,bmp);
+            else
+                m_pToolbar->AddTool(m_nextTbInd,label,wxBitmap( (const char**)gs_xpm_defpage ),
+                    label,wxITEM_RADIO);
+
+            m_nextTbInd++;
+
+            m_pToolbar->Realize();
+        }
+    }
+#else
+    wxUnusedVar(bmp);
+#endif
+
+    // If selected page was above the point of insertion, fix the current page index
+    if ( isPageInserted )
+    {
+        if ( m_selPage >= index )
+        {
+            m_selPage += 1;
+        }
+    }
+    else
+    {
+        // Set this value only when adding the first page
+        m_selPage = 0;
+    }
+
+    pageObj->Init();
+
+    m_iFlags |= wxPG_MAN_FL_PAGE_INSERTED;
+
+    wxASSERT( pageObj->GetGrid() );
+
+    return index;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridManager::IsAnyModified() const
+{
+    size_t i;
+    for ( i=0; i<GetPageCount(); i++ )
+    {
+        if ( ((wxPropertyGridPage*)m_arrPages.Item(i))->GetStatePtr()->m_anyModified )
+            return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridManager::IsPageModified( size_t index ) const
+{
+    if ( ((wxPropertyGridPage*)m_arrPages.Item(index))->GetStatePtr()->m_anyModified )
+        return true;
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridManager::GetPageRoot( int index ) const
+{
+    wxASSERT( index >= 0 );
+    wxASSERT( index < (int)m_arrPages.GetCount() );
+
+    return ((wxPropertyGridPage*)m_arrPages.Item(index))->GetStatePtr()->m_properties;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridManager::RemovePage( int page )
+{
+    wxCHECK_MSG( (page >= 0) && (page < (int)GetPageCount()),
+                 false,
+                 wxT("invalid page index") );
+
+    wxPropertyGridPage* pd = (wxPropertyGridPage*)m_arrPages.Item(page);
+
+    if ( m_arrPages.GetCount() == 1 )
+    {
+        // Last page: do not remove page entry
+        m_pPropGrid->Clear();
+        m_selPage = -1;
+        m_iFlags &= ~wxPG_MAN_FL_PAGE_INSERTED;
+        pd->m_label.clear();
+    }
+    // Change selection if current is page
+    else if ( page == m_selPage )
+    {
+        if ( !m_pPropGrid->ClearSelection() )
+                return false;
+
+        // Substitute page to select
+        int substitute = page - 1;
+        if ( substitute < 0 )
+            substitute = page + 1;
+
+        SelectPage(substitute);
+    }
+
+    // Remove toolbar icon
+#if wxUSE_TOOLBAR
+    if ( HasFlag(wxPG_TOOLBAR) )
+    {
+        wxASSERT( m_pToolbar );
+
+        int toolPos = GetExtraStyle() & wxPG_EX_MODE_BUTTONS ? 3 : 0;
+        toolPos += page;
+
+        // Delete separator as well, for consistency
+        if ( (GetExtraStyle() & wxPG_EX_MODE_BUTTONS) &&
+             GetPageCount() == 1 )
+            m_pToolbar->DeleteToolByPos(2);
+
+        m_pToolbar->DeleteToolByPos(toolPos);
+    }
+#endif
+
+    if ( m_arrPages.GetCount() > 1 )
+    {
+        m_arrPages.RemoveAt(page);
+        delete pd;
+    }
+
+    // Adjust indexes that were above removed
+    if ( m_selPage > page )
+        m_selPage--;
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridManager::ProcessEvent( wxEvent& event )
+{
+    int evtType = event.GetEventType();
+
+    // NB: For some reason, under wxPython, Connect in Init doesn't work properly,
+    //     so we'll need to call OnPropertyGridSelect manually. Multiple call's
+    //     don't really matter.
+    if ( evtType == wxEVT_PG_SELECTED )
+        OnPropertyGridSelect((wxPropertyGridEvent&)event);
+
+    // Property grid events get special attention
+    if ( evtType >= wxPG_BASE_EVT_TYPE &&
+         evtType < (wxPG_MAX_EVT_TYPE) &&
+         m_selPage >= 0 )
+    {
+        wxPropertyGridPage* page = GetPage(m_selPage);
+        wxPropertyGridEvent* pgEvent = wxDynamicCast(&event, wxPropertyGridEvent);
+
+        // Add property grid events to appropriate custom pages
+        // but stop propagating to parent if page says it is
+        // handling everything.
+        if ( pgEvent && !page->m_isDefault )
+        {
+            /*if ( pgEvent->IsPending() )
+                page->AddPendingEvent(event);
+            else*/
+                page->ProcessEvent(event);
+
+            if ( page->IsHandlingAllEvents() )
+                event.StopPropagation();
+        }
+    }
+
+    return wxPanel::ProcessEvent(event);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::RepaintSplitter( wxDC& dc, int new_splittery, int new_width,
+                                             int new_height, bool desc_too )
+{
+    int use_hei = new_height;
+
+    // Draw background
+    wxColour bgcol = GetBackgroundColour();
+    dc.SetBrush( bgcol );
+    dc.SetPen( bgcol );
+    int rect_hei = use_hei-new_splittery;
+    if ( !desc_too )
+        rect_hei = m_splitterHeight;
+    dc.DrawRectangle(0,new_splittery,new_width,rect_hei);
+    dc.SetPen ( wxSystemSettings::GetColour ( wxSYS_COLOUR_3DDKSHADOW ) );
+    int splitter_bottom = new_splittery+m_splitterHeight - 1;
+    int box_height = use_hei-splitter_bottom;
+    if ( box_height > 1 )
+        dc.DrawRectangle(0,splitter_bottom,new_width,box_height);
+    else
+        dc.DrawLine(0,splitter_bottom,new_width,splitter_bottom);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::RefreshHelpBox( int new_splittery, int new_width, int new_height )
+{
+    //if ( new_splittery == m_splitterY && new_width == m_width )
+    //    return;
+
+    int use_hei = new_height;
+    use_hei--;
+
+    //wxRendererNative::Get().DrawSplitterSash(this,dc,
+        //wxSize(width,m_splitterHeight),new_splittery,wxHORIZONTAL);
+
+    //wxRendererNative::Get().DrawSplitterBorder(this,dc,
+    //    wxRect(0,new_splittery,new_width,m_splitterHeight));
+
+    // Fix help control positions.
+    int cap_hei = m_pPropGrid->m_fontHeight;
+    int cap_y = new_splittery+m_splitterHeight+5;
+    int cnt_y = cap_y+cap_hei+3;
+    int sub_cap_hei = cap_y+cap_hei-use_hei;
+    int cnt_hei = use_hei-cnt_y;
+    if ( sub_cap_hei > 0 )
+    {
+        cap_hei -= sub_cap_hei;
+        cnt_hei = 0;
+    }
+    if ( cap_hei <= 2 )
+    {
+        m_pTxtHelpCaption->Show( false );
+        m_pTxtHelpContent->Show( false );
+    }
+    else
+    {
+        m_pTxtHelpCaption->SetSize(3,cap_y,new_width-6,cap_hei);
+        m_pTxtHelpCaption->Wrap(-1);
+        m_pTxtHelpCaption->Show( true );
+        if ( cnt_hei <= 2 )
+        {
+            m_pTxtHelpContent->Show( false );
+        }
+        else
+        {
+            m_pTxtHelpContent->SetSize(3,cnt_y,new_width-6,cnt_hei);
+            m_pTxtHelpContent->Show( true );
+        }
+    }
+
+    wxClientDC dc(this);
+    RepaintSplitter( dc, new_splittery, new_width, new_height, true );
+
+    m_splitterY = new_splittery;
+
+    m_iFlags &= ~(wxPG_FL_DESC_REFRESH_REQUIRED);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::RecalculatePositions( int width, int height )
+{
+    int propgridY = 0;
+    int propgridBottomY = height;
+
+    // Toolbar at the top.
+#if wxUSE_TOOLBAR
+    if ( m_pToolbar )
+    {
+        int tbHeight;
+
+    #if ( wxMINOR_VERSION < 6 || (wxMINOR_VERSION == 6 && wxRELEASE_NUMBER < 2) )
+        tbHeight = -1;
+    #else
+        // In wxWidgets 2.6.2+, Toolbar default height may be broken
+        #if defined(__WXMSW__)
+            tbHeight = 24;
+        #elif defined(__WXGTK__)
+            tbHeight = -1; // 22;
+        #elif defined(__WXMAC__)
+            tbHeight = 22;
+        #else
+            tbHeight = 22;
+        #endif
+    #endif
+
+        m_pToolbar->SetSize(0,0,width,tbHeight);
+        propgridY += m_pToolbar->GetSize().y;
+    }
+#endif
+
+    // Help box.
+    if ( m_pTxtHelpCaption )
+    {
+        int new_splittery = m_splitterY;
+
+        // Move m_splitterY
+        if ( ( m_splitterY >= 0 || m_nextDescBoxSize ) && m_height > 32 )
+        {
+            if ( m_nextDescBoxSize >= 0 )
+            {
+                new_splittery = m_height - m_nextDescBoxSize - m_splitterHeight;
+                m_nextDescBoxSize = -1;
+            }
+            new_splittery += (height-m_height);
+        }
+        else
+        {
+            new_splittery = height - wxPGMAN_DEFAULT_NEGATIVE_SPLITTER_Y;
+            if ( new_splittery < 32 )
+                new_splittery = 32;
+        }
+
+        // Check if beyond minimum.
+        int nspy_min = propgridY + m_pPropGrid->m_lineHeight;
+        if ( new_splittery < nspy_min )
+            new_splittery = nspy_min;
+
+        propgridBottomY = new_splittery;
+
+        RefreshHelpBox( new_splittery, width, height );
+    }
+
+    if ( m_iFlags & wxPG_FL_INITIALIZED )
+    {
+        int pgh = propgridBottomY - propgridY;
+        m_pPropGrid->SetSize( 0, propgridY, width, pgh );
+
+        m_extraHeight = height - pgh;
+
+        m_width = width;
+        m_height = height;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetDescBoxHeight( int ht, bool refresh )
+{
+    if ( m_windowStyle & wxPG_DESCRIPTION )
+    {
+        m_nextDescBoxSize = ht;
+        if ( refresh )
+            RecalculatePositions(m_width, m_height);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+int wxPropertyGridManager::GetDescBoxHeight() const
+{
+    return GetClientSize().y - m_splitterY;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::OnPaint( wxPaintEvent& WXUNUSED(event) )
+{
+    wxPaintDC dc(this);
+
+    // Update everything inside the box
+    wxRect r = GetUpdateRegion().GetBox();
+
+    // Repaint splitter?
+    int r_bottom = r.y + r.height;
+    int splitter_bottom = m_splitterY + m_splitterHeight;
+    if ( r.y < splitter_bottom && r_bottom >= m_splitterY )
+        RepaintSplitter( dc, m_splitterY, m_width, m_height, false );
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::Refresh(bool eraseBackground, const wxRect* rect )
+{
+    m_pPropGrid->Refresh(eraseBackground);
+    wxWindow::Refresh(eraseBackground,rect);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::RefreshProperty( wxPGProperty* p )
+{
+    wxPropertyGrid* grid = p->GetGrid();
+
+    if ( GetPage(m_selPage)->GetStatePtr() == p->GetParent()->GetParentState() )
+        grid->RefreshProperty(p);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::RecreateControls()
+{
+
+    bool was_shown = IsShown();
+    if ( was_shown )
+        Show ( false );
+
+    wxWindowID baseId = m_pPropGrid->GetId();
+    if ( baseId < 0 )
+        baseId = wxPG_MAN_ALTERNATE_BASE_ID;
+
+#if wxUSE_TOOLBAR
+    if ( m_windowStyle & wxPG_TOOLBAR )
+    {
+        // Has toolbar.
+        if ( !m_pToolbar )
+        {
+            m_pToolbar = new wxToolBar(this,baseId+ID_ADVTOOLBAR_OFFSET,
+                                       wxDefaultPosition,wxDefaultSize,
+                                       ((GetExtraStyle()&wxPG_EX_NO_FLAT_TOOLBAR)?0:wxTB_FLAT)
+                                        /*| wxTB_HORIZONTAL | wxNO_BORDER*/ );
+
+        #if defined(__WXMSW__)
+            // Eliminate toolbar flicker on XP
+            // NOTE: Not enabled since it corrupts drawing somewhat.
+
+            /*
+            #ifndef WS_EX_COMPOSITED
+                #define WS_EX_COMPOSITED        0x02000000L
+            #endif
+
+            HWND hWnd = (HWND)m_pToolbar->GetHWND();
+
+            ::SetWindowLong( hWnd, GWL_EXSTYLE,
+                             ::GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_COMPOSITED );
+            */
+
+        #endif
+
+            m_pToolbar->SetCursor ( *wxSTANDARD_CURSOR );
+
+            if ( (GetExtraStyle()&wxPG_EX_MODE_BUTTONS) )
+            {
+                wxString desc1(_("Categorized Mode"));
+                wxString desc2(_("Alphabetic Mode"));
+                m_pToolbar->AddTool(baseId+ID_ADVTBITEMSBASE_OFFSET+0,
+                    desc1,wxBitmap ( (const char**)gs_xpm_catmode ),
+                    desc1,wxITEM_RADIO);
+                m_pToolbar->AddTool(baseId+ID_ADVTBITEMSBASE_OFFSET+1,
+                    desc2,wxBitmap ( (const char**)gs_xpm_noncatmode ),
+                    desc2,wxITEM_RADIO);
+                m_pToolbar->Realize();
+            }
+
+        }
+
+        if ( (GetExtraStyle()&wxPG_EX_MODE_BUTTONS) )
+        {
+            // Toggle correct mode button.
+            // TODO: This doesn't work in wxMSW (when changing,
+            // both items will get toggled).
+            int toggle_but_on_ind = ID_ADVTBITEMSBASE_OFFSET+0;
+            int toggle_but_off_ind = ID_ADVTBITEMSBASE_OFFSET+1;
+            if ( m_pPropGrid->m_pState->IsInNonCatMode() )
+            {
+                toggle_but_on_ind++;
+                toggle_but_off_ind--;
+            }
+
+            m_pToolbar->ToggleTool(baseId+toggle_but_on_ind,true);
+            m_pToolbar->ToggleTool(baseId+toggle_but_off_ind,false);
+        }
+
+    }
+    else
+    {
+        // No toolbar.
+        if ( m_pToolbar )
+            m_pToolbar->Destroy();
+        m_pToolbar = (wxToolBar*) NULL;
+    }
+#endif
+
+    if ( m_windowStyle & wxPG_DESCRIPTION )
+    {
+        // Has help box.
+        m_pPropGrid->m_iFlags |= (wxPG_FL_NOSTATUSBARHELP);
+
+        if ( !m_pTxtHelpCaption )
+        {
+            m_pTxtHelpCaption = new wxStaticText (this,baseId+ID_ADVHELPCAPTION_OFFSET,wxEmptyString);
+            m_pTxtHelpCaption->SetFont( m_pPropGrid->m_captionFont );
+            m_pTxtHelpCaption->SetCursor ( *wxSTANDARD_CURSOR );
+        }
+        if ( !m_pTxtHelpContent )
+        {
+            m_pTxtHelpContent = new wxStaticText (this,baseId+ID_ADVHELPCONTENT_OFFSET,
+                wxEmptyString,wxDefaultPosition,wxDefaultSize,wxALIGN_LEFT|wxST_NO_AUTORESIZE);
+            m_pTxtHelpContent->SetCursor ( *wxSTANDARD_CURSOR );
+        }
+    }
+    else
+    {
+        // No help box.
+        m_pPropGrid->m_iFlags &= ~(wxPG_FL_NOSTATUSBARHELP);
+
+        if ( m_pTxtHelpCaption )
+            m_pTxtHelpCaption->Destroy();
+
+        m_pTxtHelpCaption = (wxStaticText*) NULL;
+
+        if ( m_pTxtHelpContent )
+            m_pTxtHelpContent->Destroy();
+
+        m_pTxtHelpContent = (wxStaticText*) NULL;
+    }
+
+    int width, height;
+
+    GetClientSize(&width,&height);
+
+    RecalculatePositions(width,height);
+
+    if ( was_shown )
+        Show ( true );
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridManager::DoGetPropertyByName( const wxString& name ) const
+{
+    size_t i;
+    for ( i=0; i<GetPageCount(); i++ )
+    {
+        wxPropertyGridPageState* pState = ((wxPropertyGridPage*)m_arrPages.Item(i))->GetStatePtr();
+        wxPGProperty* p = pState->BaseGetPropertyByName(name);
+        if ( p )
+        {
+            return p;
+        }
+    }
+    return NULL;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridManager::EnsureVisible( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+
+    wxPropertyGridPageState* parentState = p->GetParentState();
+
+    // Select correct page.
+    if ( m_pPropGrid->m_pState != parentState )
+        DoSelectPage( GetPageByState(parentState) );
+
+    return m_pPropGrid->EnsureVisible(id);
+}
+
+// -----------------------------------------------------------------------
+
+size_t wxPropertyGridManager::GetChildrenCount( int page_index )
+{
+    return GetChildrenCount( GetPage(page_index)->GetStatePtr()->m_properties );
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event )
+{
+    int id = event.GetId();
+    if ( id >= 0 )
+    {
+        int baseId = m_pPropGrid->GetId();
+        if ( baseId < 0 )
+            baseId = wxPG_MAN_ALTERNATE_BASE_ID;
+
+        if ( id == ( baseId + ID_ADVTBITEMSBASE_OFFSET + 0 ) )
+        {
+            // Categorized mode.
+            if ( m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES )
+                m_pPropGrid->EnableCategories( true );
+        }
+        else if ( id == ( baseId + ID_ADVTBITEMSBASE_OFFSET + 1 ) )
+        {
+            // Alphabetic mode.
+            if ( !(m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES) )
+                m_pPropGrid->EnableCategories( false );
+        }
+        else
+        {
+            // Page Switching.
+
+            int index = -1;
+            size_t i;
+            wxPropertyGridPage* pdc;
+
+            // Find page with given id.
+            for ( i=0; i<GetPageCount(); i++ )
+            {
+                pdc = (wxPropertyGridPage*)m_arrPages.Item(i);
+                if ( pdc->m_id == id )
+                {
+                    index = i;
+                    break;
+                }
+            }
+
+            wxASSERT( index >= 0 );
+
+            if ( DoSelectPage( index ) )
+            {
+
+                // Event dispatching must be last.
+                m_pPropGrid->SendEvent(  wxEVT_PG_PAGE_CHANGED, (wxPGProperty*) NULL );
+
+            }
+            else
+            {
+                // TODO: Depress the old button on toolbar.
+            }
+
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetDescription( const wxString& label, const wxString& content )
+{
+    if ( m_pTxtHelpCaption )
+    {
+        wxSize osz1 = m_pTxtHelpCaption->GetSize();
+        wxSize osz2 = m_pTxtHelpContent->GetSize();
+
+        m_pTxtHelpCaption->SetLabel(label);
+        m_pTxtHelpContent->SetLabel(content);
+
+        m_pTxtHelpCaption->SetSize(-1,osz1.y);
+        m_pTxtHelpContent->SetSize(-1,osz2.y);
+
+        if ( (m_iFlags & wxPG_FL_DESC_REFRESH_REQUIRED) || (osz2.x<(m_width-10)) )
+            RefreshHelpBox( m_splitterY, m_width, m_height );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetDescribedProperty( wxPGProperty* p )
+{
+    if ( m_pTxtHelpCaption )
+    {
+        if ( p )
+        {
+            SetDescription( p->GetLabel(), p->GetHelpString() );
+        }
+        else
+        {
+            m_pTxtHelpCaption->SetLabel(wxEmptyString);
+            m_pTxtHelpContent->SetLabel(wxEmptyString);
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetSplitterLeft( bool subProps, bool allPages )
+{
+    if ( !allPages )
+    {
+        m_pPropGrid->SetSplitterLeft(subProps);
+    }
+    else
+    {
+        wxClientDC dc(this);
+        dc.SetFont(m_pPropGrid->m_font);
+
+        int highest = 0;
+        unsigned int i;
+
+        for ( i=0; i<GetPageCount(); i++ )
+        {
+            int maxW = m_pState->GetColumnFitWidth(dc, GETPAGESTATE(i)->m_properties, 0, subProps );
+            maxW += m_pPropGrid->m_marginWidth;
+            if ( maxW > highest )
+                highest = maxW;
+        }
+
+        if ( highest > 0 )
+            m_pPropGrid->SetSplitterPosition( highest );
+
+        m_pPropGrid->m_iFlags |= wxPG_FL_DONT_CENTER_SPLITTER;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::OnPropertyGridSelect( wxPropertyGridEvent& event )
+{
+    // Check id.
+    wxASSERT_MSG( GetId() == m_pPropGrid->GetId(),
+        wxT("wxPropertyGridManager id must be set with wxPropertyGridManager::SetId (not wxWindow::SetId).") );
+
+    SetDescribedProperty(event.GetProperty());
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::OnResize( wxSizeEvent& WXUNUSED(event) )
+{
+    int width, height;
+
+    GetClientSize(&width,&height);
+
+    if ( m_width == -12345 )
+        RecreateControls();
+
+    RecalculatePositions(width,height);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::OnMouseEntry( wxMouseEvent& WXUNUSED(event) )
+{
+    // Correct cursor. This is required atleast for wxGTK, for which
+    // setting button's cursor to *wxSTANDARD_CURSOR does not work.
+    SetCursor( wxNullCursor );
+    m_onSplitter = 0;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::OnMouseMove( wxMouseEvent &event )
+{
+    if ( !m_pTxtHelpCaption )
+        return;
+
+    int y = event.m_y;
+
+    if ( m_dragStatus > 0 )
+    {
+        int sy = y - m_dragOffset;
+
+        // Calculate drag limits
+        int bottom_limit = m_height - m_splitterHeight + 1;
+        int top_limit = m_pPropGrid->m_lineHeight;
+#if wxUSE_TOOLBAR
+        if ( m_pToolbar ) top_limit += m_pToolbar->GetSize().y;
+#endif
+
+        if ( sy >= top_limit && sy < bottom_limit )
+        {
+
+            int change = sy - m_splitterY;
+            if ( change )
+            {
+                m_splitterY = sy;
+
+                m_pPropGrid->SetSize( m_width, m_splitterY - m_pPropGrid->GetPosition().y );
+                RefreshHelpBox( m_splitterY, m_width, m_height );
+
+                m_extraHeight -= change;
+                InvalidateBestSize();
+            }
+
+        }
+
+    }
+    else
+    {
+        if ( y >= m_splitterY && y < (m_splitterY+m_splitterHeight+2) )
+        {
+            SetCursor ( m_cursorSizeNS );
+            m_onSplitter = 1;
+        }
+        else
+        {
+            if ( m_onSplitter )
+            {
+                SetCursor ( wxNullCursor );
+            }
+            m_onSplitter = 0;
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::OnMouseClick( wxMouseEvent &event )
+{
+    int y = event.m_y;
+
+    // Click on splitter.
+    if ( y >= m_splitterY && y < (m_splitterY+m_splitterHeight+2) )
+    {
+        if ( m_dragStatus == 0 )
+        {
+            //
+            // Begin draggin the splitter
+            //
+
+            BEGIN_MOUSE_CAPTURE
+
+            m_dragStatus = 1;
+
+            m_dragOffset = y - m_splitterY;
+
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::OnMouseUp( wxMouseEvent &event )
+{
+    // No event type check - basicly calling this method should
+    // just stop dragging.
+
+    if ( m_dragStatus >= 1 )
+    {
+        //
+        // End Splitter Dragging
+        //
+
+        int y = event.m_y;
+
+        // DO NOT ENABLE FOLLOWING LINE!
+        // (it is only here as a reminder to not to do it)
+        //m_splitterY = y;
+
+        // This is necessary to return cursor
+        END_MOUSE_CAPTURE
+
+        // Set back the default cursor, if necessary
+        if ( y < m_splitterY || y >= (m_splitterY+m_splitterHeight+2) )
+        {
+            SetCursor ( wxNullCursor );
+        }
+
+        m_dragStatus = 0;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridManager::SetSplitterPosition( int pos, int splitterColumn )
+{
+    wxASSERT_MSG( GetPageCount(),
+                  wxT("SetSplitterPosition() has no effect until pages have been added") );
+
+    size_t i;
+    for ( i=0; i<GetPageCount(); i++ )
+    {
+        wxPropertyGridPage* page = GetPage(i);
+        page->DoSetSplitterPositionThisPage( pos, splitterColumn );
+    }
+
+    m_pPropGrid->SetInternalFlag(wxPG_FL_SPLITTER_PRE_SET);
+}
+
+// -----------------------------------------------------------------------
+// wxPGVIterator_Manager
+// -----------------------------------------------------------------------
+
+// Default returned by wxPropertyGridInterface::CreateVIterator().
+class wxPGVIteratorBase_Manager : public wxPGVIteratorBase
+{
+public:
+    wxPGVIteratorBase_Manager( wxPropertyGridManager* manager, int flags )
+        : m_manager(manager), m_flags(flags), m_curPage(0)
+    {
+        m_it.Init(manager->GetPage(0), flags);
+    }
+    virtual ~wxPGVIteratorBase_Manager() { }
+    virtual void Next()
+    {
+        m_it.Next();
+
+        // Next page?
+        if ( m_it.AtEnd() )
+        {
+            m_curPage++;
+            if ( m_curPage < m_manager->GetPageCount() )
+                m_it.Init( m_manager->GetPage(m_curPage), m_flags );
+        }
+    }
+private:
+    wxPropertyGridManager*  m_manager;
+    int                     m_flags;
+    unsigned int            m_curPage;
+};
+
+wxPGVIterator wxPropertyGridManager::GetVIterator( int flags ) const
+{
+    return wxPGVIterator( new wxPGVIteratorBase_Manager( (wxPropertyGridManager*)this, flags ) );
+}
diff --git a/src/propgrid/property.cpp b/src/propgrid/property.cpp
new file mode 100644 (file)
index 0000000..4253910
--- /dev/null
@@ -0,0 +1,2180 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/propgrid/property.cpp
+// Purpose:     wxPGProperty and related support classes
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2008-08-23
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/defs.h"
+    #include "wx/object.h"
+    #include "wx/hash.h"
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/event.h"
+    #include "wx/window.h"
+    #include "wx/panel.h"
+    #include "wx/dc.h"
+    #include "wx/dcmemory.h"
+    #include "wx/button.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/settings.h"
+    #include "wx/msgdlg.h"
+    #include "wx/choice.h"
+    #include "wx/stattext.h"
+    #include "wx/scrolwin.h"
+    #include "wx/dirdlg.h"
+    #include "wx/layout.h"
+    #include "wx/sizer.h"
+    #include "wx/textdlg.h"
+    #include "wx/filedlg.h"
+    #include "wx/statusbr.h"
+    #include "wx/intl.h"
+    #include "wx/frame.h"
+#endif
+
+#include <wx/propgrid/propgrid.h>
+
+
+#define PWC_CHILD_SUMMARY_LIMIT         16 // Maximum number of children summarized in a parent property's
+                                           // value field.
+
+#define PWC_CHILD_SUMMARY_CHAR_LIMIT    64 // Character limit of summary field when not editing
+
+
+// -----------------------------------------------------------------------
+
+static void wxPGDrawFocusRect( wxDC& dc, const wxRect& rect )
+{
+#if defined(__WXMSW__) && !defined(__WXWINCE__)
+    // FIXME: Use DrawFocusRect code above (currently it draws solid line
+    //   for caption focus but works ok for other stuff).
+    //   Also, it seems that this code may not work in future wx versions.
+    dc.SetLogicalFunction(wxINVERT);
+
+    wxPen pen(*wxBLACK,1,wxDOT);
+    pen.SetCap(wxCAP_BUTT);
+    dc.SetPen(pen);
+    dc.SetBrush(*wxTRANSPARENT_BRUSH);
+
+    dc.DrawRectangle(rect);
+
+    dc.SetLogicalFunction(wxCOPY);
+#else
+    dc.SetLogicalFunction(wxINVERT);
+
+    dc.SetPen(wxPen(*wxBLACK,1,wxDOT));
+    dc.SetBrush(*wxTRANSPARENT_BRUSH);
+
+    dc.DrawRectangle(rect);
+
+    dc.SetLogicalFunction(wxCOPY);
+#endif
+}
+
+// -----------------------------------------------------------------------
+// wxPGCellRenderer
+// -----------------------------------------------------------------------
+
+wxSize wxPGCellRenderer::GetImageSize( const wxPGProperty* WXUNUSED(property),
+                                       int WXUNUSED(column),
+                                       int WXUNUSED(item) ) const
+{
+     return wxSize(0, 0);
+}
+
+void wxPGCellRenderer::DrawText( wxDC& dc, const wxRect& rect,
+                                 int xOffset, const wxString& text ) const
+{
+    if ( xOffset )
+        xOffset += wxCC_CUSTOM_IMAGE_MARGIN1 + wxCC_CUSTOM_IMAGE_MARGIN2;
+    dc.DrawText( text,
+                 rect.x+xOffset+wxPG_XBEFORETEXT,
+                 rect.y+((rect.height-dc.GetCharHeight())/2) );
+}
+
+void wxPGCellRenderer::DrawEditorValue( wxDC& dc, const wxRect& rect,
+                                        int xOffset, const wxString& text,
+                                        wxPGProperty* property,
+                                        const wxPGEditor* editor ) const
+{
+    if ( xOffset )
+        xOffset += wxCC_CUSTOM_IMAGE_MARGIN1 + wxCC_CUSTOM_IMAGE_MARGIN2;
+
+    int yOffset = ((rect.height-dc.GetCharHeight())/2);
+
+    if ( editor )
+    {
+        wxRect rect2(rect); 
+        rect2.x += xOffset;
+        rect2.y += yOffset;
+        rect2.height -= yOffset;
+        editor->DrawValue( dc, rect2, property, text );
+    }
+    else
+    {
+        dc.DrawText( text,
+                     rect.x+xOffset+wxPG_XBEFORETEXT,
+                     rect.y+yOffset );
+    }
+}
+
+void wxPGCellRenderer::DrawCaptionSelectionRect( wxDC& dc, int x, int y, int w, int h ) const
+{
+    wxRect focusRect(x,y+((h-dc.GetCharHeight())/2),w,h);
+    wxPGDrawFocusRect(dc,focusRect);
+}
+
+int wxPGCellRenderer::PreDrawCell( wxDC& dc, const wxRect& rect, const wxPGCell& cell, int flags ) const
+{
+    int imageOffset = 0;
+
+    if ( !(flags & Selected) )
+    {
+        // Draw using wxPGCell information, if available
+        wxColour fgCol = cell.GetFgCol();
+        if ( fgCol.Ok() )
+            dc.SetTextForeground(fgCol);
+
+        wxColour bgCol = cell.GetBgCol();
+        if ( bgCol.Ok() )
+        {
+            dc.SetPen(bgCol);
+            dc.SetBrush(bgCol);
+            dc.DrawRectangle(rect);
+        }
+    }
+
+    const wxBitmap& bmp = cell.GetBitmap();
+    if ( bmp.Ok() &&
+        // In control, do not draw oversized bitmap
+         (!(flags & Control) || bmp.GetHeight() < rect.height )
+        )
+    {
+        dc.DrawBitmap( bmp,
+                       rect.x + wxPG_CONTROL_MARGIN + wxCC_CUSTOM_IMAGE_MARGIN1,
+                       rect.y + wxPG_CUSTOM_IMAGE_SPACINGY,
+                       true );
+        imageOffset = bmp.GetWidth();
+    }
+
+    return imageOffset;
+}
+
+// -----------------------------------------------------------------------
+// wxPGDefaultRenderer
+// -----------------------------------------------------------------------
+
+void wxPGDefaultRenderer::Render( wxDC& dc, const wxRect& rect,
+                                  const wxPropertyGrid* propertyGrid, wxPGProperty* property,
+                                  int column, int item, int flags ) const
+{
+    bool isUnspecified = property->IsValueUnspecified();
+
+    if ( column == 1 && item == -1 )
+    {
+        int cmnVal = property->GetCommonValue();
+        if ( cmnVal >= 0 )
+        {
+            // Common Value
+            if ( !isUnspecified )
+                DrawText( dc, rect, 0, propertyGrid->GetCommonValueLabel(cmnVal) );
+            return;
+        }
+    }
+
+    const wxPGEditor* editor = NULL;
+    const wxPGCell* cell = property->GetCell(column);
+
+    wxString text;
+    int imageOffset = 0;
+
+    // Use choice cell?
+    if ( column == 1 && (flags & Control) )
+    {
+        const wxPGCell* ccell = property->GetCurrentChoice();
+        if ( ccell &&
+             ( ccell->GetBitmap().IsOk() || ccell->GetFgCol().IsOk() || ccell->GetBgCol().IsOk() )
+           )
+            cell = ccell;
+    }
+
+    if ( cell )
+    {
+        int preDrawFlags = flags;
+
+        if ( propertyGrid->GetInternalFlags() & wxPG_FL_CELL_OVERRIDES_SEL )
+            preDrawFlags = preDrawFlags & ~(Selected);
+
+        imageOffset = PreDrawCell( dc, rect, *cell, preDrawFlags );
+        text = cell->GetText();
+        if ( text == wxS("@!") )
+        {
+            if ( column == 0 )
+                text = property->GetLabel();
+            else if ( column == 1 )
+                text = property->GetValueString();
+            else
+                text = wxEmptyString;
+        }
+    }
+    else if ( column == 0 )
+    {
+        // Caption
+        DrawText( dc, rect, 0, property->GetLabel() );
+    }
+    else if ( column == 1 )
+    {
+        if ( !isUnspecified )
+        {
+            editor = property->GetColumnEditor(column);
+
+            // Regular property value
+
+            wxSize imageSize = propertyGrid->GetImageSize(property, item);
+
+            wxPGPaintData paintdata;
+            paintdata.m_parent = propertyGrid;
+            paintdata.m_choiceItem = item;
+
+            if ( imageSize.x > 0 )
+            {
+                wxRect imageRect(rect.x + wxPG_CONTROL_MARGIN + wxCC_CUSTOM_IMAGE_MARGIN1,
+                                 rect.y+wxPG_CUSTOM_IMAGE_SPACINGY,
+                                 wxPG_CUSTOM_IMAGE_WIDTH,
+                                 rect.height-(wxPG_CUSTOM_IMAGE_SPACINGY*2));
+
+                /*if ( imageSize.x == wxPG_FULL_CUSTOM_PAINT_WIDTH )
+                {
+                    imageRect.width = m_width - imageRect.x;
+                }*/
+
+                dc.SetPen( wxPen(propertyGrid->GetCellTextColour(), 1, wxSOLID) );
+
+                paintdata.m_drawnWidth = imageSize.x;
+                paintdata.m_drawnHeight = imageSize.y;
+
+                if ( !isUnspecified )
+                {
+                    property->OnCustomPaint( dc, imageRect, paintdata );
+                }
+                else
+                {
+                    dc.SetBrush(*wxWHITE_BRUSH);
+                    dc.DrawRectangle(imageRect);
+                }
+
+                imageOffset = paintdata.m_drawnWidth;
+            }
+
+            text = property->GetValueString();
+
+            // Add units string?
+            if ( propertyGrid->GetColumnCount() <= 2 )
+            {
+                wxString unitsString = property->GetAttribute(wxPGGlobalVars->m_strUnits, wxEmptyString);
+                if ( unitsString.length() )
+                    text = wxString::Format(wxS("%s %s"), text.c_str(), unitsString.c_str() );
+            }
+        }
+
+        if ( text.length() == 0 )
+        {
+            // Try to show inline help if no text
+            wxVariant vInlineHelp = property->GetAttribute(wxPGGlobalVars->m_strInlineHelp);
+            if ( !vInlineHelp.IsNull() )
+            {
+                text = vInlineHelp.GetString();
+                dc.SetTextForeground(propertyGrid->GetCellDisabledTextColour());
+            }
+        }
+    }
+    else if ( column == 2 )
+    {
+        // Add units string?
+        if ( !text.length() )
+            text = property->GetAttribute(wxPGGlobalVars->m_strUnits, wxEmptyString);
+    }
+
+    DrawEditorValue( dc, rect, imageOffset, text, property, editor );
+
+    // active caption gets nice dotted rectangle
+    if ( property->IsCategory() /*&& column == 0*/ )
+    {
+        if ( flags & Selected )
+        {
+            if ( imageOffset > 0 )
+                imageOffset += wxCC_CUSTOM_IMAGE_MARGIN2 + 4;
+
+            DrawCaptionSelectionRect( dc,
+                                      rect.x+wxPG_XBEFORETEXT-wxPG_CAPRECTXMARGIN+imageOffset,
+                                      rect.y-wxPG_CAPRECTYMARGIN+1,
+                                      ((wxPropertyCategory*)property)->GetTextExtent(propertyGrid,
+                                                                                     propertyGrid->GetCaptionFont())
+                                      +(wxPG_CAPRECTXMARGIN*2),
+                                      propertyGrid->GetFontHeight()+(wxPG_CAPRECTYMARGIN*2) );
+        }
+    }
+}
+
+wxSize wxPGDefaultRenderer::GetImageSize( const wxPGProperty* property,
+                                          int column,
+                                          int item ) const
+{
+    if ( property && column == 1 )
+    {
+        if ( item == -1 )
+        {
+            wxBitmap* bmp = property->GetValueImage();
+
+            if ( bmp && bmp->Ok() )
+                return wxSize(bmp->GetWidth(),bmp->GetHeight());
+        }
+    }
+    return wxSize(0,0);
+}
+
+// -----------------------------------------------------------------------
+// wxPGCell
+// -----------------------------------------------------------------------
+
+wxPGCell::wxPGCell()
+{
+}
+
+wxPGCell::wxPGCell( const wxString& text,
+                    const wxBitmap& bitmap,
+                    const wxColour& fgCol,
+                    const wxColour& bgCol )
+    : m_bitmap(bitmap), m_fgCol(fgCol), m_bgCol(bgCol)
+{
+    m_text = text;
+}
+
+// -----------------------------------------------------------------------
+// wxPGProperty
+// -----------------------------------------------------------------------
+
+IMPLEMENT_ABSTRACT_CLASS(wxPGProperty, wxObject)
+
+wxString* wxPGProperty::sm_wxPG_LABEL = NULL;
+
+void wxPGProperty::Init()
+{
+    m_commonValue = -1;
+    m_arrIndex = 0xFFFF;
+    m_parent = NULL;
+
+    m_parentState = (wxPropertyGridPageState*) NULL;
+
+    m_clientData = NULL;
+    m_clientObject = NULL;
+
+    m_customEditor = (wxPGEditor*) NULL;
+#if wxUSE_VALIDATORS
+    m_validator = (wxValidator*) NULL;
+#endif
+    m_valueBitmap = (wxBitmap*) NULL;
+
+    m_maxLen = 0; // infinite maximum length
+
+    m_flags = wxPG_PROP_PROPERTY;
+
+    m_depth = 1;
+    m_bgColIndex = 0;
+    m_fgColIndex = 0;
+
+    SetExpanded(true);
+}
+
+
+void wxPGProperty::Init( const wxString& label, const wxString& name )
+{
+    // We really need to check if &label and &name are NULL pointers
+    // (this can if we are called before property grid has been initalized)
+
+    if ( (&label) != NULL && label != wxPG_LABEL )
+        m_label = label;
+
+    if ( (&name) != NULL && name != wxPG_LABEL )
+        DoSetName( name );
+    else
+        DoSetName( m_label );
+
+    Init();
+}
+
+wxPGProperty::wxPGProperty()
+    : wxObject()
+{
+    Init();
+}
+
+
+wxPGProperty::wxPGProperty( const wxString& label, const wxString& name )
+    : wxObject()
+{
+    Init( label, name );
+}
+
+
+wxPGProperty::~wxPGProperty()
+{
+    delete m_clientObject;
+
+    Empty();  // this deletes items
+
+    delete m_valueBitmap;
+#if wxUSE_VALIDATORS
+    delete m_validator;
+#endif
+
+    unsigned int i;
+
+    for ( i=0; i<m_cells.size(); i++ )
+        delete (wxPGCell*) m_cells[i];
+
+    // This makes it easier for us to detect dangling pointers
+    m_parent = NULL;
+}
+
+
+bool wxPGProperty::IsSomeParent( wxPGProperty* candidate ) const
+{
+    wxPGProperty* parent = m_parent;
+    do
+    {
+        if ( parent == candidate )
+            return true;
+        parent = parent->m_parent;
+    } while ( parent );
+    return false;
+}
+
+
+wxString wxPGProperty::GetName() const
+{
+    wxPGProperty* parent = GetParent();
+
+    if ( !m_name.length() || !parent || parent->IsCategory() || parent->IsRoot() )
+        return m_name;
+
+    return m_parent->GetName() + wxS(".") + m_name;
+}
+
+wxPropertyGrid* wxPGProperty::GetGrid() const
+{
+    if ( !m_parentState )
+        return NULL;
+    return m_parentState->GetGrid();
+}
+
+
+void wxPGProperty::UpdateControl( wxWindow* primary )
+{
+    if ( primary )
+        GetEditorClass()->UpdateControl(this, primary);
+}
+
+bool wxPGProperty::ValidateValue( wxVariant& WXUNUSED(value), wxPGValidationInfo& WXUNUSED(validationInfo) ) const
+{
+    return true;
+}
+
+void wxPGProperty::OnSetValue()
+{
+}
+
+void wxPGProperty::RefreshChildren ()
+{
+}
+
+wxString wxPGProperty::GetColumnText( unsigned int col ) const
+{
+    wxPGCell* cell = GetCell(col);
+    if ( cell )
+    {
+        return cell->GetText();
+    }
+    else
+    {
+        if ( col == 0 )
+            return GetLabel();
+        else if ( col == 1 )
+            return GetDisplayedString();
+        else if ( col == 2 )
+            return GetAttribute(wxPGGlobalVars->m_strUnits, wxEmptyString);
+    }
+
+    return wxEmptyString;
+}
+
+void wxPGProperty::GenerateComposedValue( wxString& text, int argFlags ) const
+{
+    int i;
+    int iMax = m_children.GetCount();
+
+    text.clear();
+    if ( iMax == 0 )
+        return;
+
+    if ( iMax > PWC_CHILD_SUMMARY_LIMIT &&
+         !(argFlags & wxPG_FULL_VALUE) )
+        iMax = PWC_CHILD_SUMMARY_LIMIT;
+
+    int iMaxMinusOne = iMax-1;
+
+    if ( !IsTextEditable() )
+        argFlags |= wxPG_UNEDITABLE_COMPOSITE_FRAGMENT;
+
+    wxPGProperty* curChild = (wxPGProperty*) m_children.Item(0);
+
+    for ( i = 0; i < iMax; i++ )
+    {
+        wxString s;
+        if ( !curChild->IsValueUnspecified() )
+            s = curChild->GetValueString(argFlags|wxPG_COMPOSITE_FRAGMENT);
+
+        bool skip = false;
+        if ( (argFlags & wxPG_UNEDITABLE_COMPOSITE_FRAGMENT) && !s.length() )
+            skip = true;
+
+        if ( !curChild->GetChildCount() || skip )
+            text += s;
+        else
+            text += wxS("[") + s + wxS("]");
+
+        if ( i < iMaxMinusOne )
+        {
+            if ( text.length() > PWC_CHILD_SUMMARY_CHAR_LIMIT &&
+                 !(argFlags & wxPG_EDITABLE_VALUE) &&
+                 !(argFlags & wxPG_FULL_VALUE) )
+                break;
+
+            if ( !skip )
+            {
+                if ( !curChild->GetChildCount() )
+                    text += wxS("; ");
+                else
+                    text += wxS(" ");
+            }
+
+            curChild = (wxPGProperty*) m_children.Item(i+1);
+        }
+    }
+
+    // Remove superfluous semicolon and space
+    wxString rest;
+    if ( text.EndsWith(wxS("; "), &rest) )
+        text = rest;
+
+    if ( (unsigned int)i < m_children.GetCount() )
+        text += wxS("; ...");
+}
+
+wxString wxPGProperty::GetValueAsString( int argFlags ) const
+{
+    wxCHECK_MSG( GetChildCount() > 0,
+                 wxString(),
+                 wxT("If user property does not have any children, it must override GetValueAsString") );
+
+    wxString text;
+    GenerateComposedValue(text, argFlags);
+    return text;
+}
+
+wxString wxPGProperty::GetValueString( int argFlags ) const
+{
+    if ( IsValueUnspecified() )
+        return wxEmptyString;
+
+    if ( m_commonValue == -1 )
+        return GetValueAsString(argFlags);
+
+    //
+    // Return common value's string representation
+    wxPropertyGrid* pg = GetGrid();
+    const wxPGCommonValue* cv = pg->GetCommonValue(m_commonValue);
+
+    if ( argFlags & wxPG_FULL_VALUE )
+    {
+        return cv->GetLabel();
+    }
+    else if ( argFlags & wxPG_EDITABLE_VALUE )
+    {
+        return cv->GetEditableText();
+    }
+    else
+    {
+        return cv->GetLabel();
+    }
+}
+
+bool wxPGProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argFlags) ) const
+{
+    variant = (long)number;
+    return true;
+}
+
+// Convert semicolon delimited tokens into child values.
+bool wxPGProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const
+{
+    if ( !GetChildCount() )
+        return false;
+
+    unsigned int curChild = 0;
+
+    unsigned int iMax = m_children.GetCount();
+
+    if ( iMax > PWC_CHILD_SUMMARY_LIMIT &&
+         !(argFlags & wxPG_FULL_VALUE) )
+        iMax = PWC_CHILD_SUMMARY_LIMIT;
+
+    bool changed = false;
+
+    wxString token;
+    size_t pos = 0;
+
+    // Its best only to add non-empty group items
+    bool addOnlyIfNotEmpty = false;
+    const wxChar delimeter = wxS(';');
+
+    size_t tokenStart = 0xFFFFFF;
+
+    wxVariantList temp_list;
+    wxVariant list(temp_list);
+
+    int propagatedFlags = argFlags & wxPG_REPORT_ERROR;
+
+#ifdef __WXDEBUG__
+    bool debug_print = false;
+#endif
+
+#ifdef __WXDEBUG__
+    if ( debug_print )
+        wxLogDebug(wxT(">> %s.StringToValue('%s')"),GetLabel().c_str(),text.c_str());
+#endif
+
+    wxString::const_iterator it = text.begin();
+    wxUniChar a;
+
+    if ( it != text.end() )
+        a = *it;
+    else
+        a = 0;
+
+    for ( ;; )
+    {
+        if ( tokenStart != 0xFFFFFF )
+        {
+            // Token is running
+            if ( a == delimeter || a == 0 )
+            {
+                token = text.substr(tokenStart,pos-tokenStart);
+                token.Trim(true);
+                size_t len = token.length();
+
+                if ( !addOnlyIfNotEmpty || len > 0 )
+                {
+                    const wxPGProperty* child = Item(curChild);
+                #ifdef __WXDEBUG__
+                    if ( debug_print )
+                        wxLogDebug(wxT("token = '%s', child = %s"),token.c_str(),child->GetLabel().c_str());
+                #endif
+
+                    if ( len > 0 )
+                    {
+                        bool wasUnspecified = child->IsValueUnspecified();
+
+                        wxVariant variant(child->GetValueRef());
+                        if ( child->StringToValue(variant, token, propagatedFlags|wxPG_COMPOSITE_FRAGMENT) )
+                        {
+                            // Use label instead of name, as name can be empty string, but
+                            // label in practice never is.
+                            variant.SetName(child->GetLabel());
+
+                            // Clear unspecified flag only if OnSetValue() didn't
+                            // affect it.
+                            if ( child->IsValueUnspecified() &&
+                                 (wasUnspecified || !UsesAutoUnspecified()) )
+                            {
+                                variant = child->GetDefaultValue();
+                            }
+
+                            list.Append(variant);
+
+                            changed = true;
+                        }
+                    }
+                    else
+                    {
+                        // Empty, becomes unspecified
+                        wxVariant variant2;
+                        variant2.SetName(child->GetLabel());
+                        list.Append(variant2);
+                        changed = true;
+                    }
+
+                    curChild++;
+                    if ( curChild >= iMax )
+                        break;
+                }
+
+                tokenStart = 0xFFFFFF;
+            }
+        }
+        else
+        {
+            // Token is not running
+            if ( a != wxS(' ') )
+            {
+
+                addOnlyIfNotEmpty = false;
+
+                // Is this a group of tokens?
+                if ( a == wxS('[') )
+                {
+                    int depth = 1;
+
+                    if ( it != text.end() ) it++;
+                    pos++;
+                    size_t startPos = pos;
+
+                    // Group item - find end
+                    while ( it != text.end() && depth > 0 )
+                    {
+                        a = *it;
+                        it++;
+                        pos++;
+
+                        if ( a == wxS(']') )
+                            depth--;
+                        else if ( a == wxS('[') )
+                            depth++;
+                    }
+
+                    token = text.substr(startPos,pos-startPos-1);
+
+                    if ( !token.length() )
+                        break;
+
+                    const wxPGProperty* child = Item(curChild);
+
+                    wxVariant variant(child->GetValueRef());
+                    if ( child->StringToValue( variant, token, propagatedFlags ) )
+                    {
+                        // Use label instead of name, as name can be empty string, but
+                        // label in practice never is.
+                        variant.SetName(child->GetLabel());
+                        list.Append(variant);
+                        changed = true;
+                    }
+                    else
+                    {
+                        // Failed, becomes unspecified
+                        wxVariant variant2;
+                        variant2.SetName(child->GetLabel());
+                        list.Append(variant2);
+                        changed = true;
+                    }
+
+                    curChild++;
+                    if ( curChild >= iMax )
+                        break;
+
+                    addOnlyIfNotEmpty = true;
+
+                    tokenStart = 0xFFFFFF;
+                }
+                else
+                {
+                    tokenStart = pos;
+
+                    if ( a == delimeter )
+                    {
+                        pos--;
+                        it--;
+                    }
+                }
+            }
+        }
+
+        if ( a == 0 )
+            break;
+
+        it++;
+        if ( it != text.end() )
+        {
+            a = *it;
+        }
+        else
+        {
+            a = 0;
+        }
+        pos++;
+    }
+
+    if ( changed )
+        variant = list;
+
+    return changed;
+}
+
+bool wxPGProperty::SetValueFromString( const wxString& text, int argFlags )
+{
+    wxVariant variant(m_value);
+    bool res = StringToValue(variant, text, argFlags);
+    if ( res )
+        SetValue(variant);
+    return res;
+}
+
+bool wxPGProperty::SetValueFromInt( long number, int argFlags )
+{
+    wxVariant variant(m_value);
+    bool res = IntToValue(variant, number, argFlags);
+    if ( res )
+        SetValue(variant);
+    return res;
+}
+
+wxSize wxPGProperty::OnMeasureImage( int WXUNUSED(item) ) const
+{
+    if ( m_valueBitmap )
+        return wxSize(m_valueBitmap->GetWidth(),-1);
+
+    return wxSize(0,0);
+}
+
+wxPGCellRenderer* wxPGProperty::GetCellRenderer( int WXUNUSED(column) ) const
+{
+    return wxPGGlobalVars->m_defaultRenderer;
+}
+
+void wxPGProperty::OnCustomPaint( wxDC& dc,
+                                  const wxRect& rect,
+                                  wxPGPaintData& )
+{
+    wxBitmap* bmp = m_valueBitmap;
+
+    wxCHECK_RET( bmp && bmp->Ok(), wxT("invalid bitmap") );
+
+    wxCHECK_RET( rect.x >= 0, wxT("unexpected measure call") );
+
+    dc.DrawBitmap(*bmp,rect.x,rect.y);
+}
+
+const wxPGEditor* wxPGProperty::DoGetEditorClass() const
+{
+    return wxPG_EDITOR(TextCtrl);
+}
+
+// Default extra property event handling - that is, none at all.
+bool wxPGProperty::OnEvent( wxPropertyGrid*, wxWindow*, wxEvent& )
+{
+    return false;
+}
+
+
+void wxPGProperty::SetValue( wxVariant value, wxVariant* pList, int flags )
+{
+    if ( !value.IsNull() )
+    {
+        SetCommonValue(-1);
+        // List variants are reserved a special purpose
+        // as intermediate containers for child values
+        // of properties with children.
+        if ( wxPGIsVariantType(value, list) )
+        {
+            wxVariant newValue;
+            AdaptListToValue(value, &newValue);
+            value = newValue;
+            //wxLogDebug(wxT(">> %s.SetValue() adapted list value to type '%s'"),GetName().c_str(),value.GetType().c_str());
+        }
+
+        if ( HasFlag( wxPG_PROP_AGGREGATE) )
+            flags |= wxPG_SETVAL_AGGREGATED;
+
+        if ( pList && !pList->IsNull() )
+        {
+            wxASSERT( wxPGIsVariantType(*pList, list) );
+            wxASSERT( GetChildCount() );
+            wxASSERT( !IsCategory() );
+
+            wxVariantList& list = pList->GetList();
+            wxVariantList::iterator node;
+            unsigned int i = 0;
+
+            //wxLogDebug(wxT(">> %s.SetValue() pList parsing"),GetName().c_str());
+
+            // Children in list can be in any order, but we will give hint to
+            // GetPropertyByLabelWH(). This optimizes for full list parsing.
+            for ( node = list.begin(); node != list.end(); node++ )
+            {
+                wxVariant& childValue = *((wxVariant*)*node);
+                wxPGProperty* child = GetPropertyByLabelWH(childValue.GetName(), i);
+                if ( child )
+                {
+                    //wxLogDebug(wxT("%i: child = %s, childValue.GetType()=%s"),i,child->GetLabel().c_str(),childValue.GetType().c_str());
+                    if ( wxPGIsVariantType(childValue, list) )
+                    {
+                        if ( child->HasFlag(wxPG_PROP_AGGREGATE) && !(flags & wxPG_SETVAL_AGGREGATED) )
+                        {
+                            wxVariant listRefCopy = childValue;
+                            child->SetValue(childValue, &listRefCopy, flags|wxPG_SETVAL_FROM_PARENT);
+                        }
+                        else
+                        {
+                            wxVariant oldVal = child->GetValue();
+                            child->SetValue(oldVal, &childValue, flags|wxPG_SETVAL_FROM_PARENT);
+                        }
+                    }
+                    else if ( !wxPG_VARIANT_EQ(child->GetValue(), childValue) )
+                        // This flag is not normally set when setting value programmatically.
+                        // However, this loop is usually only executed when called from
+                        // DoPropertyChanged, which should set this flag.
+                    {
+                        // For aggregate properties, we will trust RefreshChildren()
+                        // to update child values.
+                        if ( !HasFlag(wxPG_PROP_AGGREGATE) )
+                            child->SetValue(childValue, NULL, flags|wxPG_SETVAL_FROM_PARENT);
+                        child->SetFlag(wxPG_PROP_MODIFIED);
+                    }
+                }
+                i++;
+            }
+        }
+
+        if ( !value.IsNull() )
+        {
+            wxPGVariantAssign(m_value, value);
+            OnSetValue();
+
+            if ( !(flags & wxPG_SETVAL_FROM_PARENT) )
+                UpdateParentValues();
+        }
+
+        if ( pList )
+            SetFlag(wxPG_PROP_MODIFIED);
+
+        if ( HasFlag(wxPG_PROP_AGGREGATE) )
+            RefreshChildren();
+    }
+    else
+    {
+        if ( m_commonValue != -1 )
+        {
+            wxPropertyGrid* pg = GetGrid();
+            if ( !pg || m_commonValue != pg->GetUnspecifiedCommonValue() )
+                SetCommonValue(-1);
+        }
+
+        m_value = value;
+
+        // Set children to unspecified, but only if aggregate or
+        // value is <composed>
+        if ( AreChildrenComponents() )
+        {
+            unsigned int i;
+            for ( i=0; i<GetChildCount(); i++ )
+                Item(i)->SetValue(value, NULL, flags|wxPG_SETVAL_FROM_PARENT);
+        }
+    }
+
+    //
+    // Update editor control
+    //
+
+    // We need to check for these, otherwise GetGrid() may fail.
+    if ( flags & wxPG_SETVAL_REFRESH_EDITOR )
+        RefreshEditor();
+}
+
+
+void wxPGProperty::SetValueInEvent( wxVariant value ) const
+{
+    GetGrid()->ValueChangeInEvent(value);
+}
+
+void wxPGProperty::SetFlagRecursively( FlagType flag, bool set )
+{
+    if ( set )
+        SetFlag(flag);
+    else
+        ClearFlag(flag);
+
+    unsigned int i;
+    for ( i = 0; i < GetChildCount(); i++ )
+        Item(i)->SetFlagRecursively(flag, set);
+}
+
+void wxPGProperty::RefreshEditor()
+{
+    if ( m_parent && GetParentState() )
+    {
+        wxPropertyGrid* pg = GetParentState()->GetGrid();
+        if ( pg->GetSelectedProperty() == this )
+        {
+            wxWindow* editor = pg->GetEditorControl();
+            if ( editor )
+                GetEditorClass()->UpdateControl( this, editor );
+        }
+    }
+}
+
+
+wxVariant wxPGProperty::GetDefaultValue() const
+{
+    wxVariant defVal = GetAttribute(wxS("DefaultValue"));
+    if ( !defVal.IsNull() )
+        return defVal;
+
+    wxVariant value = GetValue();
+
+    if ( !value.IsNull() )
+    {
+        wxPGVariantDataClassInfo classInfo = wxPGVariantDataGetClassInfo(value.GetData());
+        if ( wxPGIsVariantClassInfo(classInfo, long) )
+            return wxPGVariant_Zero;
+        if ( wxPGIsVariantClassInfo(classInfo, string) )
+            return wxPGVariant_EmptyString;
+        if ( wxPGIsVariantClassInfo(classInfo, bool) )
+            return wxPGVariant_False;
+        if ( wxPGIsVariantClassInfo(classInfo, double) )
+            return wxVariant(0.0);
+
+        wxPGVariantData* pgvdata = wxDynamicCastVariantData(m_value.GetData(), wxPGVariantData);
+        if ( pgvdata )
+            return pgvdata->GetDefaultValue();
+
+        if ( wxPGIsVariantClassInfo(classInfo, arrstring) )
+            return wxVariant(wxArrayString());
+        if ( wxPGIsVariantClassInfo(classInfo, wxColour) )
+            return WXVARIANT(*wxRED);
+#if wxUSE_DATETIME
+        if ( wxPGIsVariantClassInfo(classInfo, datetime) )
+            return wxVariant(wxDateTime::Now());
+#endif
+
+        wxFAIL_MSG(
+            wxString::Format(wxT("Inorder for value to have default value, it must be added to")
+                             wxT("wxPGProperty::GetDefaultValue or it's variantdata must inherit")
+                             wxT("from wxPGVariantData (unrecognized type was '%s')"),m_value.GetType().c_str())
+                  );
+    }
+
+    return wxVariant();
+}
+
+void wxPGProperty::SetCell( int column, wxPGCell* cellObj )
+{
+    if ( column >= (int)m_cells.size() )
+        m_cells.SetCount(column+1, NULL);
+
+    delete (wxPGCell*) m_cells[column];
+    m_cells[column] = cellObj;
+}
+
+void wxPGProperty::SetChoiceSelection( int newValue, const wxPGChoiceInfo& choiceInfo )
+{
+    // Changes value of a property with choices, but only
+    // works if the value type is long or string.
+    wxString ts = GetValue().GetType();
+
+    wxCHECK_RET( choiceInfo.m_choices, wxT("invalid choiceinfo") );
+
+    if ( ts == wxS("long") )
+    {
+        SetValue( (long) newValue );
+    }
+    else if ( ts == wxS("string") )
+    {
+        SetValue( choiceInfo.m_choices->GetLabel(newValue) );
+    }
+}
+
+
+wxString wxPGProperty::GetChoiceString( unsigned int index )
+{
+    wxPGChoiceInfo ci;
+    GetChoiceInfo(&ci);
+    wxASSERT(ci.m_choices);
+    return ci.m_choices->GetLabel(index);
+}
+
+int wxPGProperty::InsertChoice( const wxString& label, int index, int value )
+{
+    wxPropertyGrid* pg = GetGrid();
+
+    wxPGChoiceInfo ci;
+    ci.m_choices = (wxPGChoices*) NULL;
+    int sel = GetChoiceInfo(&ci);
+
+    if ( ci.m_choices )
+    {
+        int newSel = sel;
+
+        if ( index < 0 )
+            index = ci.m_choices->GetCount();
+
+        if ( index <= sel )
+            newSel++;
+
+        ci.m_choices->Insert(label, index, value);
+
+        if ( sel != newSel )
+            SetChoiceSelection(newSel, ci);
+
+        if ( this == pg->GetSelection() )
+            GetEditorClass()->InsertItem(pg->GetEditorControl(),label,index);
+
+        return index;
+    }
+
+    return -1;
+}
+
+
+void wxPGProperty::DeleteChoice( int index )
+{
+    wxPropertyGrid* pg = GetGrid();
+
+    wxPGChoiceInfo ci;
+    ci.m_choices = (wxPGChoices*) NULL;
+    int sel = GetChoiceInfo(&ci);
+
+    if ( ci.m_choices )
+    {
+        int newSel = sel;
+
+        // Adjust current value
+        if ( sel == index )
+        {
+            SetValueToUnspecified();
+            newSel = 0;
+        }
+        else if ( index < sel )
+        {
+            newSel--;
+        }
+
+        ci.m_choices->RemoveAt(index);
+
+        if ( sel != newSel )
+            SetChoiceSelection(newSel, ci);
+
+        if ( this == pg->GetSelection() )
+            GetEditorClass()->DeleteItem(pg->GetEditorControl(), index);
+    }
+}
+
+int wxPGProperty::GetChoiceInfo( wxPGChoiceInfo* WXUNUSED(info) )
+{
+    return -1;
+}
+
+wxPGEditorDialogAdapter* wxPGProperty::GetEditorDialog() const
+{
+    return NULL;
+}
+
+bool wxPGProperty::DoSetAttribute( const wxString& WXUNUSED(name), wxVariant& WXUNUSED(value) )
+{
+    return false;
+}
+
+void wxPGProperty::SetAttribute( const wxString& name, wxVariant value )
+{
+    if ( DoSetAttribute( name, value ) )
+    {
+        // Support working without grid, when possible
+        if ( wxPGGlobalVars->HasExtraStyle( wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES ) )
+            return;
+    }
+
+    m_attributes.Set( name, value );
+}
+
+void wxPGProperty::SetAttributes( const wxPGAttributeStorage& attributes )
+{
+    wxPGAttributeStorage::const_iterator it = attributes.StartIteration();
+    wxVariant variant;
+
+    while ( attributes.GetNext(it, variant) )
+        SetAttribute( variant.GetName(), variant );
+}
+
+wxVariant wxPGProperty::DoGetAttribute( const wxString& WXUNUSED(name) ) const
+{
+    return wxVariant();
+}
+
+
+wxVariant wxPGProperty::GetAttribute( const wxString& name ) const
+{
+    return m_attributes.FindValue(name);
+}
+
+wxString wxPGProperty::GetAttribute( const wxString& name, const wxString& defVal ) const
+{
+    wxVariant variant = m_attributes.FindValue(name);
+
+    if ( !variant.IsNull() )
+        return variant.GetString();
+
+    return defVal;
+}
+
+long wxPGProperty::GetAttributeAsLong( const wxString& name, long defVal ) const
+{
+    wxVariant variant = m_attributes.FindValue(name);
+
+    return wxPGVariantToInt(variant, defVal);
+}
+
+double wxPGProperty::GetAttributeAsDouble( const wxString& name, double defVal ) const
+{
+    double retVal;
+    wxVariant variant = m_attributes.FindValue(name);
+
+    if ( wxPGVariantToDouble(variant, &retVal) )
+        return retVal;
+
+    return defVal;
+}
+
+wxVariant wxPGProperty::GetAttributesAsList() const
+{
+    wxVariantList tempList;
+    wxVariant v( tempList, wxString::Format(wxS("@%s@attr"),m_name.c_str()) );
+
+    wxPGAttributeStorage::const_iterator it = m_attributes.StartIteration();
+    wxVariant variant;
+
+    while ( m_attributes.GetNext(it, variant) )
+        v.Append(variant);
+
+    return v;
+}
+
+// Slots of utility flags are NULL
+const unsigned int gs_propFlagToStringSize = 14;
+
+static const wxChar* gs_propFlagToString[gs_propFlagToStringSize] = {
+    NULL,
+    wxT("DISABLED"),
+    wxT("HIDDEN"),
+    NULL,
+    wxT("NOEDITOR"),
+    wxT("COLLAPSED"),
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL
+};
+
+wxString wxPGProperty::GetFlagsAsString( FlagType flagsMask ) const
+{
+    wxString s;
+    int relevantFlags = m_flags & flagsMask & wxPG_STRING_STORED_FLAGS;
+    FlagType a = 1;
+
+    unsigned int i = 0;
+    for ( i=0; i<gs_propFlagToStringSize; i++ )
+    {
+        if ( relevantFlags & a )
+        {
+            const wxChar* fs = gs_propFlagToString[i];
+            wxASSERT(fs);
+            if ( s.length() )
+                s << wxS("|");
+            s << fs;
+        }
+        a = a << 1;
+    }
+
+    return s;
+}
+
+void wxPGProperty::SetFlagsFromString( const wxString& str )
+{
+    FlagType flags = 0;
+
+    WX_PG_TOKENIZER1_BEGIN(str, wxS('|'))
+        unsigned int i;
+        for ( i=0; i<gs_propFlagToStringSize; i++ )
+        {
+            const wxChar* fs = gs_propFlagToString[i];
+            if ( fs && str == fs )
+            {
+                flags |= (1<<i);
+                break;
+            }
+        }
+    WX_PG_TOKENIZER1_END()
+
+    m_flags = (m_flags & ~wxPG_STRING_STORED_FLAGS) | flags;
+}
+
+wxValidator* wxPGProperty::DoGetValidator() const
+{
+    return (wxValidator*) NULL;
+}
+
+wxPGChoices& wxPGProperty::GetChoices()
+{
+    wxPGChoiceInfo choiceInfo;
+    choiceInfo.m_choices = NULL;
+    GetChoiceInfo(&choiceInfo);
+    return *choiceInfo.m_choices;
+}
+
+const wxPGChoices& wxPGProperty::GetChoices() const
+{
+    return (const wxPGChoices&) ((wxPGProperty*)this)->GetChoices();
+}
+
+unsigned int wxPGProperty::GetChoiceCount() const
+{
+    const wxPGChoices& choices = GetChoices();
+    if ( &choices && choices.IsOk() )
+        return choices.GetCount();
+    return 0;
+}
+
+const wxPGChoiceEntry* wxPGProperty::GetCurrentChoice() const
+{
+    wxPGChoiceInfo ci;
+    ci.m_choices = (wxPGChoices*) NULL;
+    int index = ((wxPGProperty*)this)->GetChoiceInfo(&ci);
+    if ( index == -1 || !ci.m_choices || index >= (int)ci.m_choices->GetCount() )
+        return NULL;
+
+    return &(*ci.m_choices)[index];
+}
+
+bool wxPGProperty::SetChoices( wxPGChoices& choices )
+{
+    wxPGChoiceInfo ci;
+    ci.m_choices = (wxPGChoices*) NULL;
+
+    // Unref existing
+    GetChoiceInfo(&ci);
+    if ( ci.m_choices )
+    {
+        ci.m_choices->Assign(choices);
+
+        //if ( m_parent )
+        {
+            // This may be needed to trigger some initialization
+            // (but don't do it if property is somewhat uninitialized)
+            wxVariant defVal = GetDefaultValue();
+            if ( defVal.IsNull() )
+                return false;
+
+            SetValue(defVal);
+
+            return true;
+        }
+    }
+    return false;
+}
+
+
+const wxPGEditor* wxPGProperty::GetEditorClass() const
+{
+    const wxPGEditor* editor;
+
+    if ( !m_customEditor )
+    {
+        editor = DoGetEditorClass();
+    }
+    else
+        editor = m_customEditor;
+
+    //
+    // Maybe override editor if common value specified
+    if ( GetDisplayedCommonValueCount() )
+    {
+        // TextCtrlAndButton -> ComboBoxAndButton
+        if ( editor->IsKindOf(CLASSINFO(wxPGTextCtrlAndButtonEditor)) )
+            editor = wxPG_EDITOR(ChoiceAndButton);
+
+        // TextCtrl -> ComboBox
+        else if ( editor->IsKindOf(CLASSINFO(wxPGTextCtrlEditor)) )
+            editor = wxPG_EDITOR(ComboBox);
+    }
+
+    return editor;
+}
+
+
+// Privatizes set of choices
+void wxPGProperty::SetChoicesExclusive()
+{
+    wxPGChoiceInfo ci;
+    ci.m_choices = (wxPGChoices*) NULL;
+
+    GetChoiceInfo(&ci);
+    if ( ci.m_choices )
+        ci.m_choices->SetExclusive();
+}
+
+bool wxPGProperty::HasVisibleChildren() const
+{
+    unsigned int i;
+
+    for ( i=0; i<GetChildCount(); i++ )
+    {
+        wxPGProperty* child = Item(i);
+
+        if ( !child->HasFlag(wxPG_PROP_HIDDEN) )
+            return true;
+    }
+
+    return false;
+}
+
+bool wxPGProperty::PrepareValueForDialogEditing( wxPropertyGrid* propGrid )
+{
+    return propGrid->EditorValidate();
+}
+
+
+bool wxPGProperty::RecreateEditor()
+{
+    wxPropertyGrid* pg = GetGrid();
+    wxASSERT(pg);
+
+    wxPGProperty* selected = pg->GetSelection();
+    if ( this == selected )
+    {
+        pg->DoSelectProperty(this, wxPG_SEL_FORCE);
+        return true;
+    }
+    return false;
+}
+
+
+void wxPGProperty::SetValueImage( wxBitmap& bmp )
+{
+    delete m_valueBitmap;
+
+    if ( &bmp && bmp.Ok() )
+    {
+        // Resize the image
+        wxSize maxSz = GetGrid()->GetImageSize();
+        wxSize imSz(bmp.GetWidth(),bmp.GetHeight());
+
+        if ( imSz.x != maxSz.x || imSz.y != maxSz.y )
+        {
+            // Create a memory DC
+            wxBitmap* bmpNew = new wxBitmap(maxSz.x,maxSz.y,bmp.GetDepth());
+
+            wxMemoryDC dc;
+            dc.SelectObject(*bmpNew);
+
+            // Scale
+            // FIXME: This is ugly - use image or wait for scaling patch.
+            double scaleX = (double)maxSz.x / (double)imSz.x;
+            double scaleY = (double)maxSz.y / (double)imSz.y;
+
+            dc.SetUserScale(scaleX,scaleY);
+
+            dc.DrawBitmap( bmp, 0, 0 );
+
+            m_valueBitmap = bmpNew;
+        }
+        else
+        {
+            m_valueBitmap = new wxBitmap(bmp);
+        }
+
+        m_flags |= wxPG_PROP_CUSTOMIMAGE;
+    }
+    else
+    {
+        m_valueBitmap = NULL;
+        m_flags &= ~(wxPG_PROP_CUSTOMIMAGE);
+    }
+}
+
+
+wxPGProperty* wxPGProperty::GetMainParent() const
+{
+    const wxPGProperty* curChild = this;
+    const wxPGProperty* curParent = m_parent;
+
+    while ( curParent && !curParent->IsCategory() )
+    {
+        curChild = curParent;
+        curParent = curParent->m_parent;
+    }
+
+    return (wxPGProperty*) curChild;
+}
+
+
+const wxPGProperty* wxPGProperty::GetLastVisibleSubItem() const
+{
+    //
+    // Returns last visible sub-item, recursively.
+    if ( !IsExpanded() || !GetChildCount() )
+        return this;
+
+    return Last()->GetLastVisibleSubItem();
+}
+
+
+bool wxPGProperty::IsVisible() const
+{
+    const wxPGProperty* parent;
+
+    if ( HasFlag(wxPG_PROP_HIDDEN) )
+        return false;
+
+    for ( parent = GetParent(); parent != NULL; parent = parent->GetParent() )
+    {
+        if ( !parent->IsExpanded() || parent->HasFlag(wxPG_PROP_HIDDEN) )
+            return false;
+    }
+
+    return true;
+}
+
+wxPropertyGrid* wxPGProperty::GetGridIfDisplayed() const
+{
+    wxPropertyGridPageState* state = GetParentState();
+    wxPropertyGrid* propGrid = state->GetGrid();
+    if ( state == propGrid->GetState() )
+        return propGrid;
+    return NULL;
+}
+
+
+int wxPGProperty::GetY2( int lh ) const
+{
+    const wxPGProperty* parent;
+    const wxPGProperty* child = this;
+
+    int y = 0;
+
+    for ( parent = GetParent(); parent != NULL; parent = child->GetParent() )
+    {
+        if ( !parent->IsExpanded() )
+            return -1;
+        y += parent->GetChildrenHeight(lh, child->GetIndexInParent());
+        y += lh;
+        child = parent;
+    }
+
+    y -= lh;  // need to reduce one level
+
+    return y;
+}
+
+
+int wxPGProperty::GetY() const
+{
+    return GetY2(GetGrid()->GetRowHeight());
+}
+
+
+wxPGProperty* wxPGPropArgCls::GetPtr( wxPropertyGridInterface* methods ) const
+{
+    if ( !m_isName )
+    {
+        wxASSERT_MSG( m_ptr.property, wxT("invalid property ptr") );
+        return m_ptr.property;
+    }
+    else if ( m_isName == 1 )
+        return methods->GetPropertyByNameA(*m_ptr.name);
+    else if ( m_isName == 2 )
+        return methods->GetPropertyByNameA(m_ptr.rawname);
+    // 3 is like 1, but ptr is freed in dtor - only needed by wxPython bindings.
+    else if ( m_isName == 3 )
+        return methods->GetPropertyByNameA(*m_ptr.name);
+
+    wxASSERT( m_isName <= 3 );
+    return NULL;
+}
+
+// This is used by Insert etc.
+void wxPGProperty::AddChild2( wxPGProperty* prop, int index, bool correct_mode )
+{
+    if ( index < 0 || (size_t)index >= m_children.GetCount() )
+    {
+        if ( correct_mode ) prop->m_arrIndex = m_children.GetCount();
+        m_children.Add( prop );
+    }
+    else
+    {
+        m_children.Insert( prop, index );
+        if ( correct_mode ) FixIndexesOfChildren( index );
+    }
+
+    prop->m_parent = this;
+}
+
+// This is used by properties that have fixed sub-properties
+void wxPGProperty::AddChild( wxPGProperty* prop )
+{
+    prop->m_arrIndex = m_children.GetCount();
+    m_children.Add( prop );
+
+    int custImgHeight = prop->OnMeasureImage().y;
+    if ( custImgHeight < 0 /*|| custImgHeight > 1*/ )
+        prop->m_flags |= wxPG_PROP_CUSTOMIMAGE;
+
+    prop->m_parent = this;
+}
+
+
+void wxPGProperty::AdaptListToValue( wxVariant& list, wxVariant* value ) const
+{
+    wxASSERT( GetChildCount() );
+    wxASSERT( !IsCategory() );
+
+    *value = GetValue();
+
+    if ( !list.GetCount() )
+        return;
+
+    wxASSERT( GetChildCount() >= (unsigned int)list.GetCount() );
+
+    bool allChildrenSpecified;
+
+    // Don't fully update aggregate properties unless all children have
+    // specified value
+    if ( HasFlag(wxPG_PROP_AGGREGATE) )
+        allChildrenSpecified = AreAllChildrenSpecified(&list);
+    else
+        allChildrenSpecified = true;
+
+    wxVariant childValue = list[0];
+    unsigned int i;
+    unsigned int n = 0;
+
+    //wxLogDebug(wxT(">> %s.AdaptListToValue()"),GetLabel().c_str());
+
+    for ( i=0; i<GetChildCount(); i++ )
+    {
+        const wxPGProperty* child = Item(i);
+
+        if ( childValue.GetName() == child->GetLabel() )
+        {
+            //wxLogDebug(wxT("  %s(n=%i), %s"),childValue.GetName().c_str(),n,childValue.GetType().c_str());
+
+            if ( wxPGIsVariantType(childValue, list) )
+            {
+                wxVariant cv2(child->GetValue());
+                child->AdaptListToValue(childValue, &cv2);
+                childValue = cv2;
+            }
+
+            if ( allChildrenSpecified )
+                ChildChanged(*value, i, childValue);
+            n++;
+            if ( n == (unsigned int)list.GetCount() )
+                break;
+            childValue = list[n];
+        }
+    }
+}
+
+
+void wxPGProperty::FixIndexesOfChildren( size_t starthere )
+{
+    size_t i;
+    for ( i=starthere;i<GetChildCount();i++)
+        Item(i)->m_arrIndex = i;
+}
+
+
+// Returns (direct) child property with given name (or NULL if not found)
+wxPGProperty* wxPGProperty::GetPropertyByName( const wxString& name ) const
+{
+    size_t i;
+
+    for ( i=0; i<GetChildCount(); i++ )
+    {
+        wxPGProperty* p = Item(i);
+        if ( p->m_name == name )
+            return p;
+    }
+
+    // Does it have point, then?
+    int pos = name.Find(wxS('.'));
+    if ( pos <= 0 )
+        return (wxPGProperty*) NULL;
+
+    wxPGProperty* p = GetPropertyByName(name. substr(0,pos));
+
+    if ( !p || !p->GetChildCount() )
+        return NULL;
+
+    return p->GetPropertyByName(name.substr(pos+1,name.length()-pos-1));
+}
+
+wxPGProperty* wxPGProperty::GetPropertyByLabelWH( const wxString& label, unsigned int hintIndex ) const
+{
+    unsigned int i = hintIndex;
+
+    if ( i >= GetChildCount() )
+        i = 0;
+
+    unsigned int lastIndex = i - 1;
+
+    if ( lastIndex >= GetChildCount() )
+        lastIndex = GetChildCount() - 1;
+
+    for (;;)
+    {
+        wxPGProperty* p = Item(i);
+        if ( p->m_label == label )
+            return p;
+
+        if ( i == lastIndex )
+            break;
+
+        i++;
+        if ( i == GetChildCount() )
+            i = 0;
+    };
+
+    return NULL;
+}
+
+int wxPGProperty::GetChildrenHeight( int lh, int iMax_ ) const
+{
+    // Returns height of children, recursively, and
+    // by taking expanded/collapsed status into account.
+    //
+    // iMax is used when finding property y-positions.
+    //
+    unsigned int i = 0;
+    int h = 0;
+
+    if ( iMax_ == -1 )
+        iMax_ = GetChildCount();
+
+    unsigned int iMax = iMax_;
+
+    wxASSERT( iMax <= GetChildCount() );
+
+    if ( !IsExpanded() && GetParent() )
+        return 0;
+
+    while ( i < iMax )
+    {
+        wxPGProperty* pwc = (wxPGProperty*) Item(i);
+
+        if ( !pwc->HasFlag(wxPG_PROP_HIDDEN) )
+        {
+            if ( !pwc->IsExpanded() ||
+                 pwc->GetChildCount() == 0 )
+                h += lh;
+            else
+                h += pwc->GetChildrenHeight(lh) + lh;
+        }
+
+        i++;
+    }
+
+    return h;
+}
+
+wxPGProperty* wxPGProperty::GetItemAtY( unsigned int y, unsigned int lh, unsigned int* nextItemY ) const
+{
+    wxASSERT( nextItemY );
+
+    // Linear search at the moment
+    //
+    // nextItemY = y of next visible property, final value will be written back.
+    wxPGProperty* result = NULL;
+    wxPGProperty* current = NULL;
+    unsigned int iy = *nextItemY;
+    unsigned int i = 0;
+    unsigned int iMax = GetChildCount();
+
+    while ( i < iMax )
+    {
+        wxPGProperty* pwc = Item(i);
+
+        if ( !pwc->HasFlag(wxPG_PROP_HIDDEN) )
+        {
+            // Found?
+            if ( y < iy )
+            {
+                result = current;
+                break;
+            }
+
+            iy += lh;
+
+            if ( pwc->IsExpanded() &&
+                 pwc->GetChildCount() > 0 )
+            {
+                result = (wxPGProperty*) pwc->GetItemAtY( y, lh, &iy );
+                if ( result )
+                    break;
+            }
+
+            current = pwc;
+        }
+
+        i++;
+    }
+
+    // Found?
+    if ( !result && y < iy )
+        result = current;
+
+    *nextItemY = iy;
+
+    /*
+    if ( current )
+        wxLogDebug(wxT("%s::GetItemAtY(%i) -> %s"),this->GetLabel().c_str(),y,current->GetLabel().c_str());
+    else
+        wxLogDebug(wxT("%s::GetItemAtY(%i) -> NULL"),this->GetLabel().c_str(),y);
+    */
+
+    return (wxPGProperty*) result;
+}
+
+void wxPGProperty::Empty()
+{
+    size_t i;
+    if ( !HasFlag(wxPG_PROP_CHILDREN_ARE_COPIES) )
+    {
+        for ( i=0; i<GetChildCount(); i++ )
+        {
+            wxPGProperty* p = (wxPGProperty*) Item(i);
+            delete p;
+        }
+    }
+
+    m_children.Empty();
+}
+
+void wxPGProperty::ChildChanged( wxVariant& WXUNUSED(thisValue),
+                                 int WXUNUSED(childIndex),
+                                 wxVariant& WXUNUSED(childValue) ) const
+{
+}
+
+bool wxPGProperty::AreAllChildrenSpecified( wxVariant* pendingList ) const
+{
+    unsigned int i;
+
+    const wxVariantList* pList = NULL;
+    wxVariantList::const_iterator node;
+
+    if ( pendingList )
+    {
+        pList = &pendingList->GetList();
+        node = pList->begin();
+    }
+
+    // Children in list can be in any order, but we will give hint to
+    // GetPropertyByLabelWH(). This optimizes for full list parsing.
+    for ( i=0; i<GetChildCount(); i++ )
+    {
+        wxPGProperty* child = Item(i);
+        const wxVariant* listValue = NULL;
+        wxVariant value;
+
+        if ( pendingList )
+        {
+            const wxString& childLabel = child->GetLabel();
+
+            for ( ; node != pList->end(); node++ )
+            {
+                const wxVariant& item = *((const wxVariant*)*node);
+                if ( item.GetName() == childLabel )
+                {
+                    listValue = &item;
+                    value = item;
+                    break;
+                }
+            }
+        }
+
+        if ( !listValue )
+            value = child->GetValue();
+
+        if ( value.IsNull() )
+            return false;
+
+        // Check recursively
+        if ( child->GetChildCount() )
+        {
+            const wxVariant* childList = NULL;
+
+            if ( listValue && wxPGIsVariantType(*listValue, list) )
+                childList = listValue;
+
+            if ( !child->AreAllChildrenSpecified((wxVariant*)childList) )
+                return false;
+        }
+    }
+
+    return true;
+}
+
+wxPGProperty* wxPGProperty::UpdateParentValues()
+{
+    wxPGProperty* parent = m_parent;
+    if ( parent && parent->HasFlag(wxPG_PROP_COMPOSED_VALUE) &&
+         !parent->IsCategory() && !parent->IsRoot() )
+    {
+        wxString s;
+        parent->GenerateComposedValue(s, 0);
+        parent->m_value = s;
+        return parent->UpdateParentValues();
+    }
+    return this;
+}
+
+bool wxPGProperty::IsTextEditable() const
+{
+    if ( HasFlag(wxPG_PROP_READONLY) )
+        return false;
+
+    if ( HasFlag(wxPG_PROP_NOEDITOR) &&
+         (GetChildCount() ||
+          wxString(GetEditorClass()->GetClassInfo()->GetClassName()).EndsWith(wxS("Button")))
+       )
+        return false;
+
+    return true;
+}
+
+// Call for after sub-properties added with AddChild
+void wxPGProperty::PrepareSubProperties()
+{
+    wxPropertyGridPageState* state = GetParentState();
+
+    wxASSERT(state);
+
+    if ( !GetChildCount() )
+        return;
+
+    wxByte depth = m_depth + 1;
+    wxByte depthBgCol = m_depthBgCol;
+
+    FlagType inheritFlags = m_flags & wxPG_INHERITED_PROPFLAGS;
+
+    wxByte bgColIndex = m_bgColIndex;
+    wxByte fgColIndex = m_fgColIndex;
+
+    //
+    // Set some values to the children
+    //
+    size_t i = 0;
+    wxPGProperty* nparent = this;
+
+    while ( i < nparent->GetChildCount() )
+    {
+        wxPGProperty* np = nparent->Item(i);
+
+        np->m_parentState = state;
+        np->m_flags |= inheritFlags; // Hideable also if parent.
+        np->m_depth = depth;
+        np->m_depthBgCol = depthBgCol;
+        np->m_bgColIndex = bgColIndex;
+        np->m_fgColIndex = fgColIndex;
+
+        // Also handle children of children
+        if ( np->GetChildCount() > 0 )
+        {
+            nparent = np;
+            i = 0;
+
+            // Init
+            nparent->SetParentalType(wxPG_PROP_AGGREGATE);
+            nparent->SetExpanded(false);
+            depth++;
+        }
+        else
+        {
+            // Next sibling
+            i++;
+        }
+
+        // After reaching last sibling, go back to processing
+        // siblings of the parent
+        while ( i >= nparent->GetChildCount() )
+        {
+            // Exit the loop when top parent hit
+            if ( nparent == this )
+                break;
+
+            depth--;
+
+            i = nparent->GetArrIndex() + 1;
+            nparent = nparent->GetParent();
+        }
+    }
+}
+
+// Call after fixed sub-properties added/removed after creation.
+// if oldSelInd >= 0 and < new max items, then selection is
+// moved to it. Note: oldSelInd -2 indicates that this property
+// should be selected.
+void wxPGProperty::SubPropsChanged( int oldSelInd )
+{
+    wxPropertyGridPageState* state = GetParentState();
+    wxPropertyGrid* grid = state->GetGrid();
+
+    PrepareSubProperties();
+
+    wxPGProperty* sel = (wxPGProperty*) NULL;
+    if ( oldSelInd >= (int)m_children.GetCount() )
+        oldSelInd = (int)m_children.GetCount() - 1;
+
+    if ( oldSelInd >= 0 )
+        sel = (wxPGProperty*) m_children[oldSelInd];
+    else if ( oldSelInd == -2 )
+        sel = this;
+
+    if ( sel )
+        state->DoSelectProperty(sel);
+
+    if ( state == grid->GetState() )
+    {
+        grid->GetPanel()->Refresh();
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPGRootProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(wxPGRootProperty,none,TextCtrl)
+IMPLEMENT_DYNAMIC_CLASS(wxPGRootProperty, wxPGProperty)
+
+
+wxPGRootProperty::wxPGRootProperty()
+    : wxPGProperty()
+{
+#ifdef __WXDEBUG__
+    m_name = wxS("<root>");
+#endif
+    SetParentalType(0);
+    m_depth = 0;
+}
+
+
+wxPGRootProperty::~wxPGRootProperty()
+{
+}
+
+
+// -----------------------------------------------------------------------
+// wxPropertyCategory
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(wxPropertyCategory,none,TextCtrl)
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyCategory, wxPGProperty)
+
+void wxPropertyCategory::Init()
+{
+    // don't set colour - prepareadditem method should do this
+    SetParentalType(wxPG_PROP_CATEGORY);
+    m_capFgColIndex = 1;
+    m_textExtent = -1;
+}
+
+wxPropertyCategory::wxPropertyCategory()
+    : wxPGProperty()
+{
+    Init();
+}
+
+
+wxPropertyCategory::wxPropertyCategory( const wxString &label, const wxString& name )
+    : wxPGProperty(label,name)
+{
+    Init();
+}
+
+
+wxPropertyCategory::~wxPropertyCategory()
+{
+}
+
+
+wxString wxPropertyCategory::GetValueAsString( int ) const
+{
+    return wxEmptyString;
+}
+
+int wxPropertyCategory::GetTextExtent( const wxWindow* wnd, const wxFont& font ) const
+{
+    if ( m_textExtent > 0 )
+        return m_textExtent;
+    int x = 0, y = 0;
+       ((wxWindow*)wnd)->GetTextExtent( m_label, &x, &y, 0, 0, &font );
+    return x;
+}
+
+void wxPropertyCategory::CalculateTextExtent( wxWindow* wnd, const wxFont& font )
+{
+    int x = 0, y = 0;
+       wnd->GetTextExtent( m_label, &x, &y, 0, 0, &font );
+    m_textExtent = x;
+}
+
+// -----------------------------------------------------------------------
+// wxPGAttributeStorage
+// -----------------------------------------------------------------------
+
+wxPGAttributeStorage::wxPGAttributeStorage()
+{
+}
+
+wxPGAttributeStorage::~wxPGAttributeStorage()
+{
+    wxPGHashMapS2P::iterator it;
+
+    for ( it = m_map.begin(); it != m_map.end(); it++ )
+    {
+        wxVariantData* data = (wxVariantData*) it->second;
+        data->DecRef();
+    }
+}
+
+void wxPGAttributeStorage::Set( const wxString& name, const wxVariant& value )
+{
+    wxVariantData* data = value.GetData();
+
+    // Free old, if any
+    wxPGHashMapS2P::iterator it = m_map.find(name);
+    if ( it != m_map.end() )
+        ((wxVariantData*)it->second)->DecRef();
+
+    if ( data )
+        data->IncRef();
+
+    m_map[name] = data;
+}
+
diff --git a/src/propgrid/propgrid.cpp b/src/propgrid/propgrid.cpp
new file mode 100644 (file)
index 0000000..05eb4a6
--- /dev/null
@@ -0,0 +1,6324 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/propgrid/propgrid.cpp
+// Purpose:     wxPropertyGrid
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2004-09-25
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/defs.h"
+    #include "wx/object.h"
+    #include "wx/hash.h"
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/event.h"
+    #include "wx/window.h"
+    #include "wx/panel.h"
+    #include "wx/dc.h"
+    #include "wx/dcmemory.h"
+    #include "wx/button.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/settings.h"
+    #include "wx/msgdlg.h"
+    #include "wx/choice.h"
+    #include "wx/stattext.h"
+    #include "wx/scrolwin.h"
+    #include "wx/dirdlg.h"
+    #include "wx/layout.h"
+    #include "wx/sizer.h"
+    #include "wx/textdlg.h"
+    #include "wx/filedlg.h"
+    #include "wx/statusbr.h"
+    #include "wx/intl.h"
+    #include "wx/frame.h"
+#endif
+
+
+// This define is necessary to prevent macro clearing
+#define __wxPG_SOURCE_FILE__
+
+#include <wx/propgrid/propgrid.h>
+#include <wx/propgrid/editors.h>
+
+#if wxPG_USE_RENDERER_NATIVE
+    #include <wx/renderer.h>
+#endif
+
+#include <wx/odcombo.h>
+
+#include "wx/timer.h"
+#include "wx/dcbuffer.h"
+#include <wx/clipbrd.h>
+#include <wx/dataobj.h>
+
+#ifdef __WXMSW__
+    #include <wx/msw/private.h>
+#endif
+
+
+// Two pics for the expand / collapse buttons.
+// Files are not supplied with this project (since it is
+// recommended to use either custom or native rendering).
+// If you want them, get wxTreeMultiCtrl by Jorgen Bodde,
+// and copy xpm files from archive to wxPropertyGrid src directory
+// (and also comment/undef wxPG_ICON_WIDTH in propGrid.h
+// and set wxPG_USE_RENDERER_NATIVE to 0).
+#ifndef wxPG_ICON_WIDTH
+  #if defined(__WXMAC__)
+    #include "mac_collapse.xpm"
+    #include "mac_expand.xpm"
+  #elif defined(__WXGTK__)
+    #include "linux_collapse.xpm"
+    #include "linux_expand.xpm"
+  #else
+    #include "default_collapse.xpm"
+    #include "default_expand.xpm"
+  #endif
+#endif
+
+
+//#define wxPG_TEXT_INDENT                4 // For the wxComboControl
+#define wxPG_ALLOW_CLIPPING             1 // If 1, GetUpdateRegion() in OnPaint event handler is not ignored
+#define wxPG_GUTTER_DIV                 3 // gutter is max(iconwidth/gutter_div,gutter_min)
+#define wxPG_GUTTER_MIN                 3 // gutter before and after image of [+] or [-]
+#define wxPG_YSPACING_MIN               1
+#define wxPG_DEFAULT_VSPACING           2 // This matches .NET propertygrid's value,
+                                          // but causes normal combobox to spill out under MSW
+
+#define wxPG_OPTIMAL_WIDTH              200 // Arbitrary
+
+#define wxPG_MIN_SCROLLBAR_WIDTH        10 // Smallest scrollbar width on any platform
+                                           // Must be larger than largest control border
+                                           // width * 2.
+
+
+#define wxPG_DEFAULT_CURSOR             wxNullCursor
+
+
+//#define wxPG_NAT_CHOICE_BORDER_ANY   0
+
+#define wxPG_HIDER_BUTTON_HEIGHT        25
+
+#define wxPG_PIXELS_PER_UNIT            m_lineHeight
+
+#ifdef wxPG_ICON_WIDTH
+  #define m_iconHeight m_iconWidth
+#endif
+
+#define wxPG_TOOLTIP_DELAY              1000
+
+// -----------------------------------------------------------------------
+
+#if wxUSE_INTL
+void wxPropertyGrid::AutoGetTranslation ( bool enable )
+{
+    wxPGGlobalVars->m_autoGetTranslation = enable;
+}
+#else
+void wxPropertyGrid::AutoGetTranslation ( bool ) { }
+#endif
+
+// -----------------------------------------------------------------------
+
+const wxChar *wxPropertyGridNameStr = wxT("wxPropertyGrid");
+
+// -----------------------------------------------------------------------
+// Statics in one class for easy destruction.
+// NB: We prefer to use wxModule, as it offers more consistent behavior
+//     across platforms. However, for those rare problem situations, we
+//     also need to offer option to use simpler approach.
+// -----------------------------------------------------------------------
+
+#ifndef wxPG_USE_WXMODULE
+    #define wxPG_USE_WXMODULE 1
+#endif
+
+#if wxPG_USE_WXMODULE
+
+#include <wx/module.h>
+
+class wxPGGlobalVarsClassManager : public wxModule
+{
+    DECLARE_DYNAMIC_CLASS(wxPGGlobalVarsClassManager)
+public:
+    wxPGGlobalVarsClassManager() {}
+    virtual bool OnInit() { wxPGGlobalVars = new wxPGGlobalVarsClass(); return true; }
+    virtual void OnExit() { delete wxPGGlobalVars; wxPGGlobalVars = NULL; }
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxPGGlobalVarsClassManager, wxModule)
+
+#else // !wxPG_USE_WXMODULE
+
+class wxPGGlobalVarsClassManager
+{
+public:
+    wxPGGlobalVarsClassManager() {}
+    ~wxPGGlobalVarsClassManager() { delete wxPGGlobalVars; }
+};
+
+static wxPGGlobalVarsClassManager gs_pgGlobalVarsClassManager;
+
+#endif
+
+
+wxPGGlobalVarsClass* wxPGGlobalVars = (wxPGGlobalVarsClass*) NULL;
+
+
+wxPGGlobalVarsClass::wxPGGlobalVarsClass()
+{
+    wxPGProperty::sm_wxPG_LABEL = new wxString(wxPG_LABEL_STRING);
+
+    m_boolChoices.Add(_("False"));
+    m_boolChoices.Add(_("True"));
+
+    m_fontFamilyChoices = (wxPGChoices*) NULL;
+
+    m_defaultRenderer = new wxPGDefaultRenderer();
+
+    m_autoGetTranslation = false;
+
+    m_offline = 0;
+
+    m_extraStyle = 0;
+
+    wxVariant v;
+
+    v = (long)0;
+    wxVariantClassInfo_long = wxPGVariantDataGetClassInfo(v.GetData());
+
+    v = wxString();
+    wxVariantClassInfo_string = wxPGVariantDataGetClassInfo(v.GetData());
+
+    v = (double)0.0;
+    wxVariantClassInfo_double = wxPGVariantDataGetClassInfo(v.GetData());
+
+    v = (bool)false;
+    wxVariantClassInfo_bool = wxPGVariantDataGetClassInfo(v.GetData());
+
+    v = wxArrayString();
+    wxVariantClassInfo_arrstring = wxPGVariantDataGetClassInfo(v.GetData());
+
+    wxColour col;
+    wxVariant v2((wxObject*)&col);
+    wxVariantClassInfo_wxobject = wxPGVariantDataGetClassInfo(v2.GetData());
+
+    wxVariantList list;
+    v = wxVariant(list);
+    wxVariantClassInfo_list = wxPGVariantDataGetClassInfo(v.GetData());
+
+    v << *wxRED;
+    wxVariantClassInfo_wxColour = wxPGVariantDataGetClassInfo(v.GetData());
+
+#if wxUSE_DATETIME
+    v = wxVariant(wxDateTime::Now());
+    wxVariantClassInfo_datetime = wxPGVariantDataGetClassInfo(v.GetData());
+#endif
+
+       // Prepare some shared variants
+    m_vEmptyString = wxString();
+    m_vZero = (long) 0;
+    m_vMinusOne = (long) -1;
+    m_vTrue = true;
+    m_vFalse = false;
+
+    // Prepare cached string constants
+    m_strMin = wxS("Min");
+    m_strMax = wxS("Max");
+    m_strUnits = wxS("Units");
+    m_strInlineHelp = wxS("InlineHelp");
+
+#ifdef __WXDEBUG__
+    m_warnings = 0;
+#endif
+}
+
+
+wxPGGlobalVarsClass::~wxPGGlobalVarsClass()
+{
+    size_t i;
+
+    delete m_defaultRenderer;
+
+    // This will always have one ref
+    delete m_fontFamilyChoices;
+
+#if wxUSE_VALIDATORS
+    for ( i=0; i<m_arrValidators.size(); i++ )
+        delete ((wxValidator*)m_arrValidators[i]);
+#endif
+
+    //
+    // Destroy value type class instances.
+    wxPGHashMapS2P::iterator vt_it;
+
+    // Destroy editor class instances.
+    // iterate over all the elements in the class
+    for( vt_it = m_mapEditorClasses.begin(); vt_it != m_mapEditorClasses.end(); ++vt_it )
+    {
+        delete ((wxPGEditor*)vt_it->second);
+    }
+
+    delete wxPGProperty::sm_wxPG_LABEL;
+}
+
+// -----------------------------------------------------------------------
+// wxPGBrush
+// -----------------------------------------------------------------------
+
+//
+// This class is a wxBrush derivative used in the background colour
+// brush cache. It adds wxPG-type colour-in-long to the class.
+// JMS: Yes I know wxBrush doesn't actually hold the value (refcounted
+//   object does), but this is simpler implementation and equally
+//   effective.
+//
+
+class wxPGBrush : public wxBrush
+{
+public:
+    wxPGBrush( const wxColour& colour );
+    wxPGBrush();
+    virtual ~wxPGBrush() { }
+    void SetColour2( const wxColour& colour );
+    inline long GetColourAsLong() const { return m_colAsLong; }
+private:
+    long    m_colAsLong;
+};
+
+
+void wxPGBrush::SetColour2( const wxColour& colour )
+{
+    wxBrush::SetColour(colour);
+    m_colAsLong = wxPG_COLOUR(colour.Red(),colour.Green(),colour.Blue());
+}
+
+
+wxPGBrush::wxPGBrush() : wxBrush()
+{
+    m_colAsLong = 0;
+}
+
+
+wxPGBrush::wxPGBrush( const wxColour& colour ) : wxBrush(colour)
+{
+    m_colAsLong = wxPG_COLOUR(colour.Red(),colour.Green(),colour.Blue());
+}
+
+
+// -----------------------------------------------------------------------
+// wxPGColour
+// -----------------------------------------------------------------------
+
+//
+// Same as wxPGBrush, but for wxColour instead.
+//
+
+class wxPGColour : public wxColour
+{
+public:
+    wxPGColour( const wxColour& colour );
+    wxPGColour();
+    virtual ~wxPGColour() { }
+    void SetColour2( const wxColour& colour );
+    inline long GetColourAsLong() const { return m_colAsLong; }
+private:
+    long    m_colAsLong;
+};
+
+
+void wxPGColour::SetColour2( const wxColour& colour )
+{
+    *this = colour;
+    m_colAsLong = wxPG_COLOUR(colour.Red(),colour.Green(),colour.Blue());
+}
+
+
+wxPGColour::wxPGColour() : wxColour()
+{
+    m_colAsLong = 0;
+}
+
+
+wxPGColour::wxPGColour( const wxColour& colour ) : wxColour(colour)
+{
+    m_colAsLong = wxPG_COLOUR(colour.Red(),colour.Green(),colour.Blue());
+}
+
+
+// -----------------------------------------------------------------------
+// wxPGTLWHandler
+//   Intercepts Close-events sent to wxPropertyGrid's top-level parent,
+//   and tries to commit property value.
+// -----------------------------------------------------------------------
+
+class wxPGTLWHandler : public wxEvtHandler
+{
+public:
+
+    wxPGTLWHandler( wxPropertyGrid* pg )
+        : wxEvtHandler()
+    {
+        m_pg = pg;
+    }
+
+protected:
+
+    void OnClose( wxCloseEvent& event )
+    {
+        // ClearSelection forces value validation/commit.
+        if ( event.CanVeto() && !m_pg->ClearSelection() )
+        {
+            event.Veto();
+            return;
+        }
+
+        event.Skip();
+    }
+
+private:
+    wxPropertyGrid*     m_pg;
+
+    DECLARE_EVENT_TABLE()
+};
+
+BEGIN_EVENT_TABLE(wxPGTLWHandler, wxEvtHandler)
+    EVT_CLOSE(wxPGTLWHandler::OnClose)
+END_EVENT_TABLE()
+
+// -----------------------------------------------------------------------
+// wxPGCanvas
+// -----------------------------------------------------------------------
+
+//
+// wxPGCanvas acts as a graphics sub-window of the
+// wxScrolledWindow that wxPropertyGrid is.
+//
+class wxPGCanvas : public wxPanel
+{
+public:
+    wxPGCanvas() : wxPanel()
+    {
+    }
+    virtual ~wxPGCanvas() { }
+
+protected:
+    void OnMouseMove( wxMouseEvent &event )
+    {
+        wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+        pg->OnMouseMove( event );
+    }
+
+    void OnMouseClick( wxMouseEvent &event )
+    {
+        wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+        pg->OnMouseClick( event );
+    }
+
+    void OnMouseUp( wxMouseEvent &event )
+    {
+        wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+        pg->OnMouseUp( event );
+    }
+
+    void OnMouseRightClick( wxMouseEvent &event )
+    {
+        wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+        pg->OnMouseRightClick( event );
+    }
+
+    void OnMouseDoubleClick( wxMouseEvent &event )
+    {
+        wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+        pg->OnMouseDoubleClick( event );
+    }
+
+    void OnKey( wxKeyEvent& event )
+    {
+        wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+        pg->OnKey( event );
+    }
+
+    void OnKeyUp( wxKeyEvent& event )
+    {
+        wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+        pg->OnKeyUp( event );
+    }
+
+    void OnNavigationKey( wxNavigationKeyEvent& event )
+    {
+        wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+        pg->OnNavigationKey( event );
+    }
+
+    void OnPaint( wxPaintEvent& event );
+
+private:
+    DECLARE_EVENT_TABLE()
+};
+
+
+BEGIN_EVENT_TABLE(wxPGCanvas, wxPanel)
+    EVT_MOTION(wxPGCanvas::OnMouseMove)
+    EVT_PAINT(wxPGCanvas::OnPaint)
+    EVT_LEFT_DOWN(wxPGCanvas::OnMouseClick)
+    EVT_LEFT_UP(wxPGCanvas::OnMouseUp)
+    EVT_RIGHT_UP(wxPGCanvas::OnMouseRightClick)
+    EVT_LEFT_DCLICK(wxPGCanvas::OnMouseDoubleClick)
+    EVT_KEY_DOWN(wxPGCanvas::OnKey)
+    EVT_KEY_UP(wxPGCanvas::OnKeyUp)
+    EVT_CHAR(wxPGCanvas::OnKey)
+    EVT_NAVIGATION_KEY(wxPGCanvas::OnNavigationKey)
+END_EVENT_TABLE()
+
+
+void wxPGCanvas::OnPaint( wxPaintEvent& WXUNUSED(event) )
+{
+    wxPropertyGrid* pg = wxStaticCast(GetParent(), wxPropertyGrid);
+    wxASSERT( pg->IsKindOf(CLASSINFO(wxPropertyGrid)) );
+
+    wxPaintDC dc(this);
+
+    // Don't paint after destruction has begun
+    if ( !(pg->GetInternalFlags() & wxPG_FL_INITIALIZED) )
+        return;
+
+    // Update everything inside the box
+    wxRect r = GetUpdateRegion().GetBox();
+
+    // Repaint this rectangle
+    pg->DrawItems( dc, r.y, r.y + r.height, &r );
+
+    // We assume that the size set when grid is shown
+    // is what is desired.
+    pg->SetInternalFlag(wxPG_FL_GOOD_SIZE_SET);
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid
+// -----------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyGrid, wxScrolledWindow)
+
+BEGIN_EVENT_TABLE(wxPropertyGrid, wxScrolledWindow)
+  EVT_IDLE(wxPropertyGrid::OnIdle)
+  EVT_MOTION(wxPropertyGrid::OnMouseMoveBottom)
+  EVT_PAINT(wxPropertyGrid::OnPaint)
+  EVT_SIZE(wxPropertyGrid::OnResize)
+  EVT_ENTER_WINDOW(wxPropertyGrid::OnMouseEntry)
+  EVT_LEAVE_WINDOW(wxPropertyGrid::OnMouseEntry)
+  EVT_MOUSE_CAPTURE_CHANGED(wxPropertyGrid::OnCaptureChange)
+  EVT_SCROLLWIN(wxPropertyGrid::OnScrollEvent)
+  EVT_CHILD_FOCUS(wxPropertyGrid::OnChildFocusEvent)
+  EVT_SET_FOCUS(wxPropertyGrid::OnFocusEvent)
+  EVT_KILL_FOCUS(wxPropertyGrid::OnFocusEvent)
+  EVT_TEXT_ENTER(wxPG_SUBID1,wxPropertyGrid::OnCustomEditorEvent)
+  EVT_SYS_COLOUR_CHANGED(wxPropertyGrid::OnSysColourChanged)
+END_EVENT_TABLE()
+
+
+// -----------------------------------------------------------------------
+
+wxPropertyGrid::wxPropertyGrid()
+    : wxScrolledWindow()
+{
+    Init1();
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGrid::wxPropertyGrid( wxWindow *parent,
+                                wxWindowID id,
+                                const wxPoint& pos,
+                                const wxSize& size,
+                                long style,
+                                const wxChar* name )
+    : wxScrolledWindow()
+{
+    Init1();
+    Create(parent,id,pos,size,style,name);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::Create( wxWindow *parent,
+                             wxWindowID id,
+                             const wxPoint& pos,
+                             const wxSize& size,
+                             long style,
+                             const wxChar* name )
+{
+
+    if ( !(style&wxBORDER_MASK) )
+        style |= wxSIMPLE_BORDER;
+
+    style |= wxVSCROLL;
+
+#ifdef __WXMSW__
+    // This prevents crash under Win2K, but still
+    // enables keyboard navigation
+    if ( style & wxTAB_TRAVERSAL )
+    {
+        style &= ~(wxTAB_TRAVERSAL);
+        style |= wxWANTS_CHARS;
+    }
+#else
+    if ( style & wxTAB_TRAVERSAL )
+        style |= wxWANTS_CHARS;
+#endif
+
+    wxScrolledWindow::Create(parent,id,pos,size,style,name);
+
+    Init2();
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+//
+// Initialize values to defaults
+//
+void wxPropertyGrid::Init1()
+{
+#if !wxPG_USE_WXMODULE
+    if ( !wxPGGlobalVars )
+        wxPGGlobalVars = new wxPGGlobalVarsClass();
+#endif
+
+    // Register editor classes, if necessary.
+    if ( wxPGGlobalVars->m_mapEditorClasses.empty() )
+        RegisterDefaultEditors();
+
+    m_iFlags = 0;
+    m_pState = (wxPropertyGridPageState*) NULL;
+    m_wndEditor = m_wndEditor2 = (wxWindow*) NULL;
+    m_selected = (wxPGProperty*) NULL;
+    m_selColumn = -1;
+    m_propHover = (wxPGProperty*) NULL;
+    m_eventObject = this;
+    m_curFocused = (wxWindow*) NULL;
+    m_tlwHandler = NULL;
+    m_inDoPropertyChanged = 0;
+    m_inCommitChangesFromEditor = 0;
+    m_inDoSelectProperty = 0;
+    m_permanentValidationFailureBehavior = wxPG_VFB_DEFAULT;
+    m_dragStatus = 0;
+    m_mouseSide = 16;
+    m_editorFocused = 0;
+
+    // Set default keys
+    AddActionTrigger( wxPG_ACTION_NEXT_PROPERTY, WXK_RIGHT );
+    AddActionTrigger( wxPG_ACTION_NEXT_PROPERTY, WXK_DOWN );
+    AddActionTrigger( wxPG_ACTION_PREV_PROPERTY, WXK_LEFT );
+    AddActionTrigger( wxPG_ACTION_PREV_PROPERTY, WXK_UP );
+    AddActionTrigger( wxPG_ACTION_EXPAND_PROPERTY, WXK_RIGHT);
+    AddActionTrigger( wxPG_ACTION_COLLAPSE_PROPERTY, WXK_LEFT);
+    AddActionTrigger( wxPG_ACTION_CANCEL_EDIT, WXK_ESCAPE );
+    AddActionTrigger( wxPG_ACTION_CUT, 'X', wxMOD_CONTROL );
+    AddActionTrigger( wxPG_ACTION_CUT, WXK_DELETE, wxMOD_SHIFT );
+    AddActionTrigger( wxPG_ACTION_COPY, 'C', wxMOD_CONTROL);
+    AddActionTrigger( wxPG_ACTION_COPY, WXK_INSERT, wxMOD_CONTROL );
+    AddActionTrigger( wxPG_ACTION_PASTE, 'V', wxMOD_CONTROL );
+    AddActionTrigger( wxPG_ACTION_PASTE, WXK_INSERT, wxMOD_SHIFT );
+
+    m_coloursCustomized = 0;
+    m_frozen = 0;
+
+    m_canvas = NULL;
+
+#if wxPG_DOUBLE_BUFFER
+    m_doubleBuffer = (wxBitmap*) NULL;
+#endif
+
+    m_windowsToDelete = NULL;
+
+#ifndef wxPG_ICON_WIDTH
+       m_expandbmp = NULL;
+       m_collbmp = NULL;
+       m_iconWidth = 11;
+       m_iconHeight = 11;
+#else
+    m_iconWidth = wxPG_ICON_WIDTH;
+#endif
+
+    m_prevVY = -1;
+
+    m_gutterWidth = wxPG_GUTTER_MIN;
+    m_subgroup_extramargin = 10;
+
+    m_lineHeight = 0;
+
+    m_width = m_height = 0;
+
+    SetButtonShortcut(0);
+
+    m_keyComboConsumed = 0;
+
+    m_commonValues.push_back(new wxPGCommonValue(_("Unspecified"), wxPGGlobalVars->m_defaultRenderer) );
+    m_cvUnspecified = 0;
+
+    m_chgInfo_changedProperty = NULL;
+}
+
+// -----------------------------------------------------------------------
+
+//
+// Initialize after parent etc. set
+//
+void wxPropertyGrid::Init2()
+{
+    wxASSERT( !(m_iFlags & wxPG_FL_INITIALIZED ) );
+
+#ifdef __WXMAC__
+   // Smaller controls on Mac
+   SetWindowVariant(wxWINDOW_VARIANT_SMALL);
+#endif 
+
+    // Now create state, if one didn't exist already
+    // (wxPropertyGridManager might have created it for us).
+    if ( !m_pState )
+    {
+        m_pState = CreateState();
+        m_pState->m_pPropGrid = this;
+        m_iFlags |= wxPG_FL_CREATEDSTATE;
+    }
+
+    if ( !(m_windowStyle & wxPG_SPLITTER_AUTO_CENTER) )
+        m_iFlags |= wxPG_FL_DONT_CENTER_SPLITTER;
+
+    if ( m_windowStyle & wxPG_HIDE_CATEGORIES )
+    {
+        m_pState->InitNonCatMode();
+
+        m_pState->m_properties = m_pState->m_abcArray;
+    }
+
+    GetClientSize(&m_width,&m_height);
+
+#ifndef wxPG_ICON_WIDTH
+    // create two bitmap nodes for drawing
+       m_expandbmp = new wxBitmap(expand_xpm);
+       m_collbmp = new wxBitmap(collapse_xpm);
+
+       // calculate average font height for bitmap centering
+
+       m_iconWidth = m_expandbmp->GetWidth();
+       m_iconHeight = m_expandbmp->GetHeight();
+#endif
+
+    m_curcursor = wxCURSOR_ARROW;
+    m_cursorSizeWE = new wxCursor( wxCURSOR_SIZEWE );
+
+       // adjust bitmap icon y position so they are centered
+    m_vspacing = wxPG_DEFAULT_VSPACING;
+
+    if ( !m_font.Ok() )
+    {
+        wxFont useFont = wxScrolledWindow::GetFont();
+        wxScrolledWindow::SetOwnFont( useFont );
+    }
+    else
+        // This should be otherwise called by SetOwnFont
+           CalculateFontAndBitmapStuff( wxPG_DEFAULT_VSPACING );
+
+    // Add base brush item
+    m_arrBgBrushes.Add((void*)new wxPGBrush());
+
+    // Add base colour items
+    m_arrFgCols.Add((void*)new wxPGColour());
+    m_arrFgCols.Add((void*)new wxPGColour());
+
+    RegainColours();
+
+    // This helps with flicker
+    SetBackgroundStyle( wxBG_STYLE_CUSTOM );
+
+    // Hook the TLW
+    wxPGTLWHandler* handler = new wxPGTLWHandler(this);
+    m_tlp = ::wxGetTopLevelParent(this);
+    m_tlwHandler = handler;
+    m_tlp->PushEventHandler(handler);
+
+       // set virtual size to this window size
+    wxSize wndsize = GetSize();
+       SetVirtualSize(wndsize.GetWidth(), wndsize.GetWidth());
+
+    m_timeCreated = ::wxGetLocalTimeMillis();
+
+    m_canvas = new wxPGCanvas();
+    m_canvas->Create(this, 1, wxPoint(0, 0), GetClientSize(),
+                     (GetWindowStyle() & wxTAB_TRAVERSAL) | wxWANTS_CHARS | wxCLIP_CHILDREN);
+    m_canvas->SetBackgroundStyle( wxBG_STYLE_CUSTOM );
+
+    m_iFlags |= wxPG_FL_INITIALIZED;
+
+    m_ncWidth = wndsize.GetWidth();
+
+    // Need to call OnResize handler or size given in constructor/Create
+    // will never work.
+    wxSizeEvent sizeEvent(wndsize,0);
+    OnResize(sizeEvent);
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGrid::~wxPropertyGrid()
+{
+    size_t i;
+
+    DoSelectProperty(NULL);
+
+    // This should do prevent things from going too badly wrong
+    m_iFlags &= ~(wxPG_FL_INITIALIZED);
+
+    if ( m_iFlags & wxPG_FL_MOUSE_CAPTURED )
+        m_canvas->ReleaseMouse();
+
+    wxPGTLWHandler* handler = (wxPGTLWHandler*) m_tlwHandler;
+    m_tlp->RemoveEventHandler(handler);
+    delete handler;
+
+#ifdef __WXDEBUG__
+    if ( IsEditorsValueModified() )
+        ::wxMessageBox(wxS("Most recent change in property editor was lost!!!\n\n(if you don't want this to happen, close your frames and dialogs using Close(false).)"),
+                       wxS("wxPropertyGrid Debug Warning") );
+#endif
+
+#if wxPG_DOUBLE_BUFFER
+    if ( m_doubleBuffer )
+        delete m_doubleBuffer;
+#endif
+
+    delete m_windowsToDelete;
+
+    //m_selected = (wxPGProperty*) NULL;
+
+    if ( m_iFlags & wxPG_FL_CREATEDSTATE )
+        delete m_pState;
+
+    delete m_cursorSizeWE;
+
+#ifndef wxPG_ICON_WIDTH
+       delete m_expandbmp;
+       delete m_collbmp;
+#endif
+
+    // Delete cached text colours.
+    for ( i=0; i<m_arrFgCols.size(); i++ )
+    {
+        delete (wxPGColour*)m_arrFgCols.Item(i);
+    }
+
+    // Delete cached brushes.
+    for ( i=0; i<m_arrBgBrushes.size(); i++ )
+    {
+        delete (wxPGBrush*)m_arrBgBrushes.Item(i);
+    }
+
+    // Delete common value records
+    for ( i=0; i<m_commonValues.size(); i++ )
+    {
+        delete GetCommonValue(i);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::Destroy()
+{
+    if ( m_iFlags & wxPG_FL_MOUSE_CAPTURED )
+        m_canvas->ReleaseMouse();
+
+    return wxScrolledWindow::Destroy();
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridPageState* wxPropertyGrid::CreateState() const
+{
+    return new wxPropertyGridPageState();
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid overridden wxWindow methods
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetWindowStyleFlag( long style )
+{
+    long old_style = m_windowStyle;
+
+    if ( m_iFlags & wxPG_FL_INITIALIZED )
+    {
+        wxASSERT( m_pState );
+
+        if ( !(style & wxPG_HIDE_CATEGORIES) && (old_style & wxPG_HIDE_CATEGORIES) )
+        {
+        // Enable categories
+            EnableCategories( true );
+        }
+        else if ( (style & wxPG_HIDE_CATEGORIES) && !(old_style & wxPG_HIDE_CATEGORIES) )
+        {
+        // Disable categories
+            EnableCategories( false );
+        }
+        if ( !(old_style & wxPG_AUTO_SORT) && (style & wxPG_AUTO_SORT) )
+        {
+            //
+            // Autosort enabled
+            //
+            if ( !m_frozen )
+                PrepareAfterItemsAdded();
+            else
+                m_pState->m_itemsAdded = 1;
+        }
+    #if wxPG_SUPPORT_TOOLTIPS
+        if ( !(old_style & wxPG_TOOLTIPS) && (style & wxPG_TOOLTIPS) )
+        {
+            //
+            // Tooltips enabled
+            //
+            /*
+            wxToolTip* tooltip = new wxToolTip ( wxEmptyString );
+            SetToolTip ( tooltip );
+            tooltip->SetDelay ( wxPG_TOOLTIP_DELAY );
+            */
+        }
+        else if ( (old_style & wxPG_TOOLTIPS) && !(style & wxPG_TOOLTIPS) )
+        {
+            //
+            // Tooltips disabled
+            //
+            m_canvas->SetToolTip( (wxToolTip*) NULL );
+        }
+    #endif
+    }
+
+    wxScrolledWindow::SetWindowStyleFlag ( style );
+
+    if ( m_iFlags & wxPG_FL_INITIALIZED )
+    {
+        if ( (old_style & wxPG_HIDE_MARGIN) != (style & wxPG_HIDE_MARGIN) )
+        {
+            CalculateFontAndBitmapStuff( m_vspacing );
+            Refresh();
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::Freeze()
+{
+    if ( !m_frozen )
+    {
+        wxScrolledWindow::Freeze();
+    }
+    m_frozen++;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::Thaw()
+{
+    m_frozen--;
+
+    if ( !m_frozen )
+    {
+        wxScrolledWindow::Thaw();
+        RecalculateVirtualSize();
+    #if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+        m_canvas->Refresh();
+    #endif
+
+        // Force property re-selection
+        if ( m_selected )
+            DoSelectProperty(m_selected, wxPG_SEL_FORCE);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetExtraStyle( long exStyle )
+{
+    if ( exStyle & wxPG_EX_NATIVE_DOUBLE_BUFFERING )
+    {
+#if defined(__WXMSW__)
+
+        /*
+        // Don't use WS_EX_COMPOSITED just now.
+        HWND hWnd;
+
+        if ( m_iFlags & wxPG_FL_IN_MANAGER )
+            hWnd = (HWND)GetParent()->GetHWND();
+        else
+            hWnd = (HWND)GetHWND();
+
+        ::SetWindowLong( hWnd, GWL_EXSTYLE,
+                         ::GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_COMPOSITED );
+        */
+
+//#elif defined(__WXGTK20__)
+#endif
+        // Only apply wxPG_EX_NATIVE_DOUBLE_BUFFERING if the window
+        // truly was double-buffered.
+        if ( !this->IsDoubleBuffered() )
+        {
+            exStyle &= ~(wxPG_EX_NATIVE_DOUBLE_BUFFERING);
+        }
+        else
+        {
+        #if wxPG_DOUBLE_BUFFER
+            delete m_doubleBuffer;
+            m_doubleBuffer = NULL;
+        #endif
+        }
+    }
+
+    wxScrolledWindow::SetExtraStyle( exStyle );
+
+    if ( exStyle & wxPG_EX_INIT_NOCAT )
+        m_pState->InitNonCatMode();
+
+    if ( exStyle & wxPG_EX_HELP_AS_TOOLTIPS )
+        m_windowStyle |= wxPG_TOOLTIPS;
+
+    // Set global style
+    wxPGGlobalVars->m_extraStyle = exStyle;
+}
+
+// -----------------------------------------------------------------------
+
+// returns the best acceptable minimal size
+wxSize wxPropertyGrid::DoGetBestSize() const
+{
+    int hei = 15;
+    if ( m_lineHeight > hei )
+        hei = m_lineHeight;
+    wxSize sz = wxSize( 60, hei+40 );
+
+    CacheBestSize(sz);
+    return sz;
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid Font and Colour Methods
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::CalculateFontAndBitmapStuff( int vspacing )
+{
+       int x = 0, y = 0;
+
+    m_captionFont = wxScrolledWindow::GetFont();
+
+       GetTextExtent(wxS("jG"), &x, &y, 0, 0, &m_captionFont);
+    m_subgroup_extramargin = x + (x/2);
+       m_fontHeight = y;
+
+#if wxPG_USE_RENDERER_NATIVE
+    m_iconWidth = wxPG_ICON_WIDTH;
+#elif wxPG_ICON_WIDTH
+    // scale icon
+    m_iconWidth = (m_fontHeight * wxPG_ICON_WIDTH) / 13;
+    if ( m_iconWidth < 5 ) m_iconWidth = 5;
+    else if ( !(m_iconWidth & 0x01) ) m_iconWidth++; // must be odd
+
+#endif
+
+    m_gutterWidth = m_iconWidth / wxPG_GUTTER_DIV;
+    if ( m_gutterWidth < wxPG_GUTTER_MIN )
+        m_gutterWidth = wxPG_GUTTER_MIN;
+
+    int vdiv = 6;
+    if ( vspacing <= 1 ) vdiv = 12;
+    else if ( vspacing >= 3 ) vdiv = 3;
+
+    m_spacingy = m_fontHeight / vdiv;
+    if ( m_spacingy < wxPG_YSPACING_MIN )
+        m_spacingy = wxPG_YSPACING_MIN;
+
+    m_marginWidth = 0;
+    if ( !(m_windowStyle & wxPG_HIDE_MARGIN) )
+        m_marginWidth = m_gutterWidth*2 + m_iconWidth;
+
+    m_captionFont.SetWeight(wxBOLD);
+       GetTextExtent(wxS("jG"), &x, &y, 0, 0, &m_captionFont);
+
+    m_lineHeight = m_fontHeight+(2*m_spacingy)+1;
+    m_visPropArray.SetCount((m_height/m_lineHeight)+10);
+
+    // button spacing
+    m_buttonSpacingY = (m_lineHeight - m_iconHeight) / 2;
+    if ( m_buttonSpacingY < 0 ) m_buttonSpacingY = 0;
+
+    if ( m_pState )
+        m_pState->CalculateFontAndBitmapStuff(vspacing);
+
+    if ( m_iFlags & wxPG_FL_INITIALIZED )
+        RecalculateVirtualSize();
+
+    InvalidateBestSize();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnSysColourChanged( wxSysColourChangedEvent &WXUNUSED(event) )
+{
+    RegainColours();
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+static wxColour wxPGAdjustColour(const wxColour& src, int ra,
+                                 int ga = 1000, int ba = 1000,
+                                 bool forceDifferent = false)
+{
+    if ( ga >= 1000 )
+        ga = ra;
+    if ( ba >= 1000 )
+        ba = ra;
+
+    // Recursion guard (allow 2 max)
+    static int isinside = 0;
+    isinside++;
+    wxCHECK_MSG( isinside < 3,
+                 *wxBLACK,
+                 wxT("wxPGAdjustColour should not be recursively called more than once") );
+
+    wxColour dst;
+
+    int r = src.Red();
+    int g = src.Green();
+    int b = src.Blue();
+    int r2 = r + ra;
+    if ( r2>255 ) r2 = 255;
+    else if ( r2<0) r2 = 0;
+    int g2 = g + ga;
+    if ( g2>255 ) g2 = 255;
+    else if ( g2<0) g2 = 0;
+    int b2 = b + ba;
+    if ( b2>255 ) b2 = 255;
+    else if ( b2<0) b2 = 0;
+
+    // Make sure they are somewhat different
+    if ( forceDifferent && (abs((r+g+b)-(r2+g2+b2)) < abs(ra/2)) )
+        dst = wxPGAdjustColour(src,-(ra*2));
+    else
+        dst = wxColour(r2,g2,b2);
+
+    // Recursion guard (allow 2 max)
+    isinside--;
+
+    return dst;
+}
+
+
+static int wxPGGetColAvg( const wxColour& col )
+{
+    return (col.Red() + col.Green() + col.Blue()) / 3;
+}
+
+
+void wxPropertyGrid::RegainColours()
+{
+    wxColour def_bgcol = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW );
+
+    if ( !(m_coloursCustomized & 0x0002) )
+    {
+        wxColour col = wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE );
+
+        // Make sure colour is dark enough
+    #ifdef __WXGTK__
+        int colDec = wxPGGetColAvg(col) - 230;
+    #else
+        int colDec = wxPGGetColAvg(col) - 200;
+    #endif
+        if ( colDec > 0 )
+            m_colCapBack = wxPGAdjustColour(col,-colDec);
+        else
+            m_colCapBack = col;
+    }
+
+    if ( !(m_coloursCustomized & 0x0001) )
+        m_colMargin = m_colCapBack;
+
+    if ( !(m_coloursCustomized & 0x0004) )
+    {
+    #ifdef __WXGTK__
+        int colDec = -90;
+    #else
+        int colDec = -72;
+    #endif
+        wxColour capForeCol = wxPGAdjustColour(m_colCapBack,colDec,5000,5000,true);
+        m_colCapFore = capForeCol;
+
+        // Set the cached colour as well.
+        ((wxPGColour*)m_arrFgCols.Item(1))->SetColour2(capForeCol);
+    }
+
+    if ( !(m_coloursCustomized & 0x0008) )
+    {
+        wxColour bgCol = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW );
+        m_colPropBack = bgCol;
+
+        // Set the cached brush as well.
+        ((wxPGBrush*)m_arrBgBrushes.Item(0))->SetColour2(bgCol);
+    }
+
+    if ( !(m_coloursCustomized & 0x0010) )
+    {
+        wxColour fgCol = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT );
+        m_colPropFore = fgCol;
+
+        // Set the cached colour as well.
+        ((wxPGColour*)m_arrFgCols.Item(0))->SetColour2(fgCol);
+    }
+
+    if ( !(m_coloursCustomized & 0x0020) )
+        m_colSelBack = wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT );
+
+    if ( !(m_coloursCustomized & 0x0040) )
+        m_colSelFore = wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHTTEXT );
+
+    if ( !(m_coloursCustomized & 0x0080) )
+        m_colLine = m_colCapBack;
+
+    if ( !(m_coloursCustomized & 0x0100) )
+        m_colDisPropFore = m_colCapFore;
+
+    m_colEmptySpace = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW );
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::ResetColours()
+{
+    m_coloursCustomized = 0;
+
+    RegainColours();
+
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::SetFont( const wxFont& font )
+{
+    // Must disable active editor.
+    if ( m_selected )
+    {
+        bool selRes = ClearSelection();
+        wxPG_CHECK_MSG_DBG( selRes,
+                            false,
+                            wxT("failed to deselect a property (editor probably had invalid value)") );
+    }
+
+    // TODO: Following code is disabled with wxMac because
+    //   it is reported to fail. I (JMS) cannot debug it
+    //   personally right now.
+#if !defined(__WXMAC__)
+    bool res = wxScrolledWindow::SetFont( font );
+    if ( res )
+    {
+        CalculateFontAndBitmapStuff( m_vspacing );
+
+        if ( m_pState )
+            m_pState->CalculateFontAndBitmapStuff(m_vspacing);
+
+        Refresh();
+    }
+
+    return res;
+#else
+    // ** wxMAC Only **
+    // TODO: Remove after SetFont crash fixed.
+    if ( m_iFlags & wxPG_FL_INITIALIZED )
+    {
+        wxLogDebug(wxT("WARNING: propGrid.cpp: wxPropertyGrid::SetFont has been disabled on wxMac since there has been crash reported in it. If you are willing to debug the cause, replace line '#if !defined(__WXMAC__)' with line '#if 1' in wxPropertyGrid::SetFont."));
+    }
+    return false;
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetLineColour( const wxColour& col )
+{
+    m_colLine = col;
+    m_coloursCustomized |= 0x80;
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetMarginColour( const wxColour& col )
+{
+    m_colMargin = col;
+    m_coloursCustomized |= 0x01;
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetCellBackgroundColour( const wxColour& col )
+{
+    m_colPropBack = col;
+    m_coloursCustomized |= 0x08;
+
+    // Set the cached brush as well.
+    ((wxPGBrush*)m_arrBgBrushes.Item(0))->SetColour2(col);
+
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetCellTextColour( const wxColour& col )
+{
+    m_colPropFore = col;
+    m_coloursCustomized |= 0x10;
+
+    // Set the cached colour as well.
+    ((wxPGColour*)m_arrFgCols.Item(0))->SetColour2(col);
+
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetEmptySpaceColour( const wxColour& col )
+{
+    m_colEmptySpace = col;
+
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetCellDisabledTextColour( const wxColour& col )
+{
+    m_colDisPropFore = col;
+    m_coloursCustomized |= 0x100;
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetSelectionBackgroundColour( const wxColour& col )
+{
+    m_colSelBack = col;
+    m_coloursCustomized |= 0x20;
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetSelectionTextColour( const wxColour& col )
+{
+    m_colSelFore = col;
+    m_coloursCustomized |= 0x40;
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetCaptionBackgroundColour( const wxColour& col )
+{
+    m_colCapBack = col;
+    m_coloursCustomized |= 0x02;
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetCaptionTextColour( const wxColour& col )
+{
+    m_colCapFore = col;
+    m_coloursCustomized |= 0x04;
+
+    // Set the cached colour as well.
+    ((wxPGColour*)m_arrFgCols.Item(1))->SetColour2(col);
+
+    Refresh();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetBackgroundColourIndex( wxPGProperty* p, int index )
+{
+    unsigned char ind = index;
+
+    p->m_bgColIndex = ind;
+
+    unsigned int i;
+    for ( i=0; i<p->GetChildCount(); i++ )
+        SetBackgroundColourIndex(p->Item(i),index);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetPropertyBackgroundColour( wxPGPropArg id, const wxColour& colour )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    size_t i;
+    int colInd = -1;
+
+    long colAsLong = wxPG_COLOUR(colour.Red(),colour.Green(),colour.Blue());
+
+    // As it is most likely that the previous colour is used, start comparison
+    // from the end.
+    for ( i=(m_arrBgBrushes.size()-1); i>0; i-- )
+    {
+        if ( ((wxPGBrush*)m_arrBgBrushes.Item(i))->GetColourAsLong() == colAsLong )
+        {
+            colInd = i;
+            break;
+        }
+    }
+
+    if ( colInd < 0 )
+    {
+        colInd = m_arrBgBrushes.size();
+        wxCHECK_RET( colInd < 256, wxT("wxPropertyGrid: Warning - Only 255 different property background colours allowed.") );
+        m_arrBgBrushes.Add( (void*)new wxPGBrush(colour) );
+    }
+
+    // Set indexes
+    SetBackgroundColourIndex(p,colInd);
+
+    // If this was on a visible grid, then draw it.
+    DrawItemAndChildren(p);
+}
+
+// -----------------------------------------------------------------------
+
+wxColour wxPropertyGrid::GetPropertyBackgroundColour( wxPGPropArg id ) const
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxColour())
+
+    return ((wxPGBrush*)m_arrBgBrushes.Item(p->m_bgColIndex))->GetColour();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetTextColourIndex( wxPGProperty* p, int index, int flags )
+{
+    unsigned char ind = index;
+
+    p->m_fgColIndex = ind;
+
+    if ( p->GetChildCount() && (flags & wxPG_RECURSE) )
+    {
+        unsigned int i;
+        for ( i=0; i<p->GetChildCount(); i++ )
+            SetTextColourIndex( p->Item(i), index, flags );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+int wxPropertyGrid::CacheColour( const wxColour& colour )
+{
+    unsigned int i;
+    int colInd = -1;
+
+    long colAsLong = wxPG_COLOUR(colour.Red(),colour.Green(),colour.Blue());
+
+    // As it is most likely that the previous colour is used, start comparison
+    // from the end.
+    for ( i=(m_arrFgCols.size()-1); i>0; i-- )
+    {
+        if ( ((wxPGColour*)m_arrFgCols.Item(i))->GetColourAsLong() == colAsLong )
+        {
+            colInd = i;
+            break;
+        }
+    }
+
+    if ( colInd < 0 )
+    {
+        colInd = m_arrFgCols.size();
+        wxCHECK_MSG( colInd < 256, 0, wxT("wxPropertyGrid: Warning - Only 255 different property foreground colours allowed.") );
+        m_arrFgCols.Add( (void*)new wxPGColour(colour) );
+    }
+
+    return colInd;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetPropertyTextColour( wxPGPropArg id, const wxColour& colour,
+                                            bool recursively )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    if ( p->IsCategory() )
+    {
+        wxPropertyCategory* cat = (wxPropertyCategory*) p;
+        cat->SetTextColIndex(CacheColour(colour));
+    }
+
+    // Set indexes
+    int flags = 0;
+    if ( recursively )
+        flags |= wxPG_RECURSE;
+    SetTextColourIndex(p, CacheColour(colour), flags);
+
+    DrawItemAndChildren(p);
+}
+
+// -----------------------------------------------------------------------
+
+wxColour wxPropertyGrid::GetPropertyTextColour( wxPGPropArg id ) const
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxColour())
+
+    return wxColour(*((wxPGColour*)m_arrFgCols.Item(p->m_fgColIndex)));
+}
+
+void wxPropertyGrid::SetPropertyColoursToDefault( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    SetBackgroundColourIndex( p, 0 );
+    SetTextColourIndex( p, 0, wxPG_RECURSE );
+
+    if ( p->IsCategory() )
+    {
+        wxPropertyCategory* cat = (wxPropertyCategory*) p;
+        cat->SetTextColIndex(1);
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid property adding and removal
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::PrepareAfterItemsAdded()
+{
+    if ( !m_pState || !m_pState->m_itemsAdded ) return;
+
+    m_pState->m_itemsAdded = 0;
+
+    if ( m_windowStyle & wxPG_AUTO_SORT )
+        Sort();
+
+    RecalculateVirtualSize();
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid property value setting and getting
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::DoSetPropertyValueUnspecified( wxPGProperty* p )
+{
+    m_pState->DoSetPropertyValueUnspecified(p);
+    DrawItemAndChildren(p);
+
+    wxPGProperty* parent = p->GetParent();
+    while ( (parent->GetFlags() & wxPG_PROP_PARENTAL_FLAGS) == wxPG_PROP_MISC_PARENT )
+    {
+        DrawItem(parent);
+        parent = parent->GetParent();
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid property operations
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::DoSetPropertyName( wxPGProperty* p, const wxString& newname )
+{
+    wxCHECK_RET( p, wxT("invalid property id") );
+
+    if ( p->GetBaseName().Len() ) m_pState->m_dictName.erase( p->GetBaseName() );
+    if ( newname.Len() ) m_pState->m_dictName[newname] = (void*) p;
+
+    p->DoSetName(newname);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::EnsureVisible( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+
+    Update();
+
+    bool changed = false;
+
+    // Is it inside collapsed section?
+    if ( !p->IsVisible() )
+    {
+        // expand parents
+        wxPGProperty* parent = p->GetParent();
+        wxPGProperty* grandparent = parent->GetParent();
+
+        if ( grandparent && grandparent != m_pState->m_properties )
+            Expand( grandparent );
+
+        Expand( parent );
+        changed = true;
+    }
+
+    // Need to scroll?
+    int vx, vy;
+    GetViewStart(&vx,&vy);
+    vy*=wxPG_PIXELS_PER_UNIT;
+
+    int y = p->GetY();
+
+    if ( y < vy )
+    {
+        Scroll(vx, y/wxPG_PIXELS_PER_UNIT );
+        m_iFlags |= wxPG_FL_SCROLLED;
+        changed = true;
+    }
+    else if ( (y+m_lineHeight) > (vy+m_height) )
+    {
+        Scroll(vx, (y-m_height+(m_lineHeight*2))/wxPG_PIXELS_PER_UNIT );
+        m_iFlags |= wxPG_FL_SCROLLED;
+        changed = true;
+    }
+
+    if ( changed )
+        DrawItems( p, p );
+
+    return changed;
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid helper methods called by properties
+// -----------------------------------------------------------------------
+
+// Control font changer helper.
+void wxPropertyGrid::SetCurControlBoldFont()
+{
+    wxASSERT( m_wndEditor );
+    m_wndEditor->SetFont( m_captionFont );
+}
+
+// -----------------------------------------------------------------------
+
+wxPoint wxPropertyGrid::GetGoodEditorDialogPosition( wxPGProperty* p,
+                                                     const wxSize& sz )
+{
+#if wxPG_SMALL_SCREEN
+    // On small-screen devices, always show dialogs with default position and size.
+    return wxDefaultPosition;
+#else
+    int splitterX = GetSplitterPosition();
+    int x = splitterX;
+    int y = p->GetY();
+
+    wxCHECK_MSG( y >= 0, wxPoint(-1,-1), wxT("invalid y?") );
+
+    ImprovedClientToScreen( &x, &y );
+
+    int sw = wxSystemSettings::GetMetric( ::wxSYS_SCREEN_X );
+    int sh = wxSystemSettings::GetMetric( ::wxSYS_SCREEN_Y );
+
+    int new_x;
+    int new_y;
+
+    if ( x > (sw/2) )
+        // left
+        new_x = x + (m_width-splitterX) - sz.x;
+    else
+        // right
+        new_x = x;
+
+    if ( y > (sh/2) )
+        // above
+        new_y = y - sz.y;
+    else
+        // below
+        new_y = y + m_lineHeight;
+
+    return wxPoint(new_x,new_y);
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+wxString& wxPropertyGrid::ExpandEscapeSequences( wxString& dst_str, wxString& src_str )
+{
+    if ( src_str.length() == 0 )
+    {
+        dst_str = src_str;
+        return src_str;
+    }
+
+    bool prev_is_slash = false;
+
+    wxString::const_iterator i = src_str.begin();
+
+    dst_str.clear();
+
+    for ( ; i != src_str.end(); i++ )
+    {
+        wxUniChar a = *i;
+
+        if ( a != wxS('\\') )
+        {
+            if ( !prev_is_slash )
+            {
+                dst_str << a;
+            }
+            else
+            {
+                if ( a == wxS('n') )
+                {
+            #ifdef __WXMSW__
+                    dst_str << wxS('\n');
+            #else
+                    dst_str << wxS('\n');
+            #endif
+                }
+                else if ( a == wxS('t') )
+                    dst_str << wxS('\t');
+                else
+                    dst_str << a;
+            }
+            prev_is_slash = false;
+        }
+        else
+        {
+            if ( prev_is_slash )
+            {
+                dst_str << wxS('\\');
+                prev_is_slash = false;
+            }
+            else
+            {
+                prev_is_slash = true;
+            }
+        }
+    }
+    return dst_str;
+}
+
+// -----------------------------------------------------------------------
+
+wxString& wxPropertyGrid::CreateEscapeSequences( wxString& dst_str, wxString& src_str )
+{
+    if ( src_str.length() == 0 )
+    {
+        dst_str = src_str;
+        return src_str;
+    }
+
+    wxString::const_iterator i = src_str.begin();
+    wxUniChar prev_a = wxS('\0');
+
+    dst_str.clear();
+
+    for ( ; i != src_str.end(); i++ )
+    {
+        wxChar a = *i;
+
+        if ( a >= wxS(' ') )
+        {
+            // This surely is not something that requires an escape sequence.
+            dst_str << a;
+        }
+        else
+        {
+            // This might need...
+            if ( a == wxS('\r')  )
+            {
+                // DOS style line end.
+                // Already taken care below
+            }
+            else if ( a == wxS('\n') )
+                // UNIX style line end.
+                dst_str << wxS("\\n");
+            else if ( a == wxS('\t') )
+                // Tab.
+                dst_str << wxS('\t');
+            else
+            {
+                //wxLogDebug(wxT("WARNING: Could not create escape sequence for character #%i"),(int)a);
+                dst_str << a;
+            }
+        }
+
+        prev_a = a;
+    }
+    return dst_str;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGrid::DoGetItemAtY( int y ) const
+{
+    // Outside?
+    if ( y < 0 )
+        return (wxPGProperty*) NULL;
+
+    unsigned int a = 0;
+    return m_pState->m_properties->GetItemAtY(y, m_lineHeight, &a);
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid graphics related methods
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnPaint( wxPaintEvent& WXUNUSED(event) )
+{
+    wxPaintDC dc(this);
+
+    // Update everything inside the box
+    wxRect r = GetUpdateRegion().GetBox();
+
+    dc.SetPen(m_colEmptySpace);
+    dc.SetBrush(m_colEmptySpace);
+    dc.DrawRectangle(r);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::DrawExpanderButton( wxDC& dc, const wxRect& rect,
+                                         wxPGProperty* property ) const
+{
+    // Prepare rectangle to be used
+    wxRect r(rect);
+    r.x += m_gutterWidth; r.y += m_buttonSpacingY;
+    r.width = m_iconWidth; r.height = m_iconHeight;
+
+#if (wxPG_USE_RENDERER_NATIVE)
+    //
+#elif wxPG_ICON_WIDTH
+    // Drawing expand/collapse button manually
+    dc.SetPen(m_colPropFore);
+    if ( property->IsCategory() )
+        dc.SetBrush(*wxTRANSPARENT_BRUSH);
+    else
+        dc.SetBrush(m_colPropBack);
+
+    dc.DrawRectangle( r );
+    int _y = r.y+(m_iconWidth/2);
+    dc.DrawLine(r.x+2,_y,r.x+m_iconWidth-2,_y);
+#else
+    wxBitmap* bmp;
+#endif
+
+    if ( property->IsExpanded() )
+    {
+    // wxRenderer functions are non-mutating in nature, so it
+    // should be safe to cast "const wxPropertyGrid*" to "wxWindow*".
+    // Hopefully this does not cause problems.
+    #if (wxPG_USE_RENDERER_NATIVE)
+        wxRendererNative::Get().DrawTreeItemButton(
+                (wxWindow*)this,
+                dc,
+                r,
+                wxCONTROL_EXPANDED
+            );
+    #elif wxPG_ICON_WIDTH
+        //
+    #else
+        bmp = m_collbmp;
+    #endif
+
+    }
+    else
+    {
+    #if (wxPG_USE_RENDERER_NATIVE)
+        wxRendererNative::Get().DrawTreeItemButton(
+                (wxWindow*)this,
+                dc,
+                r,
+                0
+            );
+    #elif wxPG_ICON_WIDTH
+        int _x = r.x+(m_iconWidth/2);
+        dc.DrawLine(_x,r.y+2,_x,r.y+m_iconWidth-2);
+    #else
+        bmp = m_expandbmp;
+    #endif
+    }
+
+#if (wxPG_USE_RENDERER_NATIVE)
+    //
+#elif wxPG_ICON_WIDTH
+    //
+#else
+    dc.DrawBitmap( *bmp, r.x, r.y, true );
+#endif
+}
+
+// -----------------------------------------------------------------------
+
+//
+// This is the one called by OnPaint event handler and others.
+// topy and bottomy are already unscrolled (ie. physical)
+//
+void wxPropertyGrid::DrawItems( wxDC& dc,
+                                unsigned int topy,
+                                unsigned int bottomy,
+                                const wxRect* clipRect )
+{
+    if ( m_frozen || m_height < 1 || bottomy < topy || !m_pState ) return;
+
+    m_pState->EnsureVirtualHeight();
+
+    wxRect tempClipRect;
+    if ( !clipRect )
+    {
+        tempClipRect = wxRect(0,topy,m_pState->m_width,bottomy);
+        clipRect = &tempClipRect;
+    }
+
+    // items added check
+    if ( m_pState->m_itemsAdded ) PrepareAfterItemsAdded();
+
+    int paintFinishY = 0;
+
+    if ( m_pState->m_properties->GetChildCount() > 0 )
+    {
+        wxDC* dcPtr = &dc;
+        bool isBuffered = false;
+
+    #if wxPG_DOUBLE_BUFFER
+        wxMemoryDC* bufferDC = NULL;
+
+        if ( !(GetExtraStyle() & wxPG_EX_NATIVE_DOUBLE_BUFFERING) )
+        {
+            if ( !m_doubleBuffer )
+            {
+                paintFinishY = clipRect->y;
+                dcPtr = NULL;
+            }
+            else
+            {
+                bufferDC = new wxMemoryDC();
+
+                // If nothing was changed, then just copy from double-buffer
+                bufferDC->SelectObject( *m_doubleBuffer );
+                dcPtr = bufferDC;
+
+                isBuffered = true;
+            }
+        }
+    #endif
+
+        if ( dcPtr )
+        {
+            dc.SetClippingRegion( *clipRect );
+            paintFinishY = DoDrawItems( *dcPtr, NULL, NULL, clipRect, isBuffered );
+        }
+
+    #if wxPG_DOUBLE_BUFFER
+        if ( bufferDC )
+        {
+            dc.Blit( clipRect->x, clipRect->y, clipRect->width, clipRect->height,
+                bufferDC, 0, 0, wxCOPY );
+            dc.DestroyClippingRegion(); // Is this really necessary?
+            delete bufferDC;
+        }
+    #endif
+    }
+
+    // Clear area beyond bottomY?
+    if ( paintFinishY < (clipRect->y+clipRect->height) )
+    {
+        dc.SetPen(m_colEmptySpace);
+        dc.SetBrush(m_colEmptySpace);
+        dc.DrawRectangle( 0, paintFinishY, m_width, (clipRect->y+clipRect->height) );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+int wxPropertyGrid::DoDrawItems( wxDC& dc,
+                                 const wxPGProperty* firstItem,
+                                 const wxPGProperty* lastItem,
+                                 const wxRect* clipRect,
+                                 bool isBuffered ) const
+{
+    // TODO: This should somehow be eliminated.
+    wxRect tempClipRect;
+    if ( !clipRect )
+    {
+        wxASSERT(firstItem);
+        wxASSERT(lastItem);
+        tempClipRect = GetPropertyRect(firstItem, lastItem);
+        clipRect = &tempClipRect;
+    }
+
+    if ( !firstItem )
+        firstItem = DoGetItemAtY(clipRect->y);
+
+    if ( !lastItem )
+    {
+        lastItem = DoGetItemAtY(clipRect->y+clipRect->height-1);
+        if ( !lastItem )
+            lastItem = GetLastItem( wxPG_ITERATE_VISIBLE );
+    }
+
+    if ( m_frozen || m_height < 1 || firstItem == NULL )
+        return clipRect->y;
+
+    wxCHECK_MSG( !m_pState->m_itemsAdded, clipRect->y, wxT("no items added") );
+    wxASSERT( m_pState->m_properties->GetChildCount() );
+
+    int lh = m_lineHeight;
+
+    int firstItemTopY;
+    int lastItemBottomY;
+
+    firstItemTopY = clipRect->y;
+    lastItemBottomY = clipRect->y + clipRect->height;
+
+    // Align y coordinates to item boundaries
+    firstItemTopY -= firstItemTopY % lh;
+    lastItemBottomY += lh - (lastItemBottomY % lh);
+    lastItemBottomY -= 1;
+
+    // Entire range outside scrolled, visible area?
+    if ( firstItemTopY >= (int)m_pState->GetVirtualHeight() || lastItemBottomY <= 0 )
+        return clipRect->y;
+
+    wxCHECK_MSG( firstItemTopY < lastItemBottomY, clipRect->y, wxT("invalid y values") );
+
+
+    /*
+    wxLogDebug(wxT("  -> DoDrawItems ( \"%s\" -> \"%s\", height=%i (ch=%i), clipRect = 0x%lX )"),
+        firstItem->GetLabel().c_str(),
+        lastItem->GetLabel().c_str(),
+        (int)(lastItemBottomY - firstItemTopY),
+        (int)m_height,
+        (unsigned long)clipRect );
+    */
+
+    wxRect r;
+
+    long windowStyle = m_windowStyle;
+
+    int xRelMod = 0;
+    int yRelMod = 0;
+
+    //
+    // With wxPG_DOUBLE_BUFFER, do double buffering
+    // - buffer's y = 0, so align cliprect and coordinates to that
+    //
+#if wxPG_DOUBLE_BUFFER
+
+    wxRect cr2;
+
+    if ( isBuffered )
+    {
+        xRelMod = clipRect->x;
+        yRelMod = clipRect->y;
+
+        //
+        // clipRect conversion
+        if ( clipRect )
+        {
+            cr2 = *clipRect;
+            cr2.x -= xRelMod;
+            cr2.y -= yRelMod;
+            clipRect = &cr2;
+        }
+        firstItemTopY -= yRelMod;
+        lastItemBottomY -= yRelMod;
+    }
+#else
+    wxUnusedVar(isBuffered);
+#endif
+
+    int x = m_marginWidth - xRelMod;
+
+    const wxFont& normalfont = m_font;
+
+    bool reallyFocused = (m_iFlags & wxPG_FL_FOCUSED) ? true : false;
+
+    bool isEnabled = IsEnabled();
+
+    //
+    // Prepare some pens and brushes that are often changed to.
+    //
+
+    wxBrush marginBrush(m_colMargin);
+    wxPen marginPen(m_colMargin);
+    wxBrush capbgbrush(m_colCapBack,wxSOLID);
+    wxPen linepen(m_colLine,1,wxSOLID);
+
+    // pen that has same colour as text
+    wxPen outlinepen(m_colPropFore,1,wxSOLID);
+
+    //
+    // Clear margin with background colour
+    //
+    dc.SetBrush( marginBrush );
+    if ( !(windowStyle & wxPG_HIDE_MARGIN) )
+    {
+        dc.SetPen( *wxTRANSPARENT_PEN );
+        dc.DrawRectangle(-1-xRelMod,firstItemTopY-1,x+2,lastItemBottomY-firstItemTopY+2);
+    }
+
+    const wxPGProperty* selected = m_selected;
+    const wxPropertyGridPageState* state = m_pState;
+
+#if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+    bool wasSelectedPainted = false;
+#endif
+
+    // TODO: Only render columns that are within clipping region.
+
+    dc.SetFont(normalfont);
+
+    wxPropertyGridConstIterator it( state, wxPG_ITERATE_VISIBLE, firstItem );
+    int endScanBottomY = lastItemBottomY + lh;
+    int y = firstItemTopY;
+    unsigned int arrInd = 0;
+
+    for ( ; !it.AtEnd(); it.Next() )
+    {
+        const wxPGProperty* p = *it;
+
+        if ( !p->HasFlag(wxPG_PROP_HIDDEN) )
+        {
+            m_visPropArray[arrInd] = (wxPGProperty*)p;
+            arrInd++;
+
+            if ( y > endScanBottomY )
+                break;
+
+            y += lh;
+        }
+    }
+
+    m_visPropArray[arrInd] = NULL;
+
+    int gridWidth = state->m_width;
+
+    y = firstItemTopY;
+    for ( arrInd=0;
+          m_visPropArray[arrInd] != NULL && y <= lastItemBottomY;
+          arrInd++ )
+    {
+        wxPGProperty* p =(wxPGProperty*) m_visPropArray[arrInd];
+        wxPGProperty* nextP = (wxPGProperty*) m_visPropArray[arrInd+1];
+
+        int rowHeight = m_fontHeight+(m_spacingy*2)+1;
+        int textMarginHere = x;
+        int renderFlags = wxPGCellRenderer::Control;
+
+        int greyDepth = m_marginWidth;
+        if ( !(windowStyle & wxPG_HIDE_CATEGORIES) )
+            greyDepth = (((int)p->m_depthBgCol)-1) * m_subgroup_extramargin + m_marginWidth;
+
+        int greyDepthX = greyDepth - xRelMod;
+
+        // Use basic depth if in non-categoric mode and parent is base array.
+        if ( !(windowStyle & wxPG_HIDE_CATEGORIES) || p->GetParent() != m_pState->m_properties )
+        {
+            textMarginHere += ((unsigned int)((p->m_depth-1)*m_subgroup_extramargin));
+        }
+
+        // Paint margin area
+        dc.SetBrush(marginBrush);
+        dc.SetPen(marginPen);
+        dc.DrawRectangle( -xRelMod, y, greyDepth, lh );
+
+        dc.SetPen( linepen );
+
+        int y2 = y + lh;
+
+        // Margin Edge
+        dc.DrawLine( greyDepthX, y, greyDepthX, y2 );
+
+        // Splitters
+        unsigned int si;
+        int sx = x;
+
+        for ( si=0; si<state->m_colWidths.size(); si++ )
+        {
+            sx += state->m_colWidths[si];
+            dc.DrawLine( sx, y, sx, y2 );
+        }
+
+        // Horizontal Line, below
+        //   (not if both this and next is category caption)
+        if ( p->IsCategory() &&
+             nextP && nextP->IsCategory() )
+            dc.SetPen(m_colCapBack);
+
+        dc.DrawLine( greyDepthX, y2-1, gridWidth-xRelMod, y2-1 );
+
+        if ( p == selected )
+        {
+            renderFlags |= wxPGCellRenderer::Selected;
+#if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+            wasSelectedPainted = true;
+#endif
+        }
+
+        wxColour rowBgCol;
+        wxColour rowFgCol;
+        wxBrush rowBgBrush;
+
+        if ( p->IsCategory() )
+        {
+            if ( p->m_fgColIndex == 0 )
+                rowFgCol = m_colCapFore;
+            else
+                rowFgCol = *(wxPGColour*)m_arrFgCols[p->m_fgColIndex];
+            rowBgBrush = wxBrush(m_colCapBack);
+        }
+        else if ( p != selected )
+        {
+            // Disabled may get different colour.
+            if ( !p->IsEnabled() )
+                rowFgCol = m_colDisPropFore;
+            else
+                rowFgCol = *(wxPGColour*)m_arrFgCols[p->m_fgColIndex];
+
+            rowBgBrush = *(wxPGBrush*)m_arrBgBrushes[p->m_bgColIndex];
+        }
+        else
+        {
+            // Selected gets different colour.
+            if ( reallyFocused )
+            {
+                rowFgCol = m_colSelFore;
+                rowBgBrush = wxBrush(m_colSelBack);
+            }
+            else if ( isEnabled )
+            {
+                rowFgCol = *(wxPGColour*)m_arrFgCols[p->m_fgColIndex];
+                rowBgBrush = marginBrush;
+            }
+            else
+            {
+                rowFgCol = m_colDisPropFore;
+                rowBgBrush = wxBrush(m_colSelBack);
+            }
+        }
+
+        bool fontChanged = false;
+
+        wxRect butRect( ((p->m_depth - 1) * m_subgroup_extramargin) - xRelMod,
+                        y,
+                        m_marginWidth,
+                        lh );
+
+        if ( p->IsCategory() )
+        {
+            // Captions are all cells merged as one
+            dc.SetFont(m_captionFont);
+            fontChanged = true;
+            wxRect cellRect(greyDepthX, y, gridWidth - greyDepth + 2, rowHeight-1 );
+
+            dc.SetBrush(rowBgBrush);
+            dc.SetPen(rowBgBrush.GetColour());
+            dc.SetTextForeground(rowFgCol);
+
+            dc.DrawRectangle(cellRect);
+
+            // Foreground
+            wxPGCellRenderer* renderer = p->GetCellRenderer(0);
+            renderer->Render( dc, cellRect, this, p, 0, -1, renderFlags );
+
+            // Tree Item Button
+            if ( !HasFlag(wxPG_HIDE_MARGIN) && p->HasVisibleChildren() )
+                DrawExpanderButton( dc, butRect, p );
+        }
+        else
+        {
+            if ( p->m_flags & wxPG_PROP_MODIFIED && (windowStyle & wxPG_BOLD_MODIFIED) )
+            {
+                dc.SetFont(m_captionFont);
+                fontChanged = true;
+            }
+
+            unsigned int ci;
+            int cellX = x + 1;
+            int nextCellWidth = state->m_colWidths[0];
+            wxRect cellRect(greyDepthX+1, y, 0, rowHeight-1);
+            int textXAdd = textMarginHere - greyDepthX;
+
+            for ( ci=0; ci<state->m_colWidths.size(); ci++ )
+            {
+                cellRect.width = nextCellWidth - 1;
+
+                bool ctrlCell = false;
+
+                // Background
+                if ( p == selected && m_wndEditor && ci == 1 )
+                {
+                    wxColour editorBgCol = GetEditorControl()->GetBackgroundColour();
+                    dc.SetBrush(editorBgCol);
+                    dc.SetPen(editorBgCol);
+                    dc.SetTextForeground(m_colPropFore);
+
+                    if ( m_dragStatus == 0 && !(m_iFlags & wxPG_FL_CUR_USES_CUSTOM_IMAGE) )
+                        ctrlCell = true;
+                }
+                else
+                {
+                    dc.SetBrush(rowBgBrush);
+                    dc.SetPen(rowBgBrush.GetColour());
+                    dc.SetTextForeground(rowFgCol);
+                }
+
+                dc.DrawRectangle(cellRect);
+
+                // Tree Item Button
+                if ( ci == 0 && !HasFlag(wxPG_HIDE_MARGIN) && p->HasVisibleChildren() )
+                    DrawExpanderButton( dc, butRect, p );
+
+                dc.SetClippingRegion(cellRect);
+
+                cellRect.x += textXAdd;
+                cellRect.width -= textXAdd;
+
+                // Foreground
+                if ( !ctrlCell )
+                {
+                    wxPGCellRenderer* renderer;
+                    int cmnVal = p->GetCommonValue();
+                    if ( cmnVal == -1 || ci != 1 )
+                    {
+                        renderer = p->GetCellRenderer(ci);
+                        renderer->Render( dc, cellRect, this, p, ci, -1, renderFlags );
+                    }
+                    else
+                    {
+                        renderer = GetCommonValue(cmnVal)->GetRenderer();
+                        renderer->Render( dc, cellRect, this, p, ci, -1, renderFlags );
+                    }
+                }
+
+                cellX += state->m_colWidths[ci];
+                if ( ci < (state->m_colWidths.size()-1) )
+                    nextCellWidth = state->m_colWidths[ci+1];
+                cellRect.x = cellX; 
+                dc.DestroyClippingRegion(); // Is this really necessary?
+                textXAdd = 0;
+            }
+        }
+
+        if ( fontChanged )
+            dc.SetFont(normalfont);
+
+        y += rowHeight;
+    }
+
+    // Refresh editor controls (seems not needed on msw)
+    // NOTE: This code is mandatory for GTK!
+#if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+    if ( wasSelectedPainted )
+    {
+        if ( m_wndEditor )
+            m_wndEditor->Refresh();
+        if ( m_wndEditor2 )
+            m_wndEditor2->Refresh();
+    }
+#endif
+
+    return y + yRelMod;
+}
+
+// -----------------------------------------------------------------------
+
+wxRect wxPropertyGrid::GetPropertyRect( const wxPGProperty* p1, const wxPGProperty* p2 ) const
+{
+    wxRect r;
+
+    if ( m_width < 10 || m_height < 10 ||
+         !m_pState->m_properties->GetChildCount() ||
+         p1 == (wxPGProperty*) NULL )
+        return wxRect(0,0,0,0);
+
+    int vy = 0;
+
+    //
+    // Return rect which encloses the given property range
+
+    int visTop = p1->GetY();
+    int visBottom;
+    if ( p2 )
+        visBottom = p2->GetY() + m_lineHeight;
+    else
+        visBottom = m_height + visTop;
+
+    // If seleced property is inside the range, we'll extend the range to include
+    // control's size.
+    wxPGProperty* selected = m_selected;
+    if ( selected )
+    {
+        int selectedY = selected->GetY();
+        if ( selectedY >= visTop && selectedY < visBottom )
+        {
+            wxWindow* editor = GetEditorControl();
+            if ( editor )
+            {
+                int visBottom2 = selectedY + editor->GetSize().y;
+                if ( visBottom2 > visBottom )
+                    visBottom = visBottom2;
+            }
+        }
+    }
+
+    return wxRect(0,visTop-vy,m_pState->m_width,visBottom-visTop);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::DrawItems( const wxPGProperty* p1, const wxPGProperty* p2 )
+{
+    if ( m_frozen )
+        return;
+
+    if ( m_pState->m_itemsAdded )
+        PrepareAfterItemsAdded();
+
+    wxRect r = GetPropertyRect(p1, p2);
+    if ( r.width > 0 )
+    {
+        m_canvas->RefreshRect(r);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::RefreshProperty( wxPGProperty* p )
+{
+    if ( p == m_selected )
+        DoSelectProperty(p, wxPG_SEL_FORCE);
+
+    DrawItemAndChildren(p);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::DrawItemAndValueRelated( wxPGProperty* p )
+{
+    if ( m_frozen )
+        return;
+
+    // Draw item, children, and parent too, if it is not category
+    wxPGProperty* parent = p->GetParent();
+
+    while ( parent &&
+            !parent->IsCategory() &&
+            parent->GetParent() )
+    {
+         DrawItem(parent);
+         parent = parent->GetParent();
+    }
+
+    DrawItemAndChildren(p);
+}
+
+void wxPropertyGrid::DrawItemAndChildren( wxPGProperty* p )
+{
+    wxCHECK_RET( p, wxT("invalid property id") );
+
+    // Do not draw if in non-visible page
+    if ( p->GetParentState() != m_pState )
+        return;
+
+    // do not draw a single item if multiple pending
+    if ( m_pState->m_itemsAdded || m_frozen )
+        return;
+
+    wxWindow* wndPrimary = GetEditorControl();
+
+    // Update child control.
+    if ( m_selected && m_selected->GetParent() == p )
+        m_selected->UpdateControl(wndPrimary);
+
+    const wxPGProperty* lastDrawn = p->GetLastVisibleSubItem();
+
+    DrawItems(p, lastDrawn);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::Refresh( bool WXUNUSED(eraseBackground),
+                              const wxRect *rect )
+{
+    PrepareAfterItemsAdded();
+
+    wxWindow::Refresh(false);
+    if ( m_canvas )
+        // TODO: Coordinate translation
+        m_canvas->Refresh(false, rect);
+
+#if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+    // I think this really helps only GTK+1.2
+    if ( m_wndEditor ) m_wndEditor->Refresh();
+    if ( m_wndEditor2 ) m_wndEditor2->Refresh();
+#endif
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid global operations
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::Clear()
+{
+    if ( m_selected )
+    {
+        bool selRes = DoSelectProperty(NULL, wxPG_SEL_DELETING);  // This must be before state clear
+        wxPG_CHECK_RET_DBG( selRes,
+                            wxT("failed to deselect a property (editor probably had invalid value)") );
+    }
+
+    m_pState->DoClear();
+
+    m_propHover = NULL;
+
+    m_prevVY = 0;
+
+    RecalculateVirtualSize();
+
+    // Need to clear some area at the end
+    if ( !m_frozen )
+        RefreshRect(wxRect(0, 0, m_width, m_height));
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::EnableCategories( bool enable )
+{
+    if ( !ClearSelection() )
+        return false;
+
+    if ( enable )
+    {
+        //
+        // Enable categories
+        //
+
+        m_windowStyle &= ~(wxPG_HIDE_CATEGORIES);
+    }
+    else
+    {
+        //
+        // Disable categories
+        //
+        m_windowStyle |= wxPG_HIDE_CATEGORIES;
+    }
+
+    if ( !m_pState->EnableCategories(enable) )
+        return false;
+
+    if ( !m_frozen )
+    {
+        if ( m_windowStyle & wxPG_AUTO_SORT )
+        {
+            m_pState->m_itemsAdded = 1; // force
+            PrepareAfterItemsAdded();
+        }
+    }
+    else
+        m_pState->m_itemsAdded = 1;
+
+    // No need for RecalculateVirtualSize() here - it is already called in
+    // wxPropertyGridPageState method above.
+
+    Refresh();
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SwitchState( wxPropertyGridPageState* pNewState )
+{
+    wxASSERT( pNewState );
+    wxASSERT( pNewState->GetGrid() );
+
+    if ( pNewState == m_pState )
+        return;
+
+    wxPGProperty* oldSelection = m_selected;
+
+    // Deselect
+    if ( m_selected )
+    {
+        bool selRes = ClearSelection();
+        wxPG_CHECK_RET_DBG( selRes,
+                            wxT("failed to deselect a property (editor probably had invalid value)") );
+    }
+
+    m_pState->m_selected = oldSelection;
+
+    bool orig_mode = m_pState->IsInNonCatMode();
+    bool new_state_mode = pNewState->IsInNonCatMode();
+
+    m_pState = pNewState;
+
+    // Validate width
+    int pgWidth = GetClientSize().x;
+    if ( HasVirtualWidth() )
+    {
+        int minWidth = pgWidth;
+        if ( pNewState->m_width < minWidth )
+        {
+            pNewState->m_width = minWidth;
+            pNewState->CheckColumnWidths();
+        }
+    }
+    else
+    {
+        //
+        // Just in case, fully re-center splitter
+        if ( HasFlag( wxPG_SPLITTER_AUTO_CENTER ) )
+            pNewState->m_fSplitterX = -1.0;
+
+        pNewState->OnClientWidthChange( pgWidth, pgWidth - pNewState->m_width );
+    }
+
+    m_propHover = (wxPGProperty*) NULL;
+
+    // If necessary, convert state to correct mode.
+    if ( orig_mode != new_state_mode )
+    {
+        // This should refresh as well.
+        EnableCategories( orig_mode?false:true );
+    }
+    else if ( !m_frozen )
+    {
+        // Refresh, if not frozen.
+        if ( m_pState->m_itemsAdded )
+            PrepareAfterItemsAdded();
+
+        // Reselect
+        if ( m_pState->m_selected )
+            DoSelectProperty( m_pState->m_selected );
+
+        RecalculateVirtualSize(0);
+        Refresh();
+    }
+    else
+        m_pState->m_itemsAdded = 1;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SortChildren( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    m_pState->SortChildren( p );
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::Sort()
+{
+    bool selRes = ClearSelection();  // This must be before state clear
+    wxPG_CHECK_RET_DBG( selRes,
+                        wxT("failed to deselect a property (editor probably had invalid value)") );
+
+    m_pState->Sort();
+}
+
+// -----------------------------------------------------------------------
+
+// Call to SetSplitterPosition will always disable splitter auto-centering
+// if parent window is shown.
+void wxPropertyGrid::DoSetSplitterPosition_( int newxpos, bool refresh, int splitterIndex, bool allPages )
+{
+    if ( ( newxpos < wxPG_DRAG_MARGIN ) )
+        return;
+
+    wxPropertyGridPageState* state = m_pState;
+
+    state->DoSetSplitterPosition( newxpos, splitterIndex, allPages );
+
+    if ( refresh )
+    {
+        if ( m_selected )
+            CorrectEditorWidgetSizeX();
+
+        Refresh();
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::CenterSplitter( bool enableAutoCentering )
+{
+    SetSplitterPosition( m_width/2, true );
+    if ( enableAutoCentering && ( m_windowStyle & wxPG_SPLITTER_AUTO_CENTER ) )
+        m_iFlags &= ~(wxPG_FL_DONT_CENTER_SPLITTER);
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid item iteration (GetNextProperty etc.) methods
+// -----------------------------------------------------------------------
+
+// Returns nearest paint visible property (such that will be painted unless
+// window is scrolled or resized). If given property is paint visible, then
+// it itself will be returned
+wxPGProperty* wxPropertyGrid::GetNearestPaintVisible( wxPGProperty* p ) const
+{
+    int vx,vy1;// Top left corner of client
+    GetViewStart(&vx,&vy1);
+    vy1 *= wxPG_PIXELS_PER_UNIT;
+
+    int vy2 = vy1 + m_height;
+    int propY = p->GetY2(m_lineHeight);
+
+    if ( (propY + m_lineHeight) < vy1 )
+    {
+    // Too high
+        return DoGetItemAtY( vy1 );
+    }
+    else if ( propY > vy2 )
+    {
+    // Too low
+        return DoGetItemAtY( vy2 );
+    }
+
+    // Itself paint visible
+    return p;
+
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetButtonShortcut( int keycode, bool ctrlDown, bool altDown )
+{
+    if ( keycode )
+    {
+        m_pushButKeyCode = keycode;
+        m_pushButKeyCodeNeedsCtrl = ctrlDown ? 1 : 0;
+        m_pushButKeyCodeNeedsAlt = altDown ? 1 : 0;
+    }
+    else
+    {
+        m_pushButKeyCode = WXK_DOWN;
+        m_pushButKeyCodeNeedsCtrl = 0;
+        m_pushButKeyCodeNeedsAlt = 1;
+    }
+}
+
+// -----------------------------------------------------------------------
+// Methods related to change in value, value modification and sending events
+// -----------------------------------------------------------------------
+
+// commits any changes in editor of selected property
+// return true if validation did not fail
+// flags are same as with DoSelectProperty
+bool wxPropertyGrid::CommitChangesFromEditor( wxUint32 flags )
+{
+    // Committing already?
+    if ( m_inCommitChangesFromEditor )
+        return true;
+
+    // Don't do this if already processing editor event. It might
+    // induce recursive dialogs and crap like that.
+    if ( m_iFlags & wxPG_FL_IN_ONCUSTOMEDITOREVENT )
+    {
+        if ( m_inDoPropertyChanged )
+            return true;
+
+        return false;
+    }
+
+    if ( m_wndEditor &&
+         IsEditorsValueModified() &&
+         (m_iFlags & wxPG_FL_INITIALIZED) &&
+         m_selected )
+    {
+        m_inCommitChangesFromEditor = 1;
+
+        wxVariant variant(m_selected->GetValueRef());
+        bool valueIsPending = false;
+
+        // JACS - necessary to avoid new focus being found spuriously within OnIdle
+        // due to another window getting focus
+        wxWindow* oldFocus = m_curFocused;
+
+        bool validationFailure = false;
+        bool forceSuccess = (flags & (wxPG_SEL_NOVALIDATE|wxPG_SEL_FORCE)) ? true : false;
+
+        m_chgInfo_changedProperty = NULL;
+
+        // If truly modified, schedule value as pending.
+        if ( m_selected->GetEditorClass()->GetValueFromControl( variant, m_selected, GetEditorControl() ) )
+        {
+            if ( DoEditorValidate() &&
+                 PerformValidation(m_selected, variant) )
+            {
+                valueIsPending = true;
+            }
+            else
+            {
+                validationFailure = true;
+            }
+        }
+        else
+        {
+            EditorsValueWasNotModified();
+        }
+
+        bool res = true;
+
+        m_inCommitChangesFromEditor = 0;
+
+        if ( validationFailure && !forceSuccess )
+        {
+            if (oldFocus)
+            {
+                oldFocus->SetFocus();
+                m_curFocused = oldFocus;
+            }
+
+            res = OnValidationFailure(m_selected, variant);
+
+            // Now prevent further validation failure messages
+            if ( res )
+            {
+                EditorsValueWasNotModified();
+                OnValidationFailureReset(m_selected);
+            }
+        }
+        else if ( valueIsPending )
+        {
+            DoPropertyChanged( m_selected, flags );
+            EditorsValueWasNotModified();
+        }
+
+        return res;
+    }
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::PerformValidation( wxPGProperty* p, wxVariant& pendingValue )
+{
+    //
+    // Runs all validation functionality.
+    // Returns true if value passes all tests.
+    //
+
+    m_validationInfo.m_failureBehavior = m_permanentValidationFailureBehavior;
+
+    if ( !wxPGIsVariantType(pendingValue, list) )
+    {
+        if ( !p->ValidateValue(pendingValue, m_validationInfo) )
+            return false;
+    }
+
+    //
+    // Adapt list to child values, if necessary
+    wxVariant listValue = pendingValue;
+    wxVariant* pPendingValue = &pendingValue;
+    wxVariant* pList = NULL;
+
+    // If parent has wxPG_PROP_AGGREGATE flag, or uses composite
+    // string value, then we need treat as it was changed instead
+    // (or, in addition, as is the case with composite string parent).
+    // This includes creating list variant for child values.
+
+    wxPGProperty* pwc = p->GetParent();
+    wxPGProperty* changedProperty = p;
+    wxPGProperty* baseChangedProperty = changedProperty;
+    wxVariant bcpPendingList;
+
+    listValue = pendingValue;
+    listValue.SetName(p->GetLabel());
+
+    while ( pwc &&
+            (pwc->HasFlag(wxPG_PROP_AGGREGATE) || pwc->HasFlag(wxPG_PROP_COMPOSED_VALUE)) )
+    {
+        wxVariantList tempList;
+        wxVariant lv(tempList, pwc->GetLabel());
+        lv.Append(listValue);
+        listValue = lv;
+        pPendingValue = &listValue;
+
+        if ( pwc->HasFlag(wxPG_PROP_AGGREGATE) )
+        {
+            baseChangedProperty = pwc;
+            bcpPendingList = lv;
+        }
+
+        changedProperty = pwc;
+        pwc = pwc->GetParent();
+    }
+
+    wxVariant value;
+    wxPGProperty* evtChangingProperty = changedProperty;
+
+    if ( !wxPGIsVariantType(*pPendingValue, list) )
+    {
+        value = *pPendingValue;
+    }
+    else
+    {
+        // Convert list to child values
+        pList = pPendingValue;
+        changedProperty->AdaptListToValue( *pPendingValue, &value );
+    }
+
+    wxVariant evtChangingValue = value;
+
+    // FIXME: After proper ValueToString()s added, remove
+    // this. It is just a temporary fix, as evt_changing
+    // will simply not work for wxPG_PROP_COMPOSED_VALUE
+    // (unless it is selected, and textctrl editor is open).
+    if ( changedProperty->HasFlag(wxPG_PROP_COMPOSED_VALUE) )
+    {
+        evtChangingProperty = baseChangedProperty;
+        if ( evtChangingProperty != p )
+        {
+            evtChangingProperty->AdaptListToValue( bcpPendingList, &evtChangingValue );
+        }
+        else
+        {
+            evtChangingValue = pendingValue;
+        }
+    }
+
+    if ( evtChangingProperty->HasFlag(wxPG_PROP_COMPOSED_VALUE) )
+    {
+        if ( changedProperty == m_selected )
+        {
+            wxASSERT( m_wndEditor->IsKindOf(CLASSINFO(wxTextCtrl)) );
+            evtChangingValue = ((wxTextCtrl*)m_wndEditor)->GetValue();
+        }
+        else
+        {
+            wxLogDebug(wxT("WARNING: wxEVT_PG_CHANGING is about to happen with old value."));
+        }
+    }
+
+    wxASSERT( m_chgInfo_changedProperty == NULL );
+    m_chgInfo_changedProperty = changedProperty;
+    m_chgInfo_baseChangedProperty = baseChangedProperty;
+    m_chgInfo_pendingValue = value;
+
+    if ( pList )
+        m_chgInfo_valueList = *pList;
+    else
+        m_chgInfo_valueList.MakeNull();
+
+    // If changedProperty is not property which value was edited,
+    // then call wxPGProperty::ValidateValue() for that as well.
+    if ( p != changedProperty && !wxPGIsVariantType(value, list) )
+    {
+        if ( !changedProperty->ValidateValue(value, m_validationInfo) )
+            return false;
+    }
+
+    // SendEvent returns true if event was vetoed
+    if ( SendEvent( wxEVT_PG_CHANGING, evtChangingProperty, &evtChangingValue, 0 ) )
+        return false;
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::DoShowPropertyError( wxPGProperty* WXUNUSED(property), const wxString& msg )
+{
+    if ( !msg.length() )
+        return;
+
+#if wxUSE_STATUSBAR
+    if ( !wxPGGlobalVars->m_offline )
+    {
+        wxWindow* topWnd = ::wxGetTopLevelParent(this);
+        if ( topWnd )
+        {
+            wxFrame* pFrame = wxDynamicCast(topWnd, wxFrame);
+            if ( pFrame )
+            {
+                wxStatusBar* pStatusBar = pFrame->GetStatusBar();
+                if ( pStatusBar )
+                {
+                    pStatusBar->SetStatusText(msg);
+                    return;
+                }
+            }
+        }
+    }
+#endif
+
+    ::wxMessageBox(msg, _T("Property Error"));
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::DoOnValidationFailure( wxPGProperty* property, wxVariant& WXUNUSED(invalidValue) )
+{
+    int vfb = m_validationInfo.m_failureBehavior;
+
+    if ( vfb & wxPG_VFB_BEEP )
+        ::wxBell();
+
+    if ( (vfb & wxPG_VFB_MARK_CELL) &&
+         !property->HasFlag(wxPG_PROP_INVALID_VALUE) )
+    {
+        wxASSERT_MSG( !property->GetCell(0) && !property->GetCell(1),
+                      wxT("Currently wxPG_VFB_MARK_CELL only works with properties with standard first two cells") );
+
+        if ( !property->GetCell(0) && !property->GetCell(1) )
+        {
+            wxColour vfbFg = *wxWHITE;
+            wxColour vfbBg = *wxRED;
+            property->SetCell(0, new wxPGCell(property->GetLabel(), wxNullBitmap, vfbFg, vfbBg));
+            property->SetCell(1, new wxPGCell(property->GetDisplayedString(), wxNullBitmap, vfbFg, vfbBg));
+
+            DrawItemAndChildren(property);
+
+            if ( property == m_selected )
+            {
+                SetInternalFlag(wxPG_FL_CELL_OVERRIDES_SEL);
+
+                wxWindow* editor = GetEditorControl();
+                if ( editor )
+                {
+                    editor->SetForegroundColour(vfbFg);
+                    editor->SetBackgroundColour(vfbBg);
+                }
+            }
+        }
+    }
+
+    if ( vfb & wxPG_VFB_SHOW_MESSAGE )
+    {
+        wxString msg = m_validationInfo.m_failureMessage;
+
+        if ( !msg.length() )
+            msg = _T("You have entered invalid value. Press ESC to cancel editing.");
+
+        DoShowPropertyError(property, msg);
+    }
+
+    return (vfb & wxPG_VFB_STAY_IN_PROPERTY) ? false : true;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::DoOnValidationFailureReset( wxPGProperty* property )
+{
+    int vfb = m_validationInfo.m_failureBehavior;
+
+    if ( vfb & wxPG_VFB_MARK_CELL )
+    {
+        property->SetCell(0, NULL);
+        property->SetCell(1, NULL);
+
+        ClearInternalFlag(wxPG_FL_CELL_OVERRIDES_SEL);
+
+        if ( property == m_selected && GetEditorControl() )
+        {
+            // Calling this will recreate the control, thus resetting its colour
+            RefreshProperty(property);
+        }
+        else
+        {
+            DrawItemAndChildren(property);
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+// flags are same as with DoSelectProperty
+bool wxPropertyGrid::DoPropertyChanged( wxPGProperty* p, unsigned int selFlags )
+{
+    if ( m_inDoPropertyChanged )
+        return true;
+
+    m_pState->m_anyModified = 1;
+
+    m_inDoPropertyChanged = 1;
+
+    // Maybe need to update control
+    wxASSERT( m_chgInfo_changedProperty != NULL );
+
+    // These values were calculated in PerformValidation()
+    wxPGProperty* changedProperty = m_chgInfo_changedProperty;
+    wxVariant value = m_chgInfo_pendingValue;
+
+    wxPGProperty* topPaintedProperty = changedProperty;
+
+    while ( !topPaintedProperty->IsCategory() &&
+            !topPaintedProperty->IsRoot() )
+    {
+        topPaintedProperty = topPaintedProperty->GetParent();
+    }
+
+    changedProperty->SetValue(value, &m_chgInfo_valueList);
+
+    // Set as Modified (not if dragging just began)
+    if ( !(p->m_flags & wxPG_PROP_MODIFIED) )
+    {
+        p->m_flags |= wxPG_PROP_MODIFIED;
+        if ( p == m_selected && (m_windowStyle & wxPG_BOLD_MODIFIED) )
+        {
+            if ( m_wndEditor )
+                SetCurControlBoldFont();
+        }
+    }
+
+    wxPGProperty* pwc;
+
+    // Propagate updates to parent(s)
+    pwc = p;
+    wxPGProperty* prevPwc = NULL;
+
+    while ( prevPwc != topPaintedProperty )
+    {
+        pwc->m_flags |= wxPG_PROP_MODIFIED;
+
+        if ( pwc == m_selected && (m_windowStyle & wxPG_BOLD_MODIFIED) )
+        {
+            if ( m_wndEditor )
+                SetCurControlBoldFont();
+        }
+
+        prevPwc = pwc;
+        pwc = pwc->GetParent();
+    }
+
+    // Draw the actual property
+    DrawItemAndChildren( topPaintedProperty );
+
+    //
+    // If value was set by wxPGProperty::OnEvent, then update the editor
+    // control.
+    if ( selFlags & wxPG_SEL_DIALOGVAL )
+    {
+        if ( m_wndEditor )
+            p->GetEditorClass()->UpdateControl(p, m_wndEditor);
+    }
+    else
+    {
+#if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+        if ( m_wndEditor ) m_wndEditor->Refresh();
+        if ( m_wndEditor2 ) m_wndEditor2->Refresh();
+#endif
+    }
+
+    // Sanity check
+    wxASSERT( !changedProperty->GetParent()->HasFlag(wxPG_PROP_AGGREGATE) );
+
+    // If top parent has composite string value, then send to child parents,
+    // starting from baseChangedProperty.
+    if ( changedProperty->HasFlag(wxPG_PROP_COMPOSED_VALUE) )
+    {
+        pwc = m_chgInfo_baseChangedProperty;
+
+        while ( pwc != changedProperty )
+        {
+            SendEvent( wxEVT_PG_CHANGED, pwc, NULL, selFlags );
+            pwc = pwc->GetParent();
+        }
+    }
+
+    SendEvent( wxEVT_PG_CHANGED, changedProperty, NULL, selFlags );
+
+    m_inDoPropertyChanged = 0;
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::ChangePropertyValue( wxPGPropArg id, wxVariant newValue )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+
+    m_chgInfo_changedProperty = NULL;
+
+    if ( PerformValidation(p, newValue) )
+    {
+        DoPropertyChanged(p);
+        return true;
+    }
+    else
+    {
+        OnValidationFailure(p, newValue);
+    }
+
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+// Runs wxValidator for the selected property
+bool wxPropertyGrid::DoEditorValidate()
+{
+#if wxUSE_VALIDATORS
+    // With traditional validator style, we dont need to more
+    if ( !(GetExtraStyle() & wxPG_EX_LEGACY_VALIDATORS) )
+        return true;
+
+    if ( m_iFlags & wxPG_FL_VALIDATION_FAILED )
+    {
+        return false;
+    }
+
+    wxWindow* wnd = GetEditorControl();
+
+    wxValidator* validator = m_selected->GetValidator();
+    if ( validator && wnd )
+    {
+        // Use TextCtrl of ODComboBox instead
+        if ( wnd->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)) )
+        {
+            wnd = ((wxOwnerDrawnComboBox*)wnd)->GetTextCtrl();
+
+            if ( !wnd )
+                return true;
+        }
+
+        validator->SetWindow(wnd);
+
+        // Instead setting the flag after the failure, we set
+        // it before checking and then clear afterwards if things
+        // went fine. This trick is necessary since focus events
+        // may be triggered while in Validate.
+        m_iFlags |= wxPG_FL_VALIDATION_FAILED;
+        if ( !validator->Validate(this) )
+        {
+            // If you dpm't want to display message multiple times per change,
+            // comment the following line.
+            m_iFlags &= ~(wxPG_FL_VALIDATION_FAILED);
+            return false;
+        }
+        m_iFlags &= ~(wxPG_FL_VALIDATION_FAILED);
+    }
+#endif
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::ProcessEvent(wxEvent& event)
+{
+    wxWindow* wnd = (wxWindow*) event.GetEventObject();
+    if ( wnd && wnd->IsKindOf(CLASSINFO(wxWindow)) )
+    {
+        wxWindow* parent = wnd->GetParent();
+
+        if ( parent &&
+             (parent == m_canvas ||
+              parent->GetParent() == m_canvas) )
+        {
+            OnCustomEditorEvent((wxCommandEvent&)event);
+            return true;
+        }
+    }
+    return wxPanel::ProcessEvent(event);
+}
+
+// -----------------------------------------------------------------------
+
+// NB: It may really not be wxCommandEvent - must check if necessary
+//     (usually not).
+void wxPropertyGrid::OnCustomEditorEvent( wxCommandEvent &event )
+{
+    wxPGProperty* selected = m_selected;
+
+    //
+    // Somehow, event is handled after property has been deselected.
+    // Possibly, but very rare.
+    if ( !selected )
+        return;
+
+    if ( m_iFlags & wxPG_FL_IN_ONCUSTOMEDITOREVENT )
+        return;
+
+    wxVariant pendingValue(selected->GetValueRef());
+    wxWindow* wnd = GetEditorControl();
+    int selFlags = 0;
+    bool wasUnspecified = selected->IsValueUnspecified();
+    int usesAutoUnspecified = selected->UsesAutoUnspecified();
+
+    bool valueIsPending = false;
+
+    m_chgInfo_changedProperty = NULL;
+
+    m_iFlags &= ~(wxPG_FL_VALIDATION_FAILED|wxPG_FL_VALUE_CHANGE_IN_EVENT);
+
+    //
+    // Filter out excess wxTextCtrl modified events
+    if ( event.GetEventType() == wxEVT_COMMAND_TEXT_UPDATED &&
+         wnd &&
+         wnd->IsKindOf(CLASSINFO(wxTextCtrl)) )
+    {
+        wxTextCtrl* tc = (wxTextCtrl*) wnd;
+
+        wxString newTcValue = tc->GetValue();
+        if ( m_prevTcValue == newTcValue )
+            return;
+
+        m_prevTcValue = newTcValue;
+    }
+
+    SetInternalFlag(wxPG_FL_IN_ONCUSTOMEDITOREVENT);
+
+    bool validationFailure = false;
+    bool buttonWasHandled = false;
+
+    //
+    // Try common button handling
+    if ( m_wndEditor2 && event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED )
+    {
+        wxPGEditorDialogAdapter* adapter = selected->GetEditorDialog();
+
+        if ( adapter )
+        {
+            buttonWasHandled = true;
+            // Store as res2, as previously (and still currently alternatively)
+            // dialogs can be shown by handling wxEVT_COMMAND_BUTTON_CLICKED
+            // in wxPGProperty::OnEvent().
+            adapter->ShowDialog( this, selected );
+            delete adapter;
+        }
+    }
+
+    if ( !buttonWasHandled )
+    {
+        // First call editor class' event handler.
+        const wxPGEditor* editor = selected->GetEditorClass();
+
+        if ( editor->OnEvent( this, selected, wnd, event ) )
+        {
+            // If changes, validate them
+            if ( DoEditorValidate() )
+            {
+                if ( editor->GetValueFromControl( pendingValue, m_selected, wnd ) )
+                    valueIsPending = true;
+            }
+            else
+            {
+                validationFailure = true;
+            }
+        }
+
+        // Then the property's custom handler (must be always called, unless
+        // validation failed).
+        if ( !validationFailure )
+            buttonWasHandled = selected->OnEvent( this, wnd, event );
+    }
+
+    // SetValueInEvent(), as called in one of the functions referred above
+    // overrides editor's value.
+    if ( m_iFlags & wxPG_FL_VALUE_CHANGE_IN_EVENT )
+    {
+        valueIsPending = true;
+        pendingValue = m_changeInEventValue;
+        selFlags |= wxPG_SEL_DIALOGVAL;
+    }
+
+    if ( !validationFailure && valueIsPending )
+        if ( !PerformValidation(m_selected, pendingValue) )
+            validationFailure = true;
+
+    if ( validationFailure )
+    {
+        OnValidationFailure(selected, pendingValue);
+    }
+    else if ( valueIsPending )
+    {
+        selFlags |= ( !wasUnspecified && selected->IsValueUnspecified() && usesAutoUnspecified ) ? wxPG_SEL_SETUNSPEC : 0;
+
+        DoPropertyChanged(selected, selFlags);
+        EditorsValueWasNotModified();
+    }
+    else
+    {
+        // No value after all
+
+        // Let unhandled button click events go to the parent
+        if ( !buttonWasHandled && event.GetEventType() == wxEVT_COMMAND_BUTTON_CLICKED )
+        {
+            wxCommandEvent evt(wxEVT_COMMAND_BUTTON_CLICKED,GetId());
+            GetEventHandler()->AddPendingEvent(evt);
+        }
+    }
+
+    ClearInternalFlag(wxPG_FL_IN_ONCUSTOMEDITOREVENT);
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid editor control helper methods
+// -----------------------------------------------------------------------
+
+wxRect wxPropertyGrid::GetEditorWidgetRect( wxPGProperty* p, int column ) const
+{
+    int itemy = p->GetY2(m_lineHeight);
+    int vy = 0;
+    int cust_img_space = 0;
+    int splitterX = m_pState->DoGetSplitterPosition(column-1);
+    int colEnd = splitterX + m_pState->m_colWidths[column];
+
+    // TODO: If custom image detection changes from current, change this.
+    if ( m_iFlags & wxPG_FL_CUR_USES_CUSTOM_IMAGE /*p->m_flags & wxPG_PROP_CUSTOMIMAGE*/ )
+    {
+        //m_iFlags |= wxPG_FL_CUR_USES_CUSTOM_IMAGE;
+        int imwid = p->OnMeasureImage().x;
+        if ( imwid < 1 ) imwid = wxPG_CUSTOM_IMAGE_WIDTH;
+        cust_img_space = imwid + wxCC_CUSTOM_IMAGE_MARGIN1 + wxCC_CUSTOM_IMAGE_MARGIN2;
+    }
+
+    return wxRect
+      (
+        splitterX+cust_img_space+wxPG_XBEFOREWIDGET+wxPG_CONTROL_MARGIN+1,
+        itemy-vy,
+        colEnd-splitterX-wxPG_XBEFOREWIDGET-wxPG_CONTROL_MARGIN-cust_img_space-1,
+        m_lineHeight-1
+      );
+}
+
+// -----------------------------------------------------------------------
+
+wxRect wxPropertyGrid::GetImageRect( wxPGProperty* p, int item ) const
+{
+    wxSize sz = GetImageSize(p, item);
+    return wxRect(wxPG_CONTROL_MARGIN + wxCC_CUSTOM_IMAGE_MARGIN1,
+                  wxPG_CUSTOM_IMAGE_SPACINGY,
+                  sz.x,
+                  sz.y);
+}
+
+// return size of custom paint image
+wxSize wxPropertyGrid::GetImageSize( wxPGProperty* p, int item ) const
+{
+    // If called with NULL property, then return default image
+    // size for properties that use image.
+    if ( !p )
+        return wxSize(wxPG_CUSTOM_IMAGE_WIDTH,wxPG_STD_CUST_IMAGE_HEIGHT(m_lineHeight));
+
+    wxSize cis = p->OnMeasureImage(item);
+
+    int choiceCount = p->GetChoiceCount();
+    int comVals = p->GetDisplayedCommonValueCount();
+    if ( item >= choiceCount && comVals > 0 )
+    {
+        unsigned int cvi = item-choiceCount;
+        cis = GetCommonValue(cvi)->GetRenderer()->GetImageSize(NULL, 1, cvi);
+    }
+    else if ( item >= 0 && choiceCount == 0 )
+        return wxSize(0, 0);
+
+    if ( cis.x < 0 )
+    {
+        if ( cis.x <= -1 )
+            cis.x = wxPG_CUSTOM_IMAGE_WIDTH;
+    }
+    if ( cis.y <= 0 )
+    {
+        if ( cis.y >= -1 )
+            cis.y = wxPG_STD_CUST_IMAGE_HEIGHT(m_lineHeight);
+        else
+            cis.y = -cis.y;
+    }
+    return cis;
+}
+
+// -----------------------------------------------------------------------
+
+// takes scrolling into account
+void wxPropertyGrid::ImprovedClientToScreen( int* px, int* py )
+{
+    int vx, vy;
+    GetViewStart(&vx,&vy);
+    vy*=wxPG_PIXELS_PER_UNIT;
+    vx*=wxPG_PIXELS_PER_UNIT;
+    *px -= vx;
+    *py -= vy;
+    ClientToScreen( px, py );
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridHitTestResult wxPropertyGrid::HitTest( const wxPoint& pt ) const
+{
+    wxPoint pt2;
+    GetViewStart(&pt2.x,&pt2.y);
+    pt2.x *= wxPG_PIXELS_PER_UNIT;
+    pt2.y *= wxPG_PIXELS_PER_UNIT;
+    pt2.x += pt.x;
+    pt2.y += pt.y;
+
+    return m_pState->HitTest(pt2);
+}
+
+// -----------------------------------------------------------------------
+
+// custom set cursor
+void wxPropertyGrid::CustomSetCursor( int type, bool override )
+{
+    if ( type == m_curcursor && !override ) return;
+
+    wxCursor* cursor = &wxPG_DEFAULT_CURSOR;
+
+    if ( type == wxCURSOR_SIZEWE )
+        cursor = m_cursorSizeWE;
+
+    m_canvas->SetCursor( *cursor );
+
+    m_curcursor = type;
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid property selection
+// -----------------------------------------------------------------------
+
+#define CONNECT_CHILD(EVT,FUNCTYPE,FUNC) \
+    wnd->Connect(id, EVT, \
+        (wxObjectEventFunction) (wxEventFunction)  \
+        FUNCTYPE (&wxPropertyGrid::FUNC), \
+        NULL, this );
+
+// Setups event handling for child control
+void wxPropertyGrid::SetupEventHandling( wxWindow* argWnd, int id )
+{
+    wxWindow* wnd = argWnd;
+
+    if ( argWnd == m_wndEditor )
+    {
+        CONNECT_CHILD(wxEVT_MOTION,(wxMouseEventFunction),OnMouseMoveChild)
+        CONNECT_CHILD(wxEVT_LEFT_UP,(wxMouseEventFunction),OnMouseUpChild)
+        CONNECT_CHILD(wxEVT_LEFT_DOWN,(wxMouseEventFunction),OnMouseClickChild)
+        CONNECT_CHILD(wxEVT_RIGHT_UP,(wxMouseEventFunction),OnMouseRightClickChild)
+        CONNECT_CHILD(wxEVT_ENTER_WINDOW,(wxMouseEventFunction),OnMouseEntry)
+        CONNECT_CHILD(wxEVT_LEAVE_WINDOW,(wxMouseEventFunction),OnMouseEntry)
+    }
+    else
+    {
+        CONNECT_CHILD(wxEVT_NAVIGATION_KEY,(wxNavigationKeyEventFunction),OnNavigationKey)
+    }
+    CONNECT_CHILD(wxEVT_KEY_DOWN,(wxCharEventFunction),OnChildKeyDown)
+    CONNECT_CHILD(wxEVT_KEY_UP,(wxCharEventFunction),OnChildKeyUp)
+    CONNECT_CHILD(wxEVT_KILL_FOCUS,(wxFocusEventFunction),OnFocusEvent)
+}
+
+void wxPropertyGrid::FreeEditors()
+{
+    // Do not free editors immediately if processing events
+    if ( !m_windowsToDelete )
+        m_windowsToDelete = new wxArrayPtrVoid;
+
+    if ( m_wndEditor2 )
+    {
+        m_windowsToDelete->push_back(m_wndEditor2);
+        m_wndEditor2->Hide();
+        m_wndEditor2 = (wxWindow*) NULL;
+    }
+
+    if ( m_wndEditor )
+    {
+        m_windowsToDelete->push_back(m_wndEditor);
+        m_wndEditor->Hide();
+        m_wndEditor = (wxWindow*) NULL;
+    }
+}
+
+// Call with NULL to de-select property
+bool wxPropertyGrid::DoSelectProperty( wxPGProperty* p, unsigned int flags )
+{
+    /*
+    if (p)
+        wxLogDebug(wxT("SelectProperty( %s (%s[%i]) )"),p->m_label.c_str(),
+            p->m_parent->m_label.c_str(),p->GetIndexInParent());
+    else
+        wxLogDebug(wxT("SelectProperty( NULL, -1 )"));
+    */
+
+    if ( m_inDoSelectProperty )
+        return true;
+
+    m_inDoSelectProperty = 1;
+
+    wxPGProperty* prev = m_selected;
+
+    //
+    // Delete windows pending for deletion
+    if ( m_windowsToDelete && !m_inDoPropertyChanged && m_windowsToDelete->size() )
+    {
+        unsigned int i;
+
+        for ( i=0; i<m_windowsToDelete->size(); i++ )
+            delete ((wxWindow*)((*m_windowsToDelete)[i]));
+
+        m_windowsToDelete->clear();
+    }
+
+    if ( !m_pState )
+    {
+        m_inDoSelectProperty = 0;
+        return false;
+    }
+
+    //
+    // If we are frozen, then just set the values.
+    if ( m_frozen )
+    {
+        m_iFlags &= ~(wxPG_FL_ABNORMAL_EDITOR);
+        m_editorFocused = 0;
+        m_selected = p;
+        m_selColumn = 1;
+        m_pState->m_selected = p;
+
+        // If frozen, always free controls. But don't worry, as Thaw will
+        // recall SelectProperty to recreate them.
+        FreeEditors();
+
+        // Prevent any further selection measures in this call
+        p = (wxPGProperty*) NULL;
+    }
+    else
+    {
+        // Is it the same?
+        if ( m_selected == p && !(flags & wxPG_SEL_FORCE) )
+        {
+            // Only set focus if not deselecting
+            if ( p )
+            {
+                if ( flags & wxPG_SEL_FOCUS )
+                {
+                    if ( m_wndEditor )
+                    {
+                        m_wndEditor->SetFocus();
+                        m_editorFocused = 1;
+                    }
+                }
+                else
+                {
+                    wxScrolledWindow::SetFocus();
+                    m_editorFocused = 0;
+                }
+            }
+
+            m_inDoSelectProperty = 0;
+            return true;
+        }
+
+        //
+        // First, deactivate previous
+        if ( m_selected )
+        {
+
+            OnValidationFailureReset(m_selected);
+
+            // Must double-check if this is an selected in case of forceswitch
+            if ( p != prev )
+            {
+                if ( !CommitChangesFromEditor(flags) )
+                {
+                    // Validation has failed, so we can't exit the previous editor
+                    //::wxMessageBox(_("Please correct the value or press ESC to cancel the edit."),
+                    //               _("Invalid Value"),wxOK|wxICON_ERROR);
+                    m_inDoSelectProperty = 0;
+                    return false;
+                }
+            }
+
+            FreeEditors();
+            m_selColumn = -1;
+
+            m_selected = (wxPGProperty*) NULL;
+            m_pState->m_selected = (wxPGProperty*) NULL;
+
+            // We need to always fully refresh the grid here
+            Refresh(false);
+
+            m_iFlags &= ~(wxPG_FL_ABNORMAL_EDITOR);
+            EditorsValueWasNotModified();
+        }
+
+        SetInternalFlag(wxPG_FL_IN_SELECT_PROPERTY);
+
+        //
+        // Then, activate the one given.
+        if ( p )
+        {
+            int propY = p->GetY2(m_lineHeight);
+
+            int splitterX = GetSplitterPosition();
+            m_editorFocused = 0;
+            m_selected = p;
+            m_pState->m_selected = p;
+            m_iFlags |= wxPG_FL_PRIMARY_FILLS_ENTIRE;
+            if ( p != prev )
+                m_iFlags &= ~(wxPG_FL_VALIDATION_FAILED);
+
+            wxASSERT( m_wndEditor == (wxWindow*) NULL );
+
+            // Do we need OnMeasureCalls?
+            wxSize imsz = p->OnMeasureImage();
+
+            //
+            // Only create editor for non-disabled non-caption
+            if ( !p->IsCategory() && !(p->m_flags & wxPG_PROP_DISABLED) )
+            {
+            // do this for non-caption items
+
+                m_selColumn = 1;
+
+                // Do we need to paint the custom image, if any?
+                m_iFlags &= ~(wxPG_FL_CUR_USES_CUSTOM_IMAGE);
+                if ( (p->m_flags & wxPG_PROP_CUSTOMIMAGE) &&
+                     !p->GetEditorClass()->CanContainCustomImage()
+                   )
+                    m_iFlags |= wxPG_FL_CUR_USES_CUSTOM_IMAGE;
+
+                wxRect grect = GetEditorWidgetRect(p, m_selColumn);
+                wxPoint goodPos = grect.GetPosition();
+            #if wxPG_CREATE_CONTROLS_HIDDEN
+                int coord_adjust = m_height - goodPos.y;
+                goodPos.y += coord_adjust;
+            #endif
+
+                const wxPGEditor* editor = p->GetEditorClass();
+                wxCHECK_MSG(editor, false,
+                    wxT("NULL editor class not allowed"));
+
+                m_iFlags &= ~wxPG_FL_FIXED_WIDTH_EDITOR;
+
+                wxPGWindowList wndList = editor->CreateControls(this,
+                                                                p,
+                                                                goodPos,
+                                                                grect.GetSize());
+
+                m_wndEditor = wndList.m_primary;
+                m_wndEditor2 = wndList.m_secondary;
+
+                // NOTE: It is allowed for m_wndEditor to be NULL - in this case
+                //       value is drawn as normal, and m_wndEditor2 is assumed
+                //       to be a right-aligned button that triggers a separate editor
+                //       window.
+
+                if ( m_wndEditor )
+                {
+                    wxASSERT_MSG( m_wndEditor->GetParent() == m_canvas,
+                                  wxT("CreateControls must use result of wxPropertyGrid::GetPanel() as parent of controls.") );
+
+                    // Set validator, if any
+                #if wxUSE_VALIDATORS
+                    if ( !(GetExtraStyle() & wxPG_EX_LEGACY_VALIDATORS) )
+                    {
+                        wxValidator* validator = p->GetValidator();
+                        if ( validator )
+                            m_wndEditor->SetValidator(*validator);
+                    }
+                #endif
+
+                    if ( m_wndEditor->GetSize().y > (m_lineHeight+6) )
+                        m_iFlags |= wxPG_FL_ABNORMAL_EDITOR;
+
+                    // If it has modified status, use bold font
+                    // (must be done before capturing m_ctrlXAdjust)
+                    if ( (p->m_flags & wxPG_PROP_MODIFIED) && (m_windowStyle & wxPG_BOLD_MODIFIED) )
+                        SetCurControlBoldFont();
+
+                    //
+                    // Fix TextCtrl indentation
+                #if defined(__WXMSW__) && !defined(__WXWINCE__)
+                    wxTextCtrl* tc = NULL;
+                    if ( m_wndEditor->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)) )
+                        tc = ((wxOwnerDrawnComboBox*)m_wndEditor)->GetTextCtrl();
+                    else
+                        tc = wxDynamicCast(m_wndEditor, wxTextCtrl);
+                    if ( tc )
+                        ::SendMessage(GetHwndOf(tc), EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(0, 0));
+                #endif
+
+                    // Store x relative to splitter (we'll need it).
+                    m_ctrlXAdjust = m_wndEditor->GetPosition().x - splitterX;
+
+                    // Check if background clear is not necessary
+                    wxPoint pos = m_wndEditor->GetPosition();
+                    if ( pos.x > (splitterX+1) || pos.y > propY )
+                    {
+                        m_iFlags &= ~(wxPG_FL_PRIMARY_FILLS_ENTIRE);
+                    }
+
+                    m_wndEditor->SetSizeHints(3, 3);
+
+                #if wxPG_CREATE_CONTROLS_HIDDEN
+                    m_wndEditor->Show(false);
+                    m_wndEditor->Freeze();
+
+                    goodPos = m_wndEditor->GetPosition();
+                    goodPos.y -= coord_adjust;
+                    m_wndEditor->Move( goodPos );
+                #endif
+
+                    wxWindow* primaryCtrl = GetEditorControl();
+                    SetupEventHandling(primaryCtrl, wxPG_SUBID1);
+
+                    // Focus and select all (wxTextCtrl, wxComboBox etc)
+                    if ( flags & wxPG_SEL_FOCUS )
+                    {
+                        primaryCtrl->SetFocus();
+
+                        p->GetEditorClass()->OnFocus(p, primaryCtrl);
+                    }
+                }
+
+                if ( m_wndEditor2 )
+                {
+                    wxASSERT_MSG( m_wndEditor2->GetParent() == m_canvas,
+                                  wxT("CreateControls must use result of wxPropertyGrid::GetPanel() as parent of controls.") );
+
+                    // Get proper id for wndSecondary
+                    m_wndSecId = m_wndEditor2->GetId();
+                    wxWindowList children = m_wndEditor2->GetChildren();
+                    wxWindowList::iterator node = children.begin();
+                    if ( node != children.end() )
+                        m_wndSecId = ((wxWindow*)*node)->GetId();
+
+                    m_wndEditor2->SetSizeHints(3,3);
+
+                #if wxPG_CREATE_CONTROLS_HIDDEN
+                    wxRect sec_rect = m_wndEditor2->GetRect();
+                    sec_rect.y -= coord_adjust;
+
+                    // Fine tuning required to fix "oversized"
+                    // button disappearance bug.
+                    if ( sec_rect.y < 0 )
+                    {
+                        sec_rect.height += sec_rect.y;
+                        sec_rect.y = 0;
+                    }
+                    m_wndEditor2->SetSize( sec_rect );
+                #endif
+                    m_wndEditor2->Show();
+
+                    SetupEventHandling(m_wndEditor2,wxPG_SUBID2);
+
+                    // If no primary editor, focus to button to allow
+                    // it to interprete ENTER etc.
+                    // NOTE: Due to problems focusing away from it, this
+                    //       has been disabled.
+                    /*
+                    if ( (flags & wxPG_SEL_FOCUS) && !m_wndEditor )
+                        m_wndEditor2->SetFocus();
+                    */
+                }
+
+                if ( flags & wxPG_SEL_FOCUS )
+                    m_editorFocused = 1;
+
+            }
+            else
+            {
+                // wxGTK atleast seems to need this (wxMSW not)
+                SetFocus();
+            }
+
+            EditorsValueWasNotModified();
+
+            // If it's inside collapsed section, expand parent, scroll, etc.
+            // Also, if it was partially visible, scroll it into view.
+            if ( !(flags & wxPG_SEL_NONVISIBLE) )
+                EnsureVisible( p );
+
+            if ( m_wndEditor )
+            {
+            #if wxPG_CREATE_CONTROLS_HIDDEN
+                m_wndEditor->Thaw();
+            #endif
+                m_wndEditor->Show(true);
+            }
+
+            DrawItems(p, p);
+        }
+
+        ClearInternalFlag(wxPG_FL_IN_SELECT_PROPERTY);
+    }
+
+#if wxUSE_STATUSBAR
+
+    //
+    // Show help text in status bar.
+    //   (if found and grid not embedded in manager with help box and
+    //    style wxPG_EX_HELP_AS_TOOLTIPS is not used).
+    //
+
+    if ( !(GetExtraStyle() & wxPG_EX_HELP_AS_TOOLTIPS) )
+    {
+        wxStatusBar* statusbar = (wxStatusBar*) NULL;
+        if ( !(m_iFlags & wxPG_FL_NOSTATUSBARHELP) )
+        {
+            wxFrame* frame = wxDynamicCast(::wxGetTopLevelParent(this),wxFrame);
+            if ( frame )
+                statusbar = frame->GetStatusBar();
+        }
+
+        if ( statusbar )
+        {
+            const wxString* pHelpString = (const wxString*) NULL;
+
+            if ( p )
+            {
+                pHelpString = &p->GetHelpString();
+                if ( pHelpString->length() )
+                {
+                    // Set help box text.
+                    statusbar->SetStatusText( *pHelpString );
+                    m_iFlags |= wxPG_FL_STRING_IN_STATUSBAR;
+                }
+            }
+
+            if ( (!pHelpString || !pHelpString->length()) &&
+                 (m_iFlags & wxPG_FL_STRING_IN_STATUSBAR) )
+            {
+                // Clear help box - but only if it was written
+                // by us at previous time.
+                statusbar->SetStatusText( m_emptyString );
+                m_iFlags &= ~(wxPG_FL_STRING_IN_STATUSBAR);
+            }
+        }
+    }
+#endif
+
+    m_inDoSelectProperty = 0;
+
+    // call wx event handler (here so that it also occurs on deselection)
+    SendEvent( wxEVT_PG_SELECTED, m_selected, NULL, flags );
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::UnfocusEditor()
+{
+    if ( !m_selected || !m_wndEditor || m_frozen )
+        return true;
+
+    if ( !CommitChangesFromEditor(0) )
+        return false;
+
+    m_canvas->SetFocusIgnoringChildren();
+    DrawItem(m_selected);
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+// This method is not inline because it called dozens of times
+// (i.e. two-arg function calls create smaller code size).
+bool wxPropertyGrid::DoClearSelection()
+{
+    return DoSelectProperty((wxPGProperty*)NULL);
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid expand/collapse state
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::DoCollapse( wxPGProperty* p, bool sendEvents )
+{
+    wxPGProperty* pwc = wxStaticCast(p, wxPGProperty);
+
+    // If active editor was inside collapsed section, then disable it
+    if ( m_selected && m_selected->IsSomeParent (p) )
+    {
+        if ( !ClearSelection() )
+            return false;
+    }
+
+    // Store dont-center-splitter flag 'cause we need to temporarily set it
+    wxUint32 old_flag = m_iFlags & wxPG_FL_DONT_CENTER_SPLITTER;
+    m_iFlags |= wxPG_FL_DONT_CENTER_SPLITTER;
+
+    bool res = m_pState->DoCollapse(pwc);
+
+    if ( res )
+    {
+        if ( sendEvents )
+            SendEvent( wxEVT_PG_ITEM_COLLAPSED, p );
+
+        RecalculateVirtualSize();
+
+        // Redraw etc. only if collapsed was visible.
+        if (pwc->IsVisible() &&
+            !m_frozen &&
+            ( !pwc->IsCategory() || !(m_windowStyle & wxPG_HIDE_CATEGORIES) ) )
+        {
+            // When item is collapsed so that scrollbar would move,
+            // graphics mess is about (unless we redraw everything).
+            Refresh();
+        }
+    }
+
+    // Clear dont-center-splitter flag if it wasn't set
+    m_iFlags = m_iFlags & ~(wxPG_FL_DONT_CENTER_SPLITTER) | old_flag;
+
+    return res;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::DoExpand( wxPGProperty* p, bool sendEvents )
+{
+    wxCHECK_MSG( p, false, wxT("invalid property id") );
+
+    wxPGProperty* pwc = (wxPGProperty*)p;
+
+    // Store dont-center-splitter flag 'cause we need to temporarily set it
+    wxUint32 old_flag = m_iFlags & wxPG_FL_DONT_CENTER_SPLITTER;
+    m_iFlags |= wxPG_FL_DONT_CENTER_SPLITTER;
+
+    bool res = m_pState->DoExpand(pwc);
+
+    if ( res )
+    {
+        if ( sendEvents )
+            SendEvent( wxEVT_PG_ITEM_EXPANDED, p );
+
+        RecalculateVirtualSize();
+
+        // Redraw etc. only if expanded was visible.
+        if ( pwc->IsVisible() && !m_frozen &&
+             ( !pwc->IsCategory() || !(m_windowStyle & wxPG_HIDE_CATEGORIES) )
+           )
+        {
+            // Redraw
+        #if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+            Refresh();
+        #else
+            DrawItems(pwc, NULL);
+        #endif
+        }
+    }
+
+    // Clear dont-center-splitter flag if it wasn't set
+    m_iFlags = m_iFlags & ~(wxPG_FL_DONT_CENTER_SPLITTER) | old_flag;
+
+    return res;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::DoHideProperty( wxPGProperty* p, bool hide, int flags )
+{
+    if ( m_frozen )
+        return m_pState->DoHideProperty(p, hide, flags);
+
+    if ( m_selected &&
+         ( m_selected == p || m_selected->IsSomeParent(p) )
+       )
+        {
+            if ( !ClearSelection() )
+                return false;
+        }
+
+    m_pState->DoHideProperty(p, hide, flags);
+
+    RecalculateVirtualSize();
+    Refresh();
+
+    return true;
+}
+
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid size related methods
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::RecalculateVirtualSize( int forceXPos )
+{
+    if ( (m_iFlags & wxPG_FL_RECALCULATING_VIRTUAL_SIZE) || m_frozen )
+        return;
+
+    //
+    // If virtual height was changed, then recalculate editor control position(s)
+    if ( m_pState->m_vhCalcPending )
+        CorrectEditorWidgetPosY();
+
+    m_pState->EnsureVirtualHeight();
+
+#ifdef __WXDEBUG__
+    int by1 = m_pState->GetVirtualHeight();
+    int by2 = m_pState->GetActualVirtualHeight();
+    if ( by1 != by2 )
+    {
+        wxString s = wxString::Format(wxT("VirtualHeight=%i, ActualVirtualHeight=%i, should match!"), by1, by2);
+        wxASSERT_MSG( false,
+                      s.c_str() );
+        wxLogDebug(s);
+    }
+#endif
+
+    m_iFlags |= wxPG_FL_RECALCULATING_VIRTUAL_SIZE;
+
+    int x = m_pState->m_width;
+    int y = m_pState->m_virtualHeight;
+
+    int width, height;
+    GetClientSize(&width,&height);
+
+    // Now adjust virtual size.
+       SetVirtualSize(x, y);
+
+    int xAmount = 0;
+    int xPos = 0;
+
+    //
+    // Adjust scrollbars
+    if ( HasVirtualWidth() )
+    {
+        xAmount = x/wxPG_PIXELS_PER_UNIT;
+        xPos = GetScrollPos( wxHORIZONTAL );
+    }
+
+    if ( forceXPos != -1 )
+        xPos = forceXPos;
+    // xPos too high?
+    else if ( xPos > (xAmount-(width/wxPG_PIXELS_PER_UNIT)) )
+        xPos = 0;
+
+    int yAmount = (y+wxPG_PIXELS_PER_UNIT+2)/wxPG_PIXELS_PER_UNIT;
+    int yPos = GetScrollPos( wxVERTICAL );
+
+    SetScrollbars( wxPG_PIXELS_PER_UNIT, wxPG_PIXELS_PER_UNIT,
+                   xAmount, yAmount, xPos, yPos, true );
+
+    // Must re-get size now
+    GetClientSize(&width,&height);
+
+    if ( !HasVirtualWidth() )
+    {
+        m_pState->SetVirtualWidth(width);
+        x = width;
+    }
+
+    m_width = width;
+    m_height = height;
+
+    m_canvas->SetSize( x, y );
+
+    m_pState->CheckColumnWidths();
+
+    if ( m_selected )
+        CorrectEditorWidgetSizeX();
+
+    m_iFlags &= ~wxPG_FL_RECALCULATING_VIRTUAL_SIZE;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnResize( wxSizeEvent& event )
+{
+    if ( !(m_iFlags & wxPG_FL_INITIALIZED) )
+        return;
+
+    int width, height;
+    GetClientSize(&width,&height);
+
+    m_width = width;
+    m_height = height;
+
+    m_visPropArray.SetCount((height/m_lineHeight)+10);
+
+#if wxPG_DOUBLE_BUFFER
+    if ( !(GetExtraStyle() & wxPG_EX_NATIVE_DOUBLE_BUFFERING) )
+    {
+        int dblh = (m_lineHeight*2);
+        if ( !m_doubleBuffer )
+        {
+            // Create double buffer bitmap to draw on, if none
+            int w = (width>250)?width:250;
+            int h = height + dblh;
+            h = (h>400)?h:400;
+            m_doubleBuffer = new wxBitmap( w, h );
+        }
+        else
+        {
+            int w = m_doubleBuffer->GetWidth();
+            int h = m_doubleBuffer->GetHeight();
+
+            // Double buffer must be large enough
+            if ( w < width || h < (height+dblh) )
+            {
+                if ( w < width ) w = width;
+                if ( h < (height+dblh) ) h = height + dblh;
+                delete m_doubleBuffer;
+                m_doubleBuffer = new wxBitmap( w, h );
+            }
+        }
+    }
+
+#endif
+
+    m_pState->OnClientWidthChange( width, event.GetSize().x - m_ncWidth, true );
+    m_ncWidth = event.GetSize().x;
+
+    if ( !m_frozen )
+    {
+        if ( m_pState->m_itemsAdded )
+            PrepareAfterItemsAdded();
+        else
+            // Without this, virtual size (atleast under wxGTK) will be skewed
+            RecalculateVirtualSize();
+
+        Refresh();
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SetVirtualWidth( int width )
+{
+    if ( width == -1 )
+    {
+        // Disable virtual width
+        width = GetClientSize().x;
+        ClearInternalFlag(wxPG_FL_HAS_VIRTUAL_WIDTH);
+    }
+    else
+    {
+        // Enable virtual width
+        SetInternalFlag(wxPG_FL_HAS_VIRTUAL_WIDTH);
+    }
+    m_pState->SetVirtualWidth( width );
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid mouse event handling
+// -----------------------------------------------------------------------
+
+// selFlags uses same values DoSelectProperty's flags
+// Returns true if event was vetoed.
+bool wxPropertyGrid::SendEvent( int eventType, wxPGProperty* p, wxVariant* pValue, unsigned int WXUNUSED(selFlags) )
+{
+    // Send property grid event of specific type and with specific property
+    wxPropertyGridEvent evt( eventType, m_eventObject->GetId() );
+    evt.SetPropertyGrid(this);
+    evt.SetEventObject(m_eventObject);
+    evt.SetProperty(p);
+    if ( pValue )
+    {
+        evt.SetCanVeto(true);
+        evt.SetupValidationInfo();
+        m_validationInfo.m_pValue = pValue;
+    }
+    wxEvtHandler* evtHandler = m_eventObject->GetEventHandler();
+
+    evtHandler->ProcessEvent(evt);
+
+    return evt.WasVetoed();
+}
+
+// -----------------------------------------------------------------------
+
+// Return false if should be skipped
+bool wxPropertyGrid::HandleMouseClick( int x, unsigned int y, wxMouseEvent &event )
+{
+    bool res = true;
+
+    // Need to set focus?
+    if ( !(m_iFlags & wxPG_FL_FOCUSED) )
+    {
+        m_canvas->SetFocus();
+    }
+
+    wxPropertyGridPageState* state = m_pState;
+    int splitterHit;
+    int splitterHitOffset;
+    int columnHit = state->HitTestH( x, &splitterHit, &splitterHitOffset );
+
+    wxPGProperty* p = DoGetItemAtY(y);
+
+    if ( p )
+    {
+        int depth = (int)p->GetDepth() - 1;
+
+        int marginEnds = m_marginWidth + ( depth * m_subgroup_extramargin );
+
+        if ( x >= marginEnds )
+        {
+            // Outside margin.
+
+            if ( p->IsCategory() )
+            {
+                // This is category.
+                wxPropertyCategory* pwc = (wxPropertyCategory*)p;
+
+                int textX = m_marginWidth + ((unsigned int)((pwc->m_depth-1)*m_subgroup_extramargin));
+
+                // Expand, collapse, activate etc. if click on text or left of splitter.
+                if ( x >= textX
+                     &&
+                     ( x < (textX+pwc->GetTextExtent(this, m_captionFont)+(wxPG_CAPRECTXMARGIN*2)) ||
+                       columnHit == 0
+                     )
+                    )
+                {
+                    if ( !DoSelectProperty( p ) )
+                        return res;
+
+                    // On double-click, expand/collapse.
+                    if ( event.ButtonDClick() && !(m_windowStyle & wxPG_HIDE_MARGIN) )
+                    {
+                        if ( pwc->IsExpanded() ) DoCollapse( p, true );
+                        else DoExpand( p, true );
+                    }
+                }
+            }
+            else if ( splitterHit == -1 )
+            {
+            // Click on value.
+                unsigned int selFlag = 0;
+                if ( columnHit == 1 )
+                {
+                    m_iFlags |= wxPG_FL_ACTIVATION_BY_CLICK;
+                    selFlag = wxPG_SEL_FOCUS;
+                }
+                if ( !DoSelectProperty( p, selFlag ) )
+                    return res;
+
+                m_iFlags &= ~(wxPG_FL_ACTIVATION_BY_CLICK);
+
+                if ( p->GetChildCount() && !p->IsCategory() )
+                    // On double-click, expand/collapse.
+                    if ( event.ButtonDClick() && !(m_windowStyle & wxPG_HIDE_MARGIN) )
+                    {
+                        wxPGProperty* pwc = (wxPGProperty*)p;
+                        if ( pwc->IsExpanded() ) DoCollapse( p, true );
+                        else DoExpand( p, true );
+                    }
+
+                res = false;
+            }
+            else
+            {
+            // click on splitter
+                if ( !(m_windowStyle & wxPG_STATIC_SPLITTER) )
+                {
+                    if ( event.GetEventType() == wxEVT_LEFT_DCLICK )
+                    {
+                        // Double-clicking the splitter causes auto-centering
+                        CenterSplitter( true );
+                    }
+                    else if ( m_dragStatus == 0 )
+                    {
+                    //
+                    // Begin draggin the splitter
+                    //
+                        if ( m_wndEditor )
+                        {
+                            // Changes must be committed here or the
+                            // value won't be drawn correctly
+                            if ( !CommitChangesFromEditor() )
+                                return res;
+
+                            m_wndEditor->Show ( false );
+                        }
+
+                        if ( !(m_iFlags & wxPG_FL_MOUSE_CAPTURED) )
+                        {
+                            m_canvas->CaptureMouse();
+                            m_iFlags |= wxPG_FL_MOUSE_CAPTURED;
+                        }
+
+                        m_dragStatus = 1;
+                        m_draggedSplitter = splitterHit;
+                        m_dragOffset = splitterHitOffset;
+
+                        wxClientDC dc(m_canvas);
+
+                    #if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+                        // Fixes button disappearance bug
+                        if ( m_wndEditor2 )
+                            m_wndEditor2->Show ( false );
+                    #endif
+
+                        m_startingSplitterX = x - splitterHitOffset;
+                    }
+                }
+            }
+        }
+        else
+        {
+        // Click on margin.
+            if ( p->GetChildCount() )
+            {
+                int nx = x + m_marginWidth - marginEnds; // Normalize x.
+
+                if ( (nx >= m_gutterWidth && nx < (m_gutterWidth+m_iconWidth)) )
+                {
+                    int y2 = y % m_lineHeight;
+                    if ( (y2 >= m_buttonSpacingY && y2 < (m_buttonSpacingY+m_iconHeight)) )
+                    {
+                        // On click on expander button, expand/collapse
+                        if ( ((wxPGProperty*)p)->IsExpanded() )
+                            DoCollapse( p, true );
+                        else
+                            DoExpand( p, true );
+                    }
+                }
+            }
+        }
+    }
+    return res;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::HandleMouseRightClick( int WXUNUSED(x), unsigned int WXUNUSED(y),
+                                            wxMouseEvent& WXUNUSED(event) )
+{
+    if ( m_propHover )
+    {
+        // Select property here as well
+        wxPGProperty* p = m_propHover;
+        if ( p != m_selected )
+            DoSelectProperty( p );
+
+        // Send right click event.
+        SendEvent( wxEVT_PG_RIGHT_CLICK, p );
+
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::HandleMouseDoubleClick( int WXUNUSED(x), unsigned int WXUNUSED(y),
+                                             wxMouseEvent& WXUNUSED(event) )
+{
+    if ( m_propHover )
+    {
+        // Select property here as well
+        wxPGProperty* p = m_propHover;
+
+        if ( p != m_selected )
+            DoSelectProperty( p );
+
+        // Send double-click event.
+        SendEvent( wxEVT_PG_DOUBLE_CLICK, m_propHover );
+
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+#if wxPG_SUPPORT_TOOLTIPS
+
+void wxPropertyGrid::SetToolTip( const wxString& tipString )
+{
+    if ( tipString.length() )
+    {
+        m_canvas->SetToolTip(tipString);
+    }
+    else
+    {
+    #if wxPG_ALLOW_EMPTY_TOOLTIPS
+        m_canvas->SetToolTip( m_emptyString );
+    #else
+        m_canvas->SetToolTip( NULL );
+    #endif
+    }
+}
+
+#endif // #if wxPG_SUPPORT_TOOLTIPS
+
+// -----------------------------------------------------------------------
+
+// Return false if should be skipped
+bool wxPropertyGrid::HandleMouseMove( int x, unsigned int y, wxMouseEvent &event )
+{
+    // Safety check (needed because mouse capturing may
+    // otherwise freeze the control)
+    if ( m_dragStatus > 0 && !event.Dragging() )
+    {
+        HandleMouseUp(x,y,event);
+    }
+
+    wxPropertyGridPageState* state = m_pState;
+    int splitterHit;
+    int splitterHitOffset;
+    int columnHit = state->HitTestH( x, &splitterHit, &splitterHitOffset );
+    int splitterX = x - splitterHitOffset;
+
+    if ( m_dragStatus > 0 )
+    {
+        if ( x > (m_marginWidth + wxPG_DRAG_MARGIN) &&
+             x < (m_pState->m_width - wxPG_DRAG_MARGIN) )
+        {
+
+            int newSplitterX = x - m_dragOffset;
+            int splitterX = x - splitterHitOffset;
+
+            // Splitter redraw required?
+            if ( newSplitterX != splitterX )
+            {
+                // Move everything
+                SetInternalFlag(wxPG_FL_DONT_CENTER_SPLITTER);
+                state->DoSetSplitterPosition( newSplitterX, m_draggedSplitter, false );
+                state->m_fSplitterX = (float) newSplitterX;
+
+                if ( m_selected )
+                    CorrectEditorWidgetSizeX();
+
+                Update();
+                Refresh();
+            }
+
+            m_dragStatus = 2;
+        }
+
+        return false;
+    }
+    else
+    {
+
+        int ih = m_lineHeight;
+        int sy = y;
+
+    #if wxPG_SUPPORT_TOOLTIPS
+        wxPGProperty* prevHover = m_propHover;
+        unsigned char prevSide = m_mouseSide;
+    #endif
+        int curPropHoverY = y - (y % ih);
+
+        // On which item it hovers
+        if ( ( !m_propHover )
+             ||
+             ( m_propHover && ( sy < m_propHoverY || sy >= (m_propHoverY+ih) ) )
+           )
+        {
+            // Mouse moves on another property
+
+            m_propHover = DoGetItemAtY(y);
+            m_propHoverY = curPropHoverY;
+
+            // Send hover event
+            SendEvent( wxEVT_PG_HIGHLIGHTED, m_propHover );
+        }
+
+    #if wxPG_SUPPORT_TOOLTIPS
+        // Store which side we are on
+        m_mouseSide = 0;
+        if ( columnHit == 1 )
+            m_mouseSide = 2;
+        else if ( columnHit == 0 )
+            m_mouseSide = 1;
+
+        //
+        // If tooltips are enabled, show label or value as a tip
+        // in case it doesn't otherwise show in full length.
+        //
+        if ( m_windowStyle & wxPG_TOOLTIPS )
+        {
+            wxToolTip* tooltip = m_canvas->GetToolTip();
+
+            if ( m_propHover != prevHover || prevSide != m_mouseSide )
+            {
+                if ( m_propHover && !m_propHover->IsCategory() )
+                {
+
+                    if ( GetExtraStyle() & wxPG_EX_HELP_AS_TOOLTIPS )
+                    {
+                        // Show help string as a tooltip
+                        wxString tipString = m_propHover->GetHelpString();
+
+                        SetToolTip(tipString);
+                    }
+                    else
+                    {
+                        // Show cropped value string as a tooltip
+                        wxString tipString;
+                        int space = 0;
+
+                        if ( m_mouseSide == 1 )
+                        {
+                            tipString = m_propHover->m_label;
+                            space = splitterX-m_marginWidth-3;
+                        }
+                        else if ( m_mouseSide == 2 )
+                        {
+                            tipString = m_propHover->GetDisplayedString();
+
+                            space = m_width - splitterX;
+                            if ( m_propHover->m_flags & wxPG_PROP_CUSTOMIMAGE )
+                                space -= wxPG_CUSTOM_IMAGE_WIDTH + wxCC_CUSTOM_IMAGE_MARGIN1 + wxCC_CUSTOM_IMAGE_MARGIN2;
+                        }
+
+                        if ( space )
+                        {
+                            int tw, th;
+                           GetTextExtent( tipString, &tw, &th, 0, 0, &m_font );
+                            if ( tw > space )
+                            {
+                                SetToolTip( tipString );
+                            }
+                        }
+                        else
+                        {
+                            if ( tooltip )
+                            {
+                            #if wxPG_ALLOW_EMPTY_TOOLTIPS
+                                m_canvas->SetToolTip( m_emptyString );
+                            #else
+                                m_canvas->SetToolTip( NULL );
+                            #endif
+                            }
+                        }
+
+                    }
+                }
+                else
+                {
+                    if ( tooltip )
+                    {
+                    #if wxPG_ALLOW_EMPTY_TOOLTIPS
+                        m_canvas->SetToolTip( m_emptyString );
+                    #else
+                        m_canvas->SetToolTip( NULL );
+                    #endif
+                    }
+                }
+            }
+        }
+    #endif
+
+        if ( splitterHit == -1 ||
+             !m_propHover ||
+             HasFlag(wxPG_STATIC_SPLITTER) )
+        {
+            // hovering on something else
+            if ( m_curcursor != wxCURSOR_ARROW )
+                CustomSetCursor( wxCURSOR_ARROW );
+        }
+        else
+        {
+            // Do not allow splitter cursor on caption items.
+            // (also not if we were dragging and its started
+            // outside the splitter region)
+
+            if ( m_propHover &&
+                 !m_propHover->IsCategory() &&
+                 !event.Dragging() )
+            {
+
+                // hovering on splitter
+
+                // NB: Condition disabled since MouseLeave event (from the editor control) cannot be
+                //     reliably detected.
+                //if ( m_curcursor != wxCURSOR_SIZEWE )
+                CustomSetCursor( wxCURSOR_SIZEWE, true );
+
+                return false;
+            }
+            else
+            {
+                // hovering on something else
+                if ( m_curcursor != wxCURSOR_ARROW )
+                    CustomSetCursor( wxCURSOR_ARROW );
+            }
+        }
+    }
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+// Also handles Leaving event
+bool wxPropertyGrid::HandleMouseUp( int x, unsigned int WXUNUSED(y),
+                                    wxMouseEvent &WXUNUSED(event) )
+{
+    wxPropertyGridPageState* state = m_pState;
+    bool res = false;
+
+    int splitterHit;
+    int splitterHitOffset;
+    state->HitTestH( x, &splitterHit, &splitterHitOffset );
+
+    // No event type check - basicly calling this method should
+    // just stop dragging.
+    // Left up after dragged?
+    if ( m_dragStatus >= 1 )
+    {
+    //
+    // End Splitter Dragging
+    //
+        // DO NOT ENABLE FOLLOWING LINE!
+        // (it is only here as a reminder to not to do it)
+        //splitterX = x;
+
+        // Disable splitter auto-centering
+        m_iFlags |= wxPG_FL_DONT_CENTER_SPLITTER;
+
+        // This is necessary to return cursor
+        if ( m_iFlags & wxPG_FL_MOUSE_CAPTURED )
+        {
+            m_canvas->ReleaseMouse();
+            m_iFlags &= ~(wxPG_FL_MOUSE_CAPTURED);
+        }
+
+        // Set back the default cursor, if necessary
+        if ( splitterHit == -1 ||
+             !m_propHover )
+        {
+            CustomSetCursor( wxCURSOR_ARROW );
+        }
+
+        m_dragStatus = 0;
+
+        // Control background needs to be cleared
+        if ( !(m_iFlags & wxPG_FL_PRIMARY_FILLS_ENTIRE) && m_selected )
+            DrawItem( m_selected );
+
+        if ( m_wndEditor )
+        {
+            m_wndEditor->Show ( true );
+        }
+
+    #if wxPG_REFRESH_CONTROLS_AFTER_REPAINT
+        // Fixes button disappearance bug
+        if ( m_wndEditor2 )
+            m_wndEditor2->Show ( true );
+    #endif
+
+        // This clears the focus.
+        m_editorFocused = 0;
+
+    }
+    return res;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::OnMouseCommon( wxMouseEvent& event, int* px, int* py )
+{
+    int splitterX = GetSplitterPosition();
+
+    //int ux, uy;
+    //CalcUnscrolledPosition( event.m_x, event.m_y, &ux, &uy );
+    int ux = event.m_x;
+    int uy = event.m_y;
+
+    wxWindow* wnd = m_wndEditor;
+
+    // Hide popup on clicks
+    if ( event.GetEventType() != wxEVT_MOTION )
+        if ( wnd && wnd->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)) )
+        {
+            ((wxOwnerDrawnComboBox*)m_wndEditor)->HidePopup();
+        }
+
+    wxRect r;
+    if ( wnd )
+        r = wnd->GetRect();
+    if ( wnd == (wxWindow*) NULL || m_dragStatus ||
+         (
+           ux <= (splitterX + wxPG_SPLITTERX_DETECTMARGIN2) ||
+           ux >= (r.x+r.width) ||
+           event.m_y < r.y ||
+           event.m_y >= (r.y+r.height)
+         )
+       )
+    {
+        *px = ux;
+        *py = uy;
+        return true;
+    }
+    else
+    {
+        if ( m_curcursor != wxCURSOR_ARROW ) CustomSetCursor ( wxCURSOR_ARROW );
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnMouseClick( wxMouseEvent &event )
+{
+    int x, y;
+    if ( OnMouseCommon( event, &x, &y ) )
+    {
+        HandleMouseClick(x,y,event);
+    }
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnMouseRightClick( wxMouseEvent &event )
+{
+    int x, y;
+    CalcUnscrolledPosition( event.m_x, event.m_y, &x, &y );
+    HandleMouseRightClick(x,y,event);
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnMouseDoubleClick( wxMouseEvent &event )
+{
+    // Always run standard mouse-down handler as well
+    OnMouseClick(event);
+
+    int x, y;
+    CalcUnscrolledPosition( event.m_x, event.m_y, &x, &y );
+    HandleMouseDoubleClick(x,y,event);
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnMouseMove( wxMouseEvent &event )
+{
+    int x, y;
+    if ( OnMouseCommon( event, &x, &y ) )
+    {
+        HandleMouseMove(x,y,event);
+    }
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnMouseMoveBottom( wxMouseEvent& WXUNUSED(event) )
+{
+    // Called when mouse moves in the empty space below the properties.
+    CustomSetCursor( wxCURSOR_ARROW );
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnMouseUp( wxMouseEvent &event )
+{
+    int x, y;
+    if ( OnMouseCommon( event, &x, &y ) )
+    {
+        HandleMouseUp(x,y,event);
+    }
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnMouseEntry( wxMouseEvent &event )
+{
+    // This may get called from child control as well, so event's
+    // mouse position cannot be relied on.
+
+    if ( event.Entering() )
+    {
+        if ( !(m_iFlags & wxPG_FL_MOUSE_INSIDE) )
+        {
+            // TODO: Fix this (detect parent and only do
+            //   cursor trick if it is a manager).
+            wxASSERT( GetParent() );
+            GetParent()->SetCursor(wxNullCursor);
+
+            m_iFlags |= wxPG_FL_MOUSE_INSIDE;
+        }
+        else
+            GetParent()->SetCursor(wxNullCursor);
+    }
+    else if ( event.Leaving() )
+    {
+        // Without this, wxSpinCtrl editor will sometimes have wrong cursor
+        m_canvas->SetCursor( wxNullCursor );
+
+        // Get real cursor position
+        wxPoint pt = ScreenToClient(::wxGetMousePosition());
+
+        if ( ( pt.x <= 0 || pt.y <= 0 || pt.x >= m_width || pt.y >= m_height ) )
+        {
+            {
+                if ( (m_iFlags & wxPG_FL_MOUSE_INSIDE) )
+                {
+                    m_iFlags &= ~(wxPG_FL_MOUSE_INSIDE);
+                }
+
+                if ( m_dragStatus )
+                    wxPropertyGrid::HandleMouseUp ( -1, 10000, event );
+            }
+        }
+    }
+
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+// Common code used by various OnMouseXXXChild methods.
+bool wxPropertyGrid::OnMouseChildCommon( wxMouseEvent &event, int* px, int *py )
+{
+    wxWindow* topCtrlWnd = (wxWindow*)event.GetEventObject();
+    wxASSERT( topCtrlWnd );
+    int x, y;
+    event.GetPosition(&x,&y);
+
+    AdjustPosForClipperWindow( topCtrlWnd, &x, &y );
+
+    int splitterX = GetSplitterPosition();
+
+    wxRect r = topCtrlWnd->GetRect();
+    if ( !m_dragStatus &&
+         x > (splitterX-r.x+wxPG_SPLITTERX_DETECTMARGIN2) &&
+         y >= 0 && y < r.height \
+       )
+    {
+        if ( m_curcursor != wxCURSOR_ARROW ) CustomSetCursor ( wxCURSOR_ARROW );
+        event.Skip();
+    }
+    else
+    {
+        CalcUnscrolledPosition( event.m_x + r.x, event.m_y + r.y, \
+            px, py );
+        return true;
+    }
+    return false;
+}
+
+void wxPropertyGrid::OnMouseClickChild( wxMouseEvent &event )
+{
+    int x,y;
+    if ( OnMouseChildCommon(event,&x,&y) )
+    {
+        bool res = HandleMouseClick(x,y,event);
+        if ( !res ) event.Skip();
+    }
+}
+
+void wxPropertyGrid::OnMouseRightClickChild( wxMouseEvent &event )
+{
+    int x,y;
+    wxASSERT( m_wndEditor );
+    // These coords may not be exact (about +-2),
+    // but that should not matter (right click is about item, not position).
+    wxPoint pt = m_wndEditor->GetPosition();
+    CalcUnscrolledPosition( event.m_x + pt.x, event.m_y + pt.y, &x, &y );
+    wxASSERT( m_selected );
+    m_propHover = m_selected;
+    bool res = HandleMouseRightClick(x,y,event);
+    if ( !res ) event.Skip();
+}
+
+void wxPropertyGrid::OnMouseMoveChild( wxMouseEvent &event )
+{
+    int x,y;
+    if ( OnMouseChildCommon(event,&x,&y) )
+    {
+        bool res = HandleMouseMove(x,y,event);
+        if ( !res ) event.Skip();
+    }
+}
+
+void wxPropertyGrid::OnMouseUpChild( wxMouseEvent &event )
+{
+    int x,y;
+    if ( OnMouseChildCommon(event,&x,&y) )
+    {
+        bool res = HandleMouseUp(x,y,event);
+        if ( !res ) event.Skip();
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid keyboard event handling
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::SendNavigationKeyEvent( int dir )
+{
+    wxNavigationKeyEvent evt;
+    evt.SetFlags(wxNavigationKeyEvent::FromTab|
+                 (dir?wxNavigationKeyEvent::IsForward:
+                      wxNavigationKeyEvent::IsBackward));
+    evt.SetEventObject(this);
+    m_canvas->GetEventHandler()->AddPendingEvent(evt);
+}
+
+
+int wxPropertyGrid::KeyEventToActions(wxKeyEvent &event, int* pSecond) const
+{
+    // Translates wxKeyEvent to wxPG_ACTION_XXX
+
+    int keycode = event.GetKeyCode();
+    int modifiers = event.GetModifiers();
+
+    wxASSERT( !(modifiers&~(0xFFFF)) );
+
+    int hashMapKey = (keycode & 0xFFFF) | ((modifiers & 0xFFFF) << 16);
+
+    wxPGHashMapI2I::const_iterator it = m_actionTriggers.find(hashMapKey);
+
+    if ( it == m_actionTriggers.end() )
+        return 0;
+
+    if ( pSecond )
+    {
+        int second = (it->second>>16) & 0xFFFF;
+        *pSecond = second;
+    }
+
+    return (it->second & 0xFFFF);
+}
+
+void wxPropertyGrid::AddActionTrigger( int action, int keycode, int modifiers )
+{
+    wxASSERT( !(modifiers&~(0xFFFF)) );
+
+    int hashMapKey = (keycode & 0xFFFF) | ((modifiers & 0xFFFF) << 16);
+
+    wxPGHashMapI2I::iterator it = m_actionTriggers.find(hashMapKey);
+
+    if ( it != m_actionTriggers.end() )
+    {
+        // This key combination is already used
+
+        // Can add secondary?
+        wxASSERT_MSG( !(it->second&~(0xFFFF)),
+                      wxT("You can only add up to two separate actions per key combination.") );
+
+        action = it->second | (action<<16);
+    }
+
+    m_actionTriggers[hashMapKey] = action;
+}
+
+void wxPropertyGrid::ClearActionTriggers( int action )
+{
+    wxPGHashMapI2I::iterator it;
+
+    for ( it = m_actionTriggers.begin(); it != m_actionTriggers.end(); it++ )
+    {
+        if ( it->second == action )
+        {
+            m_actionTriggers.erase(it);
+        }
+    }
+}
+
+static void CopyTextToClipboard( const wxString& text )
+{
+    if ( wxTheClipboard->Open() )
+    {
+        // This data objects are held by the clipboard, 
+        // so do not delete them in the app.
+        wxTheClipboard->SetData( new wxTextDataObject(text) );
+        wxTheClipboard->Close();
+    }
+}
+
+void wxPropertyGrid::HandleKeyEvent(wxKeyEvent &event)
+{
+    //
+    // Handles key event when editor control is not focused.
+    //
+
+    wxASSERT( !m_frozen );
+    if ( m_frozen )
+        return;
+
+    // Travelsal between items, collapsing/expanding, etc.
+    int keycode = event.GetKeyCode();
+
+    if ( keycode == WXK_TAB )
+    {
+        SendNavigationKeyEvent( event.ShiftDown()?0:1 );
+        return;
+    }
+
+    // Ignore Alt and Control when they are down alone
+    if ( keycode == WXK_ALT ||
+         keycode == WXK_CONTROL )
+    {
+        event.Skip();
+        return;
+    }
+
+    int secondAction;
+    int action = KeyEventToActions(event, &secondAction);
+
+    if ( m_selected )
+    {
+
+        // Show dialog?
+        if ( ButtonTriggerKeyTest(event) )
+            return;
+
+        wxPGProperty* p = m_selected;
+
+        if ( action == wxPG_ACTION_COPY )
+        {
+            CopyTextToClipboard(p->GetDisplayedString());
+        }
+        else
+        {
+            // Travel and expand/collapse
+            int selectDir = -2;
+
+            if ( p->GetChildCount() &&
+                 !(p->m_flags & wxPG_PROP_DISABLED)
+               )
+            {
+                if ( action == wxPG_ACTION_COLLAPSE_PROPERTY || secondAction == wxPG_ACTION_COLLAPSE_PROPERTY )
+                {
+                    if ( (m_windowStyle & wxPG_HIDE_MARGIN) || Collapse(p) )
+                        keycode = 0;
+                }
+                else if ( action == wxPG_ACTION_EXPAND_PROPERTY || secondAction == wxPG_ACTION_EXPAND_PROPERTY )
+                {
+                    if ( (m_windowStyle & wxPG_HIDE_MARGIN) || Expand(p) )
+                        keycode = 0;
+                }
+            }
+
+            if ( keycode )
+            {
+                if ( action == wxPG_ACTION_PREV_PROPERTY || secondAction == wxPG_ACTION_PREV_PROPERTY )
+                {
+                    selectDir = -1;
+                }
+                else if ( action == wxPG_ACTION_NEXT_PROPERTY || secondAction == wxPG_ACTION_NEXT_PROPERTY )
+                {
+                    selectDir = 1;
+                }
+                else
+                {
+                    event.Skip();
+                }
+
+            }
+
+            if ( selectDir >= -1 )
+            {
+                p = wxPropertyGridIterator::OneStep( m_pState, wxPG_ITERATE_VISIBLE, p, selectDir );
+                if ( p )
+                    DoSelectProperty(p);
+            }
+        }
+    }
+    else
+    {
+        // If nothing was selected, select the first item now
+        // (or navigate out of tab).
+        if ( action != wxPG_ACTION_CANCEL_EDIT && secondAction != wxPG_ACTION_CANCEL_EDIT )
+        {
+            wxPGProperty* p = wxPropertyGridInterface::GetFirst();
+            if ( p ) DoSelectProperty(p);
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+// Potentially handles a keyboard event for editor controls.
+// Returns false if event should *not* be skipped (on true it can
+// be optionally skipped).
+// Basicly, false means that SelectProperty was called (or was about
+// to be called, if canDestroy was false).
+bool wxPropertyGrid::HandleChildKey( wxKeyEvent& event )
+{
+    bool res = true;
+
+    if ( !m_selected || !m_wndEditor )
+    {
+        return true;
+    }
+
+    int action = KeyEventToAction(event);
+
+    // Unfocus?
+    if ( action == wxPG_ACTION_CANCEL_EDIT )
+    {
+        //
+        // Esc cancels any changes
+        if ( IsEditorsValueModified() )
+        {
+            EditorsValueWasNotModified();
+
+            // Update the control as well
+            m_selected->GetEditorClass()->SetControlStringValue( m_selected,
+                                                                 m_wndEditor,
+                                                                 m_selected->GetDisplayedString() );
+        }
+
+        OnValidationFailureReset(m_selected);
+
+        res = false;
+
+        UnfocusEditor();
+    }
+    else if ( action == wxPG_ACTION_COPY )
+    {
+        // NB: There is some problem with getting native cut-copy-paste keys to go through
+        //     for embedded editor wxTextCtrl. This is why we emulate.
+        //
+        wxTextCtrl* tc = GetEditorTextCtrl();
+        if ( tc )
+        {
+            wxString sel = tc->GetStringSelection();
+            if ( sel.length() )
+                CopyTextToClipboard(sel);
+        }
+        else
+        {
+            CopyTextToClipboard(m_selected->GetDisplayedString());
+        }
+    }
+    else if ( action == wxPG_ACTION_CUT )
+    {
+        wxTextCtrl* tc = GetEditorTextCtrl();
+        if ( tc )
+        {
+            long from, to;
+            tc->GetSelection(&from, &to);
+            if ( from < to )
+            {
+                CopyTextToClipboard(tc->GetStringSelection());
+                tc->Remove(from, to);
+            }
+        }
+    }
+    else if ( action == wxPG_ACTION_PASTE )
+    {
+        wxTextCtrl* tc = GetEditorTextCtrl();
+        if ( tc )
+        {
+            if (wxTheClipboard->Open())
+            {
+                if (wxTheClipboard->IsSupported( wxDF_TEXT ))
+                {
+                    wxTextDataObject data;
+                    wxTheClipboard->GetData( data );
+                    long from, to;
+                    tc->GetSelection(&from, &to);
+                    if ( from < to )
+                    {
+                        tc->Remove(from, to);
+                        tc->WriteText(data.GetText());
+                    }
+                    else
+                    {
+                        tc->WriteText(data.GetText());
+                    }
+                }  
+                wxTheClipboard->Close();
+            }
+        }
+    }
+
+    return res;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnKey( wxKeyEvent &event )
+{
+
+    //
+    // Events to editor controls should get relayed here.
+    //
+    wxWindow* focused = wxWindow::FindFocus();
+
+    wxWindow* primaryCtrl = GetEditorControl();
+
+    if ( primaryCtrl &&
+         (focused==primaryCtrl
+          || m_editorFocused) )
+    {
+        // Child key must be processed here, since it can
+        // destroy the control which is referred by its own
+        // event handling.
+        HandleChildKey( event );
+    }
+    else
+        HandleKeyEvent( event );
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnKeyUp(wxKeyEvent &event)
+{
+    m_keyComboConsumed = 0;
+
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnNavigationKey( wxNavigationKeyEvent& event )
+{
+    // Ignore events that occur very close to focus set
+    if ( m_iFlags & wxPG_FL_IGNORE_NEXT_NAVKEY )
+    {
+        m_iFlags &= ~(wxPG_FL_IGNORE_NEXT_NAVKEY);
+        event.Skip();
+        return;
+    }
+
+    wxPGProperty* next = (wxPGProperty*) NULL;
+
+    int dir = event.GetDirection()?1:-1;
+
+    if ( m_selected )
+    {
+        if ( dir == 1 && (m_wndEditor || m_wndEditor2) )
+        {
+            wxWindow* focused = wxWindow::FindFocus();
+
+            wxWindow* wndToCheck = GetEditorControl();
+
+            // ODComboBox focus goes to its text ctrl, so we need to use it instead
+            if ( wndToCheck && wndToCheck->IsKindOf(CLASSINFO(wxOwnerDrawnComboBox)) )
+            {
+                wxTextCtrl* comboTextCtrl = ((wxOwnerDrawnComboBox*)wndToCheck)->GetTextCtrl();
+                if ( comboTextCtrl )
+                    wndToCheck = comboTextCtrl;
+            }
+
+            /*
+            // Because of problems navigating from wxButton, do not go to it.
+            if ( !wndToCheck )
+            {
+                // No primary, use secondary
+                wndToCheck = m_wndEditor2;
+            }
+            // If it has editor button, focus to it after the primary editor.
+            // NB: Doesn't work since wxButton on wxMSW doesn't seem to propagate
+            //     key events (yes, I'm using wxWANTS_CHARS with it, and yes I
+            //     have somewhat debugged in window.cpp itself).
+            else if ( focused == wndToCheck &&
+                      m_wndEditor2 &&
+                      !(GetExtraStyle() & wxPG_EX_NO_TAB_TO_BUTTON) )
+            {
+                wndToCheck = m_wndEditor2;
+                wxLogDebug(wxT("Exp1"));
+            }
+            */
+
+            if ( focused != wndToCheck &&
+                 wndToCheck )
+            {
+                wndToCheck->SetFocus();
+
+                // Select all text in wxTextCtrl etc.
+                if ( m_wndEditor && wndToCheck == m_wndEditor )
+                    m_selected->GetEditorClass()->OnFocus(m_selected,wndToCheck);
+
+                m_editorFocused = 1;
+                next = m_selected;
+            }
+        }
+
+        if ( !next )
+        {
+            next = wxPropertyGridIterator::OneStep(m_pState, wxPG_ITERATE_VISIBLE, m_selected, dir);
+
+            if ( next )
+            {
+                // This allows preventing NavigateOut to occur
+                DoSelectProperty( next, wxPG_SEL_FOCUS );
+            }
+        }
+    }
+
+    if ( !next )
+        event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGrid::ButtonTriggerKeyTest( wxKeyEvent &event )
+{
+    int keycode = event.GetKeyCode();
+
+    // Does the keycode trigger button?
+    if ( keycode == m_pushButKeyCode &&
+         m_wndEditor2 &&
+         (!m_pushButKeyCodeNeedsAlt || event.AltDown()) &&
+         (!m_pushButKeyCodeNeedsCtrl || event.ControlDown()) )
+    {
+        m_keyComboConsumed = 1;
+
+        wxCommandEvent evt(wxEVT_COMMAND_BUTTON_CLICKED,m_wndEditor2->GetId());
+        GetEventHandler()->AddPendingEvent(evt);
+        return true;
+    }
+
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnChildKeyDown( wxKeyEvent &event )
+{
+    int keycode = event.GetKeyCode();
+
+    // Ignore Alt and Control when they are down alone
+    if ( keycode == WXK_ALT ||
+         keycode == WXK_CONTROL )
+    {
+        event.Skip();
+        return;
+    }
+
+    if ( ButtonTriggerKeyTest(event) )
+        return;
+
+    if ( HandleChildKey(event) == true )
+        event.Skip();
+
+    GetEventHandler()->AddPendingEvent(event);
+}
+
+void wxPropertyGrid::OnChildKeyUp( wxKeyEvent &event )
+{
+    m_keyComboConsumed = 0;
+
+    GetEventHandler()->AddPendingEvent(event);
+
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGrid miscellaneous event handling
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnIdle( wxIdleEvent& WXUNUSED(event) )
+{
+    //
+    // Check if the focus is in this control or one of its children
+    wxWindow* newFocused = wxWindow::FindFocus();
+
+    if ( newFocused != m_curFocused )
+        HandleFocusChange( newFocused );
+}
+
+// Called by focus event handlers. newFocused is the window that becomes focused.
+void wxPropertyGrid::HandleFocusChange( wxWindow* newFocused )
+{
+    unsigned int oldFlags = m_iFlags;
+
+    m_iFlags &= ~(wxPG_FL_FOCUSED);
+
+    wxWindow* parent = newFocused;
+
+    // This must be one of nextFocus' parents.
+    while ( parent )
+    {
+        // Use m_eventObject, which is either wxPropertyGrid or
+        // wxPropertyGridManager, as appropriate.
+        if ( parent == m_eventObject )
+        {
+            m_iFlags |= wxPG_FL_FOCUSED;
+            break;
+        }
+        parent = parent->GetParent();
+    }
+
+    m_curFocused = newFocused;
+
+    if ( (m_iFlags & wxPG_FL_FOCUSED) !=
+         (oldFlags & wxPG_FL_FOCUSED) )
+    {
+        // On each focus kill, mark the next nav key event
+        // to be ignored (can't do on set focus since the
+        // event would occur before it).
+        if ( !(m_iFlags & wxPG_FL_FOCUSED) )
+        {
+            m_iFlags |= wxPG_FL_IGNORE_NEXT_NAVKEY;
+
+            // Need to store changed value
+            CommitChangesFromEditor();
+        }
+        else
+        {
+            /*
+            //
+            // Preliminary code for tab-order respecting
+            // tab-traversal (but should be moved to
+            // OnNav handler)
+            //
+            wxWindow* prevFocus = event.GetWindow();
+            wxWindow* useThis = this;
+            if ( m_iFlags & wxPG_FL_IN_MANAGER )
+                useThis = GetParent();
+
+            if ( prevFocus &&
+                 prevFocus->GetParent() == useThis->GetParent() )
+            {
+                wxList& children = useThis->GetParent()->GetChildren();
+
+                wxNode* node = children.Find(prevFocus);
+
+                if ( node->GetNext() &&
+                     useThis == node->GetNext()->GetData() )
+                    DoSelectProperty(GetFirst());
+                else if ( node->GetPrevious () &&
+                          useThis == node->GetPrevious()->GetData() )
+                    DoSelectProperty(GetLastProperty());
+
+            }
+            */
+
+            m_iFlags &= ~(wxPG_FL_IGNORE_NEXT_NAVKEY);
+        }
+
+        // Redraw selected
+        if ( m_selected && (m_iFlags & wxPG_FL_INITIALIZED) )
+            DrawItem( m_selected );
+    }
+}
+
+void wxPropertyGrid::OnFocusEvent( wxFocusEvent& event )
+{
+    if ( event.GetEventType() == wxEVT_SET_FOCUS )
+        HandleFocusChange((wxWindow*)event.GetEventObject());
+    // Line changed to "else" when applying wxPropertyGrid patch #1675902
+    //else if ( event.GetWindow() )
+    else
+        HandleFocusChange(event.GetWindow());
+
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnChildFocusEvent( wxChildFocusEvent& event )
+{
+    HandleFocusChange((wxWindow*)event.GetEventObject());
+
+    //
+    // event.Skip() being commented out is aworkaround for bug reported
+    // in ticket #4840 (wxScrolledWindow problem with automatic scrolling).
+    //event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnScrollEvent( wxScrollWinEvent &event )
+{
+    m_iFlags |= wxPG_FL_SCROLLED;
+
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::OnCaptureChange( wxMouseCaptureChangedEvent& WXUNUSED(event) )
+{
+    if ( m_iFlags & wxPG_FL_MOUSE_CAPTURED )
+    {
+        m_iFlags &= ~(wxPG_FL_MOUSE_CAPTURED);
+    }
+}
+
+// -----------------------------------------------------------------------
+// Property editor related functions
+// -----------------------------------------------------------------------
+
+// noDefCheck = true prevents infinite recursion.
+wxPGEditor* wxPropertyGrid::RegisterEditorClass( wxPGEditor* editorclass,
+                                                 const wxString& name,
+                                                 bool noDefCheck )
+{
+    wxASSERT( editorclass );
+
+    if ( !noDefCheck && wxPGGlobalVars->m_mapEditorClasses.empty() )
+        RegisterDefaultEditors();
+
+    wxPGGlobalVars->m_mapEditorClasses[name] = (void*)editorclass;
+
+    return editorclass;
+}
+
+// Registers all default editor classes
+void wxPropertyGrid::RegisterDefaultEditors()
+{
+    wxPGRegisterDefaultEditorClass( TextCtrl );
+    wxPGRegisterDefaultEditorClass( Choice );
+    wxPGRegisterDefaultEditorClass( ComboBox );
+    wxPGRegisterDefaultEditorClass( TextCtrlAndButton );
+#if wxPG_INCLUDE_CHECKBOX
+    wxPGRegisterDefaultEditorClass( CheckBox );
+#endif
+    wxPGRegisterDefaultEditorClass( ChoiceAndButton );
+
+    // Register SpinCtrl etc. editors before use
+    RegisterAdditionalEditors();
+}
+
+// -----------------------------------------------------------------------
+// wxPGStringTokenizer
+//   Needed to handle C-style string lists (e.g. "str1" "str2")
+// -----------------------------------------------------------------------
+
+wxPGStringTokenizer::wxPGStringTokenizer( const wxString& str, wxChar delimeter )
+    : m_str(&str), m_curPos(str.begin()), m_delimeter(delimeter)
+{
+}
+
+wxPGStringTokenizer::~wxPGStringTokenizer()
+{
+}
+
+bool wxPGStringTokenizer::HasMoreTokens()
+{
+    const wxString& str = *m_str;
+
+    wxString::const_iterator i = m_curPos;
+
+    wxUniChar delim = m_delimeter;
+    wxUniChar a;
+    wxUniChar prev_a = wxT('\0');
+
+    bool inToken = false;
+
+    while ( i != str.end() )
+    {
+        a = *i;
+
+        if ( !inToken )
+        {
+            if ( a == delim )
+            {
+                inToken = true;
+                m_readyToken.clear();
+            }
+        }
+        else
+        {
+            if ( prev_a != wxT('\\') )
+            {
+                if ( a != delim )
+                {
+                    if ( a != wxT('\\') )
+                        m_readyToken << a;
+                }
+                else
+                {
+                    i++;
+                    m_curPos = i;
+                    return true;
+                }
+                prev_a = a;
+            }
+            else
+            {
+                m_readyToken << a;
+                prev_a = wxT('\0');
+            }
+        }
+        i++;
+    }
+
+    m_curPos = str.end();
+
+    if ( inToken )
+        return true;
+
+    return false;
+}
+
+wxString wxPGStringTokenizer::GetNextToken()
+{
+    return m_readyToken;
+}
+
+// -----------------------------------------------------------------------
+// wxPGChoiceEntry
+// -----------------------------------------------------------------------
+
+wxPGChoiceEntry::wxPGChoiceEntry()
+    : wxPGCell(), m_value(wxPG_INVALID_VALUE)
+{
+}
+
+wxPGChoiceEntry::wxPGChoiceEntry( const wxPGChoiceEntry& entry )
+    : wxPGCell( entry.GetText(), entry.GetBitmap(),
+        entry.GetFgCol(), entry.GetBgCol() ), m_value(entry.GetValue())
+{
+}
+
+// -----------------------------------------------------------------------
+// wxPGChoicesData
+// -----------------------------------------------------------------------
+
+wxPGChoicesData::wxPGChoicesData()
+{
+    m_refCount = 1;
+}
+
+wxPGChoicesData::~wxPGChoicesData()
+{
+    Clear();
+}
+
+void wxPGChoicesData::Clear()
+{
+    unsigned int i;
+
+    for ( i=0; i<m_items.size(); i++ )
+    {
+        delete Item(i);
+    }
+
+#if wxUSE_STL
+    m_items.resize(0);
+#else
+    m_items.Empty();
+#endif
+}
+
+void wxPGChoicesData::CopyDataFrom( wxPGChoicesData* data )
+{
+    wxASSERT( m_items.size() == 0 );
+
+    unsigned int i;
+
+    for ( i=0; i<data->GetCount(); i++ )
+        m_items.push_back( new wxPGChoiceEntry(*data->Item(i)) );
+}
+
+// -----------------------------------------------------------------------
+// wxPGChoices
+// -----------------------------------------------------------------------
+
+wxPGChoiceEntry& wxPGChoices::Add( const wxString& label, int value )
+{
+    EnsureData();
+
+    wxPGChoiceEntry* p = new wxPGChoiceEntry(label, value);
+    m_data->Insert( -1, p );
+    return *p;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGChoiceEntry& wxPGChoices::Add( const wxString& label, const wxBitmap& bitmap, int value )
+{
+    EnsureData();
+
+    wxPGChoiceEntry* p = new wxPGChoiceEntry(label, value);
+    p->SetBitmap(bitmap);
+    m_data->Insert( -1, p );
+    return *p;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGChoiceEntry& wxPGChoices::Insert( const wxPGChoiceEntry& entry, int index )
+{
+    EnsureData();
+
+    wxPGChoiceEntry* p = new wxPGChoiceEntry(entry);
+    m_data->Insert(index, p);
+    return *p;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGChoiceEntry& wxPGChoices::Insert( const wxString& label, int index, int value )
+{
+    EnsureData();
+
+    wxPGChoiceEntry* p = new wxPGChoiceEntry(label, value);
+    m_data->Insert( index, p );
+    return *p;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGChoiceEntry& wxPGChoices::AddAsSorted( const wxString& label, int value )
+{
+    EnsureData();
+
+    size_t index = 0;
+
+    while ( index < GetCount() )
+    {
+        int cmpRes = GetLabel(index).Cmp(label);
+        if ( cmpRes > 0 )
+            break;
+        index++;
+    }
+
+    wxPGChoiceEntry* p = new wxPGChoiceEntry(label, value);
+    m_data->Insert( index, p );
+    return *p;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPGChoices::Add( const wxChar** labels, const ValArrItem* values )
+{
+    EnsureData();
+
+    unsigned int itemcount = 0;
+    const wxChar** p = &labels[0];
+    while ( *p ) { p++; itemcount++; }
+
+    unsigned int i;
+    for ( i = 0; i < itemcount; i++ )
+    {
+        int value = wxPG_INVALID_VALUE;
+        if ( values )
+            value = values[i];
+        m_data->Insert( -1, new wxPGChoiceEntry(labels[i], value) );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPGChoices::Add( const wxArrayString& arr, const ValArrItem* values )
+{
+    EnsureData();
+
+    unsigned int i;
+    unsigned int itemcount = arr.size();
+
+    for ( i = 0; i < itemcount; i++ )
+    {
+        int value = wxPG_INVALID_VALUE;
+        if ( values )
+            value = values[i];
+        m_data->Insert( -1, new wxPGChoiceEntry(arr[i], value) );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPGChoices::Add( const wxArrayString& arr, const wxArrayInt& arrint )
+{
+    EnsureData();
+
+    unsigned int i;
+    unsigned int itemcount = arr.size();
+
+    for ( i = 0; i < itemcount; i++ )
+    {
+        int value = wxPG_INVALID_VALUE;
+        if ( &arrint && arrint.size() )
+            value = arrint[i];
+        m_data->Insert( -1, new wxPGChoiceEntry(arr[i], value) );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPGChoices::RemoveAt(size_t nIndex, size_t count)
+{
+    wxASSERT( m_data->m_refCount != 0xFFFFFFF );
+    unsigned int i;
+    for ( i=nIndex; i<(nIndex+count); i++)
+        delete m_data->Item(i);
+    m_data->m_items.RemoveAt(nIndex, count);
+}
+
+// -----------------------------------------------------------------------
+
+int wxPGChoices::Index( const wxString& str ) const
+{
+    if ( IsOk() )
+    {
+        unsigned int i;
+        for ( i=0; i< m_data->GetCount(); i++ )
+        {
+            if ( m_data->Item(i)->GetText() == str )
+                return i;
+        }
+    }
+    return -1;
+}
+
+// -----------------------------------------------------------------------
+
+int wxPGChoices::Index( int val ) const
+{
+    if ( IsOk() )
+    {
+        unsigned int i;
+        for ( i=0; i< m_data->GetCount(); i++ )
+        {
+            if ( m_data->Item(i)->GetValue() == val )
+                return i;
+        }
+    }
+    return -1;
+}
+
+// -----------------------------------------------------------------------
+
+wxArrayString wxPGChoices::GetLabels() const
+{
+    wxArrayString arr;
+    unsigned int i;
+
+    if ( this && IsOk() )
+        for ( i=0; i<GetCount(); i++ )
+            arr.push_back(GetLabel(i));
+
+    return arr;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPGChoices::HasValues() const
+{
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+wxArrayInt wxPGChoices::GetValuesForStrings( const wxArrayString& strings ) const
+{
+    wxArrayInt arr;
+
+    if ( IsOk() )
+    {
+        unsigned int i;
+        for ( i=0; i< strings.size(); i++ )
+        {
+            int index = Index(strings[i]);
+            if ( index >= 0 )
+                arr.Add(GetValue(index));
+            else
+                arr.Add(wxPG_INVALID_VALUE);
+        }
+    }
+
+    return arr;
+}
+
+// -----------------------------------------------------------------------
+
+wxArrayInt wxPGChoices::GetIndicesForStrings( const wxArrayString& strings, 
+                                              wxArrayString* unmatched ) const
+{
+    wxArrayInt arr;
+
+    if ( IsOk() )
+    {
+        unsigned int i;
+        for ( i=0; i< strings.size(); i++ )
+        {
+            const wxString& str = strings[i];
+            int index = Index(str);
+            if ( index >= 0 )
+                arr.Add(index);
+            else if ( unmatched )
+                unmatched->Add(str);
+        }
+    }
+
+    return arr;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPGChoices::AssignData( wxPGChoicesData* data )
+{
+    Free();
+
+    if ( data != wxPGChoicesEmptyData )
+    {
+        m_data = data;
+        data->m_refCount++;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPGChoices::Init()
+{
+    m_data = wxPGChoicesEmptyData;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPGChoices::Free()
+{
+    if ( m_data != wxPGChoicesEmptyData )
+    {
+        m_data->DecRef();
+        m_data = wxPGChoicesEmptyData;
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridEvent
+// -----------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxPropertyGridEvent, wxCommandEvent)
+
+
+DEFINE_EVENT_TYPE( wxEVT_PG_SELECTED )
+DEFINE_EVENT_TYPE( wxEVT_PG_CHANGING )
+DEFINE_EVENT_TYPE( wxEVT_PG_CHANGED )
+DEFINE_EVENT_TYPE( wxEVT_PG_HIGHLIGHTED )
+DEFINE_EVENT_TYPE( wxEVT_PG_RIGHT_CLICK )
+DEFINE_EVENT_TYPE( wxEVT_PG_PAGE_CHANGED )
+DEFINE_EVENT_TYPE( wxEVT_PG_ITEM_EXPANDED )
+DEFINE_EVENT_TYPE( wxEVT_PG_ITEM_COLLAPSED )
+DEFINE_EVENT_TYPE( wxEVT_PG_DOUBLE_CLICK )
+
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridEvent::Init()
+{
+    m_validationInfo = NULL;
+    m_canVeto = false;
+    m_wasVetoed = false;
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridEvent::wxPropertyGridEvent(wxEventType commandType, int id)
+    : wxCommandEvent(commandType,id)
+{
+    m_property = NULL;
+    Init();
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridEvent::wxPropertyGridEvent(const wxPropertyGridEvent& event)
+    : wxCommandEvent(event)
+{
+    m_eventType = event.GetEventType();
+    m_eventObject = event.m_eventObject;
+    m_pg = event.m_pg;
+    m_property = event.m_property;
+    m_validationInfo = event.m_validationInfo;
+    m_canVeto = event.m_canVeto;
+    m_wasVetoed = event.m_wasVetoed;
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridEvent::~wxPropertyGridEvent()
+{
+}
+
+// -----------------------------------------------------------------------
+
+wxEvent* wxPropertyGridEvent::Clone() const
+{
+    return new wxPropertyGridEvent( *this );
+}
+
+void wxPropertyGrid::SetPropertyAttributeAll( const wxString& attrName, wxVariant value )
+{
+    DoSetPropertyAttribute(GetRoot(), attrName, value, wxPG_RECURSE);
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPopulator
+// -----------------------------------------------------------------------
+
+wxPropertyGridPopulator::wxPropertyGridPopulator()
+{
+    m_state = NULL;
+    m_pg = NULL;
+    wxPGGlobalVars->m_offline++;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPopulator::SetState( wxPropertyGridPageState* state )
+{
+    m_state = state;
+    m_propHierarchy.clear();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPopulator::SetGrid( wxPropertyGrid* pg )
+{
+    m_pg = pg;
+    pg->Freeze();
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridPopulator::~wxPropertyGridPopulator()
+{
+    //
+    // Free unused sets of choices
+    wxPGHashMapS2P::iterator it;
+
+    for( it = m_dictIdChoices.begin(); it != m_dictIdChoices.end(); ++it )
+    {
+        wxPGChoicesData* data = (wxPGChoicesData*) it->second;
+        data->DecRef();
+    }
+
+    if ( m_pg )
+    {
+        m_pg->Thaw();
+        m_pg->GetPanel()->Refresh();
+    }
+    wxPGGlobalVars->m_offline--;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridPopulator::Add( const wxString& propClass,
+                                            const wxString& propLabel,
+                                            const wxString& propName,
+                                            const wxString* propValue,
+                                            wxPGChoices* pChoices )
+{
+    wxClassInfo* classInfo = wxClassInfo::FindClass(propClass);
+    wxPGProperty* parent = GetCurParent();
+
+    if ( parent->HasFlag(wxPG_PROP_AGGREGATE) )
+    {
+        ProcessError(wxString::Format(wxT("new children cannot be added to '%s'"),parent->GetName().c_str()));
+        return NULL;
+    }
+
+    if ( !classInfo || !classInfo->IsKindOf(CLASSINFO(wxPGProperty)) )
+    {
+        ProcessError(wxString::Format(wxT("'%s' is not valid property class"),propClass.c_str()));
+        return NULL;
+    }
+
+    wxPGProperty* property = (wxPGProperty*) classInfo->CreateObject();
+
+    property->SetLabel(propLabel);
+    property->DoSetName(propName);
+
+    if ( pChoices && pChoices->IsOk() )
+        property->SetChoices(*pChoices);
+
+    m_state->DoInsert(parent, -1, property);
+
+    if ( propValue )
+        property->SetValueFromString( *propValue, wxPG_FULL_VALUE );
+
+    return property;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPopulator::AddChildren( wxPGProperty* property )
+{
+    m_propHierarchy.push_back(property);
+    DoScanForChildren();
+    m_propHierarchy.pop_back();
+}
+
+// -----------------------------------------------------------------------
+
+wxPGChoices wxPropertyGridPopulator::ParseChoices( const wxString& choicesString,
+                                                   const wxString& idString )
+{
+    wxPGChoices choices;
+
+    // Using id?
+    if ( choicesString[0] == wxT('@') )
+    {
+        wxString ids = choicesString.substr(1);
+        wxPGHashMapS2P::iterator it = m_dictIdChoices.find(ids);
+        if ( it == m_dictIdChoices.end() )
+            ProcessError(wxString::Format(wxT("No choices defined for id '%s'"),ids.c_str()));
+        else
+            choices.AssignData((wxPGChoicesData*)it->second);
+    }
+    else
+    {
+        bool found = false;
+        if ( idString.length() )
+        {
+            wxPGHashMapS2P::iterator it = m_dictIdChoices.find(idString);
+            if ( it != m_dictIdChoices.end() )
+            {
+                choices.AssignData((wxPGChoicesData*)it->second);
+                found = true;
+            }
+        }
+
+        if ( !found )
+        {
+            // Parse choices string
+            wxString::const_iterator it = choicesString.begin();
+            wxString label;
+            wxString value;
+            int state = 0;
+            bool labelValid = false;
+
+            for ( ; it != choicesString.end(); it++ )
+            {
+                wxChar c = *it;
+
+                if ( state != 1 )
+                {
+                    if ( c == wxT('"') )
+                    {
+                        if ( labelValid )
+                        {
+                            long l;
+                            if ( !value.ToLong(&l, 0) ) l = wxPG_INVALID_VALUE;
+                            choices.Add(label, l);
+                        }
+                        labelValid = false;
+                        //wxLogDebug(wxT("%s, %s"),label.c_str(),value.c_str());
+                        value.clear();
+                        label.clear();
+                        state = 1;
+                    }
+                    else if ( c == wxT('=') )
+                    {
+                        if ( labelValid )
+                        {
+                            state = 2;
+                        }
+                    }
+                    else if ( state == 2 && (wxIsalnum(c) || c == wxT('x')) )
+                    {
+                        value << c;
+                    }
+                }
+                else
+                {
+                    if ( c == wxT('"') )
+                    {
+                        state = 0;
+                        labelValid = true;
+                    }
+                    else
+                        label << c;
+                }
+            }
+
+            if ( labelValid )
+            {
+                long l;
+                if ( !value.ToLong(&l, 0) ) l = wxPG_INVALID_VALUE;
+                choices.Add(label, l);
+            }
+
+            if ( !choices.IsOk() )
+            {
+                choices.EnsureData();
+            }
+
+            // Assign to id
+            if ( idString.length() )
+                m_dictIdChoices[idString] = choices.GetData();
+        }
+    }
+
+    return choices;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPopulator::ToLongPCT( const wxString& s, long* pval, long max )
+{
+    if ( s.Last() == wxT('%') )
+    {
+        wxString s2 = s.substr(0,s.length()-1);
+        long val;
+        if ( s2.ToLong(&val, 10) )
+        {
+            *pval = (val*max)/100;
+            return true;
+        }
+        return false;
+    }
+
+    return s.ToLong(pval, 10);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPopulator::AddAttribute( const wxString& name,
+                                            const wxString& type,
+                                            const wxString& value )
+{
+    int l = m_propHierarchy.size();
+    if ( !l )
+        return false;
+
+    wxPGProperty* p = m_propHierarchy[l-1];
+    wxString valuel = value.Lower();
+    wxVariant variant;
+
+    if ( type.length() == 0 )
+    {
+        long v;
+
+        // Auto-detect type
+        if ( valuel == wxT("true") || valuel == wxT("yes") || valuel == wxT("1") )
+            variant = true;
+        else if ( valuel == wxT("false") || valuel == wxT("no") || valuel == wxT("0") )
+            variant = false;
+        else if ( value.ToLong(&v, 0) )
+            variant = v;
+        else
+            variant = value;
+    }
+    else
+    {
+        if ( type == wxT("string") )
+        {
+            variant = value;
+        }
+        else if ( type == wxT("int") )
+        {
+            long v = 0;
+            value.ToLong(&v, 0);
+            variant = v;
+        }
+        else if ( type == wxT("bool") )
+        {
+            if ( valuel == wxT("true") || valuel == wxT("yes") || valuel == wxT("1") )
+                variant = true;
+            else
+                variant = false;
+        }
+        else
+        {
+            ProcessError(wxString::Format(wxT("Invalid attribute type '%s'"),type.c_str()));
+            return false;
+        }
+    }
+
+    p->SetAttribute( name, variant );
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPopulator::ProcessError( const wxString& msg )
+{
+    wxLogError(_("Error in resource: %s"),msg.c_str());
+}
+
+// -----------------------------------------------------------------------
diff --git a/src/propgrid/propgridiface.cpp b/src/propgrid/propgridiface.cpp
new file mode 100644 (file)
index 0000000..bf59ef0
--- /dev/null
@@ -0,0 +1,1183 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/propgrid/propgridiface.cpp
+// Purpose:     wxPropertyGridInterface class
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2008-08-24
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/defs.h"
+    #include "wx/object.h"
+    #include "wx/hash.h"
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/event.h"
+    #include "wx/window.h"
+    #include "wx/panel.h"
+    #include "wx/dc.h"
+    #include "wx/dcmemory.h"
+    #include "wx/button.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/settings.h"
+    #include "wx/msgdlg.h"
+    #include "wx/choice.h"
+    #include "wx/stattext.h"
+    #include "wx/scrolwin.h"
+    #include "wx/dirdlg.h"
+    #include "wx/layout.h"
+    #include "wx/sizer.h"
+    #include "wx/textdlg.h"
+    #include "wx/filedlg.h"
+    #include "wx/statusbr.h"
+    #include "wx/intl.h"
+    #include "wx/frame.h"
+#endif
+
+#include <wx/propgrid/property.h>
+#include <wx/propgrid/propgrid.h>
+
+
+const wxChar *wxPGTypeName_long = wxT("long");
+const wxChar *wxPGTypeName_bool = wxT("bool");
+const wxChar *wxPGTypeName_double = wxT("double");
+const wxChar *wxPGTypeName_wxString = wxT("string");
+const wxChar *wxPGTypeName_void = wxT("void*");
+const wxChar *wxPGTypeName_wxArrayString = wxT("arrstring");
+
+
+// ----------------------------------------------------------------------------
+// VariantDatas
+// ----------------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataPoint, wxPoint)
+WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataSize, wxSize)
+WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataArrayInt, wxArrayInt)
+WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataLongLong, wxLongLong)
+WX_PG_IMPLEMENT_VARIANT_DATA(wxPGVariantDataULongLong, wxULongLong)
+
+WX_PG_IMPLEMENT_WXOBJECT_VARIANT_DATA(wxPGVariantDataFont, wxFont)
+
+wxObject* wxPG_VariantToWxObject( const wxVariant& variant, wxClassInfo* classInfo )
+{
+    if ( !variant.IsValueKindOf(classInfo) )
+        return (wxObject*) NULL;
+
+    wxVariantData* vdata = variant.GetData();
+
+    wxPGVariantData* pgvdata = wxDynamicCastVariantData(vdata, wxPGVariantData);
+    if ( pgvdata )
+         return (wxObject*) pgvdata->GetValuePtr();
+
+    if ( wxPGIsVariantClassInfo(wxPGVariantDataGetClassInfo(vdata), wxobject) )
+        return variant.GetWxObjectPtr();
+
+    return (wxObject*) NULL;
+}
+
+// -----------------------------------------------------------------------
+// wxVariant helpers
+// -----------------------------------------------------------------------
+
+long wxPGVariantToInt( const wxVariant& variant, long defVal )
+{
+    if ( variant.IsNull() )
+        return defVal;
+
+    if ( wxPGIsVariantType(variant, long) )
+        return variant.GetLong();
+
+    if ( wxPGIsVariantType(variant, bool) )
+        return variant.GetBool() ? 1 : 0;
+
+    if ( typeid(*variant.GetData()) == typeid(wxPGVariantDataLongLong) )
+    {
+        wxLongLong ll = ((const wxPGVariantDataLongLong&)variant).GetValue();
+        if ( ll >= LONG_MAX )
+            return LONG_MAX;
+        else if ( ll <= LONG_MIN )
+            return LONG_MIN;
+        return ll.ToLong();
+    }
+
+    long l = defVal;
+
+    if ( wxPGIsVariantType(variant, string) )
+        variant.GetString().ToLong(&l, 0);
+
+    return l;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPGVariantToLongLong( const wxVariant& variant, wxLongLong_t* pResult )
+{
+    if ( variant.IsNull() )
+        return false;
+
+    if ( wxPGIsVariantType(variant, long) )
+    {
+        *pResult = variant.GetLong();
+        return true;
+    }
+
+    if ( typeid(*variant.GetData()) == typeid(wxPGVariantDataLongLong) )
+    {
+        *pResult = ((const wxPGVariantDataLongLong&)variant).GetValue().GetValue();
+        return true;
+    }
+
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPGVariantToULongLong( const wxVariant& variant, wxULongLong_t* pResult )
+{
+    if ( variant.IsNull() )
+        return false;
+
+    if ( wxPGIsVariantType(variant, long) )
+    {
+        *pResult = (unsigned long)variant.GetLong();
+        return true;
+    }
+
+    if ( typeid(*variant.GetData()) == typeid(wxPGVariantDataULongLong) )
+    {
+        *pResult = ((const wxPGVariantDataULongLong&)variant).GetValue().GetValue();
+        return true;
+    }
+
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPGVariantToDouble( const wxVariant& variant, double* pResult )
+{
+    if ( variant.IsNull() )
+        return false;
+
+    if ( wxPGIsVariantType(variant, double) )
+    {
+        *pResult = variant.GetDouble();
+        return true;
+    }
+
+    if ( wxPGIsVariantType(variant, long) )
+    {
+        *pResult = (double)variant.GetLong();
+        return true;
+    }
+
+    if ( typeid(*variant.GetData()) == typeid(wxPGVariantDataLongLong) )
+    {
+        wxLongLong ll = ((const wxPGVariantDataLongLong&)variant).GetValue();
+        *pResult = ll.ToDouble();
+        return true;
+    }
+
+    if ( wxPGIsVariantType(variant, string) )
+        if ( variant.GetString().ToDouble(pResult) )
+            return true;
+
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// Choice related methods
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::AddPropertyChoice( wxPGPropArg id,
+                                                 const wxString& label,
+                                                 int value )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    p->InsertChoice(label,-1,value);
+}
+
+
+void wxPropertyGridInterface::InsertPropertyChoice( wxPGPropArg id,
+                                                    const wxString& label,
+                                                    int index,
+                                                    int value )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    p->InsertChoice(label,index,value);
+}
+
+
+void wxPropertyGridInterface::DeletePropertyChoice( wxPGPropArg id,
+                                                    int index )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    p->DeleteChoice(index);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::RefreshGrid( wxPropertyGridPageState* state )
+{
+    if ( !state )
+        state = m_pState;
+
+    wxPropertyGrid* grid = state->GetGrid();
+    if ( grid->GetState() == state && !grid->IsFrozen() )
+    {
+        grid->Refresh();
+    }
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::Append( wxPGProperty* property )
+{
+    wxPGProperty* retp = m_pState->DoAppend(property);
+    
+    wxPropertyGrid* grid = m_pState->GetGrid();
+    if ( grid )
+        grid->RefreshGrid();
+
+    return retp;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::AppendIn( wxPGPropArg id, wxPGProperty* newproperty )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
+    wxPGProperty* pwc = (wxPGProperty*) p;
+    wxPGProperty* retp = m_pState->DoInsert(pwc, pwc->GetChildCount(), newproperty);
+    return retp;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::Insert( wxPGPropArg id, wxPGProperty* property )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
+    wxPGProperty* retp = m_pState->DoInsert(p->GetParent(), p->GetArrIndex(), property);
+    RefreshGrid();
+    return retp;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::Insert( wxPGPropArg id, int index, wxPGProperty* newproperty )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
+    wxPGProperty* retp = m_pState->DoInsert((wxPGProperty*)p,index,newproperty);
+    RefreshGrid();
+    return retp;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::DeleteProperty( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    wxPropertyGridPageState* state = p->GetParentState();
+    wxPropertyGrid* grid = state->GetGrid();
+
+    if ( grid->GetState() == state )
+    {
+        bool selRes = grid->DoSelectProperty(NULL, wxPG_SEL_DELETING);
+        wxPG_CHECK_RET_DBG( selRes,
+                            wxT("failed to deselect a property (editor probably had invalid value)") );
+    }
+
+    state->DoDelete( p );
+
+    RefreshGrid(state);
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::ReplaceProperty( wxPGPropArg id, wxPGProperty* property )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty)
+
+    wxPGProperty* replaced = p;
+    wxCHECK_MSG( replaced && property,
+                 wxNullProperty,
+                 wxT("NULL property") );
+    wxCHECK_MSG( !replaced->IsCategory(),
+                 wxNullProperty,
+                 wxT("cannot replace this type of property") );
+    wxCHECK_MSG( !m_pState->IsInNonCatMode(),
+                 wxNullProperty,
+                 wxT("cannot replace properties in alphabetic mode") );
+
+    // Get address to the slot
+    wxPGProperty* parent = replaced->GetParent();
+    int ind = replaced->GetIndexInParent();
+
+    wxPropertyGridPageState* state = replaced->GetParentState();
+    DeleteProperty(replaced); // Must use generic Delete
+    state->DoInsert(parent,ind,property);
+
+    return property;
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridInterface property operations
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::ClearSelection()
+{
+    wxPropertyGridPageState* state = m_pState;
+    wxPropertyGrid* pg = state->GetGrid();
+    if ( pg->GetState() == state )
+        return pg->DoClearSelection();
+    else
+        state->SetSelection(NULL);
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::LimitPropertyEditing( wxPGPropArg id, bool limit )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    m_pState->DoLimitPropertyEditing(p, limit);
+    RefreshProperty(p);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::EnableProperty( wxPGPropArg id, bool enable )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+
+    wxPropertyGridPageState* state = p->GetParentState();
+    wxPropertyGrid* grid = state->GetGrid();
+
+    if ( enable )
+    {
+        if ( !(p->m_flags & wxPG_PROP_DISABLED) )
+            return false;
+
+        // If active, Set active Editor.
+        if ( grid->GetState() == state && p == grid->GetSelection() )
+            grid->DoSelectProperty( p, wxPG_SEL_FORCE );
+    }
+    else
+    {
+        if ( p->m_flags & wxPG_PROP_DISABLED )
+            return false;
+
+        // If active, Disable as active Editor.
+        if ( grid->GetState() == state && p == grid->GetSelection() )
+            grid->DoSelectProperty( p, wxPG_SEL_FORCE );
+    }
+
+    state->DoEnableProperty(p, enable);
+
+    RefreshProperty( p );
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::ExpandAll( bool doExpand )
+{
+    wxPropertyGridPageState* state = m_pState;
+
+    if ( !state->DoGetRoot()->GetChildCount() )
+        return true;
+
+    wxPropertyGrid* pg = state->GetGrid();
+
+    if ( GetSelection() && GetSelection() != state->DoGetRoot() &&
+         !doExpand )
+    {
+        if ( !pg->ClearSelection() )
+            return false;
+    }
+
+    wxPGVIterator it;
+
+    for ( it = GetVIterator( wxPG_ITERATE_ALL ); !it.AtEnd(); it.Next() )
+    {
+        wxPGProperty* p = (wxPGProperty*) it.GetProperty();
+        if ( p->GetChildCount() )
+        {
+            if ( doExpand )
+            {
+                if ( !p->IsExpanded() )
+                {
+                    state->DoExpand(p);
+                }
+            }
+            else
+            {
+                if ( p->IsExpanded() )
+                {
+                    state->DoCollapse(p);
+                }
+            }
+        }
+    }
+
+    pg->RecalculateVirtualSize();
+
+    RefreshGrid();
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::SetPropertyValueUnspecified( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+    wxPropertyGrid* propGrid = p->GetGridIfDisplayed();
+    if ( propGrid )
+        propGrid->DoSetPropertyValueUnspecified(p);
+    else
+        p->GetParentState()->DoSetPropertyValueUnspecified(p);
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridInterface property value setting and getting
+// -----------------------------------------------------------------------
+
+void wxPGGetFailed( const wxPGProperty* p, const wxChar* typestr )
+{
+    wxPGTypeOperationFailed(p,typestr,wxT("Get"));
+}
+
+// -----------------------------------------------------------------------
+
+void wxPGTypeOperationFailed( const wxPGProperty* p, const wxChar* typestr,
+    const wxChar* op )
+{
+    wxASSERT( p != NULL );
+    wxLogError( _("Type operation \"%s\" failed: Property labeled \"%s\" is of type \"%s\", NOT \"%s\"."),
+        op,p->GetLabel().c_str(),p->GetValue().GetType().c_str(),typestr );
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::SetPropVal( wxPGPropArg id, wxVariant& value )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    if ( p )
+    {
+        p->SetValue(value);
+        wxPropertyGrid* propGrid = p->GetGridIfDisplayed();
+        if ( propGrid )
+            propGrid->DrawItemAndValueRelated( p );
+
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::SetPropertyValueString( wxPGPropArg id, const wxString& value )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    if ( m_pState->DoSetPropertyValueString(p,value) )
+    {
+        wxPropertyGrid* propGrid = p->GetGridIfDisplayed();
+        if ( propGrid )
+            propGrid->DrawItemAndValueRelated( p );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::SetValidationFailureBehavior( int vfbFlags )
+{
+    GetPropertyGrid()->m_permanentValidationFailureBehavior = vfbFlags;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::GetPropertyByNameA( const wxString& name ) const
+{
+    wxPGProperty* p = GetPropertyByName(name);
+    wxASSERT_MSG(p,wxString::Format(wxT("no property with name '%s'"),name.c_str()));
+    return p;
+}
+
+// ----------------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::GetPropertyByLabel( const wxString& label ) const
+{
+    wxPGVIterator it;
+
+    for ( it = GetVIterator( wxPG_ITERATE_PROPERTIES ); !it.AtEnd(); it.Next() )
+    {
+        if ( it.GetProperty()->GetLabel() == label )
+            return it.GetProperty();
+    }
+
+    return wxNullProperty;
+}
+
+// ----------------------------------------------------------------------------
+
+void wxPropertyGridInterface::DoSetPropertyAttribute( wxPGPropArg id, const wxString& name,
+                                                      wxVariant& value, long argFlags )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    p->SetAttribute( name, value );
+
+    if ( argFlags & wxPG_RECURSE )
+    {
+        unsigned int i;
+        for ( i = 0; i < p->GetChildCount(); i++ )
+            DoSetPropertyAttribute(p->Item(i), name, value, argFlags);
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::GetPropertiesWithFlag( wxArrayPGProperty* targetArr,
+                                                     wxPGProperty::FlagType flags,
+                                                     bool inverse,
+                                                     int iterFlags ) const
+{
+    wxASSERT( targetArr );
+    wxPGVIterator it = GetVIterator( iterFlags );
+
+    for ( ;
+          !it.AtEnd();
+          it.Next() )
+    {
+        const wxPGProperty* property = it.GetProperty();
+
+        if ( !inverse )
+        {
+            if ( (property->GetFlags() & flags) == flags )
+                targetArr->push_back((wxPGProperty*)property);
+        }
+        else
+        {
+            if ( (property->GetFlags() & flags) != flags )
+                targetArr->push_back((wxPGProperty*)property);
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::SetPropertiesFlag( const wxArrayPGProperty& srcArr,
+                                                 wxPGProperty::FlagType flags,
+                                                 bool inverse )
+{
+    unsigned int i;
+
+    for ( i=0; i<srcArr.size(); i++ )
+    {
+        wxPGProperty* property = srcArr[i];
+
+        if ( !inverse )
+            property->SetFlag(flags);
+        else
+            property->ClearFlag(flags);
+    }
+
+    // If collapsed flag or hidden was manipulated, we need to update virtual
+    // size.
+    wxPropertyGrid* pg = GetPropertyGrid();
+    if ( flags & (wxPG_PROP_COLLAPSED|wxPG_PROP_HIDDEN) )
+    {
+        GetState()->VirtualHeightChanged();
+        pg->RecalculateVirtualSize();
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::SetBoolChoices( const wxString& trueChoice,
+                                                 const wxString& falseChoice )
+{
+    wxPGGlobalVars->m_boolChoices[0] = falseChoice;
+    wxPGGlobalVars->m_boolChoices[1] = trueChoice;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGChoices gs_emptyChoices;
+
+wxPGChoices& wxPropertyGridInterface::GetPropertyChoices( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(gs_emptyChoices)
+
+    wxPGChoiceInfo ci;
+    ci.m_choices = (wxPGChoices*) NULL;
+
+    p->GetChoiceInfo(&ci);
+
+    if ( !ci.m_choices )
+        return gs_emptyChoices;
+
+    return *ci.m_choices;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::DoGetPropertyByName( const wxString& name ) const
+{
+    return m_pState->BaseGetPropertyByName(name);
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridInterface::GetPropertyByName( const wxString& name,
+                                                             const wxString& subname ) const
+{
+    wxPGProperty* p = DoGetPropertyByName(name);
+    if ( !p || !p->GetChildCount() )
+        return wxNullProperty;
+
+    return p->GetPropertyByName(subname);
+}
+
+// -----------------------------------------------------------------------
+
+// Since GetPropertyByName is used *a lot*, this makes sense
+// since non-virtual method can be called with less code.
+wxPGProperty* wxPropertyGridInterface::GetPropertyByName( const wxString& name ) const
+{
+    wxPGProperty* p = DoGetPropertyByName(name);
+    if ( p )
+        return p;
+
+    // Check if its "Property.SubProperty" format
+    int pos = name.Find(wxT('.'));
+    if ( pos <= 0 )
+        return NULL;
+
+    return GetPropertyByName(name.substr(0,pos),
+                             name.substr(pos+1,name.length()-pos-1));
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::HideProperty( wxPGPropArg id, bool hide, int flags )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+
+    wxPropertyGrid* pg = m_pState->GetGrid();
+
+    if ( pg == p->GetGrid() )
+        return pg->DoHideProperty(p, hide, flags);
+    else
+        m_pState->DoHideProperty(p, hide, flags);
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::Collapse( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+    wxPropertyGrid* pg = p->GetGridIfDisplayed();
+    if ( pg )
+        return pg->DoCollapse(p);
+
+    return p->GetParentState()->DoCollapse(p);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::Expand( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+    wxPropertyGrid* pg = p->GetGridIfDisplayed();
+    if ( pg )
+        return pg->DoExpand(p);
+
+    return p->GetParentState()->DoExpand(p);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::SetPropertyLabel( wxPGPropArg id, const wxString& newproplabel )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+
+    p->SetLabel( newproplabel );
+
+    wxPropertyGridPageState* state = p->GetParentState();
+    wxPropertyGrid* pg = state->GetGrid();
+
+    if ( pg->HasFlag(wxPG_AUTO_SORT) )
+        pg->SortChildren(p->GetParent());
+
+    if ( pg->GetState() == state )
+    {
+        if ( pg->HasFlag(wxPG_AUTO_SORT) )
+            pg->Refresh();
+        else
+            pg->DrawItem( p );
+    }
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::SetPropertyMaxLength( wxPGPropArg id, int maxLen )
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+
+    wxPropertyGrid* pg = m_pState->GetGrid();
+
+    p->m_maxLen = (short) maxLen;
+
+    // Adjust control if selected currently
+    if ( pg == p->GetGrid() && p == m_pState->GetSelection() )
+    {
+        wxWindow* wnd = pg->GetEditorControl();
+        wxTextCtrl* tc = wxDynamicCast(wnd,wxTextCtrl);
+        if ( tc )
+            tc->SetMaxLength( maxLen );
+        else
+        // Not a text ctrl
+            return false;
+    }
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+// GetPropertyValueAsXXX methods
+
+#define IMPLEMENT_GET_VALUE(T,TRET,BIGNAME,DEFRETVAL) \
+TRET wxPropertyGridInterface::GetPropertyValueAs##BIGNAME( wxPGPropArg id ) const \
+{ \
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(DEFRETVAL) \
+    wxVariant value = p->GetValue(); \
+    if ( wxStrcmp(value.GetType(), wxPGTypeName_##T) != 0 ) \
+    { \
+        wxPGGetFailed(p,wxPGTypeName_##T); \
+        return (TRET)DEFRETVAL; \
+    } \
+    return (TRET)value.Get##BIGNAME(); \
+}
+
+// String is different than others.
+wxString wxPropertyGridInterface::GetPropertyValueAsString( wxPGPropArg id ) const
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxEmptyString)
+    return p->GetValueAsString(wxPG_FULL_VALUE);
+}
+
+bool wxPropertyGridInterface::GetPropertyValueAsBool( wxPGPropArg id ) const
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+    wxVariant value = p->GetValue();
+    if ( wxStrcmp(value.GetType(), wxPGTypeName_bool) == 0 )
+    {
+        return value.GetBool();
+    }
+    if ( wxStrcmp(value.GetType(), wxPGTypeName_long) == 0 )
+    {
+        return value.GetLong()?true:false;
+    }
+    wxPGGetFailed(p,wxPGTypeName_bool);
+    return false;
+}
+
+IMPLEMENT_GET_VALUE(long,long,Long,0)
+IMPLEMENT_GET_VALUE(double,double,Double,0.0)
+IMPLEMENT_GET_VALUE(void,void*,VoidPtr,NULL)
+
+// wxObject is different than others.
+wxObject* wxPropertyGridInterface::GetPropertyValueAsWxObjectPtr( wxPGPropArg id ) const
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL((wxObject*)NULL)
+
+    wxVariant value = p->GetValue();
+    wxVariantData* vdata = value.GetData();
+
+    if ( !vdata->GetValueClassInfo() )
+        return (wxObject*) NULL;
+
+       wxPGVariantData* pgvdata = wxDynamicCastVariantData(vdata, wxPGVariantData);
+    if ( pgvdata )
+         return (wxObject*) pgvdata->GetValuePtr();
+
+    if ( wxPGIsVariantClassInfo(wxPGVariantDataGetClassInfo(vdata), wxobject) )
+        return (wxObject*) value.GetWxObjectPtr();
+
+    return (wxObject*) NULL;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::IsPropertyExpanded( wxPGPropArg id ) const
+{
+    wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
+    return p->IsExpanded();
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridInterface wrappers
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::ChangePropertyValue( wxPGPropArg id, wxVariant newValue )
+{
+    return GetPropertyGrid()->ChangePropertyValue(id, newValue);
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::BeginAddChildren( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+    wxCHECK_RET( p->HasFlag(wxPG_PROP_AGGREGATE), wxT("only call on properties with fixed children") );
+    p->ClearFlag(wxPG_PROP_AGGREGATE);
+    p->SetFlag(wxPG_PROP_MISC_PARENT);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridInterface::EditorValidate()
+{
+    return GetPropertyGrid()->DoEditorValidate();
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridInterface::EndAddChildren( wxPGPropArg id )
+{
+    wxPG_PROP_ARG_CALL_PROLOG()
+    wxCHECK_RET( p->HasFlag(wxPG_PROP_MISC_PARENT), wxT("only call on properties for which BeginAddChildren was called prior") );
+    p->ClearFlag(wxPG_PROP_MISC_PARENT);
+    p->SetFlag(wxPG_PROP_AGGREGATE);
+}
+
+// -----------------------------------------------------------------------
+// wxPGVIterator_State
+// -----------------------------------------------------------------------
+
+// Default returned by wxPropertyGridInterface::GetVIterator().
+class wxPGVIteratorBase_State : public wxPGVIteratorBase
+{
+public:
+    wxPGVIteratorBase_State( wxPropertyGridPageState* state, int flags )
+    {
+        m_it.Init( state, flags );
+    }
+    virtual ~wxPGVIteratorBase_State() { }
+    virtual void Next() { m_it.Next(); }
+};
+
+wxPGVIterator wxPropertyGridInterface::GetVIterator( int flags ) const
+{
+    return wxPGVIterator( new wxPGVIteratorBase_State( m_pState, flags ) );
+}
+
+// -----------------------------------------------------------------------
+// wxPGEditableState related functions
+// -----------------------------------------------------------------------
+
+// EscapeDelimiters() changes ";" into "\;" and "|" into "\|"
+// in the input string.  This is an internal functions which is
+// used for saving states
+// NB: Similar function exists in aui/framemanager.cpp
+static wxString EscapeDelimiters(const wxString& s)
+{
+    wxString result;
+    result.Alloc(s.length());
+    const wxChar* ch = s.c_str();
+    while (*ch)
+    {
+        if (*ch == wxT(';') || *ch == wxT('|') || *ch == wxT(','))
+            result += wxT('\\');
+        result += *ch;
+        ++ch;
+    }
+    return result;
+}
+
+wxString wxPropertyGridInterface::SaveEditableState( int includedStates ) const
+{
+    wxString result;
+
+    //
+    // Save state on page basis
+    size_t pageIndex = 0;
+    wxPropertyGridPageState* pageState = GetPageState(pageIndex);
+    wxArrayPtrVoid pageStates;
+    while ( pageState )
+    {
+        pageStates.Add(pageState);
+        pageIndex += 1;
+        pageState = GetPageState(pageIndex);
+    }
+
+    for ( pageIndex=0; pageIndex < pageStates.size(); pageIndex++ )
+    {
+        wxPropertyGridPageState* pageState = (wxPropertyGridPageState*) pageStates[pageIndex];
+
+        if ( includedStates & SelectionState )
+        {
+            wxString sel;
+            if ( pageState->GetSelection() )
+                sel = pageState->GetSelection()->GetName();
+            result += wxS("selection=");
+            result += EscapeDelimiters(sel);
+            result += wxS(";");
+        }
+        if ( includedStates & ExpandedState )
+        {
+            wxArrayPGProperty ptrs;
+            wxPropertyGridConstIterator it = 
+                wxPropertyGridConstIterator( pageState,
+                                             wxPG_ITERATE_ALL_PARENTS_RECURSIVELY|wxPG_ITERATE_HIDDEN,
+                                             wxNullProperty );
+
+            result += wxS("expanded=");
+
+            for ( ;
+                  !it.AtEnd();
+                  it.Next() )
+            {
+                const wxPGProperty* p = it.GetProperty();
+
+                if ( !p->HasFlag(wxPG_PROP_COLLAPSED) )
+                    result += EscapeDelimiters(p->GetName());
+                    result += wxS(",");
+
+            }
+
+            if ( result.Last() == wxS(',') )
+                result.RemoveLast();
+
+            result += wxS(";");
+        }
+        if ( includedStates & ScrollPosState )
+        {
+            int x, y;
+            GetPropertyGrid()->GetViewStart(&x,&y);
+            result += wxString::Format(wxS("scrollpos=%i,%i;"), x, y);
+        }
+        if ( includedStates & SplitterPosState )
+        {
+            result += wxS("splitterpos=");
+
+            for ( size_t i=0; i<pageState->GetColumnCount(); i++ )
+                result += wxString::Format(wxS("%i,"), pageState->DoGetSplitterPosition(i));
+
+            result.RemoveLast();  // Remove last comma
+            result += wxS(";");
+        }
+        if ( includedStates & PageState )
+        {
+            result += wxS("ispageselected=");
+
+            if ( GetPageState(-1) == pageState )
+                result += wxS("1;");
+            else
+                result += wxS("0;");
+        }
+        result.RemoveLast();  // Remove last semicolon
+        result += wxS("|");
+    }
+
+    // Remove last '|'
+    if ( result.length() )
+        result.RemoveLast();
+
+    return result;
+}
+
+bool wxPropertyGridInterface::RestoreEditableState( const wxString& src, int restoreStates )
+{
+    wxPropertyGrid* pg = GetPropertyGrid();
+    wxPGProperty* newSelection = NULL;
+    size_t pageIndex;
+    long vx = -1;
+    long vy = -1;
+    long selectedPage = -1;
+    bool pgSelectionSet = false;
+    bool res = true;
+
+    pg->Freeze();
+    wxArrayString pageStrings = ::wxSplit(src, wxS('|'), wxS('\\'));
+
+    for ( pageIndex=0; pageIndex<pageStrings.size(); pageIndex++ )
+    {
+        wxPropertyGridPageState* pageState = GetPageState(pageIndex);
+        if ( !pageState )
+            break;
+
+        wxArrayString kvpairStrings = ::wxSplit(pageStrings[pageIndex], wxS(';'), wxS('\\'));
+
+        for ( size_t i=0; i<kvpairStrings.size(); i++ )
+        {
+            const wxString& kvs = kvpairStrings[i];
+            int eq_pos = kvs.Find(wxS('='));
+            if ( eq_pos != wxNOT_FOUND )
+            {
+                wxString key = kvs.substr(0, eq_pos);
+                wxString value = kvs.substr(eq_pos+1);
+
+                // Further split value by commas
+                wxArrayString values = ::wxSplit(value, wxS(','), wxS('\\'));
+
+                if ( key == wxS("expanded") )
+                {
+                    if ( restoreStates & ExpandedState )
+                    {
+                        wxPropertyGridIterator it = 
+                            wxPropertyGridIterator( pageState,
+                                                    wxPG_ITERATE_ALL,
+                                                    wxNullProperty );
+
+                        // First collapse all
+                        for ( ; !it.AtEnd(); it.Next() )
+                        {
+                            wxPGProperty* p = it.GetProperty();
+                            pageState->DoCollapse(p);
+                        }
+
+                        // Then expand those which names are in values
+                        for ( size_t n=0; n<values.size(); n++ )
+                        {
+                            const wxString& name = values[n];
+                            wxPGProperty* prop = GetPropertyByName(name);
+                            if ( prop )
+                                pageState->DoExpand(prop);
+                        }
+                    }
+                }
+                else if ( key == wxS("scrollpos") )
+                {
+                    if ( restoreStates & ScrollPosState )
+                    {
+                        if ( values.size() == 2 )
+                        {
+                            values[0].ToLong(&vx);
+                            values[1].ToLong(&vy);
+                        }
+                        else
+                        {
+                            res = false;
+                        }
+                    }
+                }
+                else if ( key == wxS("splitterpos") )
+                {
+                    if ( restoreStates & SplitterPosState )
+                    {
+                        for ( size_t n=1; n<values.size(); n++ )
+                        {
+                            long pos = 0;
+                            values[n].ToLong(&pos);
+                            if ( pos > 0 )
+                                pageState->DoSetSplitterPosition(pos, n);
+                        }
+                    }
+                }
+                else if ( key == wxS("selection") )
+                {
+                    if ( restoreStates & SelectionState )
+                    {
+                        if ( values.size() > 0 )
+                        {
+                            if ( pageState->IsDisplayed() )
+                            {
+                                if ( values[0].length() )
+                                    newSelection = GetPropertyByName(value);
+                                pgSelectionSet = true;
+                            }
+                            else
+                            {
+                                if ( values[0].length() )
+                                    pageState->SetSelection(GetPropertyByName(value));
+                                else
+                                    pageState->DoClearSelection();
+                            }
+                        }
+                    }
+                }
+                else if ( key == wxS("ispageselected") )
+                {
+                    if ( restoreStates & PageState )
+                    {
+                        long pageSelStatus;
+                        if ( values.size() == 1 && values[0].ToLong(&pageSelStatus) )
+                        {
+                            if ( pageSelStatus )
+                                selectedPage = pageIndex;
+                        }
+                        else
+                        {
+                            res = false;
+                        }
+                    }
+                }
+                else
+                {
+                    res = false;
+                }
+            }
+        }
+    }
+
+    //
+    // Force recalculation of virtual heights of all pages
+    // (may be needed on unclean source string).
+    pageIndex = 0;
+    wxPropertyGridPageState* pageState = GetPageState(pageIndex);
+    while ( pageState )
+    {
+        pageState->VirtualHeightChanged();
+        pageIndex += 1;
+        pageState = GetPageState(pageIndex);
+    }
+
+    pg->Thaw();
+
+    //
+    // Selection of visible grid page must be set after Thaw() call
+    if ( pgSelectionSet )
+    {
+        if ( newSelection )
+            pg->SelectProperty(newSelection);
+        else
+            pg->ClearSelection();
+    }
+
+    if ( selectedPage != -1 )
+    {
+        DoSelectPage(selectedPage);
+    }
+
+    if ( vx >= 0 )
+    {
+        pg->Scroll(vx, vy);
+    }
+
+    return res;
+}
+
diff --git a/src/propgrid/propgridpagestate.cpp b/src/propgrid/propgridpagestate.cpp
new file mode 100644 (file)
index 0000000..425ab02
--- /dev/null
@@ -0,0 +1,1871 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/propgrid/propgridpagestate.cpp
+// Purpose:     wxPropertyGridPageState class
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2008-08-24
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/defs.h"
+    #include "wx/object.h"
+    #include "wx/hash.h"
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/event.h"
+    #include "wx/window.h"
+    #include "wx/panel.h"
+    #include "wx/dc.h"
+    #include "wx/dcmemory.h"
+    #include "wx/button.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/settings.h"
+    #include "wx/msgdlg.h"
+    #include "wx/choice.h"
+    #include "wx/stattext.h"
+    #include "wx/scrolwin.h"
+    #include "wx/dirdlg.h"
+    #include "wx/layout.h"
+    #include "wx/sizer.h"
+    #include "wx/textdlg.h"
+    #include "wx/filedlg.h"
+    #include "wx/statusbr.h"
+    #include "wx/intl.h"
+    #include "wx/frame.h"
+#endif
+
+// This define is necessary to prevent macro clearing
+#define __wxPG_SOURCE_FILE__
+
+#include <wx/propgrid/propgridpagestate.h>
+#include <wx/propgrid/propgrid.h>
+#include <wx/propgrid/editors.h>
+
+
+#define wxPG_DEFAULT_SPLITTERX      110
+
+
+// -----------------------------------------------------------------------
+// wxPropertyGridIterator
+// -----------------------------------------------------------------------
+
+void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags, wxPGProperty* property, int dir  )
+{
+    wxASSERT( dir == 1 || dir == -1 );
+
+    m_state = state;
+    m_baseParent = state->DoGetRoot();
+    if ( !property && m_baseParent->GetChildCount() )
+        property = m_baseParent->Item(0);
+
+    m_property = property;
+
+    wxPG_ITERATOR_CREATE_MASKS(flags, m_itemExMask, m_parentExMask)
+
+    // Need to skip first?
+    if ( property && (property->GetFlags() & m_itemExMask) )
+    {
+        if ( dir == 1 )
+            Next();
+        else
+            Prev();
+    }
+}
+
+void wxPropertyGridIteratorBase::Init( wxPropertyGridPageState* state, int flags, int startPos, int dir  )
+{
+    wxPGProperty* property;
+
+    if ( startPos == wxTOP )
+    {
+        property = NULL;
+        if ( dir == 0 )
+            dir = 1;
+    }
+    else if ( startPos == wxBOTTOM )
+    {
+        property = state->GetLastItem(flags);
+        if ( dir == 0 )
+            dir = -1;
+    }
+    else
+    {
+        wxASSERT_MSG( false, wxT("Only supported stating positions are wxTOP and wxBOTTOM") );
+        property = NULL;
+    }
+
+    Init( state, flags, property, dir );
+}
+
+void wxPropertyGridIteratorBase::Assign( const wxPropertyGridIteratorBase& it )
+{
+    m_property = it.m_property;
+    m_state = it.m_state;
+    m_baseParent = it.m_baseParent;
+    m_itemExMask = it.m_itemExMask;
+    m_parentExMask = it.m_parentExMask;
+}
+
+void wxPropertyGridIteratorBase::Prev()
+{
+    wxPGProperty* property = m_property;
+    wxASSERT( property );
+
+    wxPGProperty* parent = property->GetParent();
+    wxASSERT( parent );
+    unsigned int index = property->GetIndexInParent();
+
+    if ( index > 0 )
+    {
+        // Previous sibling
+        index--;
+
+        property = parent->Item(index);
+
+        // Go to last children?
+        if ( property->GetChildCount() &&
+             wxPG_ITERATOR_PARENTEXMASK_TEST(property, m_parentExMask) )
+        {
+            // First child
+            property = property->Last();
+        }
+    }
+    else
+    {
+        // Up to a parent
+        if ( parent == m_baseParent )
+        {
+            m_property = NULL;
+            return;
+        }
+        else
+        {
+            property = parent;
+        }
+    }
+
+    m_property = property;
+
+    // If property does not match our criteria, skip it
+    if ( property->GetFlags() & m_itemExMask )
+        Prev();
+}
+
+void wxPropertyGridIteratorBase::Next( bool iterateChildren )
+{
+    wxPGProperty* property = m_property;
+    wxASSERT( property );
+
+    if ( property->GetChildCount() &&
+         wxPG_ITERATOR_PARENTEXMASK_TEST(property, m_parentExMask) &&
+         iterateChildren )
+    {
+        // First child
+        property = property->Item(0);
+    }
+    else
+    {
+        wxPGProperty* parent = property->GetParent();
+        wxASSERT( parent );
+        unsigned int index = property->GetIndexInParent() + 1;
+
+        if ( index < parent->GetChildCount() )
+        {
+            // Next sibling
+            property = parent->Item(index);
+        }
+        else
+        {
+            // Next sibling of parent
+            if ( parent == m_baseParent )
+            {
+                m_property = NULL;
+            }
+            else
+            {
+                m_property = parent;
+                Next(false);
+            }
+            return;
+        }
+    }
+
+    m_property = property;
+
+    // If property does not match our criteria, skip it
+    if ( property->GetFlags() & m_itemExMask )
+        Next();
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState
+// -----------------------------------------------------------------------
+
+wxPropertyGridPageState::wxPropertyGridPageState()
+{
+    m_pPropGrid = (wxPropertyGrid*) NULL;
+    m_regularArray.SetParentState(this);
+    m_properties = &m_regularArray;
+    m_abcArray = (wxPGRootProperty*) NULL;
+    m_currentCategory = (wxPropertyCategory*) NULL;
+    m_selected = (wxPGProperty*) NULL;
+    m_width = 0;
+    m_virtualHeight = 0;
+    m_lastCaptionBottomnest = 1;
+    m_itemsAdded = 0;
+    m_anyModified = 0;
+    m_vhCalcPending = 0;
+    m_colWidths.push_back( wxPG_DEFAULT_SPLITTERX );
+    m_colWidths.push_back( wxPG_DEFAULT_SPLITTERX );
+    m_fSplitterX = wxPG_DEFAULT_SPLITTERX;
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridPageState::~wxPropertyGridPageState()
+{
+    delete m_abcArray;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::InitNonCatMode()
+{
+    if ( !m_abcArray )
+    {
+        m_abcArray = new wxPGRootProperty();
+        m_abcArray->SetParentState(this);
+        m_abcArray->SetFlag(wxPG_PROP_CHILDREN_ARE_COPIES);
+    }
+
+    // Must be called when state::m_properties still points to regularArray.
+    wxPGProperty* oldProperties = m_properties;
+
+    // Must use temp value in state::m_properties for item iteration loop
+    // to run as expected.
+    m_properties = &m_regularArray;
+
+    if ( m_properties->GetChildCount() )
+    {
+        // Copy items.
+        wxPropertyGridIterator it( this, wxPG_ITERATE_DEFAULT|wxPG_ITERATE_CATEGORIES );
+
+        for ( ; !it.AtEnd(); it.Next() )
+        {
+            wxPGProperty* p = it.GetProperty();
+            wxPGProperty* parent = p->GetParent();
+            if ( p->HasFlag(wxPG_PROP_MISC_PARENT) &&
+                ( parent == m_properties || (parent->IsCategory() || parent->IsRoot()) ) )
+            {
+                m_abcArray->AddChild2( p );
+                p->m_parent = &m_regularArray;
+            }
+        }
+    }
+
+    m_properties = oldProperties;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::DoClear()
+{
+    m_regularArray.Empty();
+    if ( m_abcArray )
+        m_abcArray->Empty();
+
+    m_dictName.clear();
+
+    m_currentCategory = (wxPropertyCategory*) NULL;
+    m_lastCaptionBottomnest = 1;
+    m_itemsAdded = 0;
+
+    m_virtualHeight = 0;
+    m_vhCalcPending = 0;
+
+    m_selected = (wxPGProperty*) NULL;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::CalculateFontAndBitmapStuff( int WXUNUSED(vspacing) )
+{
+    wxPropertyGrid* propGrid = GetGrid();
+
+    VirtualHeightChanged();
+
+    // Recalculate caption text extents.
+    unsigned int i;
+
+    for ( i=0;i<m_regularArray.GetChildCount();i++ )
+    {
+        wxPGProperty* p =m_regularArray.Item(i);
+
+        if ( p->IsCategory() )
+            ((wxPropertyCategory*)p)->CalculateTextExtent(propGrid, propGrid->GetCaptionFont());
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::SetVirtualWidth( int width )
+{
+    wxASSERT( width >= 0 );
+    wxPropertyGrid* pg = GetGrid();
+    int gw = pg->GetClientSize().x;
+    if ( width < gw )
+        width = gw;
+
+    m_width = width;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::OnClientWidthChange( int newWidth, int widthChange, bool fromOnResize )
+{
+    wxPropertyGrid* pg = GetGrid();
+
+    if ( pg->HasVirtualWidth() )
+    {
+        if ( m_width < newWidth )
+            SetVirtualWidth( newWidth );
+
+        CheckColumnWidths(widthChange);
+    }
+    else
+    {
+        SetVirtualWidth( newWidth );
+
+        // This should be done before splitter auto centering
+        // NOTE: Splitter auto-centering is done in this function.
+        if ( !fromOnResize )
+            widthChange = 0;
+        CheckColumnWidths(widthChange);
+
+        if ( !(GetGrid()->GetInternalFlags() & wxPG_FL_SPLITTER_PRE_SET) &&
+             (GetGrid()->GetInternalFlags() & wxPG_FL_DONT_CENTER_SPLITTER) )
+        {
+            long timeSinceCreation = (::wxGetLocalTimeMillis() - GetGrid()->m_timeCreated).ToLong();
+
+            // If too long, don't set splitter
+            if ( timeSinceCreation < 3000 )
+            {
+                if ( m_properties->GetChildCount() || timeSinceCreation > 750 )
+                {
+                    SetSplitterLeft( false );
+                }
+                else
+                {
+                    DoSetSplitterPosition( newWidth / 2 );
+                    GetGrid()->ClearInternalFlag(wxPG_FL_SPLITTER_PRE_SET);
+                }
+            }
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState item iteration methods
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridPageState::GetLastItem( int flags )
+{
+    if ( !m_properties->GetChildCount() )
+        return (wxPGProperty*) NULL;
+
+    wxPG_ITERATOR_CREATE_MASKS(flags, int itemExMask, int parentExMask)
+
+    // First, get last child of last parent
+    wxPGProperty* pwc = (wxPGProperty*)m_properties->Last();
+    while ( pwc->GetChildCount() &&
+            wxPG_ITERATOR_PARENTEXMASK_TEST(pwc, parentExMask) )
+        pwc = (wxPGProperty*) pwc->Last();
+
+    // Then, if it doesn't fit our criteria, back up until we find something that does
+    if ( pwc->GetFlags() & itemExMask )
+    {
+        wxPropertyGridIterator it( this, flags, pwc );
+        for ( ; !it.AtEnd(); it.Prev() );
+        pwc = (wxPGProperty*) it.GetProperty();
+    }
+
+    return pwc;
+}
+
+wxPropertyCategory* wxPropertyGridPageState::GetPropertyCategory( const wxPGProperty* p ) const
+{
+    const wxPGProperty* parent = (const wxPGProperty*)p;
+    const wxPGProperty* grandparent = (const wxPGProperty*)parent->GetParent();
+    do
+    {
+        parent = grandparent;
+        grandparent = (wxPGProperty*)parent->GetParent();
+        if ( parent->IsCategory() && grandparent )
+            return (wxPropertyCategory*)parent;
+    } while ( grandparent );
+
+    return (wxPropertyCategory*) NULL;
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState GetPropertyXXX methods
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridPageState::GetPropertyByLabel( const wxString& label,
+                                                           wxPGProperty* parent ) const
+{
+
+    size_t i;
+
+    if ( !parent ) parent = (wxPGProperty*) &m_regularArray;
+
+    for ( i=0; i<parent->GetChildCount(); i++ )
+    {
+        wxPGProperty* p = parent->Item(i);
+        if ( p->m_label == label )
+            return p;
+        // Check children recursively.
+        if ( p->GetChildCount() )
+        {
+            p = GetPropertyByLabel(label,(wxPGProperty*)p);
+            if ( p )
+                return p;
+        }
+    }
+
+    return NULL;
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridPageState::BaseGetPropertyByName( const wxString& name ) const
+{
+    wxPGHashMapS2P::const_iterator it;
+    it = m_dictName.find(name);
+    if ( it != m_dictName.end() )
+        return (wxPGProperty*) it->second;
+    return (wxPGProperty*) NULL;
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState global operations
+// -----------------------------------------------------------------------
+
+// -----------------------------------------------------------------------
+// Item iteration macros
+//   NB: Nowadays only needed for alphabetic/categoric mode switching.
+// -----------------------------------------------------------------------
+
+#define II_INVALID_I    0x00FFFFFF
+
+#define ITEM_ITERATION_VARIABLES \
+    wxPGProperty* parent; \
+    unsigned int i; \
+    unsigned int iMax;
+
+#define ITEM_ITERATION_INIT_FROM_THE_TOP \
+    parent = m_properties; \
+    i = 0;
+
+#define ITEM_ITERATION_INIT(startparent, startindex, state) \
+    parent = startparent; \
+    i = (unsigned int)startindex; \
+    if ( parent == (wxPGProperty*) NULL ) \
+    { \
+        parent = state->m_properties; \
+        i = 0; \
+    }
+
+#define ITEM_ITERATION_LOOP_BEGIN \
+    do \
+    { \
+        iMax = parent->GetChildCount(); \
+        while ( i < iMax ) \
+        {  \
+            wxPGProperty* p = parent->Item(i);
+
+#define ITEM_ITERATION_LOOP_END \
+            if ( p->GetChildCount() ) \
+            { \
+                i = 0; \
+                parent = (wxPGProperty*)p; \
+                iMax = parent->GetChildCount(); \
+            } \
+            else \
+                i++; \
+        } \
+        i = parent->m_arrIndex + 1; \
+        parent = parent->m_parent; \
+    } \
+    while ( parent != NULL );
+
+bool wxPropertyGridPageState::EnableCategories( bool enable )
+{
+    //
+    // NB: We can't use wxPropertyGridIterator in this
+    //     function, since it depends on m_arrIndexes,
+    //     which, among other things, is being fixed here.
+    //
+    ITEM_ITERATION_VARIABLES
+
+    if ( enable )
+    {
+        //
+        // Enable categories
+        //
+
+        if ( !IsInNonCatMode() )
+            return false;
+
+        m_properties = &m_regularArray;
+
+        // fix parents, indexes, and depths
+        ITEM_ITERATION_INIT_FROM_THE_TOP
+
+        ITEM_ITERATION_LOOP_BEGIN
+
+            p->m_arrIndex = i;
+
+            p->m_parent = parent;
+
+            // If parent was category, and this is not,
+            // then the depth stays the same.
+            if ( parent->IsCategory() &&
+                 !p->IsCategory() )
+                p->m_depth = parent->m_depth;
+            else
+                p->m_depth = parent->m_depth + 1;
+
+        ITEM_ITERATION_LOOP_END
+
+    }
+    else
+    {
+        //
+        // Disable categories
+        //
+
+        if ( IsInNonCatMode() )
+            return false;
+
+        // Create array, if necessary.
+        if ( !m_abcArray )
+            InitNonCatMode();
+
+        m_properties = m_abcArray;
+
+        // fix parents, indexes, and depths
+        ITEM_ITERATION_INIT_FROM_THE_TOP
+
+        ITEM_ITERATION_LOOP_BEGIN
+
+            p->m_arrIndex = i;
+
+            p->m_parent = parent;
+
+            p->m_depth = parent->m_depth + 1;
+
+        ITEM_ITERATION_LOOP_END
+    }
+
+    VirtualHeightChanged();
+
+    if ( m_pPropGrid->GetState() == this )
+        m_pPropGrid->RecalculateVirtualSize();
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+static int wxPG_SortFunc(void **p1, void **p2)
+{
+    wxPGProperty *pp1 = *((wxPGProperty**)p1);
+    wxPGProperty *pp2 = *((wxPGProperty**)p2);
+    return pp1->GetLabel().compare( pp2->GetLabel() );
+}
+
+void wxPropertyGridPageState::SortChildren( wxPGProperty* p )
+{
+    if ( !p )
+        p = (wxPGProperty*)m_properties;
+
+    if ( !p->GetChildCount() )
+        return;
+
+    wxPGProperty* pwc = (wxPGProperty*)p;
+
+    // Can only sort items with children
+    if ( pwc->GetChildCount() < 1 )
+        return;
+
+    pwc->m_children.Sort( wxPG_SortFunc );
+
+    // Fix indexes
+    pwc->FixIndexesOfChildren();
+
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::Sort()
+{
+    SortChildren( m_properties );
+
+    // Sort categories as well
+    if ( !IsInNonCatMode() )
+    {
+        size_t i;
+        for ( i=0;i<m_properties->GetChildCount();i++)
+        {
+            wxPGProperty* p = m_properties->Item(i);
+            if ( p->IsCategory() )
+                SortChildren( p );
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState splitter, column and hittest functions
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridPageState::DoGetItemAtY( int y ) const
+{
+    // Outside?
+    if ( y < 0 )
+        return (wxPGProperty*) NULL;
+
+    unsigned int a = 0;
+    return m_properties->GetItemAtY(y, GetGrid()->m_lineHeight, &a);
+}
+
+// -----------------------------------------------------------------------
+
+wxPropertyGridHitTestResult wxPropertyGridPageState::HitTest( const wxPoint&pt ) const
+{
+    wxPropertyGridHitTestResult result;
+    result.column = HitTestH( pt.x, &result.splitter, &result.splitterHitOffset );
+    result.property = DoGetItemAtY( pt.y );
+    return result;
+}
+
+// -----------------------------------------------------------------------
+
+// Used by SetSplitterLeft() and DotFitColumns()
+int wxPropertyGridPageState::GetColumnFitWidth(wxClientDC& dc,
+                                           wxPGProperty* pwc,
+                                           unsigned int col,
+                                           bool subProps) const
+{
+    wxPropertyGrid* pg = m_pPropGrid;
+    size_t i;
+    int maxW = 0;
+    int w, h;
+
+    for ( i=0; i<pwc->GetChildCount(); i++ )
+    {
+        wxPGProperty* p = pwc->Item(i);
+        if ( !p->IsCategory() )
+        {
+            dc.GetTextExtent( p->GetColumnText(col), &w, &h );
+            if ( col == 0 )
+                w += ( ((int)p->m_depth-1) * pg->m_subgroup_extramargin );
+
+            //
+            // TODO: Add bitmap support.
+
+            w += (wxPG_XBEFORETEXT*2);
+
+            if ( w > maxW )
+                maxW = w;
+        }
+
+        if ( p->GetChildCount() &&
+             ( subProps || p->IsCategory() ) )
+        {
+            w = GetColumnFitWidth( dc, p, col, subProps );
+
+            if ( w > maxW )
+                maxW = w;
+        }
+    }
+
+    return maxW;
+}
+
+int wxPropertyGridPageState::DoGetSplitterPosition( int splitterColumn ) const
+{
+    int n = GetGrid()->m_marginWidth;
+    int i;
+    for ( i=0; i<=splitterColumn; i++ )
+        n += m_colWidths[i];
+    return n;
+}
+
+int wxPropertyGridPageState::GetColumnMinWidth( int WXUNUSED(column) ) const
+{
+    return wxPG_DRAG_MARGIN;
+}
+
+void wxPropertyGridPageState::PropagateColSizeDec( int column, int decrease, int dir )
+{
+    int origWidth = m_colWidths[column];
+    m_colWidths[column] -= decrease;
+    int min = GetColumnMinWidth(column);
+    int more = 0;
+    if ( m_colWidths[column] < min )
+    {
+        more = decrease - (origWidth - min);
+        m_colWidths[column] = min;
+    }
+
+    //
+    // FIXME: Causes erratic splitter changing, so as a workaround
+    //        disabled if two or less columns.
+
+    if ( m_colWidths.size() <= 2 )
+        return;
+
+    column += dir;
+    if ( more && column < (int)m_colWidths.size() && column >= 0 )
+        PropagateColSizeDec( column, more, dir );
+}
+
+void wxPropertyGridPageState::DoSetSplitterPosition( int newXPos, int splitterColumn, bool WXUNUSED(allPages), bool fromAutoCenter )
+{
+    wxPropertyGrid* pg = GetGrid();
+
+    int adjust = newXPos - DoGetSplitterPosition(splitterColumn);
+
+    if ( !pg->HasVirtualWidth() )
+    {
+        // No virtual width
+        int otherColumn;
+        if ( adjust > 0 )
+        {
+            otherColumn = splitterColumn + 1;
+            if ( otherColumn == (int)m_colWidths.size() )
+                otherColumn = 0;
+            m_colWidths[splitterColumn] += adjust;
+            PropagateColSizeDec( otherColumn, adjust, 1 );
+        }
+        else
+        {
+            otherColumn = splitterColumn + 1;
+            if ( otherColumn == (int)m_colWidths.size() )
+                otherColumn = 0;
+            m_colWidths[otherColumn] -= adjust;
+            PropagateColSizeDec( splitterColumn, -adjust, -1 );
+        }
+    }
+    else
+    {
+        m_colWidths[splitterColumn] += adjust;
+    }
+
+    if ( splitterColumn == 0 )
+        m_fSplitterX = (double) newXPos;
+
+    if ( !fromAutoCenter )
+    {
+        // Don't allow initial splitter auto-positioning after this.
+        if ( pg->GetState() == this )
+            pg->SetInternalFlag(wxPG_FL_SPLITTER_PRE_SET);
+
+        CheckColumnWidths();
+    }
+}
+
+// Moves splitter so that all labels are visible, but just.
+void wxPropertyGridPageState::SetSplitterLeft( bool subProps )
+{
+    wxPropertyGrid* pg = GetGrid();
+    wxClientDC dc(pg);
+    dc.SetFont(pg->m_font);
+
+    int maxW = GetColumnFitWidth(dc, m_properties, 0, subProps);
+
+    if ( maxW > 0 )
+    {
+        maxW += pg->m_marginWidth;
+        DoSetSplitterPosition( maxW );
+    }
+
+    pg->SetInternalFlag(wxPG_FL_DONT_CENTER_SPLITTER);
+}
+
+wxSize wxPropertyGridPageState::DoFitColumns( bool WXUNUSED(allowGridResize) )
+{
+    wxPropertyGrid* pg = GetGrid();
+    wxClientDC dc(pg);
+    dc.SetFont(pg->m_font);
+
+    int marginWidth = pg->m_marginWidth;
+    int accWid = marginWidth;
+    int maxColWidth = 500;
+
+    for ( unsigned int col=0; col < GetColumnCount(); col++ )
+    {
+        int fitWid = GetColumnFitWidth(dc, m_properties, col, true);
+        int colMinWidth = GetColumnMinWidth(col);
+        if ( fitWid < colMinWidth )
+            fitWid = colMinWidth;
+        else if ( fitWid > maxColWidth )
+            fitWid = maxColWidth;
+
+        m_colWidths[col] = fitWid;
+
+        accWid += fitWid;
+    }
+
+    // Expand last one to fill the width
+    int remaining = m_width - accWid;
+    m_colWidths[GetColumnCount()-1] += remaining;
+
+    pg->SetInternalFlag(wxPG_FL_DONT_CENTER_SPLITTER);
+
+    int firstSplitterX = marginWidth + m_colWidths[0];
+    m_fSplitterX = (double) firstSplitterX;
+
+    // Don't allow initial splitter auto-positioning after this.
+    if ( pg->GetState() == this )
+    {
+        pg->SetSplitterPosition(firstSplitterX, false);
+        pg->Refresh();
+    }
+
+    int x, y;
+    pg->GetVirtualSize(&x, &y);
+
+    return wxSize(accWid, y);
+}
+
+void wxPropertyGridPageState::CheckColumnWidths( int widthChange )
+{
+    if ( m_width == 0 )
+        return;
+
+    wxPropertyGrid* pg = GetGrid();
+
+#ifdef __WXDEBUG__
+    const bool debug = false;
+#endif
+
+    unsigned int i;
+    unsigned int lastColumn = m_colWidths.size() - 1;
+    int width = m_width;
+    int clientWidth = pg->GetClientSize().x;
+
+    //
+    // Column to reduce, if needed. Take last one that exceeds minimum width.
+    // Except if auto splitter centering is used, in which case use widest.
+    int reduceCol = -1;
+    int highestColWidth = 0;
+
+    bool minimizedCols = false;
+
+#ifdef __WXDEBUG__
+    if ( debug )
+        wxLogDebug(wxT("ColumnWidthCheck (virtualWidth: %i, clientWidth: %i)"), width, clientWidth);
+#endif
+
+    //
+    // Check min sizes
+    for ( i=0; i<m_colWidths.size(); i++ )
+    {
+        int min = GetColumnMinWidth(i);
+        if ( m_colWidths[i] <= min )
+        {
+            m_colWidths[i] = min;
+            minimizedCols = true;
+        }
+        else
+        {
+            if ( pg->HasFlag(wxPG_SPLITTER_AUTO_CENTER) )
+            {
+                if ( m_colWidths[i] >= highestColWidth )
+                {
+                    highestColWidth = m_colWidths[i];
+                    reduceCol = i;
+                }
+            }
+            else
+            {
+                reduceCol = i;
+            }
+        }
+    }
+
+    int colsWidth = pg->m_marginWidth;
+    for ( i=0; i<m_colWidths.size(); i++ )
+        colsWidth += m_colWidths[i];
+
+#ifdef __WXDEBUG__
+    if ( debug )
+        wxLogDebug(wxT("  HasVirtualWidth: %i  colsWidth: %i"),(int)pg->HasVirtualWidth(),colsWidth);
+#endif
+
+    // Then mode-based requirement
+    if ( !pg->HasVirtualWidth() )
+    {
+        int widthHigher = width - colsWidth;
+
+        // Adapt colsWidth to width
+        if ( colsWidth < width )
+        {
+            // Increase column
+        #ifdef __WXDEBUG__
+        if ( debug )
+            wxLogDebug(wxT("  Adjust last column to %i"), m_colWidths[lastColumn] + widthHigher);
+        #endif
+            m_colWidths[lastColumn] = m_colWidths[lastColumn] + widthHigher;
+        }
+        else if ( colsWidth > width )
+        {
+            // Reduce column
+            if ( reduceCol != -1 )
+            {
+            #ifdef __WXDEBUG__
+                if ( debug )
+                    wxLogDebug(wxT("  Reduce column %i (by %i)"), reduceCol, -widthHigher);
+            #endif
+                // Reduce widest column, and recheck
+                m_colWidths[reduceCol] = m_colWidths[reduceCol] + widthHigher;
+                CheckColumnWidths();
+            }
+        }
+    }
+    else
+    {
+        // Only check colsWidth against clientWidth
+        if ( colsWidth < clientWidth )
+        {
+            m_colWidths[lastColumn] = m_colWidths[lastColumn] + (clientWidth-colsWidth);
+        }
+
+        m_width = colsWidth;
+
+        // If width changed, recalculate virtual size
+        if ( pg->GetState() == this )
+            pg->RecalculateVirtualSize();
+    }
+
+#ifdef __WXDEBUG__
+    if ( debug )
+        for ( i=0; i<m_colWidths.size(); i++ )
+            wxLogDebug(wxT("col%i: %i"),i,m_colWidths[i]);
+#endif
+
+    // Auto center splitter
+    if ( !(pg->GetInternalFlags() & wxPG_FL_DONT_CENTER_SPLITTER) &&
+         m_colWidths.size() == 2 )
+    {
+        float centerX = (float)(pg->m_width/2);
+        float splitterX;
+
+        if ( m_fSplitterX < 0.0 )
+        {
+            splitterX = centerX;
+        }
+        else if ( widthChange )
+        {
+            //float centerX = float(pg->GetSize().x) * 0.5;
+
+            // Recenter?
+            splitterX = m_fSplitterX + (float(widthChange) * 0.5);
+            float deviation = fabs(centerX - splitterX);
+
+            // If deviating from center, adjust towards it
+            if ( deviation > 20.0 )
+            {
+                if ( splitterX > centerX)
+                    splitterX -= 2;
+                else
+                    splitterX += 2;
+            }
+        }
+        else
+        {
+            // No width change, just keep sure we keep splitter position intact
+            splitterX = m_fSplitterX;
+            float deviation = fabs(centerX - splitterX);
+            if ( deviation > 50.0 )
+            {
+                splitterX = centerX;
+            }
+        }
+
+        DoSetSplitterPosition((int)splitterX, 0, false, true);
+
+        m_fSplitterX = splitterX; // needed to retain accuracy
+    }
+}
+
+void wxPropertyGridPageState::SetColumnCount( int colCount )
+{
+    wxASSERT( colCount >= 2 );
+    m_colWidths.SetCount( colCount, wxPG_DRAG_MARGIN );
+    if ( m_colWidths.size() > (unsigned int)colCount )
+        m_colWidths.RemoveAt( m_colWidths.size(), m_colWidths.size() - colCount );
+
+    if ( m_pPropGrid->GetState() == this )
+        m_pPropGrid->RecalculateVirtualSize();
+    else
+        CheckColumnWidths();
+}
+
+// Returns column index, -1 for margin
+int wxPropertyGridPageState::HitTestH( int x, int* pSplitterHit, int* pSplitterHitOffset ) const
+{
+    int cx = GetGrid()->m_marginWidth;
+    int col = -1;
+    int prevSplitter = -1;
+
+    while ( x > cx )
+    {
+        col++;
+        if ( col >= (int)m_colWidths.size() )
+        {
+            *pSplitterHit = -1;
+            return col;
+        }
+        prevSplitter = cx;
+        cx += m_colWidths[col];
+    }
+
+    // Near prev. splitter
+    if ( col >= 1 )
+    {
+        int diff = x - prevSplitter;
+        if ( abs(diff) < wxPG_SPLITTERX_DETECTMARGIN1 )
+        {
+            *pSplitterHit = col - 1;
+            *pSplitterHitOffset = diff;
+            return col;
+        }
+    }
+
+    // Near next splitter
+    int nextSplitter = cx;
+    if ( col < (int)(m_colWidths.size()-1) )
+    {
+        int diff = x - nextSplitter;
+        if ( abs(diff) < wxPG_SPLITTERX_DETECTMARGIN1 )
+        {
+            *pSplitterHit = col;
+            *pSplitterHitOffset = diff;
+            return col;
+        }
+    }
+
+    *pSplitterHit = -1;
+    return col;
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState property value setting and getting
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPageState::DoSetPropertyValueString( wxPGProperty* p, const wxString& value )
+{
+    if ( p )
+    {
+        int flags = wxPG_REPORT_ERROR|wxPG_FULL_VALUE;
+
+        wxVariant variant = p->GetValueRef();
+        bool res;
+
+        if ( p->GetMaxLength() <= 0 )
+            res = p->StringToValue( variant, value, flags );
+        else
+            res = p->StringToValue( variant, value.Mid(0,p->GetMaxLength()), flags );
+
+        if ( res )
+        {
+            p->SetValue(variant);
+            if ( m_selected==p && this==m_pPropGrid->GetState() )
+                p->UpdateControl(m_pPropGrid->GetEditorControl());
+        }
+
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPageState::DoSetPropertyValue( wxPGProperty* p, wxVariant& value )
+{
+    if ( p )
+    {
+        p->SetValue(value);
+        if ( m_selected==p && this==m_pPropGrid->GetState() )
+            p->UpdateControl(m_pPropGrid->GetEditorControl());
+
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPageState::DoSetPropertyValueWxObjectPtr( wxPGProperty* p, wxObject* value )
+{
+    if ( p )
+    {
+        // wnd_primary has to be given so the control can be updated as well.
+        wxVariant v(value);
+        DoSetPropertyValue(p, v);
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::DoSetPropertyValueUnspecified( wxPGProperty* p )
+{
+    wxCHECK_RET( p, wxT("invalid property id") );
+
+    if ( !p->IsValueUnspecified() )
+    {
+        // Value should be set first - editor class methods may need it
+        p->m_value.MakeNull();
+
+        wxASSERT( m_pPropGrid );
+
+        if ( m_pPropGrid->GetState() == this )
+        {
+            if ( m_pPropGrid->m_selected == p && m_pPropGrid->m_wndEditor )
+            {
+                p->GetEditorClass()->SetValueToUnspecified(p, m_pPropGrid->GetEditorControl());
+            }
+        }
+
+        unsigned int i;
+        for ( i = 0; i < p->GetChildCount(); i++ )
+            DoSetPropertyValueUnspecified( p->Item(i) );
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState property operations
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPageState::DoCollapse( wxPGProperty* p )
+{
+    wxCHECK_MSG( p, false, wxT("invalid property id") );
+
+    if ( !p->GetChildCount() ) return false;
+
+    if ( !p->IsExpanded() ) return false;
+
+    p->SetExpanded(false);
+
+    VirtualHeightChanged();
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPageState::DoExpand( wxPGProperty* p )
+{
+    wxCHECK_MSG( p, false, wxT("invalid property id") );
+
+    if ( !p->GetChildCount() ) return false;
+
+    if ( p->IsExpanded() ) return false;
+
+    p->SetExpanded(true);
+
+    VirtualHeightChanged();
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPageState::DoSelectProperty( wxPGProperty* p, unsigned int flags )
+{
+    if ( this == m_pPropGrid->GetState() )
+        return m_pPropGrid->DoSelectProperty( p, flags );
+
+    m_selected = p;
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPageState::DoHideProperty( wxPGProperty* p, bool hide, int flags )
+{
+    if ( !hide )
+        p->ClearFlag( wxPG_PROP_HIDDEN );
+    else
+        p->SetFlag( wxPG_PROP_HIDDEN );
+
+    if ( flags & wxPG_RECURSE )
+    {
+        unsigned int i;
+        for ( i = 0; i < p->GetChildCount(); i++ )
+            DoHideProperty(p->Item(i), hide, flags | wxPG_RECURSE_STARTS);
+    }
+
+    VirtualHeightChanged();
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+
+bool wxPropertyGridPageState::DoEnableProperty( wxPGProperty* p, bool enable )
+{
+    if ( p )
+    {
+        if ( enable )
+        {
+            if ( !(p->m_flags & wxPG_PROP_DISABLED) )
+                return false;
+
+            // Enabling
+
+            p->m_flags &= ~(wxPG_PROP_DISABLED);
+        }
+        else
+        {
+            if ( p->m_flags & wxPG_PROP_DISABLED )
+                return false;
+
+            // Disabling
+
+            p->m_flags |= wxPG_PROP_DISABLED;
+
+        }
+
+        // Apply same to sub-properties as well
+        unsigned int i;
+        for ( i = 0; i < p->GetChildCount(); i++ )
+            DoEnableProperty( p->Item(i), enable );
+
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState wxVariant related routines
+// -----------------------------------------------------------------------
+
+// Returns list of wxVariant objects (non-categories and non-sub-properties only).
+// Never includes sub-properties (unless they are parented by wxParentProperty).
+wxVariant wxPropertyGridPageState::DoGetPropertyValues( const wxString& listname,
+                                                    wxPGProperty* baseparent,
+                                                    long flags ) const
+{
+    wxPGProperty* pwc = (wxPGProperty*) baseparent;
+
+    // Root is the default base-parent.
+    if ( !pwc )
+        pwc = m_properties;
+
+    wxVariantList tempList;
+    wxVariant v( tempList, listname );
+
+    if ( pwc->GetChildCount() )
+    {
+        if ( flags & wxPG_KEEP_STRUCTURE )
+        {
+            wxASSERT( !pwc->HasFlag(wxPG_PROP_AGGREGATE) );
+
+            size_t i;
+            for ( i=0; i<pwc->GetChildCount(); i++ )
+            {
+                wxPGProperty* p = pwc->Item(i);
+                if ( !p->GetChildCount() || p->HasFlag(wxPG_PROP_AGGREGATE) )
+                {
+                    wxVariant variant = p->GetValue();
+                    variant.SetName( p->GetBaseName() );
+                    v.Append( variant );
+                }
+                else
+                {
+                    v.Append( DoGetPropertyValues(p->m_name,p,flags|wxPG_KEEP_STRUCTURE) );
+                }
+                if ( (flags & wxPG_INC_ATTRIBUTES) && p->m_attributes.GetCount() )
+                    v.Append( p->GetAttributesAsList() );
+            }
+        }
+        else
+        {
+            wxPropertyGridConstIterator it( this, wxPG_ITERATE_DEFAULT, pwc->Item(0) );
+            it.SetBaseParent( pwc );
+
+            for ( ; !it.AtEnd(); it.Next() )
+            {
+                const wxPGProperty* p = it.GetProperty();
+
+                // Use a trick to ignore wxParentProperty itself, but not its sub-properties.
+                if ( !p->GetChildCount() || p->HasFlag(wxPG_PROP_AGGREGATE) )
+                {
+                    wxVariant variant = p->GetValue();
+                    variant.SetName( p->GetName() );
+                    v.Append( variant );
+                    if ( (flags & wxPG_INC_ATTRIBUTES) && p->m_attributes.GetCount() )
+                        v.Append( p->GetAttributesAsList() );
+                }
+            }
+        }
+    }
+
+    return v;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::DoSetPropertyValues( const wxVariantList& list, wxPGProperty* defaultCategory )
+{
+    unsigned char origFrozen = 1;
+
+    if ( m_pPropGrid->GetState() == this )
+    {
+        origFrozen = m_pPropGrid->m_frozen;
+        if ( !origFrozen ) m_pPropGrid->Freeze();
+    }
+
+    wxPropertyCategory* use_category = (wxPropertyCategory*)defaultCategory;
+
+    if ( !use_category )
+        use_category = (wxPropertyCategory*)m_properties;
+
+    // Let's iterate over the list of variants.
+    wxVariantList::const_iterator node;
+    int numSpecialEntries = 0;
+
+    //
+    // Second pass for special entries
+    for ( node = list.begin(); node != list.end(); node++ )
+    {
+        wxVariant *current = (wxVariant*)*node;
+
+        // Make sure it is wxVariant.
+        wxASSERT( current );
+        wxASSERT( wxStrcmp(current->GetClassInfo()->GetClassName(),wxT("wxVariant")) == 0 );
+
+        const wxString& name = current->GetName();
+        if ( name.length() > 0 )
+        {
+            //
+            // '@' signified a special entry
+            if ( name[0] == wxS('@') )
+            {
+                numSpecialEntries++;
+            }
+            else
+            {
+                wxPGProperty* foundProp = BaseGetPropertyByName(name);
+                if ( foundProp )
+                {
+                    wxPGProperty* p = foundProp;
+
+                    // If it was a list, we still have to go through it.
+                    if ( wxStrcmp(current->GetType(), wxS("list")) == 0 )
+                    {
+                        DoSetPropertyValues( current->GetList(),
+                                p->IsCategory()?p:((wxPGProperty*)NULL)
+                            );
+                    }
+                    else
+                    {
+                #ifdef __WXDEBUG__
+                        if ( wxStrcmp(current->GetType(), p->GetValue().GetType()) != 0)
+                        {
+                            wxLogDebug(wxT("wxPropertyGridPageState::DoSetPropertyValues Warning: Setting value of property \"%s\" from variant"),
+                                p->GetName().c_str());
+                        }
+                #endif
+
+                        p->SetValue(*current);
+                    }
+                }
+                else
+                {
+                    // Is it list?
+                    if ( current->GetType() != wxS("list") )
+                    {
+                        // Not.
+                    }
+                    else
+                    {
+                        // Yes, it is; create a sub category and append contents there.
+                        wxPGProperty* newCat = DoInsert(use_category,-1,new wxPropertyCategory(current->GetName(),wxPG_LABEL));
+                        DoSetPropertyValues( current->GetList(), newCat );
+                    }
+                }
+            }
+        }
+    }
+
+    if ( numSpecialEntries )
+    {
+        for ( node = list.begin(); node != list.end(); node++ )
+        {
+            wxVariant *current = (wxVariant*)*node;
+
+            const wxString& name = current->GetName();
+            if ( name.length() > 0 )
+            {
+                //
+                // '@' signified a special entry
+                if ( name[0] == wxS('@') )
+                {
+                    numSpecialEntries--;
+
+                    size_t pos2 = name.rfind(wxS('@'));
+                    if ( pos2 > 0 && pos2 < (name.size()-1) )
+                    {
+                        wxString propName = name.substr(1, pos2-1);
+                        wxString entryType = name.substr(pos2+1, wxString::npos);
+
+                        if ( entryType == wxS("attr") )
+                        {
+                            //
+                            // List of attributes
+                            wxPGProperty* foundProp = BaseGetPropertyByName(propName);
+                            if ( foundProp )
+                            {
+                                wxASSERT( wxPGIsVariantType(*current, list) );
+
+                                wxVariantList& list2 = current->GetList();
+                                wxVariantList::const_iterator node2;
+
+                                for ( node2 = list2.begin(); node2 != list2.end(); node2++ )
+                                {
+                                    wxVariant *attr = (wxVariant*)*node2;
+                                    foundProp->SetAttribute( attr->GetName(), *attr );
+                                }
+                            }
+                            else
+                            {
+                                // ERROR: No such property: 'propName'
+                            }
+                        }
+                    }
+                    else
+                    {
+                        // ERROR: Special entry requires name of format @<propname>@<entrytype>
+                    }
+                }
+            }
+
+            if ( !numSpecialEntries )
+                break;
+        }
+    }
+
+    if ( !origFrozen )
+    {
+        m_pPropGrid->Thaw();
+
+        if ( this == m_pPropGrid->GetState() )
+        {
+            m_selected->UpdateControl(m_pPropGrid->GetEditorControl());
+        }
+    }
+
+}
+
+// -----------------------------------------------------------------------
+// wxPropertyGridPageState property adding and removal
+// -----------------------------------------------------------------------
+
+int wxPropertyGridPageState::PrepareToAddItem( wxPGProperty* property,
+                                           wxPGProperty* scheduledParent )
+{
+    wxPropertyGrid* propGrid = m_pPropGrid;
+
+    // This will allow better behavior.
+    if ( scheduledParent == m_properties )
+        scheduledParent = (wxPGProperty*) NULL;
+
+    property->m_parentState = this;
+
+    if ( property->IsCategory() )
+    {
+
+        // Parent of a category must be either root or another category
+        // (otherwise Bad Things might happen).
+        wxASSERT_MSG( scheduledParent == NULL ||
+                      scheduledParent == m_properties ||
+                      scheduledParent->IsCategory(),
+                 wxT("Parent of a category must be either root or another category."));
+
+        // If we already have category with same name, delete given property
+        // and use it instead as most recent caption item.
+        wxPGProperty* found_id = BaseGetPropertyByName( property->GetBaseName() );
+        if ( found_id )
+        {
+            wxPropertyCategory* pwc = (wxPropertyCategory*) found_id;
+            if ( pwc->IsCategory() ) // Must be a category.
+            {
+                delete property;
+                m_currentCategory = pwc;
+                return 2; // Tells the caller what we did.
+            }
+        }
+    }
+
+#ifdef __WXDEBUG__
+    // Warn for identical names in debug mode.
+    if ( BaseGetPropertyByName(property->GetName()) &&
+         (!scheduledParent || scheduledParent->IsCategory()) )
+    {
+        wxLogError(wxT("wxPropertyGrid: Warning - item with name \"%s\" already exists."),
+            property->GetName().c_str());
+        wxPGGlobalVars->m_warnings++;
+    }
+#endif
+
+    // Make sure nothing is selected.
+    if ( propGrid && propGrid->m_selected )
+    {
+        bool selRes = propGrid->ClearSelection();
+        wxPG_CHECK_MSG_DBG( selRes,
+                            -1,
+                            wxT("failed to deselect a property (editor probably had invalid value)") );
+    }
+
+    if ( scheduledParent )
+    {
+        // Use parent's colours.
+        property->m_bgColIndex = scheduledParent->m_bgColIndex;
+        property->m_fgColIndex = scheduledParent->m_fgColIndex;
+
+        // Fix no parent does not yet have parenting flag yet, set one now
+        if ( !scheduledParent->HasFlag(wxPG_PROP_PARENTAL_FLAGS) )
+            scheduledParent->SetParentalType(wxPG_PROP_MISC_PARENT);
+            //scheduledParent->SetFlag(wxPG_PROP_MISC_PARENT);
+    }
+
+    // If in hideable adding mode, or if assigned parent is hideable, then
+    // make this one hideable.
+    if (
+         ( scheduledParent && (scheduledParent->m_flags & wxPG_PROP_HIDDEN) ) ||
+         ( propGrid && (propGrid->m_iFlags & wxPG_FL_ADDING_HIDEABLES) )
+       )
+        property->SetFlag( wxPG_PROP_HIDDEN );
+
+    // Set custom image flag.
+    int custImgHeight = property->OnMeasureImage().y;
+    if ( custImgHeight < 0 /*|| custImgHeight > 1*/ )
+    {
+        property->m_flags |= wxPG_PROP_CUSTOMIMAGE;
+    }
+
+    if ( propGrid && (propGrid->GetWindowStyleFlag() & wxPG_LIMITED_EDITING) )
+        property->m_flags |= wxPG_PROP_NOEDITOR;
+
+    if ( !property->IsCategory() )
+    {
+        // This is not a category.
+
+        //wxASSERT_MSG( property->GetEditorClass(), wxT("Editor class not initialized!") );
+
+        // Depth.
+        //
+        unsigned char depth = 1;
+        if ( scheduledParent )
+        {
+            depth = scheduledParent->m_depth;
+            if ( !scheduledParent->IsCategory() )
+                depth++;
+        }
+        property->m_depth = depth;
+        unsigned char greyDepth = depth;
+
+        if ( scheduledParent )
+        {
+            wxPropertyCategory* pc;
+
+            if ( scheduledParent->IsCategory() || scheduledParent->IsRoot() )
+                pc = (wxPropertyCategory*)scheduledParent;
+            else
+                // This conditional compile is necessary to
+                // bypass some compiler bug.
+                pc = GetPropertyCategory(scheduledParent);
+
+            if ( pc )
+                greyDepth = pc->GetDepth();
+            else
+                greyDepth = scheduledParent->m_depthBgCol;
+        }
+
+        property->m_depthBgCol = greyDepth;
+
+        // Prepare children pre-added children
+        if ( property->GetChildCount() )
+        {
+            property->SetParentalType(wxPG_PROP_AGGREGATE);
+
+            property->SetExpanded(false); // Properties with children are not expanded by default.
+            if ( propGrid && propGrid->GetWindowStyleFlag() & wxPG_HIDE_MARGIN )
+                property->SetExpanded(true); // ...unless it cannot be expanded.
+
+            property->PrepareSubProperties();
+
+            return -1;
+        }
+
+        if ( propGrid && (propGrid->GetExtraStyle() & wxPG_EX_AUTO_UNSPECIFIED_VALUES) )
+            property->SetFlagRecursively(wxPG_PROP_AUTO_UNSPECIFIED, true);
+
+        return 0;
+    }
+    else
+    {
+        // This is a category.
+
+        // depth
+        unsigned char depth = 1;
+        if ( scheduledParent )
+        {
+            depth = scheduledParent->m_depth + 1;
+        }
+        property->m_depth = depth;
+        property->m_depthBgCol = depth;
+
+        m_currentCategory = (wxPropertyCategory*)property;
+
+        wxPropertyCategory* pc = (wxPropertyCategory*)property;
+
+        // Calculate text extent for caption item.
+        if ( propGrid )
+            pc->CalculateTextExtent(propGrid, propGrid->GetCaptionFont());
+
+        return 1;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridPageState::DoAppend( wxPGProperty* property )
+{
+    wxPropertyCategory* cur_cat = m_currentCategory;
+    if ( property->IsCategory() )
+        cur_cat = (wxPropertyCategory*) NULL;
+
+    return DoInsert( cur_cat, -1, property );
+}
+
+// -----------------------------------------------------------------------
+
+wxPGProperty* wxPropertyGridPageState::DoInsert( wxPGProperty* parent, int index, wxPGProperty* property )
+{
+    if ( !parent )
+        parent = m_properties;
+
+    wxCHECK_MSG( !parent->HasFlag(wxPG_PROP_AGGREGATE),
+                 wxNullProperty,
+                 wxT("when adding properties to fixed parents, use BeginAddChildren and EndAddChildren.") );
+
+    int parenting = PrepareToAddItem( property, (wxPropertyCategory*)parent );
+
+    // This type of invalid parenting value indicates we should exit now, returning
+    // id of most recent category.
+    if ( parenting > 1 )
+        return m_currentCategory;
+
+    // Note that item must be added into current mode later.
+
+    // If parent is wxParentProperty, just stick it in...
+    // If parent is root (m_properties), then...
+    //   In categoric mode: Add as last item in m_abcArray (if not category).
+    //                      Add to given index in m_regularArray.
+    //   In non-cat mode:   Add as last item in m_regularArray.
+    //                      Add to given index in m_abcArray.
+    // If parent is category, then...
+    //   1) Add to given category in given index.
+    //   2) Add as last item in m_abcArray.
+
+    if ( !parent->IsCategory() && !parent->IsRoot() )
+    {
+        // Parent is wxParentingProperty: Just stick it in...
+        parent->AddChild2( property, index );
+    }
+    else
+    {
+        // Parent is Category or Root.
+
+        if ( m_properties == &m_regularArray )
+        {
+            // Categorized mode
+
+            // Only add non-categories to m_abcArray.
+            if ( m_abcArray && parenting <= 0 )
+                m_abcArray->AddChild2( property, -1, false );
+
+            // Add to current mode.
+            parent->AddChild2( property, index );
+
+        }
+        else
+        {
+            // Non-categorized mode.
+
+            if ( parent != m_properties )
+                // Parent is category.
+                parent->AddChild2( property, index, false );
+            else
+                // Parent is root.
+                m_regularArray.AddChild2( property, -1, false );
+
+            // Add to current mode (no categories).
+            if ( parenting <= 0 )
+                m_abcArray->AddChild2( property, index );
+        }
+    }
+
+    // category stuff
+    if ( property->IsCategory() )
+    {
+        // This is a category caption item.
+
+        // Last caption is not the bottom one (this info required by append)
+        m_lastCaptionBottomnest = 0;
+    }
+
+    // Only add name to hashmap if parent is root or category
+    if ( (parent->IsCategory() || parent->IsRoot()) && property->m_name.length() )
+        m_dictName[property->m_name] = (void*) property;
+
+    VirtualHeightChanged();
+
+    property->UpdateParentValues();
+
+    m_itemsAdded = 1;
+
+    return property;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGridPageState::DoDelete( wxPGProperty* item )
+{
+    wxCHECK_RET( item->GetParent(),
+        wxT("this property was already deleted") );
+
+    wxCHECK_RET( item != &m_regularArray && item != m_abcArray,
+        wxT("wxPropertyGrid: Do not attempt to remove the root item.") );
+
+    size_t i;
+    unsigned int indinparent = item->GetIndexInParent();
+
+    wxPGProperty* pwc = (wxPGProperty*)item;
+
+    wxCHECK_RET( !item->GetParent()->HasFlag(wxPG_PROP_AGGREGATE),
+        wxT("wxPropertyGrid: Do not attempt to remove sub-properties.") );
+
+    if ( item->IsCategory() )
+    {
+        // deleting a category
+
+        // erase category entries from the hash table
+        for ( i=0; i<pwc->GetChildCount(); i++ )
+        {
+            wxPGProperty* sp = pwc->Item( i );
+            if ( sp->GetBaseName().Len() ) m_dictName.erase(sp->GetBaseName());
+        }
+
+        if ( pwc == m_currentCategory )
+            m_currentCategory = (wxPropertyCategory*) NULL;
+
+        if ( m_abcArray )
+        {
+            // Remove children from non-categorized array.
+            for ( i=0; i<pwc->GetChildCount(); i++ )
+            {
+                wxPGProperty * p = pwc->Item( i );
+                wxASSERT( p != NULL );
+                if ( !p->IsCategory() )
+                    m_abcArray->m_children.Remove( p );
+            }
+
+            if ( IsInNonCatMode() )
+                m_abcArray->FixIndexesOfChildren();
+        }
+    }
+
+    if ( !IsInNonCatMode() )
+    {
+        // categorized mode - non-categorized array
+
+        // Remove from non-cat array, but only if parent is in it
+        if ( !item->IsCategory() && item->GetParent()->IsCategory() )
+        {
+            if ( m_abcArray )
+            {
+                m_abcArray->m_children.Remove( item );
+            }
+        }
+
+        // categorized mode - categorized array
+        item->m_parent->m_children.RemoveAt(indinparent);
+        item->m_parent->FixIndexesOfChildren(/*indinparent*/);
+    }
+    else
+    {
+        // non-categorized mode - categorized array
+
+        // We need to find location of item.
+        wxPGProperty* cat_parent = &m_regularArray;
+        int cat_index = m_regularArray.GetChildCount();
+        size_t i;
+        for ( i = 0; i < m_regularArray.GetChildCount(); i++ )
+        {
+            wxPGProperty* p = m_regularArray.Item(i);
+            if ( p == item ) { cat_index = i; break; }
+            if ( p->IsCategory() )
+            {
+                int subind = ((wxPGProperty*)p)->Index(item);
+                if ( subind != wxNOT_FOUND )
+                {
+                    cat_parent = ((wxPGProperty*)p);
+                    cat_index = subind;
+                    break;
+                }
+            }
+        }
+        cat_parent->m_children.RemoveAt(cat_index);
+
+        // non-categorized mode - non-categorized array
+        if ( !item->IsCategory() )
+        {
+            wxASSERT( item->m_parent == m_abcArray );
+            item->m_parent->m_children.RemoveAt(indinparent);
+            item->m_parent->FixIndexesOfChildren(indinparent);
+        }
+    }
+
+    if ( item->GetBaseName().Len() ) m_dictName.erase(item->GetBaseName());
+
+    // We can actually delete it now
+    delete item;
+
+    m_itemsAdded = 1; // Not a logical assignment (but required nonetheless).
+
+    VirtualHeightChanged();
+}
+
+// -----------------------------------------------------------------------
diff --git a/src/propgrid/props.cpp b/src/propgrid/props.cpp
new file mode 100644 (file)
index 0000000..e01c940
--- /dev/null
@@ -0,0 +1,2602 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/propgrid/props.cpp
+// Purpose:     Basic Property Classes
+// Author:      Jaakko Salli
+// Modified by:
+// Created:     2005-05-14
+// RCS-ID:      $Id:
+// Copyright:   (c) Jaakko Salli
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include "wx/defs.h"
+    #include "wx/object.h"
+    #include "wx/hash.h"
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/event.h"
+    #include "wx/window.h"
+    #include "wx/panel.h"
+    #include "wx/dc.h"
+    #include "wx/dcclient.h"
+    #include "wx/dcmemory.h"
+    #include "wx/button.h"
+    #include "wx/pen.h"
+    #include "wx/brush.h"
+    #include "wx/cursor.h"
+    #include "wx/dialog.h"
+    #include "wx/settings.h"
+    #include "wx/msgdlg.h"
+    #include "wx/choice.h"
+    #include "wx/stattext.h"
+    #include "wx/scrolwin.h"
+    #include "wx/dirdlg.h"
+    #include "wx/combobox.h"
+    #include "wx/layout.h"
+    #include "wx/sizer.h"
+    #include "wx/textdlg.h"
+    #include "wx/filedlg.h"
+    #include "wx/statusbr.h"
+    #include "wx/intl.h"
+#endif
+
+#include <wx/filename.h>
+
+#include <wx/propgrid/propgrid.h>
+
+#define wxPG_CUSTOM_IMAGE_WIDTH     20 // for wxColourProperty etc.
+
+
+// -----------------------------------------------------------------------
+// wxStringProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxStringProperty,wxPGProperty,
+                               wxString,const wxString&,TextCtrl)
+
+wxStringProperty::wxStringProperty( const wxString& label,
+                                    const wxString& name,
+                                    const wxString& value )
+    : wxPGProperty(label,name)
+{
+    SetValue(value);
+}
+
+void wxStringProperty::OnSetValue()
+{
+    if ( !m_value.IsNull() && m_value.GetString() == wxS("<composed>") )
+        SetFlag(wxPG_PROP_COMPOSED_VALUE);
+
+    if ( HasFlag(wxPG_PROP_COMPOSED_VALUE) )
+    {
+        wxString s;
+        GenerateComposedValue(s, 0);
+        m_value = s;
+    }
+}
+
+wxStringProperty::~wxStringProperty() { }
+
+wxString wxStringProperty::GetValueAsString( int argFlags ) const
+{
+    wxString s = m_value.GetString();
+
+    if ( GetChildCount() && HasFlag(wxPG_PROP_COMPOSED_VALUE) )
+    {
+        // Value stored in m_value is non-editable, non-full value
+        if ( (argFlags & wxPG_FULL_VALUE) || (argFlags & wxPG_EDITABLE_VALUE) )
+            GenerateComposedValue(s, argFlags);
+
+        return s;
+    }
+
+    // If string is password and value is for visual purposes,
+    // then return asterisks instead the actual string.
+    if ( (m_flags & wxPG_PROP_PASSWORD) && !(argFlags & (wxPG_FULL_VALUE|wxPG_EDITABLE_VALUE)) )
+        return wxString(wxChar('*'), s.Length());
+
+    return s;
+}
+
+bool wxStringProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const
+{
+    if ( GetChildCount() && HasFlag(wxPG_PROP_COMPOSED_VALUE) )
+        return wxPGProperty::StringToValue(variant, text, argFlags);
+
+    if ( m_value.GetString() != text )
+    {
+        variant = text;
+        return true;
+    }
+
+    return false;
+}
+
+bool wxStringProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+    if ( name == wxPG_STRING_PASSWORD )
+    {
+        m_flags &= ~(wxPG_PROP_PASSWORD);
+        if ( wxPGVariantToInt(value) ) m_flags |= wxPG_PROP_PASSWORD;
+        RecreateEditor();
+        return false;
+    }
+    return true;
+}
+
+// -----------------------------------------------------------------------
+// wxIntProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxIntProperty,wxPGProperty,
+                               long,long,TextCtrl)
+
+wxIntProperty::wxIntProperty( const wxString& label, const wxString& name,
+    long value ) : wxPGProperty(label,name)
+{
+    SetValue(value);
+}
+
+wxIntProperty::wxIntProperty( const wxString& label, const wxString& name,
+    const wxLongLong& value ) : wxPGProperty(label,name)
+{
+    SetValue(wxLongLongToVariant(value));
+}
+
+wxIntProperty::~wxIntProperty() { }
+
+wxString wxIntProperty::GetValueAsString( int ) const
+{
+    if ( wxPGIsVariantType(m_value, long) )
+        return wxString::Format(wxS("%li"),m_value.GetLong());
+
+       wxLongLong* ll = &wxLongLongFromVariant(m_value);
+       if ( ll )
+               return ll->ToString();
+
+       return wxEmptyString;
+}
+
+bool wxIntProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const
+{
+    wxString s;
+    long value32;
+
+    if ( text.length() == 0 )
+    {
+        variant.MakeNull();
+        return true;
+    }
+
+    // We know it is a number, but let's still check
+    // the return value.
+    if ( text.IsNumber() )
+    {
+        // Remove leading zeroes, so that the number is not interpreted as octal
+        wxString::const_iterator i = text.begin();
+        wxString::const_iterator iMax = text.end() - 1;  // Let's allow one, last zero though
+
+        int firstNonZeroPos = 0;
+
+        for ( ; i != iMax; i++ )
+        {
+            wxChar c = *i;
+            if ( c != wxS('0') && c != wxS(' ') )
+                break;
+            firstNonZeroPos++;
+        }
+
+        wxString useText = text.substr(firstNonZeroPos, text.length() - firstNonZeroPos);
+
+        bool isPrevLong = wxPGIsVariantType(variant, long);
+
+        wxLongLong_t value64 = 0;
+
+        if ( useText.ToLongLong(&value64, 10) &&
+             ( value64 >= INT_MAX || value64 <= INT_MIN )
+           )
+        {
+            wxLongLong* _m_value64 = &wxLongLongFromVariant(m_value);
+            if ( isPrevLong || !_m_value64 || _m_value64->GetValue() != value64 )
+            {
+                variant = wxLongLongToVariant(value64);
+                return true;
+            }
+        }
+
+        if ( useText.ToLong( &value32, 0 ) )
+        {
+            if ( !isPrevLong || m_value.GetLong() != value32 )
+            {
+                variant = value32;
+                return true;
+            }
+        }
+    }
+    else if ( argFlags & wxPG_REPORT_ERROR )
+    {
+    }
+    return false;
+}
+
+bool wxIntProperty::IntToValue( wxVariant& variant, int value, int WXUNUSED(argFlags) ) const
+{
+    if ( !wxPGIsVariantType(variant, long) || variant.GetLong() != value )
+    {
+        variant = (long)value;
+        return true;
+    }
+    return false;
+}
+
+bool wxIntProperty::DoValidation( const wxPGProperty* property, wxLongLong_t& value, wxPGValidationInfo* pValidationInfo, int mode )
+{
+    // Check for min/max
+    wxLongLong_t min = wxINT64_MIN;
+    wxLongLong_t max = wxINT64_MAX;
+    wxVariant variant;
+    bool minOk = false;
+    bool maxOk = false;
+
+    variant = property->GetAttribute(wxPGGlobalVars->m_strMin);
+    if ( !variant.IsNull() )
+    {
+        wxPGVariantToLongLong(variant, &min);
+        minOk = true;
+    }
+
+    variant = property->GetAttribute(wxPGGlobalVars->m_strMax);
+    if ( !variant.IsNull() )
+    {
+        wxPGVariantToLongLong(variant, &max);
+        maxOk = true;
+    }
+
+    if ( minOk )
+    {
+        if ( value < min )
+        {
+            if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE )
+                pValidationInfo->m_failureMessage = wxString::Format(_("Value must be %lld or higher"),min);
+            else if ( mode == wxPG_PROPERTY_VALIDATION_SATURATE )
+                value = min;
+            else
+                value = max - (min - value);
+            return false;
+        }
+    }
+
+    if ( maxOk )
+    {
+        if ( value > max )
+        {
+            if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE )
+                pValidationInfo->m_failureMessage = wxString::Format(_("Value must be %lld or higher"),min);
+            else if ( mode == wxPG_PROPERTY_VALIDATION_SATURATE )
+                value = max;
+            else
+                value = min + (value - max);
+            return false;
+        }
+    }
+    return true;
+}
+
+bool wxIntProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const
+{
+    wxLongLong_t ll;
+    if ( wxPGVariantToLongLong(value, &ll) )
+        return DoValidation(this, ll, &validationInfo, wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
+    return true;
+}
+
+wxValidator* wxIntProperty::GetClassValidator()
+{
+#if wxUSE_VALIDATORS
+    WX_PG_DOGETVALIDATOR_ENTRY()
+
+    // Atleast wxPython 2.6.2.1 required that the string argument is given
+    static wxString v;
+    wxTextValidator* validator = new wxTextValidator(wxFILTER_NUMERIC,&v);
+
+    WX_PG_DOGETVALIDATOR_EXIT(validator)
+#else
+    return NULL;
+#endif
+}
+
+wxValidator* wxIntProperty::DoGetValidator() const
+{
+    return GetClassValidator();
+}
+
+// -----------------------------------------------------------------------
+// wxUIntProperty
+// -----------------------------------------------------------------------
+
+
+#define wxPG_UINT_TEMPLATE_MAX 8
+
+static const wxChar* gs_uintTemplates32[wxPG_UINT_TEMPLATE_MAX] = {
+    wxT("%x"),wxT("0x%x"),wxT("$%x"),
+    wxT("%X"),wxT("0x%X"),wxT("$%X"),
+    wxT("%u"),wxT("%o")
+};
+
+static const wxChar* gs_uintTemplates64[wxPG_UINT_TEMPLATE_MAX] = {
+    wxT("%") wxLongLongFmtSpec wxT("x"),
+    wxT("0x%") wxLongLongFmtSpec wxT("x"),
+    wxT("$%") wxLongLongFmtSpec wxT("x"),
+    wxT("%") wxLongLongFmtSpec wxT("X"),
+    wxT("0x%") wxLongLongFmtSpec wxT("X"),
+    wxT("$%") wxLongLongFmtSpec wxT("X"),
+    wxT("%") wxLongLongFmtSpec wxT("u"),
+    wxT("%") wxLongLongFmtSpec wxT("o")
+};
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxUIntProperty,wxPGProperty,
+                               long,unsigned long,TextCtrl)
+
+void wxUIntProperty::Init()
+{
+    m_base = 6; // This is magic number for dec base (must be same as in setattribute)
+    m_realBase = 10;
+    m_prefix = wxPG_PREFIX_NONE;
+}
+
+wxUIntProperty::wxUIntProperty( const wxString& label, const wxString& name,
+    unsigned long value ) : wxPGProperty(label,name)
+{
+    Init();
+    SetValue((long)value);
+}
+
+wxUIntProperty::wxUIntProperty( const wxString& label, const wxString& name,
+    const wxULongLong& value ) : wxPGProperty(label,name)
+{
+    Init();
+    SetValue(wxULongLongToVariant(value));
+}
+
+wxUIntProperty::~wxUIntProperty() { }
+
+wxString wxUIntProperty::GetValueAsString( int ) const
+{
+    size_t index = m_base + m_prefix;
+    if ( index >= wxPG_UINT_TEMPLATE_MAX )
+        index = wxPG_BASE_DEC;
+
+    if ( wxPGIsVariantType(m_value, long) )
+        return wxString::Format(gs_uintTemplates32[index],(unsigned long)m_value.GetLong());
+    else
+        return wxString::Format(gs_uintTemplates64[index],wxULongLongFromVariant(m_value).GetValue());
+}
+
+bool wxUIntProperty::StringToValue( wxVariant& variant, const wxString& text, int WXUNUSED(argFlags) ) const
+{
+    //long unsigned value32 = 0;
+    bool isPrevLong = wxPGIsVariantType(variant, long);
+
+    if ( text.length() == 0 )
+    {
+        variant.MakeNull();
+        return true;
+    }
+
+    size_t start = 0;
+    if ( text[0] == wxS('$') )
+        start++;
+
+    wxULongLong_t value64 = 0;
+    wxString s = text.substr(start, text.length() - start);
+
+    if ( s.ToULongLong(&value64, (unsigned int)m_realBase) )
+    {
+        if ( value64 >= LONG_MAX )
+        {
+            wxULongLong* _m_value64 = &wxULongLongFromVariant(m_value);
+            if ( isPrevLong || !_m_value64 || _m_value64->GetValue() != value64 )
+            {
+                variant = wxULongLongToVariant(value64);
+                return true;
+            }
+        }
+        else
+        {
+            unsigned long value32 = wxLongLong(value64).GetLo();
+            if ( !isPrevLong || m_value.GetLong() != (long)value32 )
+            {
+                variant = (long)value32;
+                return true;
+            }
+        }
+
+    }
+    return false;
+}
+
+bool wxUIntProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argFlags) ) const
+{
+    if ( m_value != (long)number )
+    {
+        variant = (long)number;
+        return true;
+    }
+    return false;
+}
+
+#ifdef ULLONG_MAX
+  #define wxUINT64_MAX ULLONG_MAX
+  #define wxUINT64_MIN wxULL(0)
+#else
+  #define wxUINT64_MAX wxULL(0xFFFFFFFFFFFFFFFF)
+  #define wxUINT64_MIN wxULL(0)
+#endif
+
+bool wxUIntProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const
+{
+    // Check for min/max
+    wxULongLong_t ll;
+    if ( wxPGVariantToULongLong(value, &ll) )
+    {
+        wxULongLong_t min = wxUINT64_MIN;
+        wxULongLong_t max = wxUINT64_MAX;
+        wxVariant variant;
+
+        variant = GetAttribute(wxPGGlobalVars->m_strMin);
+        if ( !variant.IsNull() )
+        {
+            wxPGVariantToULongLong(variant, &min);
+            if ( ll < min )
+            {
+                validationInfo.m_failureMessage = wxString::Format(_("Value must be %llu or higher"),min);
+                return false;
+            }
+        }
+        variant = GetAttribute(wxPGGlobalVars->m_strMax);
+        if ( !variant.IsNull() )
+        {
+            wxPGVariantToULongLong(variant, &max);
+            if ( ll > max )
+            {
+                validationInfo.m_failureMessage = wxString::Format(_("Value must be %llu or less"),max);
+                return false;
+            }
+        }
+    }
+    return true;
+}
+
+bool wxUIntProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+    if ( name == wxPG_UINT_BASE )
+    {
+        int val = value.GetLong();
+
+        m_realBase = (wxByte) val;
+        if ( m_realBase > 16 )
+            m_realBase = 16;
+
+        //
+        // Translate logical base to a template array index
+        m_base = 7; // oct
+        if ( val == wxPG_BASE_HEX )
+            m_base = 3;
+        else if ( val == wxPG_BASE_DEC )
+            m_base = 6;
+        else if ( val == wxPG_BASE_HEXL )
+            m_base = 0;
+        return true;
+    }
+    else if ( name == wxPG_UINT_PREFIX )
+    {
+        m_prefix = (wxByte) value.GetLong();
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxFloatProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFloatProperty,wxPGProperty,
+                               double,double,TextCtrl)
+
+wxFloatProperty::wxFloatProperty( const wxString& label,
+                                            const wxString& name,
+                                            double value )
+    : wxPGProperty(label,name)
+{
+    m_precision = -1;
+    SetValue(value);
+}
+
+wxFloatProperty::~wxFloatProperty() { }
+
+// This helper method provides standard way for floating point-using
+// properties to convert values to string.
+void wxPropertyGrid::DoubleToString(wxString& target,
+                                    double value,
+                                    int precision,
+                                    bool removeZeroes,
+                                    wxString* precTemplate)
+{
+    if ( precision >= 0 )
+    {
+        wxString text1;
+        if (!precTemplate)
+            precTemplate = &text1;
+
+        if ( !precTemplate->length() )
+        {
+            *precTemplate = wxS("%.");
+            *precTemplate << wxString::Format( wxS("%i"), precision );
+            *precTemplate << wxS('f');
+        }
+
+        target.Printf( precTemplate->c_str(), value );
+    }
+    else
+    {
+        target.Printf( wxS("%f"), value );
+    }
+
+    if ( removeZeroes && precision != 0 && target.length() )
+    {
+        // Remove excess zeroes (do not remove this code just yet,
+        // since sprintf can't do the same consistently across platforms).
+        wxString::const_iterator i = target.end() - 1;
+        size_t new_len = target.length() - 1;
+
+        for ( ; i != target.begin(); i-- )
+        {
+            if ( *i != wxS('0') )
+                break;
+            new_len--;
+        }
+
+        wxChar cur_char = *i;
+        if ( cur_char != wxS('.') && cur_char != wxS(',') )
+            new_len++;
+
+        if ( new_len != target.length() )
+            target.resize(new_len);
+    }
+}
+
+wxString wxFloatProperty::GetValueAsString( int argFlags ) const
+{
+    wxString text;
+    if ( !m_value.IsNull() )
+    {
+        wxPropertyGrid::DoubleToString(text,
+                                       m_value,
+                                       m_precision,
+                                       !(argFlags & wxPG_FULL_VALUE),
+                                       (wxString*) NULL);
+    }
+    return text;
+}
+
+bool wxFloatProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const
+{
+    wxString s;
+    double value;
+
+    if ( text.length() == 0 )
+    {
+        variant.MakeNull();
+        return true;
+    }
+
+    bool res = text.ToDouble(&value);
+    if ( res )
+    {
+        if ( m_value != value )
+        {
+            variant = value;
+            return true;
+        }
+    }
+    else if ( argFlags & wxPG_REPORT_ERROR )
+    {
+    }
+    return false;
+}
+
+bool wxFloatProperty::DoValidation( const wxPGProperty* property, double& value, wxPGValidationInfo* pValidationInfo, int mode )
+{
+    // Check for min/max
+    double min = (double)wxINT64_MIN;
+    double max = (double)wxINT64_MAX;
+    wxVariant variant;
+    bool minOk = false;
+    bool maxOk = false;
+
+    variant = property->GetAttribute(wxPGGlobalVars->m_strMin);
+    if ( !variant.IsNull() )
+    {
+        wxPGVariantToDouble(variant, &min);
+        minOk = true;
+    }
+
+    variant = property->GetAttribute(wxPGGlobalVars->m_strMax);
+    if ( !variant.IsNull() )
+    {
+        wxPGVariantToDouble(variant, &max);
+        maxOk = true;
+    }
+
+    if ( minOk )
+    {
+        if ( value < min )
+        {
+            if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE )
+                pValidationInfo->m_failureMessage = wxString::Format(_("Value must be %f or higher"),min);
+            else if ( mode == wxPG_PROPERTY_VALIDATION_SATURATE )
+                value = min;
+            else
+                value = max - (min - value);
+            return false;
+        }
+    }
+
+    if ( maxOk )
+    {
+        wxPGVariantToDouble(variant, &max);
+        if ( value > max )
+        {
+            if ( mode == wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE )
+                pValidationInfo->m_failureMessage = wxString::Format(_("Value must be %f or less"),max);
+            else if ( mode == wxPG_PROPERTY_VALIDATION_SATURATE )
+                value = max;
+            else
+                value = min + (value - max);
+            return false;
+        }
+    }
+    return true;
+}
+
+bool wxFloatProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& validationInfo ) const
+{
+    double fpv;
+    if ( wxPGVariantToDouble(value, &fpv) )
+        return DoValidation(this, fpv, &validationInfo, wxPG_PROPERTY_VALIDATION_ERROR_MESSAGE);
+    return true;
+}
+
+bool wxFloatProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+    if ( name == wxPG_FLOAT_PRECISION )
+    {
+        m_precision = value.GetLong();
+        return true;
+    }
+    return false;
+}
+
+wxValidator* wxFloatProperty::DoGetValidator() const
+{
+    return wxIntProperty::GetClassValidator();
+}
+
+// -----------------------------------------------------------------------
+// wxBoolProperty
+// -----------------------------------------------------------------------
+
+// We cannot use standard WX_PG_IMPLEMENT_PROPERTY_CLASS macro, since
+// there is a custom GetEditorClass.
+
+IMPLEMENT_DYNAMIC_CLASS(wxBoolProperty, wxPGProperty)
+
+const wxPGEditor* wxBoolProperty::DoGetEditorClass() const
+{
+    // Select correct editor control.
+#if wxPG_INCLUDE_CHECKBOX
+    if ( !(m_flags & wxPG_PROP_USE_CHECKBOX) )
+        return wxPG_EDITOR(Choice);
+    return wxPG_EDITOR(CheckBox);
+#else
+    return wxPG_EDITOR(Choice);
+#endif
+}
+
+wxBoolProperty::wxBoolProperty( const wxString& label, const wxString& name, bool value ) :
+    wxPGProperty(label,name)
+{
+    SetValue(wxPGVariant_Bool(value));
+
+    m_flags |= wxPG_PROP_USE_DCC;
+}
+
+wxBoolProperty::~wxBoolProperty() { }
+
+wxString wxBoolProperty::GetValueAsString( int argFlags ) const
+{
+    bool value = m_value.GetBool();
+
+    // As a fragment of composite string value,
+    // make it a little more readable.
+    if ( argFlags & wxPG_COMPOSITE_FRAGMENT )
+    {
+        if ( value )
+        {
+            return m_label;
+        }
+        else
+        {
+            if ( argFlags & wxPG_UNEDITABLE_COMPOSITE_FRAGMENT )
+                return wxEmptyString;
+
+            const wxChar* notFmt;
+            if ( wxPGGlobalVars->m_autoGetTranslation )
+                notFmt = _("Not %s");
+            else
+                notFmt = wxT("Not %s");
+
+            return wxString::Format(notFmt,m_label.c_str());
+        }
+    }
+
+    if ( !(argFlags & wxPG_FULL_VALUE) )
+    {
+        return wxPGGlobalVars->m_boolChoices[value?1:0].GetText();
+    }
+
+    wxString text;
+
+    if (value) text = wxS("true");
+    else text = wxS("false");
+
+    return text;
+}
+
+int wxBoolProperty::GetChoiceInfo( wxPGChoiceInfo* choiceinfo )
+{
+    if ( IsValueUnspecified() )
+        return -1;
+
+    if ( choiceinfo )
+        choiceinfo->m_choices = &wxPGGlobalVars->m_boolChoices;
+    return m_value.GetBool()?1:0;
+}
+
+bool wxBoolProperty::StringToValue( wxVariant& variant, const wxString& text, int WXUNUSED(argFlags) ) const
+{
+    int value = 0;
+    if ( text.CmpNoCase(wxPGGlobalVars->m_boolChoices[1].GetText()) == 0 ||
+         text.CmpNoCase(wxS("true")) == 0 ||
+         text.CmpNoCase(m_label) == 0 )
+        value = 1;
+
+    if ( text.length() == 0 )
+    {
+        variant.MakeNull();
+        return true;
+    }
+
+    bool oldValue = m_value.GetBool();
+
+    if ( (oldValue && !value) || (!oldValue && value) )
+    {
+        variant = wxPGVariant_Bool(value);
+        return true;
+    }
+    return false;
+}
+
+bool wxBoolProperty::IntToValue( wxVariant& variant, int value, int ) const
+{
+    bool boolValue = value ? true : false;
+    bool oldValue = m_value.GetBool();
+
+    if ( oldValue != boolValue )
+    {
+        variant = wxPGVariant_Bool(boolValue);
+        return true;
+    }
+    return false;
+}
+
+bool wxBoolProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+#if wxPG_INCLUDE_CHECKBOX
+    if ( name == wxPG_BOOL_USE_CHECKBOX )
+    {
+        int ival = wxPGVariantToInt(value);
+        if ( ival )
+            m_flags |= wxPG_PROP_USE_CHECKBOX;
+        else
+            m_flags &= ~(wxPG_PROP_USE_CHECKBOX);
+        return true;
+    }
+#endif
+    if ( name == wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING )
+    {
+        int ival = wxPGVariantToInt(value);
+        if ( ival )
+            m_flags |= wxPG_PROP_USE_DCC;
+        else
+            m_flags &= ~(wxPG_PROP_USE_DCC);
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxBaseEnumProperty
+// -----------------------------------------------------------------------
+
+int wxBaseEnumProperty::ms_nextIndex = -2;
+
+wxBaseEnumProperty::wxBaseEnumProperty( const wxString& label, const wxString& name )
+    : wxPGProperty(label,name)
+{
+    m_value = wxPGVariant_Zero;
+}
+
+/** If has values array, then returns number at index with value -
+    otherwise just returns the value.
+*/
+int wxBaseEnumProperty::GetIndexForValue( int value ) const
+{
+    return value;
+}
+
+void wxBaseEnumProperty::OnSetValue()
+{
+    if ( wxPGIsVariantType(m_value, long) )
+        ValueFromInt_( m_value, m_value.GetLong(), wxPG_FULL_VALUE );
+    else if ( wxPGIsVariantType(m_value, string) )
+        ValueFromString_( m_value, m_value.GetString(), 0 );
+    else
+        wxASSERT( false );
+
+    if ( ms_nextIndex != -2 )
+    {
+        m_index = ms_nextIndex;
+        ms_nextIndex = -2;
+    }
+}
+
+bool wxBaseEnumProperty::ValidateValue( wxVariant& value, wxPGValidationInfo& WXUNUSED(validationInfo) ) const
+{
+    // Make sure string value is in the list,
+    // unless property has string as preferred value type
+    // To reduce code size, use conversion here as well
+    if ( wxPGIsVariantType(value, string) &&
+         !this->IsKindOf(CLASSINFO(wxEditEnumProperty)) )
+        return ValueFromString_( value, value.GetString(), wxPG_PROPERTY_SPECIFIC );
+
+    return true;
+}
+
+wxString wxBaseEnumProperty::GetValueAsString( int ) const
+{
+    if ( wxPGIsVariantType(m_value, string) )
+        return m_value.GetString();
+
+    if ( m_index >= 0 )
+    {
+        int unusedVal;
+        const wxString* pstr = GetEntry( m_index, &unusedVal );
+
+        if ( pstr )
+            return *pstr;
+    }
+    return wxEmptyString;
+}
+
+bool wxBaseEnumProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const
+{
+    return ValueFromString_( variant, text, argFlags );
+}
+
+bool wxBaseEnumProperty::IntToValue( wxVariant& variant, int intVal, int argFlags ) const
+{
+    return ValueFromInt_( variant, intVal, argFlags );
+}
+
+bool wxBaseEnumProperty::ValueFromString_( wxVariant& value, const wxString& text, int argFlags ) const
+{
+    size_t i = 0;
+    const wxString* entryLabel;
+    int entryValue;
+    int useIndex = -1;
+    long useValue = 0;
+
+    entryLabel = GetEntry(i, &entryValue);
+    while ( entryLabel )
+    {
+        if ( text.CmpNoCase(*entryLabel) == 0 )
+        {
+            useIndex = (int)i;
+            useValue = (long)entryValue;
+            break;
+        }
+
+        i++;
+        entryLabel = GetEntry(i, &entryValue);
+    }
+
+    bool asText = false;
+
+    bool isEdit = this->IsKindOf(CLASSINFO(wxEditEnumProperty));
+
+    // If text not any of the choices, store as text instead
+    // (but only if we are wxEditEnumProperty)
+    if ( useIndex == -1 &&
+         (!wxPGIsVariantType(m_value, string) || (m_value.GetString() != text)) &&
+         isEdit )
+    {
+        asText = true;
+    }
+
+    int setAsNextIndex = -2;
+
+    if ( asText )
+    {
+        setAsNextIndex = -1;
+        value = text;
+    }
+    else if ( m_index != useIndex )
+    {
+        if ( useIndex != -1 )
+        {
+            setAsNextIndex = useIndex;
+            value = (long)useValue;
+        }
+        else
+        {
+            setAsNextIndex = -1;
+            value = wxPGVariant_MinusOne;
+        }
+    }
+
+    if ( setAsNextIndex != -2 )
+    {
+        // If wxPG_PROPERTY_SPECIFIC is set, then this is done for
+        // validation purposes only, and index must not be changed
+        if ( !(argFlags & wxPG_PROPERTY_SPECIFIC) )
+            ms_nextIndex = setAsNextIndex;
+
+        if ( isEdit || setAsNextIndex != -1 )
+            return true;
+        else
+            return false;
+    }
+    return false;
+}
+
+bool wxBaseEnumProperty::ValueFromInt_( wxVariant& variant, int intVal, int argFlags ) const
+{
+    // If wxPG_FULL_VALUE is *not* in argFlags, then intVal is index from combo box.
+    //
+    ms_nextIndex = -2;
+
+    if ( argFlags & wxPG_FULL_VALUE )
+    {
+        ms_nextIndex = GetIndexForValue( intVal );
+    }
+    else
+    {
+        if ( m_index != intVal )
+        {
+            ms_nextIndex = intVal;
+        }
+    }
+
+    if ( ms_nextIndex != -2 )
+    {
+        if ( !(argFlags & wxPG_FULL_VALUE) )
+            GetEntry(intVal, &intVal);
+
+        variant = (long)intVal;
+
+        return true;
+    }
+
+    return false;
+}
+
+void wxBaseEnumProperty::SetIndex( int index )
+{
+    ms_nextIndex = -2;
+    m_index = index;
+}
+
+int wxBaseEnumProperty::GetIndex() const
+{
+    if ( ms_nextIndex != -2 )
+        return ms_nextIndex;
+    return m_index;
+}
+
+// -----------------------------------------------------------------------
+// wxEnumProperty
+// -----------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxEnumProperty, wxPGProperty)
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(wxEnumProperty,long,Choice)
+
+wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, const wxChar** labels,
+    const long* values, int value ) : wxBaseEnumProperty(label,name)
+{
+    SetIndex(0);
+
+    if ( labels )
+    {
+        m_choices.Add(labels,values);
+
+        if ( GetItemCount() )
+            SetValue( (long)value );
+    }
+}
+
+wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name, const wxChar** labels,
+    const long* values, wxPGChoices* choicesCache, int value )
+    : wxBaseEnumProperty(label,name)
+{
+    SetIndex(0);
+
+    wxASSERT( choicesCache );
+
+    if ( choicesCache->IsOk() )
+    {
+        m_choices.Assign( *choicesCache );
+        m_value = wxPGVariant_Zero;
+    }
+    else if ( labels )
+    {
+        m_choices.Add(labels,values);
+
+        if ( GetItemCount() )
+            SetValue( (long)value );
+    }
+}
+
+wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name,
+    const wxArrayString& labels, const wxArrayInt& values, int value ) : wxBaseEnumProperty(label,name)
+{
+    SetIndex(0);
+
+    if ( &labels && labels.size() )
+    {
+        m_choices.Set(labels, values);
+
+        if ( GetItemCount() )
+            SetValue( (long)value );
+    }
+}
+
+wxEnumProperty::wxEnumProperty( const wxString& label, const wxString& name,
+    wxPGChoices& choices, int value )
+    : wxBaseEnumProperty(label,name)
+{
+    m_choices.Assign( choices );
+
+    if ( GetItemCount() )
+        SetValue( (long)value );
+}
+
+int wxEnumProperty::GetIndexForValue( int value ) const
+{
+    if ( !m_choices.IsOk() )
+        return -1;
+
+    if ( m_choices.HasValues() )
+    {
+        int intVal = m_choices.Index(value);
+        if ( intVal >= 0 )
+            return intVal;
+    }
+
+    return value;
+}
+
+wxEnumProperty::~wxEnumProperty ()
+{
+}
+
+const wxString* wxEnumProperty::GetEntry( size_t index, int* pvalue ) const
+{
+    if ( m_choices.IsOk() && index < m_choices.GetCount() )
+    {
+        int value = (int)index;
+        if ( m_choices.HasValue(index) )
+            value = m_choices.GetValue(index);
+
+        if ( pvalue )
+            *pvalue = value;
+
+        return &m_choices.GetLabel(index);
+    }
+    return (const wxString*) NULL;
+}
+
+int wxEnumProperty::GetChoiceInfo( wxPGChoiceInfo* choiceinfo )
+{
+    if ( choiceinfo )
+        choiceinfo->m_choices = &m_choices;
+
+    if ( !m_choices.IsOk() )
+        return -1;
+
+    return GetIndex();
+}
+
+// -----------------------------------------------------------------------
+// wxEditEnumProperty
+// -----------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxEditEnumProperty, wxPGProperty)
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(wxEditEnumProperty,wxString,ComboBox)
+
+wxEditEnumProperty::wxEditEnumProperty( const wxString& label, const wxString& name, const wxChar** labels,
+    const long* values, const wxString& value )
+    : wxEnumProperty(label,name,labels,values,0)
+{
+    SetValue( value );
+}
+
+wxEditEnumProperty::wxEditEnumProperty( const wxString& label, const wxString& name, const wxChar** labels,
+    const long* values, wxPGChoices* choicesCache, const wxString& value )
+    : wxEnumProperty(label,name,labels,values,choicesCache,0)
+{
+    SetValue( value );
+}
+
+wxEditEnumProperty::wxEditEnumProperty( const wxString& label, const wxString& name,
+    const wxArrayString& labels, const wxArrayInt& values, const wxString& value )
+    : wxEnumProperty(label,name,labels,values,0)
+{
+    SetValue( value );
+}
+
+wxEditEnumProperty::wxEditEnumProperty( const wxString& label, const wxString& name,
+    wxPGChoices& choices, const wxString& value )
+    : wxEnumProperty(label,name,choices,0)
+{
+    SetValue( value );
+}
+
+wxEditEnumProperty::~wxEditEnumProperty()
+{
+}
+
+// -----------------------------------------------------------------------
+// wxFlagsProperty
+// -----------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxFlagsProperty,wxPGProperty)
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS_PLAIN(wxFlagsProperty,long,TextCtrl)
+
+void wxFlagsProperty::Init()
+{
+    SetFlag(wxPG_PROP_AGGREGATE);  // This is must be done here to support flag props
+                                   // with inital zero children.
+
+    long value = m_value;
+
+    //
+    // Generate children
+    //
+    unsigned int i;
+
+    unsigned int prevChildCount = m_children.GetCount();
+
+    int oldSel = -1;
+    if ( prevChildCount )
+    {
+        wxPropertyGridPageState* state = GetParentState();
+
+        // State safety check (it may be NULL in immediate parent)
+        wxASSERT( state );
+
+        if ( state )
+        {
+            wxPGProperty* selected = state->GetSelection();
+            if ( selected )
+            {
+                if ( selected->GetParent() == this )
+                    oldSel = selected->GetArrIndex();
+                else if ( selected == this )
+                    oldSel = -2;
+            }
+        }
+        state->DoClearSelection();
+    }
+
+    // Delete old children
+    for ( i=0; i<prevChildCount; i++ )
+        delete ( (wxPGProperty*) m_children[i] );
+
+    m_children.Empty();
+
+    if ( m_choices.IsOk() )
+    {
+        const wxPGChoices& choices = m_choices;
+
+        for ( i=0; i<GetItemCount(); i++ )
+        {
+            bool child_val;
+            if ( choices.HasValue(i) )
+                child_val = ( value & choices.GetValue(i) )?true:false;
+            else
+                child_val = ( value & (1<<i) )?true:false;
+
+            wxPGProperty* boolProp;
+
+        #if wxUSE_INTL
+            if ( wxPGGlobalVars->m_autoGetTranslation )
+            {
+                boolProp = new wxBoolProperty( ::wxGetTranslation( GetLabel(i) ), wxEmptyString, child_val );
+            }
+            else
+        #endif
+            {
+                boolProp = new wxBoolProperty( GetLabel(i), wxEmptyString, child_val );
+            }
+            AddChild(boolProp);
+        }
+
+        m_oldChoicesData = m_choices.GetDataPtr();
+    }
+
+    m_oldValue = m_value;
+
+    if ( prevChildCount )
+        SubPropsChanged(oldSel);
+}
+
+wxFlagsProperty::wxFlagsProperty( const wxString& label, const wxString& name,
+    const wxChar** labels, const long* values, long value ) : wxPGProperty(label,name)
+{
+    m_oldChoicesData = (wxPGChoicesData*) NULL;
+
+    if ( labels )
+    {
+        m_choices.Set(labels,values);
+
+        wxASSERT( GetItemCount() );
+
+        SetValue( value );
+    }
+    else
+    {
+        m_value = wxPGVariant_Zero;
+    }
+}
+
+wxFlagsProperty::wxFlagsProperty( const wxString& label, const wxString& name,
+        const wxArrayString& labels, const wxArrayInt& values, int value )
+    : wxPGProperty(label,name)
+{
+    m_oldChoicesData = (wxPGChoicesData*) NULL;
+
+    if ( &labels && labels.size() )
+    {
+        m_choices.Set(labels,values);
+
+        wxASSERT( GetItemCount() );
+
+        SetValue( (long)value );
+    }
+    else
+    {
+        m_value = wxPGVariant_Zero;
+    }
+}
+
+wxFlagsProperty::wxFlagsProperty( const wxString& label, const wxString& name,
+    wxPGChoices& choices, long value )
+    : wxPGProperty(label,name)
+{
+    m_oldChoicesData = (wxPGChoicesData*) NULL;
+
+    if ( choices.IsOk() )
+    {
+        m_choices.Assign(choices);
+
+        wxASSERT( GetItemCount() );
+
+        SetValue( value );
+    }
+    else
+    {
+        m_value = wxPGVariant_Zero;
+    }
+}
+
+wxFlagsProperty::~wxFlagsProperty()
+{
+}
+
+void wxFlagsProperty::OnSetValue()
+{
+    if ( !m_choices.IsOk() || !GetItemCount() )
+    {
+        m_value = wxPGVariant_Zero;
+    }
+    else
+    {
+        long val = m_value.GetLong();
+
+        long fullFlags = 0;
+
+        // normalize the value (i.e. remove extra flags)
+        unsigned int i;
+        const wxPGChoices& choices = m_choices;
+        for ( i = 0; i < GetItemCount(); i++ )
+        {
+            if ( choices.HasValue(i) )
+                fullFlags |= choices.GetValue(i);
+            else
+                fullFlags |= (1<<i);
+        }
+
+        val &= fullFlags;
+
+        m_value = val;
+
+        // Need to (re)init now?
+        if ( GetChildCount() != GetItemCount() ||
+             m_choices.GetDataPtr() != m_oldChoicesData )
+        {
+            Init();
+        }
+    }
+
+    long newFlags = m_value;
+
+    if ( newFlags != m_oldValue )
+    {
+        // Set child modified states
+        unsigned int i;
+        const wxPGChoices& choices = m_choices;
+        for ( i = 0; i<GetItemCount(); i++ )
+        {
+            int flag;
+
+            if ( choices.HasValue(i) )
+                flag = choices.GetValue(i);
+            else
+                flag = (1<<i);
+
+            if ( (newFlags & flag) != (m_oldValue & flag) )
+                Item(i)->SetFlag( wxPG_PROP_MODIFIED );
+        }
+
+        m_oldValue = newFlags;
+    }
+}
+
+wxString wxFlagsProperty::GetValueAsString( int ) const
+{
+    wxString text;
+
+    if ( !m_choices.IsOk() )
+        return text;
+
+    long flags = m_value;
+    unsigned int i;
+    const wxPGChoices& choices = m_choices;
+
+    for ( i = 0; i < GetItemCount(); i++ )
+    {
+        int doAdd;
+        if ( choices.HasValue(i) )
+            doAdd = ( flags & choices.GetValue(i) );
+        else
+            doAdd = ( flags & (1<<i) );
+
+        if ( doAdd )
+        {
+            text += choices.GetLabel(i);
+            text += wxS(", ");
+        }
+    }
+
+    // remove last comma
+    if ( text.Len() > 1 )
+        text.Truncate ( text.Len() - 2 );
+
+    return text;
+}
+
+// Translate string into flag tokens
+bool wxFlagsProperty::StringToValue( wxVariant& variant, const wxString& text, int ) const
+{
+    if ( !m_choices.IsOk() )
+        return false;
+
+    long newFlags = 0;
+    long oldValue = m_value;
+
+    // semicolons are no longer valid delimeters
+    WX_PG_TOKENIZER1_BEGIN(text,wxS(','))
+
+        if ( token.length() )
+        {
+            // Determine which one it is
+            long bit = IdToBit( token );
+
+            if ( bit != -1 )
+            {
+                // Changed?
+                newFlags |= bit;
+            }
+            else
+            {
+                break;
+            }
+        }
+
+    WX_PG_TOKENIZER1_END()
+
+    variant = newFlags;
+
+    if ( newFlags != oldValue )
+        return true;
+
+    return false;
+}
+
+// Converts string id to a relevant bit.
+long wxFlagsProperty::IdToBit( const wxString& id ) const
+{
+    unsigned int i;
+    for ( i = 0; i < GetItemCount(); i++ )
+    {
+        if ( id == GetLabel(i) )
+        {
+            if ( m_choices.HasValue(i) )
+                return m_choices.GetValue(i);
+            return (1<<i);
+        }
+    }
+    return -1;
+}
+
+void wxFlagsProperty::RefreshChildren()
+{
+    if ( !m_choices.IsOk() || !GetChildCount() ) return;
+
+    int flags = m_value.GetLong();
+
+    const wxPGChoices& choices = m_choices;
+    unsigned int i;
+    for ( i = 0; i < GetItemCount(); i++ )
+    {
+        long flag;
+
+        if ( choices.HasValue(i) )
+            flag = choices.GetValue(i);
+        else
+            flag = (1<<i);
+
+        long subVal = flags & flag;
+        wxPGProperty* p = Item(i);
+
+        if ( subVal != (m_oldValue & flag) )
+            p->SetFlag( wxPG_PROP_MODIFIED );
+
+        p->SetValue( subVal?true:false );
+    }
+
+    m_oldValue = flags;
+}
+
+void wxFlagsProperty::ChildChanged( wxVariant& thisValue, int childIndex, wxVariant& childValue ) const
+{
+    long oldValue = thisValue.GetLong();
+    long val = childValue.GetLong();
+    unsigned long vi = (1<<childIndex);
+    if ( m_choices.HasValue(childIndex) ) vi = m_choices.GetValue(childIndex);
+    if ( val )
+        thisValue = (long)(oldValue | vi);
+    else
+        thisValue = (long)(oldValue & ~(vi));
+}
+
+int wxFlagsProperty::GetChoiceInfo( wxPGChoiceInfo* choiceinfo )
+{
+    if ( choiceinfo )
+        choiceinfo->m_choices = &m_choices;
+    return -1;
+}
+
+// -----------------------------------------------------------------------
+// wxDirProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(wxDirProperty,wxLongStringProperty,const wxString&)
+
+wxDirProperty::wxDirProperty( const wxString& name, const wxString& label, const wxString& value )
+  : wxLongStringProperty(name,label,value)
+{
+    m_flags |= wxPG_NO_ESCAPE;
+}
+wxDirProperty::~wxDirProperty() { }
+
+wxValidator* wxDirProperty::DoGetValidator() const
+{
+    return wxFileProperty::GetClassValidator();
+}
+
+bool wxDirProperty::OnButtonClick( wxPropertyGrid* propGrid, wxString& value )
+{
+    wxSize dlg_sz(300,400);
+
+    wxDirDialog dlg( propGrid,
+                     m_dlgMessage.length() ? m_dlgMessage : wxString(_("Choose a directory:")),
+                     value,
+                     0,
+#if !wxPG_SMALL_SCREEN
+                     propGrid->GetGoodEditorDialogPosition(this,dlg_sz),
+                     dlg_sz );
+#else
+                     wxDefaultPosition,
+                     wxDefaultSize );
+#endif
+
+    if ( dlg.ShowModal() == wxID_OK )
+    {
+        value = dlg.GetPath();
+        return true;
+    }
+    return false;
+}
+
+bool wxDirProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+    if ( name == wxPG_DIR_DIALOG_MESSAGE )
+    {
+        m_dlgMessage = value.GetString();
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxPGFileDialogAdapter
+// -----------------------------------------------------------------------
+
+bool wxPGFileDialogAdapter::DoShowDialog( wxPropertyGrid* propGrid, wxPGProperty* property )
+{
+    wxFileProperty* fileProp = NULL;
+    wxString path;
+    int indFilter = -1;
+
+    if ( property->IsKindOf(CLASSINFO(wxFileProperty)) )
+    {
+        fileProp = ((wxFileProperty*)property);
+        path = fileProp->m_filename.GetPath();
+        indFilter = fileProp->m_indFilter;
+
+        if ( !path.length() && fileProp->m_basePath.length() )
+            path = fileProp->m_basePath;
+    }
+    else
+    {
+        wxFileName fn(property->GetValue().GetString());
+        path = fn.GetPath();
+    }
+
+    wxFileDialog dlg( propGrid->GetPanel(),
+                      property->GetAttribute(wxS("DialogTitle"), _("Choose a file")),
+                      property->GetAttribute(wxS("InitialPath"), path),
+                      wxEmptyString,
+                      property->GetAttribute(wxPG_FILE_WILDCARD, _("All files (*.*)|*.*")),
+                      0,
+                      wxDefaultPosition );
+
+    if ( indFilter >= 0 )
+        dlg.SetFilterIndex( indFilter );
+
+    if ( dlg.ShowModal() == wxID_OK )
+    {
+        if ( fileProp )
+            fileProp->m_indFilter = dlg.GetFilterIndex();
+        SetValue( dlg.GetPath() );
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxFileProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxFileProperty,wxPGProperty,
+                               wxString,const wxString&,TextCtrlAndButton)
+
+wxFileProperty::wxFileProperty( const wxString& label, const wxString& name,
+    const wxString& value ) : wxPGProperty(label,name)
+{
+    m_flags |= wxPG_PROP_SHOW_FULL_FILENAME;
+    m_indFilter = -1;
+    SetAttribute( wxPG_FILE_WILDCARD, _("All files (*.*)|*.*") );
+
+    SetValue(value);
+}
+
+wxFileProperty::~wxFileProperty() {}
+
+#if wxUSE_VALIDATORS
+
+wxValidator* wxFileProperty::GetClassValidator()
+{
+    WX_PG_DOGETVALIDATOR_ENTRY()
+
+    // Atleast wxPython 2.6.2.1 required that the string argument is given
+    static wxString v;
+    wxTextValidator* validator = new wxTextValidator(wxFILTER_EXCLUDE_CHAR_LIST,&v);
+
+    wxArrayString exChars;
+    exChars.Add(wxS("?"));
+    exChars.Add(wxS("*"));
+    exChars.Add(wxS("|"));
+    exChars.Add(wxS("<"));
+    exChars.Add(wxS(">"));
+    exChars.Add(wxS("\""));
+
+    validator->SetExcludes(exChars);
+
+    WX_PG_DOGETVALIDATOR_EXIT(validator)
+}
+
+wxValidator* wxFileProperty::DoGetValidator() const
+{
+    return GetClassValidator();
+}
+
+#endif
+
+void wxFileProperty::OnSetValue()
+{
+    const wxString& fnstr = m_value.GetString();
+
+    m_filename = fnstr;
+
+    if ( !m_filename.HasName() )
+    {
+        m_value = wxPGVariant_EmptyString;
+        m_filename.Clear();
+    }
+
+    // Find index for extension.
+    if ( m_indFilter < 0 && fnstr.length() )
+    {
+        wxString ext = m_filename.GetExt();
+        int curind = 0;
+        size_t pos = 0;
+        size_t len = m_wildcard.length();
+
+        pos = m_wildcard.find(wxS("|"), pos);
+        while ( pos != wxString::npos && pos < (len-3) )
+        {
+            size_t ext_begin = pos + 3;
+
+            pos = m_wildcard.find(wxS("|"), ext_begin);
+            if ( pos == wxString::npos )
+                pos = len;
+            wxString found_ext = m_wildcard.substr(ext_begin, pos-ext_begin);
+
+            if ( found_ext.length() > 0 )
+            {
+                if ( found_ext[0] == wxS('*') )
+                {
+                    m_indFilter = curind;
+                    break;
+                }
+                if ( ext.CmpNoCase(found_ext) == 0 )
+                {
+                    m_indFilter = curind;
+                    break;
+                }
+            }
+
+            if ( pos != len )
+                pos = m_wildcard.find(wxS("|"), pos+1);
+
+            curind++;
+        }
+    }
+}
+
+wxString wxFileProperty::GetValueAsString( int argFlags ) const
+{
+    // Always return empty string when name component is empty
+    wxString fullName = m_filename.GetFullName();
+    if ( !fullName.length() )
+        return fullName;
+
+    if ( argFlags & wxPG_FULL_VALUE )
+    {
+        return m_filename.GetFullPath();
+    }
+    else if ( m_flags & wxPG_PROP_SHOW_FULL_FILENAME )
+    {
+        if ( m_basePath.Length() )
+        {
+            wxFileName fn2(m_filename);
+            fn2.MakeRelativeTo(m_basePath);
+            return fn2.GetFullPath();
+        }
+        return m_filename.GetFullPath();
+    }
+
+    return m_filename.GetFullName();
+}
+
+wxPGEditorDialogAdapter* wxFileProperty::GetEditorDialog() const
+{
+    return new wxPGFileDialogAdapter();
+}
+
+bool wxFileProperty::StringToValue( wxVariant& variant, const wxString& text, int argFlags ) const
+{
+    if ( (m_flags & wxPG_PROP_SHOW_FULL_FILENAME) || (argFlags & wxPG_FULL_VALUE) )
+    {
+        if ( m_filename != text )
+        {
+            variant = text;
+            return true;
+        }
+    }
+    else
+    {
+        if ( m_filename.GetFullName() != text )
+        {
+            wxFileName fn = m_filename;
+            fn.SetFullName(text);
+            variant = fn.GetFullPath();
+            return true;
+        }
+    }
+
+    return false;
+}
+
+bool wxFileProperty::DoSetAttribute( const wxString& name, wxVariant& value )
+{
+    // Return false on some occasions to make sure those attribs will get
+    // stored in m_attributes.
+    if ( name == wxPG_FILE_SHOW_FULL_PATH )
+    {
+        if ( wxPGVariantToInt(value) )
+            m_flags |= wxPG_PROP_SHOW_FULL_FILENAME;
+        else
+            m_flags &= ~(wxPG_PROP_SHOW_FULL_FILENAME);
+        return true;
+    }
+    else if ( name == wxPG_FILE_WILDCARD )
+    {
+        m_wildcard = value.GetString();
+    }
+    else if ( name == wxPG_FILE_SHOW_RELATIVE_PATH )
+    {
+        m_basePath = value.GetString();
+
+        // Make sure wxPG_FILE_SHOW_FULL_PATH is also set
+        m_flags |= wxPG_PROP_SHOW_FULL_FILENAME;
+    }
+    else if ( name == wxPG_FILE_INITIAL_PATH )
+    {
+        m_initialPath = value.GetString();
+        return true;
+    }
+    else if ( name == wxPG_FILE_DIALOG_TITLE )
+    {
+        m_dlgTitle = value.GetString();
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxPGLongStringDialogAdapter
+// -----------------------------------------------------------------------
+
+bool wxPGLongStringDialogAdapter::DoShowDialog( wxPropertyGrid* propGrid, wxPGProperty* property )
+{
+    wxString val1 = property->GetValueAsString(0);
+    wxString val_orig = val1;
+
+    wxString value;
+    if ( !property->HasFlag(wxPG_PROP_NO_ESCAPE) )
+        wxPropertyGrid::ExpandEscapeSequences(value, val1);
+    else
+        value = wxString(val1);
+
+    // Run editor dialog.
+    if ( wxLongStringProperty::DisplayEditorDialog(property, propGrid, value) )
+    {
+        if ( !property->HasFlag(wxPG_PROP_NO_ESCAPE) )
+            wxPropertyGrid::CreateEscapeSequences(val1,value);
+        else
+            val1 = value;
+
+        if ( val1 != val_orig )
+        {
+            SetValue( val1 );
+            return true;
+        }
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxLongStringProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxLongStringProperty,wxPGProperty,
+                               wxString,const wxString&,TextCtrlAndButton)
+
+wxLongStringProperty::wxLongStringProperty( const wxString& label, const wxString& name,
+    const wxString& value ) : wxPGProperty(label,name)
+{
+    SetValue(value);
+}
+
+wxLongStringProperty::~wxLongStringProperty() {}
+
+wxString wxLongStringProperty::GetValueAsString( int ) const
+{
+    return m_value;
+}
+
+bool wxLongStringProperty::OnEvent( wxPropertyGrid* propGrid, wxWindow* WXUNUSED(primary),
+                                    wxEvent& event )
+{
+    if ( propGrid->IsMainButtonEvent(event) )
+    {
+        // Update the value
+        PrepareValueForDialogEditing(propGrid);
+
+        wxString val1 = GetValueAsString(0);
+        wxString val_orig = val1;
+
+        wxString value;
+        if ( !(m_flags & wxPG_PROP_NO_ESCAPE) )
+            wxPropertyGrid::ExpandEscapeSequences(value,val1);
+        else
+            value = wxString(val1);
+
+        // Run editor dialog.
+        if ( OnButtonClick(propGrid,value) )
+        {
+            if ( !(m_flags & wxPG_PROP_NO_ESCAPE) )
+                wxPropertyGrid::CreateEscapeSequences(val1,value);
+            else
+                val1 = value;
+
+            if ( val1 != val_orig )
+            {
+                SetValueInEvent( val1 );
+                return true;
+            }
+        }
+    }
+    return false;
+}
+
+bool wxLongStringProperty::OnButtonClick( wxPropertyGrid* propGrid, wxString& value )
+{
+    return DisplayEditorDialog(this, propGrid, value);
+}
+
+bool wxLongStringProperty::DisplayEditorDialog( wxPGProperty* prop, wxPropertyGrid* propGrid, wxString& value )
+
+{
+    // launch editor dialog
+    wxDialog* dlg = new wxDialog(propGrid,-1,prop->GetLabel(),wxDefaultPosition,wxDefaultSize,
+                                 wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxCLIP_CHILDREN);
+
+    dlg->SetFont(propGrid->GetFont()); // To allow entering chars of the same set as the propGrid
+
+    // Multi-line text editor dialog.
+#if !wxPG_SMALL_SCREEN
+    const int spacing = 8;
+#else
+    const int spacing = 4;
+#endif
+    wxBoxSizer* topsizer = new wxBoxSizer( wxVERTICAL );
+    wxBoxSizer* rowsizer = new wxBoxSizer( wxHORIZONTAL );
+    wxTextCtrl* ed = new wxTextCtrl(dlg,11,value,
+        wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE);
+
+    rowsizer->Add( ed, 1, wxEXPAND|wxALL, spacing );
+    topsizer->Add( rowsizer, 1, wxEXPAND, 0 );
+    rowsizer = new wxBoxSizer( wxHORIZONTAL );
+    const int but_sz_flags =
+        wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT;
+    rowsizer->Add( new wxButton(dlg,wxID_OK,_("Ok")),
+        0, but_sz_flags, spacing );
+    rowsizer->Add( new wxButton(dlg,wxID_CANCEL,_("Cancel")),
+        0, but_sz_flags, spacing );
+    topsizer->Add( rowsizer, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL, 0 );
+
+    dlg->SetSizer( topsizer );
+    topsizer->SetSizeHints( dlg );
+
+#if !wxPG_SMALL_SCREEN
+    dlg->SetSize(400,300);
+
+    dlg->Move( propGrid->GetGoodEditorDialogPosition(prop,dlg->GetSize()) );
+#endif
+
+    int res = dlg->ShowModal();
+
+    if ( res == wxID_OK )
+    {
+        value = ed->GetValue();
+        dlg->Destroy();
+        return true;
+    }
+    dlg->Destroy();
+    return false;
+}
+
+bool wxLongStringProperty::StringToValue( wxVariant& variant, const wxString& text, int ) const
+{
+    if ( m_value != text )
+    {
+        variant = text;
+        return true;
+    }
+    return false;
+}
+
+// -----------------------------------------------------------------------
+// wxArrayEditorDialog
+// -----------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(wxArrayEditorDialog, wxDialog)
+    EVT_IDLE(wxArrayEditorDialog::OnIdle)
+    EVT_LISTBOX(24, wxArrayEditorDialog::OnListBoxClick)
+    EVT_TEXT_ENTER(21, wxArrayEditorDialog::OnAddClick)
+    EVT_BUTTON(22, wxArrayEditorDialog::OnAddClick)
+    EVT_BUTTON(23, wxArrayEditorDialog::OnDeleteClick)
+    EVT_BUTTON(25, wxArrayEditorDialog::OnUpClick)
+    EVT_BUTTON(26, wxArrayEditorDialog::OnDownClick)
+    EVT_BUTTON(27, wxArrayEditorDialog::OnUpdateClick)
+    //EVT_BUTTON(28, wxArrayEditorDialog::OnCustomEditClick)
+END_EVENT_TABLE()
+
+IMPLEMENT_ABSTRACT_CLASS(wxArrayEditorDialog, wxDialog)
+
+#include <wx/statline.h>
+
+// -----------------------------------------------------------------------
+
+void wxArrayEditorDialog::OnIdle(wxIdleEvent& event)
+{
+    //
+    // Do control focus detection here.
+    //
+
+    wxWindow* focused = FindFocus();
+
+    // This strange focus thing is a workaround for wxGTK wxListBox focus
+    // reporting bug.
+    if ( m_curFocus == 0 && focused != m_edValue &&
+         focused != m_butAdd && focused != m_butUpdate &&
+         m_lbStrings->GetSelection() >= 0 )
+    {
+        // ListBox was just focused.
+        m_butAdd->Enable(false);
+        m_butUpdate->Enable(false);
+        m_butRemove->Enable(true);
+        m_butUp->Enable(true);
+        m_butDown->Enable(true);
+        m_curFocus = 1;
+    }
+    else if ( (m_curFocus == 1 && focused == m_edValue) /*|| m_curFocus == 2*/ )
+    {
+        // TextCtrl was just focused.
+        m_butAdd->Enable(true);
+        bool upd_enable = false;
+        if ( m_lbStrings->GetCount() && m_lbStrings->GetSelection() >= 0 )
+            upd_enable = true;
+        m_butUpdate->Enable(upd_enable);
+        m_butRemove->Enable(false);
+        m_butUp->Enable(false);
+        m_butDown->Enable(false);
+        m_curFocus = 0;
+    }
+
+    event.Skip();
+}
+
+// -----------------------------------------------------------------------
+
+wxArrayEditorDialog::wxArrayEditorDialog()
+    : wxDialog()
+{
+    Init();
+}
+
+// -----------------------------------------------------------------------
+
+void wxArrayEditorDialog::Init()
+{
+    m_custBtText = (const wxChar*) NULL;
+}
+
+// -----------------------------------------------------------------------
+
+wxArrayEditorDialog::wxArrayEditorDialog( wxWindow *parent,
+                                          const wxString& message,
+                                          const wxString& caption,
+                                          long style,
+                                          const wxPoint& pos,
+                                          const wxSize& sz )
+    : wxDialog()
+{
+    Init();
+    Create(parent,message,caption,style,pos,sz);
+}
+
+// -----------------------------------------------------------------------
+
+bool wxArrayEditorDialog::Create( wxWindow *parent,
+                                  const wxString& message,
+                                  const wxString& caption,
+                                  long style,
+                                  const wxPoint& pos,
+                                  const wxSize& sz )
+{
+    // On wxMAC the dialog shows incorrectly if style is not exactly wxCAPTION
+    // FIXME: This should be only a temporary fix.
+#ifdef __WXMAC__
+    int useStyle = wxCAPTION;
+#else
+    int useStyle = style;
+#endif
+
+    bool res = wxDialog::Create(parent, wxID_ANY, caption, pos, sz, useStyle);
+
+    SetFont(parent->GetFont()); // To allow entering chars of the same set as the propGrid
+
+#if !wxPG_SMALL_SCREEN
+    const int spacing = 4;
+#else
+    const int spacing = 3;
+#endif
+
+    m_modified = false;
+
+    m_curFocus = 1;
+
+    const int but_sz_flags =
+        wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxALL; //wxBOTTOM|wxLEFT|wxRIGHT;
+
+    wxBoxSizer* topsizer = new wxBoxSizer( wxVERTICAL );
+
+    // Message
+    if ( message.length() )
+        topsizer->Add( new wxStaticText(this,-1,message),
+            0, wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL|wxALL, spacing );
+
+    // String editor
+    wxBoxSizer* rowsizer = new wxBoxSizer( wxHORIZONTAL );
+    m_edValue = new wxTextCtrl(this,21,wxEmptyString,
+        wxDefaultPosition,wxDefaultSize,wxTE_PROCESS_ENTER);
+    wxValidator* validator = GetTextCtrlValidator();
+    if ( validator )
+    {
+        m_edValue->SetValidator( *validator );
+        delete validator;
+    }
+    rowsizer->Add( m_edValue,
+        1, wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL|wxALL, spacing );
+
+    // Add button
+    m_butAdd = new wxButton(this,22,_("Add"));
+    rowsizer->Add( m_butAdd,
+        0, wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, spacing );
+    topsizer->Add( rowsizer, 0, wxEXPAND, spacing );
+
+    // Separator line
+    topsizer->Add( new wxStaticLine(this,-1),
+        0, wxEXPAND|wxBOTTOM|wxLEFT|wxRIGHT, spacing );
+
+    rowsizer = new wxBoxSizer( wxHORIZONTAL );
+
+    // list box
+    m_lbStrings = new wxListBox(this, 24, wxDefaultPosition, wxDefaultSize);
+    unsigned int i;
+    for ( i=0; i<ArrayGetCount(); i++ )
+        m_lbStrings->Append( ArrayGet(i) );
+    rowsizer->Add( m_lbStrings, 1, wxEXPAND|wxRIGHT, spacing );
+
+    // Manipulator buttons
+    wxBoxSizer* colsizer = new wxBoxSizer( wxVERTICAL );
+    m_butCustom = (wxButton*) NULL;
+    if ( m_custBtText )
+    {
+        m_butCustom = new wxButton(this,28,::wxGetTranslation(m_custBtText));
+        colsizer->Add( m_butCustom,
+            0, wxALIGN_CENTER|wxTOP/*wxALIGN_LEFT|wxALIGN_CENTRE_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT*/,
+            spacing );
+    }
+    m_butUpdate = new wxButton(this,27,_("Update"));
+    colsizer->Add( m_butUpdate,
+        0, wxALIGN_CENTER|wxTOP, spacing );
+    m_butRemove = new wxButton(this,23,_("Remove"));
+    colsizer->Add( m_butRemove,
+        0, wxALIGN_CENTER|wxTOP, spacing );
+    m_butUp = new wxButton(this,25,_("Up"));
+    colsizer->Add( m_butUp,
+        0, wxALIGN_CENTER|wxTOP, spacing );
+    m_butDown = new wxButton(this,26,_("Down"));
+    colsizer->Add( m_butDown,
+        0, wxALIGN_CENTER|wxTOP, spacing );
+    rowsizer->Add( colsizer, 0, 0, spacing );
+
+    topsizer->Add( rowsizer, 1, wxLEFT|wxRIGHT|wxEXPAND, spacing );
+
+    // Separator line
+    topsizer->Add( new wxStaticLine(this,-1),
+        0, wxEXPAND|wxTOP|wxLEFT|wxRIGHT, spacing );
+
+    // buttons
+    rowsizer = new wxBoxSizer( wxHORIZONTAL );
+    /*
+    const int but_sz_flags =
+        wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT;
+    */
+    rowsizer->Add( new wxButton(this,wxID_OK,_("Ok")),
+        0, but_sz_flags, spacing );
+    rowsizer->Add( new wxButton(this,wxID_CANCEL,_("Cancel")),
+        0, but_sz_flags, spacing );
+    topsizer->Add( rowsizer, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL, 0 );
+
+    m_edValue->SetFocus();
+
+    SetSizer( topsizer );
+    topsizer->SetSizeHints( this );
+
+#if !wxPG_SMALL_SCREEN
+    if ( sz.x == wxDefaultSize.x &&
+         sz.y == wxDefaultSize.y )
+        SetSize( wxSize(275,360) );
+    else
+        SetSize(sz);
+#endif
+
+    return res;
+}
+
+// -----------------------------------------------------------------------
+
+void wxArrayEditorDialog::OnAddClick(wxCommandEvent& )
+{
+    wxString text = m_edValue->GetValue();
+    if ( text.length() )
+    {
+        if ( ArrayInsert( text, -1 ) )
+        {
+            m_lbStrings->Append( text );
+            m_modified = true;
+            m_edValue->Clear();
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxArrayEditorDialog::OnDeleteClick(wxCommandEvent& )
+{
+    int index = m_lbStrings->GetSelection();
+    if ( index >= 0 )
+    {
+        ArrayRemoveAt( index );
+        m_lbStrings->Delete ( index );
+        m_modified = true;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxArrayEditorDialog::OnUpClick(wxCommandEvent& )
+{
+    int index = m_lbStrings->GetSelection();
+    if ( index > 0 )
+    {
+        ArraySwap(index-1,index);
+        /*wxString old_str = m_array[index-1];
+        wxString new_str = m_array[index];
+        m_array[index-1] = new_str;
+        m_array[index] = old_str;*/
+        m_lbStrings->SetString ( index-1, ArrayGet(index-1) );
+        m_lbStrings->SetString ( index, ArrayGet(index) );
+        m_lbStrings->SetSelection ( index-1 );
+        m_modified = true;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxArrayEditorDialog::OnDownClick(wxCommandEvent& )
+{
+    int index = m_lbStrings->GetSelection();
+    int lastStringIndex = ((int) m_lbStrings->GetCount()) - 1;
+    if ( index >= 0 && index < lastStringIndex )
+    {
+        ArraySwap(index,index+1);
+        /*wxString old_str = m_array[index+1];
+        wxString new_str = m_array[index];
+        m_array[index+1] = new_str;
+        m_array[index] = old_str;*/
+        m_lbStrings->SetString ( index+1, ArrayGet(index+1) );
+        m_lbStrings->SetString ( index, ArrayGet(index) );
+        m_lbStrings->SetSelection ( index+1 );
+        m_modified = true;
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxArrayEditorDialog::OnUpdateClick(wxCommandEvent& )
+{
+    int index = m_lbStrings->GetSelection();
+    if ( index >= 0 )
+    {
+        wxString str = m_edValue->GetValue();
+        if ( ArraySet(index,str) )
+        {
+            m_lbStrings->SetString ( index, str );
+            //m_array[index] = str;
+            m_modified = true;
+        }
+    }
+}
+
+// -----------------------------------------------------------------------
+
+void wxArrayEditorDialog::OnListBoxClick(wxCommandEvent& )
+{
+    int index = m_lbStrings->GetSelection();
+    if ( index >= 0 )
+    {
+        m_edValue->SetValue( m_lbStrings->GetString(index) );
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxPGArrayStringEditorDialog
+// -----------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxPGArrayStringEditorDialog, wxArrayEditorDialog)
+
+BEGIN_EVENT_TABLE(wxPGArrayStringEditorDialog, wxArrayEditorDialog)
+    EVT_BUTTON(28, wxPGArrayStringEditorDialog::OnCustomEditClick)
+END_EVENT_TABLE()
+
+// -----------------------------------------------------------------------
+
+wxString wxPGArrayStringEditorDialog::ArrayGet( size_t index )
+{
+    return m_array[index];
+}
+
+size_t wxPGArrayStringEditorDialog::ArrayGetCount()
+{
+    return m_array.size();
+}
+
+bool wxPGArrayStringEditorDialog::ArrayInsert( const wxString& str, int index )
+{
+    if (index<0)
+        m_array.Add(str);
+    else
+        m_array.Insert(str,index);
+    return true;
+}
+
+bool wxPGArrayStringEditorDialog::ArraySet( size_t index, const wxString& str )
+{
+    m_array[index] = str;
+    return true;
+}
+
+void wxPGArrayStringEditorDialog::ArrayRemoveAt( int index )
+{
+    m_array.RemoveAt(index);
+}
+
+void wxPGArrayStringEditorDialog::ArraySwap( size_t first, size_t second )
+{
+    wxString old_str = m_array[first];
+    wxString new_str = m_array[second];
+    m_array[first] = new_str;
+    m_array[second] = old_str;
+}
+
+wxPGArrayStringEditorDialog::wxPGArrayStringEditorDialog()
+    : wxArrayEditorDialog()
+{
+    Init();
+}
+
+void wxPGArrayStringEditorDialog::Init()
+{
+    m_pCallingClass = (wxArrayStringProperty*) NULL;
+}
+
+void wxPGArrayStringEditorDialog::OnCustomEditClick(wxCommandEvent& )
+{
+    wxASSERT( m_pCallingClass );
+    wxString str = m_edValue->GetValue();
+    if ( m_pCallingClass->OnCustomStringEdit(m_parent,str) )
+    {
+        //m_edValue->SetValue ( str );
+        m_lbStrings->Append ( str );
+        m_array.Add ( str );
+        m_modified = true;
+    }
+}
+
+// -----------------------------------------------------------------------
+// wxArrayStringProperty
+// -----------------------------------------------------------------------
+
+WX_PG_IMPLEMENT_PROPERTY_CLASS(wxArrayStringProperty,  // Property name
+                               wxPGProperty,  // Property we inherit from
+                               wxArrayString,  // Value type name
+                               const wxArrayString&,  // Value type, as given in constructor
+                               TextCtrlAndButton)  // Initial editor
+
+wxArrayStringProperty::wxArrayStringProperty( const wxString& label,
+                                                        const wxString& name,
+                                                        const wxArrayString& array )
+    : wxPGProperty(label,name)
+{
+    SetValue( array );
+}
+
+wxArrayStringProperty::~wxArrayStringProperty() { }
+
+void wxArrayStringProperty::OnSetValue()
+{
+    GenerateValueAsString();
+}
+
+wxString wxArrayStringProperty::GetValueAsString( int WXUNUSED(argFlags) ) const
+{
+    return m_display;
+}
+
+// Converts wxArrayString to a string separated by delimeters and spaces.
+// preDelim is useful for "str1" "str2" style. Set flags to 1 to do slash
+// conversion.
+void wxPropertyGrid::ArrayStringToString( wxString& dst, const wxArrayString& src,
+                                          wxChar preDelim, wxChar postDelim,
+                                          int flags )
+{
+    wxString pdr;
+
+    unsigned int i;
+    unsigned int itemCount = src.size();
+
+    wxChar preas[2];
+
+    dst.Empty();
+
+    if ( !preDelim )
+        preas[0] = 0;
+    else if ( (flags & 1) )
+    {
+        preas[0] = preDelim;
+        preas[1] = 0;
+        pdr = wxS("\\");
+        pdr += preDelim;
+    }
+
+    if ( itemCount )
+        dst.append( preas );
+
+    wxASSERT( postDelim );
+    wxString postDelimStr(postDelim);
+    //wxString preDelimStr(preDelim);
+
+    for ( i = 0; i < itemCount; i++ )
+    {
+        wxString str( src.Item(i) );
+
+        // Do some character conversion.
+        // Convertes \ to \\ and <preDelim> to \<preDelim>
+        // Useful when preDelim and postDelim are "\"".
+        if ( flags & 1 )
+        {
+            str.Replace( wxS("\\"), wxS("\\\\"), true );
+            if ( pdr.length() )
+                str.Replace( preas, pdr, true );
+        }
+
+        dst.append( str );
+
+        if ( i < (itemCount-1) )
+        {
+            dst.append( postDelimStr );
+            dst.append( wxS(" ") );
+            dst.append( preas );
+        }
+        else if ( preDelim )
+            dst.append( postDelimStr );
+    }
+}
+
+#define ARRSTRPROP_ARRAY_TO_STRING(STRING,ARRAY) \
+    wxPropertyGrid::ArrayStringToString(STRING,ARRAY,wxS('"'),wxS('"'),1);
+
+void wxArrayStringProperty::GenerateValueAsString()
+{
+    wxArrayString arr = m_value.GetArrayString();
+    ARRSTRPROP_ARRAY_TO_STRING(m_display, arr)
+}
+
+// Default implementation doesn't do anything.
+bool wxArrayStringProperty::OnCustomStringEdit( wxWindow*, wxString& )
+{
+    return false;
+}
+
+wxArrayEditorDialog* wxArrayStringProperty::CreateEditorDialog()
+{
+    return new wxPGArrayStringEditorDialog();
+}
+
+bool wxArrayStringProperty::OnButtonClick( wxPropertyGrid* propGrid,
+                                           wxWindow* WXUNUSED(primaryCtrl),
+                                           const wxChar* cbt )
+{
+    // Update the value
+    PrepareValueForDialogEditing(propGrid);
+
+    if ( !propGrid->EditorValidate() )
+        return false;
+
+    // Create editor dialog.
+    wxArrayEditorDialog* dlg = CreateEditorDialog();
+#if wxUSE_VALIDATORS
+    wxValidator* validator = GetValidator();
+    wxPGInDialogValidator dialogValidator;
+#endif
+
+    wxPGArrayStringEditorDialog* strEdDlg = wxDynamicCast(dlg, wxPGArrayStringEditorDialog);
+
+    if ( strEdDlg )
+        strEdDlg->SetCustomButton(cbt, this);
+
+    dlg->SetDialogValue( wxVariant(m_value) );
+    dlg->Create(propGrid, wxEmptyString, m_label);
+
+#if !wxPG_SMALL_SCREEN
+    dlg->Move( propGrid->GetGoodEditorDialogPosition(this,dlg->GetSize()) );
+#endif
+
+    bool retVal;
+
+    for (;;)
+    {
+        retVal = false;
+
+        int res = dlg->ShowModal();
+
+        if ( res == wxID_OK && dlg->IsModified() )
+        {
+            wxVariant value = dlg->GetDialogValue();
+            if ( !value.IsNull() )
+            {
+                wxArrayString actualValue = value.GetArrayString();
+                wxString tempStr;
+                ARRSTRPROP_ARRAY_TO_STRING(tempStr, actualValue)
+            #if wxUSE_VALIDATORS
+                if ( dialogValidator.DoValidate( propGrid, validator, tempStr ) )
+            #endif
+                {
+                    SetValueInEvent( actualValue );
+                    retVal = true;
+                    break;
+                }
+            }
+            else
+                break;
+        }
+        else
+            break;
+    }
+
+    delete dlg;
+
+    return retVal;
+}
+
+bool wxArrayStringProperty::OnEvent( wxPropertyGrid* propGrid,
+                                     wxWindow* primary,
+                                     wxEvent& event )
+{
+    if ( propGrid->IsMainButtonEvent(event) )
+        return OnButtonClick(propGrid,primary,(const wxChar*) NULL);
+    return false;
+}
+
+bool wxArrayStringProperty::StringToValue( wxVariant& variant, const wxString& text, int ) const
+{
+    wxArrayString arr;
+
+    WX_PG_TOKENIZER2_BEGIN(text,wxS('"'))
+
+        // Need to replace backslashes with empty characters
+        // (opposite what is done in GenerateValueString).
+        token.Replace ( wxS("\\"), wxEmptyString, true );
+
+        arr.Add( token );
+
+    WX_PG_TOKENIZER2_END()
+
+    variant = arr;
+
+    return true;
+}
+
+// -----------------------------------------------------------------------
+// wxPGInDialogValidator
+// -----------------------------------------------------------------------
+
+#if wxUSE_VALIDATORS
+bool wxPGInDialogValidator::DoValidate( wxPropertyGrid* propGrid,
+                                        wxValidator* validator,
+                                        const wxString& value )
+{
+    if ( !validator )
+        return true;
+
+    wxTextCtrl* tc = m_textCtrl;
+
+    if ( !tc )
+    {
+        {
+            tc = new wxTextCtrl( propGrid, wxPG_SUBID_TEMP1, wxEmptyString,
+                                 wxPoint(30000,30000));
+            tc->Hide();
+        }
+
+        m_textCtrl = tc;
+    }
+
+    tc->SetValue(value);
+
+    validator->SetWindow(tc);
+    bool res = validator->Validate(propGrid);
+
+    return res;
+}
+#else
+bool wxPGInDialogValidator::DoValidate( wxPropertyGrid* WXUNUSED(propGrid),
+                                        wxValidator* WXUNUSED(validator),
+                                        const wxString& WXUNUSED(value) )
+{
+    return true;
+}
+#endif
+
+// -----------------------------------------------------------------------
+