diff --git a/Makefile.in b/Makefile.in
index ddb2a298ba..dadc0cd866 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1761,6 +1761,7 @@ XRCDLL_OBJECTS = \
xrcdll_xh_grid.o \
xrcdll_xh_html.o \
xrcdll_xh_hyperlink.o \
+ xrcdll_xh_infobar.o \
xrcdll_xh_listb.o \
xrcdll_xh_listbk.o \
xrcdll_xh_listc.o \
@@ -1836,6 +1837,7 @@ XRCLIB_OBJECTS = \
xrclib_xh_grid.o \
xrclib_xh_html.o \
xrclib_xh_hyperlink.o \
+ xrclib_xh_infobar.o \
xrclib_xh_listb.o \
xrclib_xh_listbk.o \
xrclib_xh_listc.o \
@@ -4016,6 +4018,7 @@ COND_USE_GUI_1_ALL_GUI_HEADERS = \
wx/xrc/xh_grid.h \
wx/xrc/xh_html.h \
wx/xrc/xh_hyperlink.h \
+ wx/xrc/xh_infobar.h \
wx/xrc/xh_listb.h \
wx/xrc/xh_listbk.h \
wx/xrc/xh_listc.h \
@@ -4323,6 +4326,7 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS = \
monodll_xh_grid.o \
monodll_xh_html.o \
monodll_xh_hyperlink.o \
+ monodll_xh_infobar.o \
monodll_xh_listb.o \
monodll_xh_listbk.o \
monodll_xh_listc.o \
@@ -6309,6 +6313,7 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS_1 = \
monolib_xh_grid.o \
monolib_xh_html.o \
monolib_xh_hyperlink.o \
+ monolib_xh_infobar.o \
monolib_xh_listb.o \
monolib_xh_listbk.o \
monolib_xh_listc.o \
@@ -17218,6 +17223,9 @@ monodll_xh_html.o: $(srcdir)/src/xrc/xh_html.cpp $(MONODLL_ODEP)
monodll_xh_hyperlink.o: $(srcdir)/src/xrc/xh_hyperlink.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/xrc/xh_hyperlink.cpp
+monodll_xh_infobar.o: $(srcdir)/src/xrc/xh_infobar.cpp $(MONODLL_ODEP)
+ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/xrc/xh_infobar.cpp
+
monodll_xh_listb.o: $(srcdir)/src/xrc/xh_listb.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/xrc/xh_listb.cpp
@@ -22486,6 +22494,9 @@ monolib_xh_html.o: $(srcdir)/src/xrc/xh_html.cpp $(MONOLIB_ODEP)
monolib_xh_hyperlink.o: $(srcdir)/src/xrc/xh_hyperlink.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/xrc/xh_hyperlink.cpp
+monolib_xh_infobar.o: $(srcdir)/src/xrc/xh_infobar.cpp $(MONOLIB_ODEP)
+ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/xrc/xh_infobar.cpp
+
monolib_xh_listb.o: $(srcdir)/src/xrc/xh_listb.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/xrc/xh_listb.cpp
@@ -36094,6 +36105,9 @@ xrcdll_xh_html.o: $(srcdir)/src/xrc/xh_html.cpp $(XRCDLL_ODEP)
xrcdll_xh_hyperlink.o: $(srcdir)/src/xrc/xh_hyperlink.cpp $(XRCDLL_ODEP)
$(CXXC) -c -o $@ $(XRCDLL_CXXFLAGS) $(srcdir)/src/xrc/xh_hyperlink.cpp
+xrcdll_xh_infobar.o: $(srcdir)/src/xrc/xh_infobar.cpp $(XRCDLL_ODEP)
+ $(CXXC) -c -o $@ $(XRCDLL_CXXFLAGS) $(srcdir)/src/xrc/xh_infobar.cpp
+
xrcdll_xh_listb.o: $(srcdir)/src/xrc/xh_listb.cpp $(XRCDLL_ODEP)
$(CXXC) -c -o $@ $(XRCDLL_CXXFLAGS) $(srcdir)/src/xrc/xh_listb.cpp
@@ -36298,6 +36312,9 @@ xrclib_xh_html.o: $(srcdir)/src/xrc/xh_html.cpp $(XRCLIB_ODEP)
xrclib_xh_hyperlink.o: $(srcdir)/src/xrc/xh_hyperlink.cpp $(XRCLIB_ODEP)
$(CXXC) -c -o $@ $(XRCLIB_CXXFLAGS) $(srcdir)/src/xrc/xh_hyperlink.cpp
+xrclib_xh_infobar.o: $(srcdir)/src/xrc/xh_infobar.cpp $(XRCLIB_ODEP)
+ $(CXXC) -c -o $@ $(XRCLIB_CXXFLAGS) $(srcdir)/src/xrc/xh_infobar.cpp
+
xrclib_xh_listb.o: $(srcdir)/src/xrc/xh_listb.cpp $(XRCLIB_ODEP)
$(CXXC) -c -o $@ $(XRCLIB_CXXFLAGS) $(srcdir)/src/xrc/xh_listb.cpp
diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl
index c96d44bfad..01e9201a68 100644
--- a/build/bakefiles/files.bkl
+++ b/build/bakefiles/files.bkl
@@ -3096,6 +3096,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/xrc/xh_grid.cpp
src/xrc/xh_html.cpp
src/xrc/xh_hyperlink.cpp
+ src/xrc/xh_infobar.cpp
src/xrc/xh_listb.cpp
src/xrc/xh_listbk.cpp
src/xrc/xh_listc.cpp
@@ -3168,6 +3169,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/xrc/xh_grid.h
wx/xrc/xh_html.h
wx/xrc/xh_hyperlink.h
+ wx/xrc/xh_infobar.h
wx/xrc/xh_listb.h
wx/xrc/xh_listbk.h
wx/xrc/xh_listc.h
diff --git a/build/cmake/files.cmake b/build/cmake/files.cmake
index 068d7076a2..9ab246ab81 100644
--- a/build/cmake/files.cmake
+++ b/build/cmake/files.cmake
@@ -2911,6 +2911,7 @@ set(XRC_SRC
src/xrc/xh_grid.cpp
src/xrc/xh_html.cpp
src/xrc/xh_hyperlink.cpp
+ src/xrc/xh_infobar.cpp
src/xrc/xh_listb.cpp
src/xrc/xh_listbk.cpp
src/xrc/xh_listc.cpp
@@ -2984,6 +2985,7 @@ set(XRC_HDR
wx/xrc/xh_grid.h
wx/xrc/xh_html.h
wx/xrc/xh_hyperlink.h
+ wx/xrc/xh_infobar.h
wx/xrc/xh_listb.h
wx/xrc/xh_listbk.h
wx/xrc/xh_listc.h
diff --git a/build/files b/build/files
index 81488f00b6..e07a42fbc7 100644
--- a/build/files
+++ b/build/files
@@ -2855,6 +2855,7 @@ XRC_SRC =
src/xrc/xh_grid.cpp
src/xrc/xh_html.cpp
src/xrc/xh_hyperlink.cpp
+ src/xrc/xh_infobar.cpp
src/xrc/xh_listb.cpp
src/xrc/xh_listbk.cpp
src/xrc/xh_listc.cpp
@@ -2926,6 +2927,7 @@ XRC_HDR =
wx/xrc/xh_grid.h
wx/xrc/xh_html.h
wx/xrc/xh_hyperlink.h
+ wx/xrc/xh_infobar.h
wx/xrc/xh_listb.h
wx/xrc/xh_listbk.h
wx/xrc/xh_listc.h
diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc
index fb6231dad8..17b5d734a9 100644
--- a/build/msw/makefile.bcc
+++ b/build/msw/makefile.bcc
@@ -1238,6 +1238,7 @@ XRCDLL_OBJECTS = \
$(OBJS)\xrcdll_xh_grid.obj \
$(OBJS)\xrcdll_xh_html.obj \
$(OBJS)\xrcdll_xh_hyperlink.obj \
+ $(OBJS)\xrcdll_xh_infobar.obj \
$(OBJS)\xrcdll_xh_listb.obj \
$(OBJS)\xrcdll_xh_listbk.obj \
$(OBJS)\xrcdll_xh_listc.obj \
@@ -1316,6 +1317,7 @@ XRCLIB_OBJECTS = \
$(OBJS)\xrclib_xh_grid.obj \
$(OBJS)\xrclib_xh_html.obj \
$(OBJS)\xrclib_xh_hyperlink.obj \
+ $(OBJS)\xrclib_xh_infobar.obj \
$(OBJS)\xrclib_xh_listb.obj \
$(OBJS)\xrclib_xh_listbk.obj \
$(OBJS)\xrclib_xh_listc.obj \
@@ -1710,6 +1712,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_xh_grid.obj \
$(OBJS)\monodll_xh_html.obj \
$(OBJS)\monodll_xh_hyperlink.obj \
+ $(OBJS)\monodll_xh_infobar.obj \
$(OBJS)\monodll_xh_listb.obj \
$(OBJS)\monodll_xh_listbk.obj \
$(OBJS)\monodll_xh_listc.obj \
@@ -2542,6 +2545,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_xh_grid.obj \
$(OBJS)\monolib_xh_html.obj \
$(OBJS)\monolib_xh_hyperlink.obj \
+ $(OBJS)\monolib_xh_infobar.obj \
$(OBJS)\monolib_xh_listb.obj \
$(OBJS)\monolib_xh_listbk.obj \
$(OBJS)\monolib_xh_listc.obj \
@@ -7338,6 +7342,9 @@ $(OBJS)\monodll_xh_html.obj: ..\..\src\xrc\xh_html.cpp
$(OBJS)\monodll_xh_hyperlink.obj: ..\..\src\xrc\xh_hyperlink.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_hyperlink.cpp
+$(OBJS)\monodll_xh_infobar.obj: ..\..\src\xrc\xh_infobar.cpp
+ $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_infobar.cpp
+
$(OBJS)\monodll_xh_listb.obj: ..\..\src\xrc\xh_listb.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_listb.cpp
@@ -9887,6 +9894,9 @@ $(OBJS)\monolib_xh_html.obj: ..\..\src\xrc\xh_html.cpp
$(OBJS)\monolib_xh_hyperlink.obj: ..\..\src\xrc\xh_hyperlink.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_hyperlink.cpp
+$(OBJS)\monolib_xh_infobar.obj: ..\..\src\xrc\xh_infobar.cpp
+ $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_infobar.cpp
+
$(OBJS)\monolib_xh_listb.obj: ..\..\src\xrc\xh_listb.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_listb.cpp
@@ -16136,6 +16146,9 @@ $(OBJS)\xrcdll_xh_html.obj: ..\..\src\xrc\xh_html.cpp
$(OBJS)\xrcdll_xh_hyperlink.obj: ..\..\src\xrc\xh_hyperlink.cpp
$(CXX) -q -c -P -o$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_hyperlink.cpp
+$(OBJS)\xrcdll_xh_infobar.obj: ..\..\src\xrc\xh_infobar.cpp
+ $(CXX) -q -c -P -o$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_infobar.cpp
+
$(OBJS)\xrcdll_xh_listb.obj: ..\..\src\xrc\xh_listb.cpp
$(CXX) -q -c -P -o$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_listb.cpp
@@ -16343,6 +16356,9 @@ $(OBJS)\xrclib_xh_html.obj: ..\..\src\xrc\xh_html.cpp
$(OBJS)\xrclib_xh_hyperlink.obj: ..\..\src\xrc\xh_hyperlink.cpp
$(CXX) -q -c -P -o$@ $(XRCLIB_CXXFLAGS) ..\..\src\xrc\xh_hyperlink.cpp
+$(OBJS)\xrclib_xh_infobar.obj: ..\..\src\xrc\xh_infobar.cpp
+ $(CXX) -q -c -P -o$@ $(XRCLIB_CXXFLAGS) ..\..\src\xrc\xh_infobar.cpp
+
$(OBJS)\xrclib_xh_listb.obj: ..\..\src\xrc\xh_listb.cpp
$(CXX) -q -c -P -o$@ $(XRCLIB_CXXFLAGS) ..\..\src\xrc\xh_listb.cpp
diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc
index fd29216354..ed6ef1c1b5 100644
--- a/build/msw/makefile.gcc
+++ b/build/msw/makefile.gcc
@@ -1245,6 +1245,7 @@ XRCDLL_OBJECTS = \
$(OBJS)\xrcdll_xh_grid.o \
$(OBJS)\xrcdll_xh_html.o \
$(OBJS)\xrcdll_xh_hyperlink.o \
+ $(OBJS)\xrcdll_xh_infobar.o \
$(OBJS)\xrcdll_xh_listb.o \
$(OBJS)\xrcdll_xh_listbk.o \
$(OBJS)\xrcdll_xh_listc.o \
@@ -1323,6 +1324,7 @@ XRCLIB_OBJECTS = \
$(OBJS)\xrclib_xh_grid.o \
$(OBJS)\xrclib_xh_html.o \
$(OBJS)\xrclib_xh_hyperlink.o \
+ $(OBJS)\xrclib_xh_infobar.o \
$(OBJS)\xrclib_xh_listb.o \
$(OBJS)\xrclib_xh_listbk.o \
$(OBJS)\xrclib_xh_listc.o \
@@ -1735,6 +1737,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_xh_grid.o \
$(OBJS)\monodll_xh_html.o \
$(OBJS)\monodll_xh_hyperlink.o \
+ $(OBJS)\monodll_xh_infobar.o \
$(OBJS)\monodll_xh_listb.o \
$(OBJS)\monodll_xh_listbk.o \
$(OBJS)\monodll_xh_listc.o \
@@ -2573,6 +2576,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_xh_grid.o \
$(OBJS)\monolib_xh_html.o \
$(OBJS)\monolib_xh_hyperlink.o \
+ $(OBJS)\monolib_xh_infobar.o \
$(OBJS)\monolib_xh_listb.o \
$(OBJS)\monolib_xh_listbk.o \
$(OBJS)\monolib_xh_listc.o \
@@ -7520,6 +7524,9 @@ $(OBJS)\monodll_xh_html.o: ../../src/xrc/xh_html.cpp
$(OBJS)\monodll_xh_hyperlink.o: ../../src/xrc/xh_hyperlink.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\monodll_xh_infobar.o: ../../src/xrc/xh_infobar.cpp
+ $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\monodll_xh_listb.o: ../../src/xrc/xh_listb.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@@ -10069,6 +10076,9 @@ $(OBJS)\monolib_xh_html.o: ../../src/xrc/xh_html.cpp
$(OBJS)\monolib_xh_hyperlink.o: ../../src/xrc/xh_hyperlink.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\monolib_xh_infobar.o: ../../src/xrc/xh_infobar.cpp
+ $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\monolib_xh_listb.o: ../../src/xrc/xh_listb.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -16318,6 +16328,9 @@ $(OBJS)\xrcdll_xh_html.o: ../../src/xrc/xh_html.cpp
$(OBJS)\xrcdll_xh_hyperlink.o: ../../src/xrc/xh_hyperlink.cpp
$(CXX) -c -o $@ $(XRCDLL_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\xrcdll_xh_infobar.o: ../../src/xrc/xh_infobar.cpp
+ $(CXX) -c -o $@ $(XRCDLL_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\xrcdll_xh_listb.o: ../../src/xrc/xh_listb.cpp
$(CXX) -c -o $@ $(XRCDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -16525,6 +16538,9 @@ $(OBJS)\xrclib_xh_html.o: ../../src/xrc/xh_html.cpp
$(OBJS)\xrclib_xh_hyperlink.o: ../../src/xrc/xh_hyperlink.cpp
$(CXX) -c -o $@ $(XRCLIB_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\xrclib_xh_infobar.o: ../../src/xrc/xh_infobar.cpp
+ $(CXX) -c -o $@ $(XRCLIB_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\xrclib_xh_listb.o: ../../src/xrc/xh_listb.cpp
$(CXX) -c -o $@ $(XRCLIB_CXXFLAGS) $(CPPDEPS) $<
diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc
index 4fa82decac..885bcf42ff 100644
--- a/build/msw/makefile.vc
+++ b/build/msw/makefile.vc
@@ -1375,6 +1375,7 @@ XRCDLL_OBJECTS = \
$(OBJS)\xrcdll_xh_grid.obj \
$(OBJS)\xrcdll_xh_html.obj \
$(OBJS)\xrcdll_xh_hyperlink.obj \
+ $(OBJS)\xrcdll_xh_infobar.obj \
$(OBJS)\xrcdll_xh_listb.obj \
$(OBJS)\xrcdll_xh_listbk.obj \
$(OBJS)\xrcdll_xh_listc.obj \
@@ -1459,6 +1460,7 @@ XRCLIB_OBJECTS = \
$(OBJS)\xrclib_xh_grid.obj \
$(OBJS)\xrclib_xh_html.obj \
$(OBJS)\xrclib_xh_hyperlink.obj \
+ $(OBJS)\xrclib_xh_infobar.obj \
$(OBJS)\xrclib_xh_listb.obj \
$(OBJS)\xrclib_xh_listbk.obj \
$(OBJS)\xrclib_xh_listc.obj \
@@ -2027,6 +2029,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_xh_grid.obj \
$(OBJS)\monodll_xh_html.obj \
$(OBJS)\monodll_xh_hyperlink.obj \
+ $(OBJS)\monodll_xh_infobar.obj \
$(OBJS)\monodll_xh_listb.obj \
$(OBJS)\monodll_xh_listbk.obj \
$(OBJS)\monodll_xh_listc.obj \
@@ -2865,6 +2868,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_xh_grid.obj \
$(OBJS)\monolib_xh_html.obj \
$(OBJS)\monolib_xh_hyperlink.obj \
+ $(OBJS)\monolib_xh_infobar.obj \
$(OBJS)\monolib_xh_listb.obj \
$(OBJS)\monolib_xh_listbk.obj \
$(OBJS)\monolib_xh_listc.obj \
@@ -8047,6 +8051,9 @@ $(OBJS)\monodll_xh_html.obj: ..\..\src\xrc\xh_html.cpp
$(OBJS)\monodll_xh_hyperlink.obj: ..\..\src\xrc\xh_hyperlink.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_hyperlink.cpp
+$(OBJS)\monodll_xh_infobar.obj: ..\..\src\xrc\xh_infobar.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_infobar.cpp
+
$(OBJS)\monodll_xh_listb.obj: ..\..\src\xrc\xh_listb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_listb.cpp
@@ -10596,6 +10603,9 @@ $(OBJS)\monolib_xh_html.obj: ..\..\src\xrc\xh_html.cpp
$(OBJS)\monolib_xh_hyperlink.obj: ..\..\src\xrc\xh_hyperlink.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_hyperlink.cpp
+$(OBJS)\monolib_xh_infobar.obj: ..\..\src\xrc\xh_infobar.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_infobar.cpp
+
$(OBJS)\monolib_xh_listb.obj: ..\..\src\xrc\xh_listb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_listb.cpp
@@ -16845,6 +16855,9 @@ $(OBJS)\xrcdll_xh_html.obj: ..\..\src\xrc\xh_html.cpp
$(OBJS)\xrcdll_xh_hyperlink.obj: ..\..\src\xrc\xh_hyperlink.cpp
$(CXX) /c /nologo /TP /Fo$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_hyperlink.cpp
+$(OBJS)\xrcdll_xh_infobar.obj: ..\..\src\xrc\xh_infobar.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_infobar.cpp
+
$(OBJS)\xrcdll_xh_listb.obj: ..\..\src\xrc\xh_listb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(XRCDLL_CXXFLAGS) ..\..\src\xrc\xh_listb.cpp
@@ -17052,6 +17065,9 @@ $(OBJS)\xrclib_xh_html.obj: ..\..\src\xrc\xh_html.cpp
$(OBJS)\xrclib_xh_hyperlink.obj: ..\..\src\xrc\xh_hyperlink.cpp
$(CXX) /c /nologo /TP /Fo$@ $(XRCLIB_CXXFLAGS) ..\..\src\xrc\xh_hyperlink.cpp
+$(OBJS)\xrclib_xh_infobar.obj: ..\..\src\xrc\xh_infobar.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(XRCLIB_CXXFLAGS) ..\..\src\xrc\xh_infobar.cpp
+
$(OBJS)\xrclib_xh_listb.obj: ..\..\src\xrc\xh_listb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(XRCLIB_CXXFLAGS) ..\..\src\xrc\xh_listb.cpp
diff --git a/build/msw/wx_vc7_core.vcproj b/build/msw/wx_vc7_core.vcproj
index 4bf5be7495..ed6ea66d7d 100644
--- a/build/msw/wx_vc7_core.vcproj
+++ b/build/msw/wx_vc7_core.vcproj
@@ -3014,6 +3014,9 @@
+
+
diff --git a/build/msw/wx_vc7_xrc.vcproj b/build/msw/wx_vc7_xrc.vcproj
index 4460f3eb32..e9c12e9a17 100644
--- a/build/msw/wx_vc7_xrc.vcproj
+++ b/build/msw/wx_vc7_xrc.vcproj
@@ -512,6 +512,9 @@
+
+
@@ -715,6 +718,9 @@
+
+
diff --git a/build/msw/wx_vc8_core.vcproj b/build/msw/wx_vc8_core.vcproj
index 65148aa4c8..b342f06437 100644
--- a/build/msw/wx_vc8_core.vcproj
+++ b/build/msw/wx_vc8_core.vcproj
@@ -4520,6 +4520,10 @@
RelativePath="..\..\include\wx\xrc\xh_hyperlink.h"
>
+
+
diff --git a/build/msw/wx_vc8_xrc.vcproj b/build/msw/wx_vc8_xrc.vcproj
index 59bfca1714..c2e0401293 100644
--- a/build/msw/wx_vc8_xrc.vcproj
+++ b/build/msw/wx_vc8_xrc.vcproj
@@ -1185,6 +1185,10 @@
RelativePath="..\..\include\wx\xrc\xh_hyperlink.h"
>
+
+
@@ -1455,6 +1459,10 @@
RelativePath="..\..\src\xrc\xh_hyperlink.cpp"
>
+
+
diff --git a/build/msw/wx_vc9_core.vcproj b/build/msw/wx_vc9_core.vcproj
index 7fa0fffc0b..7f19366ef6 100644
--- a/build/msw/wx_vc9_core.vcproj
+++ b/build/msw/wx_vc9_core.vcproj
@@ -4516,6 +4516,10 @@
RelativePath="..\..\include\wx\xrc\xh_hyperlink.h"
>
+
+
diff --git a/build/msw/wx_vc9_xrc.vcproj b/build/msw/wx_vc9_xrc.vcproj
index 40fc608339..0a0fc1e3bb 100644
--- a/build/msw/wx_vc9_xrc.vcproj
+++ b/build/msw/wx_vc9_xrc.vcproj
@@ -1181,6 +1181,10 @@
RelativePath="..\..\include\wx\xrc\xh_hyperlink.h"
>
+
+
@@ -1451,6 +1455,10 @@
RelativePath="..\..\src\xrc\xh_hyperlink.cpp"
>
+
+
diff --git a/build/msw/wx_xrc.vcxproj b/build/msw/wx_xrc.vcxproj
index 4ef27464de..90b73196f4 100644
--- a/build/msw/wx_xrc.vcxproj
+++ b/build/msw/wx_xrc.vcxproj
@@ -486,6 +486,7 @@
+
@@ -585,6 +586,7 @@
+
@@ -625,4 +627,4 @@
-
+
\ No newline at end of file
diff --git a/build/msw/wx_xrc.vcxproj.filters b/build/msw/wx_xrc.vcxproj.filters
index 10cf2674ba..f6da18c850 100644
--- a/build/msw/wx_xrc.vcxproj.filters
+++ b/build/msw/wx_xrc.vcxproj.filters
@@ -121,6 +121,9 @@
Source Files
+
+ Source Files
+
Source Files
@@ -335,6 +338,9 @@
Common Headers
+
+ Common Headers
+
Common Headers
diff --git a/build/osx/wxcocoa.xcodeproj/project.pbxproj b/build/osx/wxcocoa.xcodeproj/project.pbxproj
index aa3402905e..69cf2c48ae 100644
--- a/build/osx/wxcocoa.xcodeproj/project.pbxproj
+++ b/build/osx/wxcocoa.xcodeproj/project.pbxproj
@@ -2286,6 +2286,9 @@
CE32C5250F2834D4B81BE898 /* appprogress.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD91A34971FB3D0299B894A5 /* appprogress.mm */; };
CE32C5250F2834D4B81BE899 /* appprogress.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD91A34971FB3D0299B894A5 /* appprogress.mm */; };
CE32C5250F2834D4B81BE89A /* appprogress.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD91A34971FB3D0299B894A5 /* appprogress.mm */; };
+ EA10DA3199813E90B39C70D3 /* xh_infobar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45C65E309F3A39598C043657 /* xh_infobar.cpp */; };
+ EA10DA3199813E90B39C70D4 /* xh_infobar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45C65E309F3A39598C043657 /* xh_infobar.cpp */; };
+ EA10DA3199813E90B39C70D5 /* xh_infobar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45C65E309F3A39598C043657 /* xh_infobar.cpp */; };
CEBAAB0C77983358A601BFFE /* jdmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = ED19EF377E653F71B1876259 /* jdmaster.c */; };
CEBAAB0C77983358A601BFFF /* jdmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = ED19EF377E653F71B1876259 /* jdmaster.c */; };
CEBAAB0C77983358A601C000 /* jdmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = ED19EF377E653F71B1876259 /* jdmaster.c */; };
@@ -4629,6 +4632,7 @@
CD72950967F33809931D4968 /* LexAbaqus.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexAbaqus.cxx; path = ../../src/stc/scintilla/lexers/LexAbaqus.cxx; sourceTree = ""; };
CDA232B9FFD33B7482E69B58 /* xh_tglbtn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xh_tglbtn.cpp; path = ../../src/xrc/xh_tglbtn.cpp; sourceTree = ""; };
CDB4AB7CDABA3A54B4F8207B /* imaggif.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = imaggif.cpp; path = ../../src/common/imaggif.cpp; sourceTree = ""; };
+ 45C65E309F3A39598C043657 /* xh_infobar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xh_infobar.cpp; path = ../../src/xrc/xh_infobar.cpp; sourceTree = ""; };
CF23AF3EFC5731B2A5BCF4A3 /* choicdgg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = choicdgg.cpp; path = ../../src/generic/choicdgg.cpp; sourceTree = ""; };
CF4F4F5211933057824B5621 /* button_osx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button_osx.cpp; path = ../../src/osx/button_osx.cpp; sourceTree = ""; };
CF502E0E4D853CBBBEC885EF /* LexerSimple.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexerSimple.cxx; path = ../../src/stc/scintilla/lexlib/LexerSimple.cxx; sourceTree = ""; };
@@ -5776,6 +5780,7 @@
93B77251C0E0382D9A8E113D /* xh_grid.cpp */,
889FFA9573A835F280A21CB4 /* xh_html.cpp */,
B4E4032CA9883CA4B25BE082 /* xh_hyperlink.cpp */,
+ 45C65E309F3A39598C043657 /* xh_infobar.cpp */,
B4DCCF66D880330A9EE9B6B2 /* xh_listb.cpp */,
57EB0085AFB93BFC88AC6FFC /* xh_listbk.cpp */,
5F5D02D60DCA35358B2780C7 /* xh_listc.cpp */,
@@ -7943,6 +7948,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ EA10DA3199813E90B39C70D5 /* xh_infobar.cpp in Sources */,
8F949B9010863F66A58FFEF3 /* xh_activityindicator.cpp in Sources */,
FBE4DB30865D3177B3A9993D /* xh_animatctrl.cpp in Sources */,
702616D38A5B345D9CC87116 /* xh_bannerwindow.cpp in Sources */,
@@ -8151,6 +8157,7 @@
9FB1E1763EFA334CA0C07C4A /* tarstrm.cpp in Sources */,
2E4747E0736B30569ACD5423 /* textbuf.cpp in Sources */,
6167245C417A32179EC37D2E /* textfile.cpp in Sources */,
+ EA10DA3199813E90B39C70D4 /* xh_infobar.cpp in Sources */,
B20B7313102232A4B3E01ABB /* threadinfo.cpp in Sources */,
98AD7D0478BA36249B03C624 /* time.cpp in Sources */,
7FC3D17B3C853FE58841002E /* timercmn.cpp in Sources */,
@@ -9378,6 +9385,7 @@
9FB1E1763EFA334CA0C07C49 /* tarstrm.cpp in Sources */,
2E4747E0736B30569ACD5422 /* textbuf.cpp in Sources */,
6167245C417A32179EC37D2D /* textfile.cpp in Sources */,
+ EA10DA3199813E90B39C70D3 /* xh_infobar.cpp in Sources */,
B20B7313102232A4B3E01ABA /* threadinfo.cpp in Sources */,
98AD7D0478BA36249B03C623 /* time.cpp in Sources */,
7FC3D17B3C853FE58841002D /* timercmn.cpp in Sources */,
diff --git a/build/osx/wxiphone.xcodeproj/project.pbxproj b/build/osx/wxiphone.xcodeproj/project.pbxproj
index 0b90d8c331..f1f6b7986b 100644
--- a/build/osx/wxiphone.xcodeproj/project.pbxproj
+++ b/build/osx/wxiphone.xcodeproj/project.pbxproj
@@ -685,6 +685,7 @@
CDC0FF253B503BA19693D68D /* xh_propdlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49BF55FA3427335097F99A2C /* xh_propdlg.cpp */; };
CE17002B5B7E375582747639 /* xh_choic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 89EC3C6F9AEF3F6DA7CEB3B3 /* xh_choic.cpp */; };
CE2C937117FE3AB599DD30B9 /* sound_osx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9B2316B32653DA0939A372D /* sound_osx.cpp */; };
+ EA10DA3199813E90B39C70D3 /* xh_infobar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45C65E309F3A39598C043657 /* xh_infobar.cpp */; };
CEBAAB0C77983358A601BFFE /* jdmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = ED19EF377E653F71B1876259 /* jdmaster.c */; };
CEC6430AEB6E3200BFA75D07 /* jfdctint.c in Sources */ = {isa = PBXBuildFile; fileRef = 90EC2A5B80EE3031BA4087B9 /* jfdctint.c */; };
CEE0D7A7D5D8323B9957A780 /* notifmsgg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 924AA3A156F834BCA1A57976 /* notifmsgg.cpp */; };
@@ -1556,6 +1557,7 @@
CD72950967F33809931D4968 /* LexAbaqus.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexAbaqus.cxx; path = ../../src/stc/scintilla/lexers/LexAbaqus.cxx; sourceTree = ""; };
CDA232B9FFD33B7482E69B58 /* xh_tglbtn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xh_tglbtn.cpp; path = ../../src/xrc/xh_tglbtn.cpp; sourceTree = ""; };
CDB4AB7CDABA3A54B4F8207B /* imaggif.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = imaggif.cpp; path = ../../src/common/imaggif.cpp; sourceTree = ""; };
+ 45C65E309F3A39598C043657 /* xh_infobar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xh_infobar.cpp; path = ../../src/xrc/xh_infobar.cpp; sourceTree = ""; };
CF23AF3EFC5731B2A5BCF4A3 /* choicdgg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = choicdgg.cpp; path = ../../src/generic/choicdgg.cpp; sourceTree = ""; };
CF4F4F5211933057824B5621 /* button_osx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button_osx.cpp; path = ../../src/osx/button_osx.cpp; sourceTree = ""; };
CF502E0E4D853CBBBEC885EF /* LexerSimple.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexerSimple.cxx; path = ../../src/stc/scintilla/lexlib/LexerSimple.cxx; sourceTree = ""; };
@@ -2330,6 +2332,7 @@
60328E6EA3793DA990E18FC1 /* xrc */ = {
isa = PBXGroup;
children = (
+ 45C65E309F3A39598C043657 /* xh_infobar.cpp */,
BB60FA0E3524391D8581AD7C /* xh_activityindicator.cpp */,
8C1E755F2408363288B2CE69 /* xh_animatctrl.cpp */,
3116006345D833509865FF7F /* xh_bannerwindow.cpp */,
@@ -3345,6 +3348,7 @@
F3AC352D6DAE3A12A5664768 /* styleparams.cpp in Sources */,
2A7640E4210334AC93366900 /* winpars.cpp in Sources */,
87AA9C5D887B3C31A2AFB49D /* htmllbox.cpp in Sources */,
+ EA10DA3199813E90B39C70D3 /* xh_infobar.cpp in Sources */,
8F949B9010863F66A58FFEF1 /* xh_activityindicator.cpp in Sources */,
FBE4DB30865D3177B3A9993B /* xh_animatctrl.cpp in Sources */,
702616D38A5B345D9CC87114 /* xh_bannerwindow.cpp in Sources */,
diff --git a/docs/doxygen/overviews/xrc_format.h b/docs/doxygen/overviews/xrc_format.h
index 83b8d7681a..6dcf45c947 100644
--- a/docs/doxygen/overviews/xrc_format.h
+++ b/docs/doxygen/overviews/xrc_format.h
@@ -392,6 +392,16 @@ Examples:
@endcode
+@subsection overview_xrcformat_type_showeffect Show Effect
+
+One of the @ref wxShowEffect values.
+
+Example:
+@code
+wxSHOW_EFFECT_EXPAND
+@endcode
+
+
@subsection overview_xrcformat_type_font Font
XRC uses similar, but more flexible, abstract description of fonts to that
@@ -1221,6 +1231,40 @@ page.
@endTable
+@subsubsection xrc_wxinfobar wxInfoBar
+
+@beginTable
+@hdr3col{property, type, description}
+@row3col{showeffect, @ref overview_xrcformat_type_showeffect,
+ The effect to use when showing the bar (optional).}
+@row3col{hideeffect, @ref overview_xrcformat_type_showeffect,
+ The effect to use when hiding the bar (optional).}
+@row3col{effectduration, integer,
+ The duration of the animation used when showing or hiding the bar
+ (optional).}
+@row3col{button, object,
+ Add a button to be shown in the info bar (see wxInfoBar::AddButton);
+ this property is of class "button" has name (can be one of standard
+ button ID) and has optional label property. If no buttons are added
+ to the info bar, the default "Close" button will be shown.}
+@endTable
+
+Example:
+@code
+
+@endcode
+
+@since 3.1.3
+
+
@subsubsection xrc_wxlistbox wxListBox
@beginTable
diff --git a/include/wx/xrc/xh_all.h b/include/wx/xrc/xh_all.h
index c61a389238..df10787b6d 100644
--- a/include/wx/xrc/xh_all.h
+++ b/include/wx/xrc/xh_all.h
@@ -45,6 +45,7 @@
#include "wx/xrc/xh_html.h"
#include "wx/xrc/xh_htmllbox.h"
#include "wx/xrc/xh_hyperlink.h"
+#include "wx/xrc/xh_infobar.h"
#include "wx/xrc/xh_listb.h"
#include "wx/xrc/xh_listc.h"
#include "wx/xrc/xh_listbk.h"
diff --git a/include/wx/xrc/xh_infobar.h b/include/wx/xrc/xh_infobar.h
new file mode 100644
index 0000000000..7c60437991
--- /dev/null
+++ b/include/wx/xrc/xh_infobar.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/xrc/xh_infobar.h
+// Purpose: XML resource handler for wxInfoBar
+// Author: Ilya Sinitsyn
+// Created: 2019-09-25
+// Copyright: (c) 2019 TT-Solutions SARL
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_XH_INFOBAR_H_
+#define _WX_XH_INFOBAR_H_
+
+#include "wx/xrc/xmlres.h"
+
+#if wxUSE_XRC && wxUSE_INFOBAR
+
+class WXDLLIMPEXP_XRC wxInfoBarXmlHandler : public wxXmlResourceHandler
+{
+ wxDECLARE_DYNAMIC_CLASS(wxInfoBarXmlHandler);
+
+public:
+ wxInfoBarXmlHandler();
+ virtual wxObject *DoCreateResource() wxOVERRIDE;
+ virtual bool CanHandle(wxXmlNode *node) wxOVERRIDE;
+
+private:
+ wxShowEffect GetShowEffect(wxString const& param);
+
+ bool m_insideBar;
+
+ wxString m_effectNames[wxSHOW_EFFECT_MAX];
+};
+
+#endif // wxUSE_XRC && wxUSE_INFOBAR
+
+#endif // _WX_XH_INFOBAR_H_
diff --git a/misc/schema/xrc_schema.rnc b/misc/schema/xrc_schema.rnc
index 3716e3bc18..7c8d5db492 100644
--- a/misc/schema/xrc_schema.rnc
+++ b/misc/schema/xrc_schema.rnc
@@ -193,6 +193,7 @@ builtinWindowClasses =
| wxGrid
| wxHtmlWindow
| wxHyperlinkCtrl
+ | wxInfoBar
| wxListBox
| wxListbook
| wxListCtrl
@@ -293,6 +294,7 @@ builtinClassesNames =
| "wxGrid"
| "wxHtmlWindow"
| "wxHyperlinkCtrl"
+ | "wxInfoBar"
| "wxListBox"
| "wxListbook"
| "wxListCtrl"
@@ -444,6 +446,12 @@ t_unsigned = xsd:nonNegativeInteger
t_float = xsd:float
t_direction = "wxLEFT" | "wxRIGHT" | "wxTOP" | "wxBOTTOM"
t_style = xsd:string { pattern = "(wx[A-Z0-9_]+)( *\| *(wx[A-Z0-9_]+))*" }
+t_showeffect = "wxSHOW_EFFECT_NONE" | "wxSHOW_EFFECT_ROLL_TO_LEFT" |
+ "wxSHOW_EFFECT_ROLL_TO_RIGHT" | "wxSHOW_EFFECT_ROLL_TO_TOP" |
+ "wxSHOW_EFFECT_ROLL_TO_BOTTOM" | "wxSHOW_EFFECT_SLIDE_TO_LEFT" |
+ "wxSHOW_EFFECT_SLIDE_TO_RIGHT" | "wxSHOW_EFFECT_SLIDE_TO_TOP" |
+ "wxSHOW_EFFECT_SLIDE_TO_BOTTOM" | "wxSHOW_EFFECT_BLEND" |
+ "wxSHOW_EFFECT_EXPAND"
t_url = string
t_colour = xsd:string { pattern = "#[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]" } |
@@ -1020,6 +1028,23 @@ wxHyperlinkCtrl =
}
+wxInfoBar =
+ element object {
+ attribute class { "wxInfoBar" } &
+ stdObjectNodeAttributes &
+ stdWindowProperties &
+ [xrc:p="o"] element effectduration {_, t_integer }* &
+ [xrc:p="o"] element showeffect {_, t_showeffect }* &
+ [xrc:p="o"] element hideeffect {_, t_showeffect }* &
+ element object {
+ attribute class { "button" } &
+ attribute name { t_identifier }? &
+ platform &
+ [xrc:p="o"] element label {_, t_text }*
+ }*
+ }
+
+
wxListBox =
element object {
attribute class { "wxListBox" } &
diff --git a/samples/xrc/myframe.cpp b/samples/xrc/myframe.cpp
index f09eea2fdc..7fcf80ccbb 100644
--- a/samples/xrc/myframe.cpp
+++ b/samples/xrc/myframe.cpp
@@ -52,6 +52,7 @@
#include "objrefdlg.h"
// For functions to manipulate the corresponding controls.
#include "wx/animate.h"
+#include "wx/infobar.h"
#include "wx/treectrl.h"
#include "wx/listctrl.h"
@@ -265,6 +266,12 @@ void MyFrame::OnControlsToolOrMenuCommand(wxCommandEvent& WXUNUSED(event))
XRCID("controls_animation_button_play"));
#endif
+#if wxUSE_INFOBAR
+ // Show the message on button click
+ dlg.Bind(wxEVT_BUTTON, &MyFrame::OnInfoBarShowMessage, this,
+ XRCID("controls_infobar_button_message"));
+#endif
+
// All done. Show the dialog.
dlg.ShowModal();
}
@@ -405,3 +412,18 @@ void MyFrame::OnAboutToolOrMenuCommand(wxCommandEvent& WXUNUSED(event))
wxMessageBox(msg, _("About XML resources demo"), wxOK | wxICON_INFORMATION, this);
}
+
+void MyFrame::OnInfoBarShowMessage(wxCommandEvent& event)
+{
+#if wxUSE_INFOBAR
+ // get the pointers we need
+ wxButton *btn = wxDynamicCast(event.GetEventObject(), wxButton);
+ if ( !btn || !btn->GetParent() )
+ return;
+
+ wxWindow *win = btn->GetParent();
+ wxInfoBar *ctrl = XRCCTRL(*win, "controls_infobar", wxInfoBar);
+ ctrl->ShowMessage("Message", wxICON_QUESTION);
+#endif
+
+}
diff --git a/samples/xrc/myframe.h b/samples/xrc/myframe.h
index c4e88deba9..5315e0bd0d 100644
--- a/samples/xrc/myframe.h
+++ b/samples/xrc/myframe.h
@@ -52,6 +52,7 @@ private:
void OnVariants(wxCommandEvent& event);
void OnRecursiveLoad(wxCommandEvent& event);
void OnAnimationCtrlPlay(wxCommandEvent& event);
+ void OnInfoBarShowMessage(wxCommandEvent& event);
// Any class wishing to process wxWidgets events must use this macro
wxDECLARE_EVENT_TABLE();
diff --git a/samples/xrc/rc/controls.xrc b/samples/xrc/rc/controls.xrc
index 40083a8379..993b2a2441 100644
--- a/samples/xrc/rc/controls.xrc
+++ b/samples/xrc/rc/controls.xrc
@@ -547,6 +547,39 @@ lay them out using wxSizers, absolute positioning, everything you like!
+
+
+
+
+ wxVERTICAL
+
+
+ wxALIGN_CENTRE|wxALL
+ 5
+
+
+
+
+
+
+
+
+
+
+ wxEXPAND
+
+ 1000
+ wxSHOW_EFFECT_EXPAND
+ wxSHOW_EFFECT_SLIDE_TO_RIGHT
+
+
+
+
+
+
+
+
+
diff --git a/src/xrc/descrip.mms b/src/xrc/descrip.mms
index 6deb8c4474..b147e4e754 100644
--- a/src/xrc/descrip.mms
+++ b/src/xrc/descrip.mms
@@ -59,7 +59,7 @@ OBJECTS=xh_bmp.obj,xh_bmpbt.obj,xh_bttn.obj,xh_cald.obj,xh_chckb.obj,\
xh_filectrl.obj,xh_cmdlinkbn.obj,xh_toolbk.obj,xh_bannerwindow.obj,\
xh_timectrl.obj,xmlreshandler.obj,xh_ribbon.obj,xh_auitoolb.obj,\
xh_aui.obj,xh_simplebook.obj,xh_activityindicator.obj,\
- xh_dataview.obj
+ xh_dataview.obj,xh_infobar.obj
SOURCES =xh_bmp.cpp,xh_bmpbt.cpp,xh_bttn.cpp,xh_cald.cpp,xh_chckb.cpp,\
xh_chckl.cpp,xh_choic.cpp,xh_combo.cpp,xh_dlg.cpp,xh_frame.cpp,\
@@ -77,7 +77,7 @@ SOURCES =xh_bmp.cpp,xh_bmpbt.cpp,xh_bttn.cpp,xh_cald.cpp,xh_chckb.cpp,\
xh_filectrl.cpp,xh_cmdlinkbn.cpp,xh_toolbk.cpp,xh_bannerwindow.cpp,\
xh_timectrl.cpp,xmlreshandler.cpp,xh_ribbon.cpp,xh_auitoolb.cpp,\
xh_aui.cpp,xh_simplebook.cpp,xh_activityindicator.cpp,\
- xh_dataview.cpp
+ xh_dataview.cpp,xh_infobar.cpp
all : $(SOURCES)
$(MMS)$(MMSQUALIFIERS) $(OBJECTS)
@@ -143,6 +143,7 @@ xh_listbk.obj : xh_listbk.cpp
xh_choicbk.obj : xh_choicbk.cpp
xh_dirpicker.obj : xh_dirpicker.cpp
xh_hyperlink.obj : xh_hyperlink.cpp
+xh_infobar.obj : xh_infobar.cpp
xh_filepicker.obj : xh_filepicker.cpp
xh_fontpicker.obj : xh_fontpicker.cpp
xh_clrpicker.obj : xh_clrpicker.cpp
diff --git a/src/xrc/xh_infobar.cpp b/src/xrc/xh_infobar.cpp
new file mode 100644
index 0000000000..23d95efc85
--- /dev/null
+++ b/src/xrc/xh_infobar.cpp
@@ -0,0 +1,111 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/xrc/xh_infobar.cpp
+// Purpose: XML resource handler for wxInfoBar
+// Author: Ilya Sinitsyn
+// Created: 2019-09-25
+// Copyright: (c) 2019 TT-Solutions SARL
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+#if wxUSE_XRC && wxUSE_INFOBAR
+
+#include "wx/xrc/xh_infobar.h"
+
+#include "wx/infobar.h"
+#include "wx/xml/xml.h"
+
+wxIMPLEMENT_DYNAMIC_CLASS(wxInfoBarXmlHandler, wxXmlResourceHandler);
+
+#define XRC_ADD_SHOW_EFFECT(style) m_effectNames[style] = #style;
+
+wxInfoBarXmlHandler::wxInfoBarXmlHandler()
+ : wxXmlResourceHandler(), m_insideBar(false)
+{
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_NONE);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_ROLL_TO_LEFT);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_ROLL_TO_RIGHT);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_ROLL_TO_TOP);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_ROLL_TO_BOTTOM);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_SLIDE_TO_LEFT);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_SLIDE_TO_RIGHT);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_SLIDE_TO_TOP);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_SLIDE_TO_BOTTOM);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_BLEND);
+ XRC_ADD_SHOW_EFFECT(wxSHOW_EFFECT_EXPAND);
+}
+
+wxObject *wxInfoBarXmlHandler::DoCreateResource()
+{
+ if ( m_class == "wxInfoBar" )
+ {
+ XRC_MAKE_INSTANCE(control, wxInfoBar)
+
+ control->Create(m_parentAsWindow, GetID());
+
+ SetupWindow(control);
+
+ wxShowEffect showEffect = GetShowEffect("showeffect");
+ wxShowEffect hideEffect = GetShowEffect("hideeffect");
+
+ if ( showEffect != wxSHOW_EFFECT_NONE || hideEffect != wxSHOW_EFFECT_NONE )
+ control->SetShowHideEffects(showEffect, hideEffect);
+
+ if ( HasParam("effectduration") )
+ control->SetEffectDuration(GetLong("effectduration"));
+
+ m_insideBar = true;
+ CreateChildrenPrivately(control);
+ m_insideBar = false;
+
+ return control;
+ }
+ else
+ {
+ // inside the element now,
+ // handle buttons
+
+ wxInfoBar * const infoBar = wxDynamicCast(m_parentAsWindow, wxInfoBar);
+ wxCHECK_MSG(infoBar, NULL, "must have wxInfoBar parent");
+
+ infoBar->AddButton(GetID(), GetText("label"));
+
+ return NULL;
+ }
+}
+
+bool wxInfoBarXmlHandler::CanHandle(wxXmlNode *node)
+{
+ return (IsOfClass(node, "wxInfoBar") ||
+ (m_insideBar && IsOfClass(node, "button")));
+}
+
+wxShowEffect wxInfoBarXmlHandler::GetShowEffect(wxString const& param)
+{
+ if ( !HasParam(param) )
+ return wxSHOW_EFFECT_NONE;
+
+ wxString const& value = GetParamValue(param);
+
+ for ( int i = 0; i < wxSHOW_EFFECT_MAX; ++i )
+ {
+ if ( value == m_effectNames[i] )
+ return static_cast(i);
+ }
+
+ ReportParamError
+ (
+ param,
+ wxString::Format("unknown show effect \"%s\"", value)
+ );
+
+ return wxSHOW_EFFECT_NONE;
+}
+
+#endif // wxUSE_XRC && wxUSE_INFOBAR
diff --git a/src/xrc/xmlrsall.cpp b/src/xrc/xmlrsall.cpp
index 988d4402ba..93596fad65 100644
--- a/src/xrc/xmlrsall.cpp
+++ b/src/xrc/xmlrsall.cpp
@@ -123,6 +123,9 @@ void wxXmlResource::InitAllHandlers()
#if wxUSE_HYPERLINKCTRL
AddHandler( new wxHyperlinkCtrlXmlHandler);
#endif
+#if wxUSE_INFOBAR
+ AddHandler(new wxInfoBarXmlHandler);
+#endif
#if wxUSE_LISTBOOK
AddHandler(new wxListbookXmlHandler);
#endif