]> 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)
+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) \
@@ -3725,6 +3757,15 @@ COND_USE_GUI_1_ALL_GUI_HEADERS =  \
        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 \
@@ -3974,6 +4015,14 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS =  \
        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 \
@@ -5770,6 +5819,14 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS_1 =  \
        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 \
@@ -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_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)
@@ -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)
-@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)
@@ -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_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@__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_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_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_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_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_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@ = \
@@ -12310,9 +12434,9 @@ COND_WXUSE_REGEX_BUILTIN___LIB_REGEX_p = \
 
 ### 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
@@ -12347,7 +12471,7 @@ install: all $(__install_wxregex___depname) $(__install_wxzlib___depname) $(__in
        @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 \
@@ -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)$(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)
@@ -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)/$(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)
@@ -12926,6 +13055,42 @@ distclean: clean
 
 @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@    
@@ -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_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
 
@@ -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)
-       $(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
@@ -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_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
 
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -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
 
+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)
-       $(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
@@ -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)
-       $(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
@@ -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)
-       $(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
@@ -32541,6 +32805,7 @@ COMMDIR  = $(WXDIR)/src/common
 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
@@ -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/propgrid
        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/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
@@ -32738,7 +33005,10 @@ ALL_GUI_DIST: ALL_DIST
         
        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
@@ -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/propgrid
        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/propgrid
        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/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
@@ -33429,4 +33702,4 @@ rpm: bzip-dist
 # 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)
@@ -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 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)
-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)
-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)
-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)
-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)
-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)
-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)
-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)
-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)
-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)
-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)
-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)
-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)
-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=""
@@ -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)
-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=""
@@ -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)
+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
@@ -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)
+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
@@ -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)
-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)
+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
@@ -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)
-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=""
@@ -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)
-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)
-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=""
@@ -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)
-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=""
@@ -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)
-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)
-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)
-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=""
@@ -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)
-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)
-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)
-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)
-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=""
@@ -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)
-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)
-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=""
@@ -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)
-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=""
@@ -542,7 +560,7 @@ dnl ### begin block 20_COND_TOOLKIT_[wx.bkl] ###
         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=""
@@ -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)
-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=""
@@ -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)
-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=""
@@ -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)
-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=""
@@ -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)
-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=""
@@ -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)
-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=""
@@ -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)
-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)
-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)
-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)
-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)
-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=""
@@ -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)
-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)
-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)
-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=""
@@ -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)
-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)
-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)
-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=""
@@ -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)
-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)
-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=""
@@ -950,43 +968,43 @@ dnl ### begin block 20_COND_WXUNIV_0[wx.bkl] ###
         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)
-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)
-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)
-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)
-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)
-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)
-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=""
index 89080fa27e19dd81424ee685bcf2441a6062244a..f2abec66fd5ad4cd017cb9bd16bfb41a35d1d12e 100644 (file)
     <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>
index e9e8505137884b45f2cd416c5ac2fc4cdca29372..37ed41dc6d443c4fac3bc3f132c163b4aa0e5aac 100644 (file)
@@ -213,6 +213,14 @@ Acts according to BUILD by default.
         </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>
@@ -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="USE_PROPGRID">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>
 
+<!-- ====================================================================== -->
+<!--                                  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                        -->
 <!-- ====================================================================== -->
@@ -3744,8 +3770,8 @@ src/osx/iphone/window.mm
             $(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>
 
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
+PROPGRIDDIR = $(WXDIR)/src/propgrid
 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/propgrid
        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/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
@@ -212,7 +215,10 @@ ALL_GUI_DIST: ALL_DIST
         
        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
@@ -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/propgrid
        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/propgrid
        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/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
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)
-            $(XRC_SRC) $(AUI_SRC) $(RICHTEXT_SRC) $(STC_SRC)
+            $(XRC_SRC) $(AUI_SRC) $(PROPGRID_SRC) $(RICHTEXT_SRC) $(STC_SRC)
         </if>
     </set>
     <set var="MONOLIB_SRC">
index d94bf39ee8da4565a69eea1b5795e76fc6059f87..93e5848a4e10a4fedd929997e24f476eaab0a505 100644 (file)
 
     <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                              -->
     <!-- ================================================================ -->
index bb48de3a1809d1406346b113e48c318c9568f347..31778ddabe26588b49e0eb9e0cbe19124cd6072c 100644 (file)
@@ -87,6 +87,7 @@
 
         <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>
                          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
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>propgrid</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=='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: -->
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',
-             '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',
-              'aui', 'richtext', 'stc']
+              'aui', 'propgrid', 'richtext', 'stc']
 # 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
 
+# 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
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 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
 
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 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
 
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 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
 
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)" \
-       -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)" \
@@ -1223,6 +1224,42 @@ AUILIB_OBJECTS =  \
        $(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) \
@@ -1469,6 +1506,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(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 \
@@ -2126,6 +2171,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(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 \
@@ -3893,6 +3946,20 @@ ____wxaui_namedll_DEP = $(__auidll___depname)
 !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
@@ -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"
-__THREADSFLAG_11 = 
+__THREADSFLAG_12 = 
 !endif
 !if "$(USE_THREADS)" == "1"
-__THREADSFLAG_11 = mt
+__THREADSFLAG_12 = mt
 !endif
 !if "$(RUNTIME_LIBS)" == "dynamic"
 __RUNTIME_LIBS_4 = i
@@ -3970,34 +4037,34 @@ __RUNTIME_LIBS_4 = i
 __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"
-__DEBUG_DEFINE_p_53 = -d__WXDEBUG__
+__DEBUG_DEFINE_p_57 = -d__WXDEBUG__
 !endif
 !if "$(DEBUG_FLAG)" == "1"
-__DEBUG_DEFINE_p_53 = -d__WXDEBUG__
+__DEBUG_DEFINE_p_57 = -d__WXDEBUG__
 !endif
 !if "$(USE_EXCEPTIONS)" == "0"
-__EXCEPTIONS_DEFINE_p_53 = -dwxNO_EXCEPTIONS
+__EXCEPTIONS_DEFINE_p_57 = -dwxNO_EXCEPTIONS
 !endif
 !if "$(USE_RTTI)" == "0"
-__RTTI_DEFINE_p_53 = -dwxNO_RTTI
+__RTTI_DEFINE_p_57 = -dwxNO_RTTI
 !endif
 !if "$(USE_THREADS)" == "0"
-__THREAD_DEFINE_p_53 = -dwxNO_THREADS
+__THREAD_DEFINE_p_57 = -dwxNO_THREADS
 !endif
 !if "$(UNICODE)" == "0"
-__UNICODE_DEFINE_p_54 = -dwxUSE_UNICODE=0
+__UNICODE_DEFINE_p_58 = -dwxUSE_UNICODE=0
 !endif
 !if "$(UNICODE)" == "1"
-__UNICODE_DEFINE_p_54 = -d_UNICODE
+__UNICODE_DEFINE_p_58 = -d_UNICODE
 !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"
-__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
@@ -4088,7 +4155,7 @@ $(OBJS):
 
 ### 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
@@ -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)_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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -4486,10 +4561,30 @@ $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXD
 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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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) @&&|
-       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
@@ -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_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
 
@@ -7392,7 +7511,7 @@ $(OBJS)\monodll_joystick.obj: ..\..\src\msw\joystick.cpp
 !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
@@ -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_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
 
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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)\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
-       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
@@ -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
-       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
@@ -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
-       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
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)" \
-       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)" \
@@ -1227,6 +1227,44 @@ AUILIB_OBJECTS =  \
        $(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) \
@@ -1485,6 +1523,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(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 \
@@ -2148,6 +2194,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(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 \
@@ -4009,6 +4063,28 @@ ____wxaui_namelib_DEP = $(__auilib___depname)
 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
@@ -4108,36 +4184,36 @@ endif
 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)
-__DEBUG_DEFINE_p_53 = --define __WXDEBUG__
+__DEBUG_DEFINE_p_57 = --define __WXDEBUG__
 endif
 endif
 ifeq ($(DEBUG_FLAG),1)
-__DEBUG_DEFINE_p_53 = --define __WXDEBUG__
+__DEBUG_DEFINE_p_57 = --define __WXDEBUG__
 endif
 ifeq ($(USE_EXCEPTIONS),0)
-__EXCEPTIONS_DEFINE_p_53 = --define wxNO_EXCEPTIONS
+__EXCEPTIONS_DEFINE_p_57 = --define wxNO_EXCEPTIONS
 endif
 ifeq ($(USE_RTTI),0)
-__RTTI_DEFINE_p_53 = --define wxNO_RTTI
+__RTTI_DEFINE_p_57 = --define wxNO_RTTI
 endif
 ifeq ($(USE_THREADS),0)
-__THREAD_DEFINE_p_53 = --define wxNO_THREADS
+__THREAD_DEFINE_p_57 = --define wxNO_THREADS
 endif
 ifeq ($(UNICODE),0)
-__UNICODE_DEFINE_p_54 = --define wxUSE_UNICODE=0
+__UNICODE_DEFINE_p_58 = --define wxUSE_UNICODE=0
 endif
 ifeq ($(UNICODE),1)
-__UNICODE_DEFINE_p_54 = --define _UNICODE
+__UNICODE_DEFINE_p_58 = --define _UNICODE
 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)
-__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)
@@ -4240,7 +4316,7 @@ $(OBJS):
 
 ### 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
@@ -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)_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
@@ -4613,6 +4692,32 @@ wxaui: $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 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)
@@ -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_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) $<
 
@@ -7648,7 +7777,7 @@ $(OBJS)\monodll_joystick.o: ../../src/msw/joystick.cpp
 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) $<
@@ -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_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) $<
 
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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)\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
-       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) $<
@@ -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
-       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) $<
@@ -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
-       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) $<
@@ -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) $<
 
-.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)
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)" \
-       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)" \
@@ -1304,7 +1304,50 @@ AUILIB_OBJECTS =  \
        $(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__ \
@@ -1327,7 +1370,7 @@ RICHTEXTDLL_OBJECTS =  \
        $(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__ \
@@ -1349,7 +1392,7 @@ RICHTEXTLIB_OBJECTS =  \
        $(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__ \
@@ -1368,7 +1411,7 @@ STCDLL_OBJECTS =  \
        $(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__ \
@@ -1385,7 +1428,7 @@ STCLIB_OBJECTS =  \
        $(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__ \
@@ -1401,7 +1444,7 @@ GLDLL_OBJECTS =  \
        $(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__ \
@@ -1643,6 +1686,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS =  \
        $(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 \
@@ -2306,6 +2357,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  \
        $(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 \
@@ -4193,25 +4252,51 @@ ____wxaui_namedll_DEP = $(__auidll___depname)
 !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"
-__RUNTIME_LIBS_397 = D
+__RUNTIME_LIBS_424 = D
 !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"
-__RUNTIME_LIBS_410 = D
+__RUNTIME_LIBS_437 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_410 = $(__THREADSFLAG)
+__RUNTIME_LIBS_437 = $(__THREADSFLAG)
 !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"
-__RUNTIME_LIBS_424 = D
+__RUNTIME_LIBS_451 = D
 !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"
-__RUNTIME_LIBS_437 = D
+__RUNTIME_LIBS_464 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_437 = $(__THREADSFLAG)
+__RUNTIME_LIBS_464 = $(__THREADSFLAG)
 !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"
-__RUNTIME_LIBS_451 = D
+__RUNTIME_LIBS_478 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_451 = $(__THREADSFLAG)
+__RUNTIME_LIBS_478 = $(__THREADSFLAG)
 !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"
-__RUNTIME_LIBS_464 = D
+__RUNTIME_LIBS_491 = D
 !endif
 !if "$(RUNTIME_LIBS)" == "static"
-__RUNTIME_LIBS_464 = $(__THREADSFLAG)
+__RUNTIME_LIBS_491 = $(__THREADSFLAG)
 !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"
-__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"
-__NO_VC_CRTDBG_p_60 = /d __NO_VC_CRTDBG__
+__NO_VC_CRTDBG_p_64 = /d __NO_VC_CRTDBG__
 !endif
 !if "$(WXUNIV)" == "1"
-__WXUNIV_DEFINE_p_54 = /d __WXUNIVERSAL__
+__WXUNIV_DEFINE_p_58 = /d __WXUNIVERSAL__
 !endif
 !if "$(BUILD)" == "debug" && "$(DEBUG_FLAG)" == "default"
-__DEBUG_DEFINE_p_53 = /d __WXDEBUG__
+__DEBUG_DEFINE_p_57 = /d __WXDEBUG__
 !endif
 !if "$(DEBUG_FLAG)" == "1"
-__DEBUG_DEFINE_p_53 = /d __WXDEBUG__
+__DEBUG_DEFINE_p_57 = /d __WXDEBUG__
 !endif
 !if "$(USE_EXCEPTIONS)" == "0"
-__EXCEPTIONS_DEFINE_p_53 = /d wxNO_EXCEPTIONS
+__EXCEPTIONS_DEFINE_p_57 = /d wxNO_EXCEPTIONS
 !endif
 !if "$(USE_RTTI)" == "0"
-__RTTI_DEFINE_p_53 = /d wxNO_RTTI
+__RTTI_DEFINE_p_57 = /d wxNO_RTTI
 !endif
 !if "$(USE_THREADS)" == "0"
-__THREAD_DEFINE_p_53 = /d wxNO_THREADS
+__THREAD_DEFINE_p_57 = /d wxNO_THREADS
 !endif
 !if "$(UNICODE)" == "0"
-__UNICODE_DEFINE_p_54 = /d wxUSE_UNICODE=0
+__UNICODE_DEFINE_p_58 = /d wxUSE_UNICODE=0
 !endif
 !if "$(UNICODE)" == "1"
-__UNICODE_DEFINE_p_54 = /d _UNICODE
+__UNICODE_DEFINE_p_58 = /d _UNICODE
 !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"
-__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
@@ -4478,7 +4563,7 @@ $(OBJS):
 
 ### 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
@@ -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)_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
@@ -4822,6 +4912,25 @@ $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXD
 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) @<<
@@ -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_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
 
@@ -7724,7 +7857,7 @@ $(OBJS)\monodll_joystick.obj: ..\..\src\msw\joystick.cpp
 !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
@@ -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_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
 
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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
-       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
@@ -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)\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
-       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
@@ -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
-       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
@@ -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
-       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
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_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 &
@@ -863,6 +871,14 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS =  &
        $(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 &
@@ -2768,6 +2784,32 @@ ____wxaui_namelib_DEP =
 !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
@@ -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)" &
-       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)" &
@@ -4222,6 +4264,43 @@ AUILIB_OBJECTS =  &
        $(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) &
@@ -4325,7 +4404,7 @@ $(OBJS) :
 
 ### 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
@@ -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)_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
@@ -4813,6 +4895,42 @@ wxaui : .SYMBOLIC $(____wxaui_namedll_DEP) $(____wxaui_namelib_DEP)
 !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
@@ -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_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) $<
 
@@ -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_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) $<
 
@@ -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)\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) $<
 
index 1d9a241d7d03e04c27774aa7be74d4b9ab51ed74..9f841d28ec71c4deeade32e317da09770f594ff8 100644 (file)
@@ -206,6 +206,18 @@ Package=<4>
 \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
index 10716937cef1f90306d464f509b21120c44e437f..1fe9214bf9ecfd5e61aac022c055f19d0eabb39f 100644 (file)
@@ -5631,6 +5631,10 @@ SOURCE=..\..\include\wx\access.h
 # 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
@@ -5879,6 +5883,10 @@ SOURCE=..\..\include\wx\editlbox.h
 # 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
@@ -6087,6 +6095,10 @@ SOURCE=..\..\include\wx\listctrl.h
 # 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
@@ -6199,6 +6211,30 @@ SOURCE=..\..\include\wx\propdlg.h
 # 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
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
+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
@@ -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
+               {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
index 6067294f976bd15040710c592498bb960a42856d..36e26c891178359e21e81136f6f9e409894511f8 100644 (file)
                                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
                                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
                                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
                                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
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
+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
@@ -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
+               {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
index 53306e32887db6b8629e8d535fb372601272b672..a835dea3332fe9ed4d8ccb1126cce6edcfe15d99 100644 (file)
                        <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\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\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\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
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
-# 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.
 #
@@ -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_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
@@ -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_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
@@ -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_PROPGRID_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-propgrid       use wxPropertyGrid library
   --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; }
 
 
+          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
@@ -46209,6 +46257,16 @@ _ACEOF
    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
@@ -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_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
@@ -49562,6 +49623,11 @@ EOF
         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=""
@@ -49607,6 +49673,11 @@ EOF
         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=""
@@ -49647,6 +49718,11 @@ EOF
         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=""
@@ -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_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
@@ -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_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
@@ -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_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
@@ -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_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
@@ -51809,6 +51885,9 @@ _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
@@ -51903,9 +51982,6 @@ WXCONFIG_RESFLAGS!$WXCONFIG_RESFLAGS$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
@@ -51947,6 +52023,9 @@ _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
@@ -51963,7 +52042,7 @@ LIBOBJS!$LIBOBJS$ac_delim
 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
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(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)
@@ -6939,6 +6940,13 @@ if test "$wxUSE_AUI" = "yes"; then
    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)
@@ -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_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
index 730767ce7232daff70c1bf07bc9361d93ad8edfd..75a3d0be61d72b8d7f55337202c234cc39a524dc 100644 (file)
@@ -102,6 +102,8 @@ src/richtext/*.cpp
 
 src/aui/*.cpp
 
+src/propgrid/*.cpp
+
 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/propgrid/*.h
 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/propgrid/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/propgrid/propgrid.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/propgrid/makefile.dmc
+samples/propgrid/makefile.dms
 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/propgrid/*.cpp
+
 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/propgrid/*.h
 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/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
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/propgrid/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/propgrid/propgrid.dsp
+samples/propgrid/propgrid.dsw
 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.
 
+- 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.
 
 
@@ -300,32 +303,33 @@ All (Unix):
 
 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 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.
-- 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 wxListCtrl::Set/GetColumnsOrder() (Yury Voronov)
+- Added wxListCtrl::Set/GetColumnsOrder() (Yury Voronov).
 - 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().
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_propgrid
 </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.
 
+@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
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_PROPGRID_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_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)}
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"];
+    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"];
@@ -47,6 +48,7 @@ digraph Dependancies
     wxGL -> wxCore;
     wxHTML -> wxCore;
     wxMedia -> wxCore;
+    wxPropertyGrid -> wxAdvanced;
     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.
 
 
+@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.
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{propgrid}
 </td><td>
 @li @sample{regtest}
 @li @sample{render}
@@ -688,6 +689,21 @@ commands through menu.
 
 @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}
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_propgrid
 @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,
-   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
index 8b88602f04d2f049e864dad4542ab3056d4fd483..9c120f99b6a9c5058b51264623c085425245277e 100644 (file)
 #    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)
index 41bddf14355305c47a46909e9bd1ba01c323b98f..9fe1df35cd68b899e61c62831c1ce49ece0da0b8 100644 (file)
 // 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
 #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
 #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
 
 // ----------------------------------------------------------------------------
index 2c78ac864c15e9e312b3e6b708c13d7971b20aae..90f4a097cd77c254bb416cebb562429e272cb12e 100644 (file)
 // 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
 #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
 #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
 
 // ----------------------------------------------------------------------------
index a5b561330f73699fd625654f466a671cd83d4937..f6457c1fab3f9729f663368365ebca0dc2a3229d 100644 (file)
 // 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
 #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
 #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
 
 // ----------------------------------------------------------------------------
index d9604eb55207e39f269f53b8ee1b19bbfd864794..95a7152fedf4bba584aae1c297c11679e32e3c82 100644 (file)
 // 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
 #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
 #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
 
 // ----------------------------------------------------------------------------
index 6eef938057b45b44c8425a747e2b6689b41977ff..7a0d0a5804e9e60a1895731d99368a9a586d1e49 100644 (file)
 // 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
 #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
 
 
 // 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
 #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
 
 // ----------------------------------------------------------------------------
index 0433d57944a1c0294778556443d38da094623ce8..d25999c06777a658bb95c7a0db972554d2bdb3b5 100644 (file)
 // 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
 #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
 #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
 
 // ----------------------------------------------------------------------------
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
 
+// Use wxPropertyGrid.
+//
+// Default is 1
+//
+// Recommended setting: 1
+#define wxUSE_PROPGRID  1
+
 // Use wxStyledTextCtrl, a wxWidgets implementation of Scintilla.
 //
 // Default is 1
index c0759f852b8c1b8b54464af5eeeca22c34e70f58..a6910382af11490269b22ac30ce7d1f70d50862c 100644 (file)
 // 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
 #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
 #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
 
 // ----------------------------------------------------------------------------
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_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 \
@@ -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/propgrid/*.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_PROPGRID  0
+
 #define wxUSE_STC 0
 
 
index 715332eda844279de1c785a770ae1d7e7536a1ef..2cc1868ba0f9fcee80639ce039ce5cdea6c230dc 100644 (file)
@@ -328,6 +328,8 @@ typedef pid_t GPid;
 
 #define wxUSE_AUI       1
 
+#define wxUSE_PROPGRID  1
+
 #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
+
+// -----------------------------------------------------------------------
+