diff --git a/Makefile.in b/Makefile.in
index aab321119f..37ae7210ff 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -3400,6 +3400,7 @@ COND_WXUNIV_0_ADVANCED_HDR = \
wx/generic/gridsel.h \
wx/generic/helpext.h \
wx/generic/hyperlink.h \
+ wx/generic/infobar.h \
wx/generic/laywin.h \
wx/generic/notifmsg.h \
wx/generic/propdlg.h \
@@ -3408,6 +3409,7 @@ COND_WXUNIV_0_ADVANCED_HDR = \
wx/generic/wizard.h \
wx/grid.h \
wx/hyperlink.h \
+ wx/infobar.h \
wx/joystick.h \
wx/laywin.h \
wx/notifmsg.h \
@@ -3443,6 +3445,7 @@ COND_WXUNIV_1_ADVANCED_HDR = \
wx/generic/gridsel.h \
wx/generic/helpext.h \
wx/generic/hyperlink.h \
+ wx/generic/infobar.h \
wx/generic/laywin.h \
wx/generic/notifmsg.h \
wx/generic/propdlg.h \
@@ -3451,6 +3454,7 @@ COND_WXUNIV_1_ADVANCED_HDR = \
wx/generic/wizard.h \
wx/grid.h \
wx/hyperlink.h \
+ wx/infobar.h \
wx/joystick.h \
wx/laywin.h \
wx/notifmsg.h \
@@ -5611,6 +5615,7 @@ COND_WXUNIV_0___ADVANCED_SRC_OBJECTS = \
monodll_gridsel.o \
monodll_helpext.o \
monodll_hyperlinkg.o \
+ monodll_infobar.o \
monodll_laywin.o \
monodll_notifmsgg.o \
monodll_odcombo.o \
@@ -5640,6 +5645,7 @@ COND_WXUNIV_1___ADVANCED_SRC_OBJECTS = \
monodll_gridsel.o \
monodll_helpext.o \
monodll_hyperlinkg.o \
+ monodll_infobar.o \
monodll_laywin.o \
monodll_notifmsgg.o \
monodll_odcombo.o \
@@ -7421,6 +7427,7 @@ COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_1 = \
monolib_gridsel.o \
monolib_helpext.o \
monolib_hyperlinkg.o \
+ monolib_infobar.o \
monolib_laywin.o \
monolib_notifmsgg.o \
monolib_odcombo.o \
@@ -7450,6 +7457,7 @@ COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_1 = \
monolib_gridsel.o \
monolib_helpext.o \
monolib_hyperlinkg.o \
+ monolib_infobar.o \
monolib_laywin.o \
monolib_notifmsgg.o \
monolib_odcombo.o \
@@ -10913,6 +10921,7 @@ COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_2 = \
advdll_gridsel.o \
advdll_helpext.o \
advdll_hyperlinkg.o \
+ advdll_infobar.o \
advdll_laywin.o \
advdll_notifmsgg.o \
advdll_odcombo.o \
@@ -10942,6 +10951,7 @@ COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_2 = \
advdll_gridsel.o \
advdll_helpext.o \
advdll_hyperlinkg.o \
+ advdll_infobar.o \
advdll_laywin.o \
advdll_notifmsgg.o \
advdll_odcombo.o \
@@ -11007,6 +11017,7 @@ COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_3 = \
advlib_gridsel.o \
advlib_helpext.o \
advlib_hyperlinkg.o \
+ advlib_infobar.o \
advlib_laywin.o \
advlib_notifmsgg.o \
advlib_odcombo.o \
@@ -11036,6 +11047,7 @@ COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_3 = \
advlib_gridsel.o \
advlib_helpext.o \
advlib_hyperlinkg.o \
+ advlib_infobar.o \
advlib_laywin.o \
advlib_notifmsgg.o \
advlib_odcombo.o \
@@ -18712,6 +18724,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_USE_GUI_1@monodll_hyperlinkg.o: $(srcdir)/src/generic/hyperlinkg.cpp $(MONODLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/hyperlinkg.cpp
+@COND_USE_GUI_1@monodll_infobar.o: $(srcdir)/src/generic/infobar.cpp $(MONODLL_ODEP)
+@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/infobar.cpp
+
@COND_USE_GUI_1@monodll_laywin.o: $(srcdir)/src/generic/laywin.cpp $(MONODLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/laywin.cpp
@@ -23482,6 +23497,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_USE_GUI_1@monolib_hyperlinkg.o: $(srcdir)/src/generic/hyperlinkg.cpp $(MONOLIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/hyperlinkg.cpp
+@COND_USE_GUI_1@monolib_infobar.o: $(srcdir)/src/generic/infobar.cpp $(MONOLIB_ODEP)
+@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/infobar.cpp
+
@COND_USE_GUI_1@monolib_laywin.o: $(srcdir)/src/generic/laywin.cpp $(MONOLIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/laywin.cpp
@@ -31969,6 +31987,9 @@ advdll_helpext.o: $(srcdir)/src/generic/helpext.cpp $(ADVDLL_ODEP)
advdll_hyperlinkg.o: $(srcdir)/src/generic/hyperlinkg.cpp $(ADVDLL_ODEP)
$(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/hyperlinkg.cpp
+advdll_infobar.o: $(srcdir)/src/generic/infobar.cpp $(ADVDLL_ODEP)
+ $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/infobar.cpp
+
advdll_laywin.o: $(srcdir)/src/generic/laywin.cpp $(ADVDLL_ODEP)
$(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/laywin.cpp
@@ -32293,6 +32314,9 @@ advlib_helpext.o: $(srcdir)/src/generic/helpext.cpp $(ADVLIB_ODEP)
advlib_hyperlinkg.o: $(srcdir)/src/generic/hyperlinkg.cpp $(ADVLIB_ODEP)
$(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/hyperlinkg.cpp
+advlib_infobar.o: $(srcdir)/src/generic/infobar.cpp $(ADVLIB_ODEP)
+ $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/infobar.cpp
+
advlib_laywin.o: $(srcdir)/src/generic/laywin.cpp $(ADVLIB_ODEP)
$(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/laywin.cpp
diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl
index 5b045f8b8d..894d467972 100644
--- a/build/bakefiles/files.bkl
+++ b/build/bakefiles/files.bkl
@@ -2829,6 +2829,7 @@ src/osx/iphone/window.mm
src/generic/gridsel.cpp
src/generic/helpext.cpp
src/generic/hyperlinkg.cpp
+ src/generic/infobar.cpp
src/generic/laywin.cpp
src/generic/notifmsgg.cpp
src/generic/odcombo.cpp
@@ -2860,6 +2861,7 @@ src/osx/iphone/window.mm
wx/generic/gridsel.h
wx/generic/helpext.h
wx/generic/hyperlink.h
+ wx/generic/infobar.h
wx/generic/laywin.h
wx/generic/notifmsg.h
wx/generic/propdlg.h
@@ -2868,6 +2870,7 @@ src/osx/iphone/window.mm
wx/generic/wizard.h
wx/grid.h
wx/hyperlink.h
+ wx/infobar.h
wx/joystick.h
wx/laywin.h
wx/notifmsg.h
diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc
index 0a09b92557..04a86a036e 100644
--- a/build/msw/makefile.bcc
+++ b/build/msw/makefile.bcc
@@ -2091,6 +2091,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gridsel.obj \
$(OBJS)\monodll_helpext.obj \
$(OBJS)\monodll_hyperlinkg.obj \
+ $(OBJS)\monodll_infobar.obj \
$(OBJS)\monodll_laywin.obj \
$(OBJS)\monodll_notifmsgg.obj \
$(OBJS)\monodll_odcombo.obj \
@@ -2130,6 +2131,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gridsel.obj \
$(OBJS)\monodll_helpext.obj \
$(OBJS)\monodll_hyperlinkg.obj \
+ $(OBJS)\monodll_infobar.obj \
$(OBJS)\monodll_laywin.obj \
$(OBJS)\monodll_notifmsgg.obj \
$(OBJS)\monodll_odcombo.obj \
@@ -2787,6 +2789,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gridsel.obj \
$(OBJS)\monolib_helpext.obj \
$(OBJS)\monolib_hyperlinkg.obj \
+ $(OBJS)\monolib_infobar.obj \
$(OBJS)\monolib_laywin.obj \
$(OBJS)\monolib_notifmsgg.obj \
$(OBJS)\monolib_odcombo.obj \
@@ -2826,6 +2829,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gridsel.obj \
$(OBJS)\monolib_helpext.obj \
$(OBJS)\monolib_hyperlinkg.obj \
+ $(OBJS)\monolib_infobar.obj \
$(OBJS)\monolib_laywin.obj \
$(OBJS)\monolib_notifmsgg.obj \
$(OBJS)\monolib_odcombo.obj \
@@ -3873,6 +3877,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\advdll_gridsel.obj \
$(OBJS)\advdll_helpext.obj \
$(OBJS)\advdll_hyperlinkg.obj \
+ $(OBJS)\advdll_infobar.obj \
$(OBJS)\advdll_laywin.obj \
$(OBJS)\advdll_notifmsgg.obj \
$(OBJS)\advdll_odcombo.obj \
@@ -3912,6 +3917,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\advdll_gridsel.obj \
$(OBJS)\advdll_helpext.obj \
$(OBJS)\advdll_hyperlinkg.obj \
+ $(OBJS)\advdll_infobar.obj \
$(OBJS)\advdll_laywin.obj \
$(OBJS)\advdll_notifmsgg.obj \
$(OBJS)\advdll_odcombo.obj \
@@ -3951,6 +3957,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\advlib_gridsel.obj \
$(OBJS)\advlib_helpext.obj \
$(OBJS)\advlib_hyperlinkg.obj \
+ $(OBJS)\advlib_infobar.obj \
$(OBJS)\advlib_laywin.obj \
$(OBJS)\advlib_notifmsgg.obj \
$(OBJS)\advlib_odcombo.obj \
@@ -3990,6 +3997,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\advlib_gridsel.obj \
$(OBJS)\advlib_helpext.obj \
$(OBJS)\advlib_hyperlinkg.obj \
+ $(OBJS)\advlib_infobar.obj \
$(OBJS)\advlib_laywin.obj \
$(OBJS)\advlib_notifmsgg.obj \
$(OBJS)\advlib_odcombo.obj \
@@ -7714,6 +7722,11 @@ $(OBJS)\monodll_hyperlinkg.obj: ..\..\src\generic\hyperlinkg.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\hyperlinkg.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monodll_infobar.obj: ..\..\src\generic\infobar.cpp
+ $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\infobar.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_laywin.obj: ..\..\src\generic\laywin.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\laywin.cpp
@@ -9990,6 +10003,11 @@ $(OBJS)\monolib_hyperlinkg.obj: ..\..\src\generic\hyperlinkg.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\hyperlinkg.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monolib_infobar.obj: ..\..\src\generic\infobar.cpp
+ $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\infobar.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_laywin.obj: ..\..\src\generic\laywin.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\laywin.cpp
@@ -13619,6 +13637,9 @@ $(OBJS)\advdll_helpext.obj: ..\..\src\generic\helpext.cpp
$(OBJS)\advdll_hyperlinkg.obj: ..\..\src\generic\hyperlinkg.cpp
$(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) ..\..\src\generic\hyperlinkg.cpp
+$(OBJS)\advdll_infobar.obj: ..\..\src\generic\infobar.cpp
+ $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) ..\..\src\generic\infobar.cpp
+
$(OBJS)\advdll_laywin.obj: ..\..\src\generic\laywin.cpp
$(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) ..\..\src\generic\laywin.cpp
@@ -13730,6 +13751,9 @@ $(OBJS)\advlib_helpext.obj: ..\..\src\generic\helpext.cpp
$(OBJS)\advlib_hyperlinkg.obj: ..\..\src\generic\hyperlinkg.cpp
$(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) ..\..\src\generic\hyperlinkg.cpp
+$(OBJS)\advlib_infobar.obj: ..\..\src\generic\infobar.cpp
+ $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) ..\..\src\generic\infobar.cpp
+
$(OBJS)\advlib_laywin.obj: ..\..\src\generic\laywin.cpp
$(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) ..\..\src\generic\laywin.cpp
diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc
index 4275624845..1c303f3b92 100644
--- a/build/msw/makefile.gcc
+++ b/build/msw/makefile.gcc
@@ -2113,6 +2113,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gridsel.o \
$(OBJS)\monodll_helpext.o \
$(OBJS)\monodll_hyperlinkg.o \
+ $(OBJS)\monodll_infobar.o \
$(OBJS)\monodll_laywin.o \
$(OBJS)\monodll_notifmsgg.o \
$(OBJS)\monodll_odcombo.o \
@@ -2152,6 +2153,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gridsel.o \
$(OBJS)\monodll_helpext.o \
$(OBJS)\monodll_hyperlinkg.o \
+ $(OBJS)\monodll_infobar.o \
$(OBJS)\monodll_laywin.o \
$(OBJS)\monodll_notifmsgg.o \
$(OBJS)\monodll_odcombo.o \
@@ -2815,6 +2817,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gridsel.o \
$(OBJS)\monolib_helpext.o \
$(OBJS)\monolib_hyperlinkg.o \
+ $(OBJS)\monolib_infobar.o \
$(OBJS)\monolib_laywin.o \
$(OBJS)\monolib_notifmsgg.o \
$(OBJS)\monolib_odcombo.o \
@@ -2854,6 +2857,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gridsel.o \
$(OBJS)\monolib_helpext.o \
$(OBJS)\monolib_hyperlinkg.o \
+ $(OBJS)\monolib_infobar.o \
$(OBJS)\monolib_laywin.o \
$(OBJS)\monolib_notifmsgg.o \
$(OBJS)\monolib_odcombo.o \
@@ -3929,6 +3933,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\advdll_gridsel.o \
$(OBJS)\advdll_helpext.o \
$(OBJS)\advdll_hyperlinkg.o \
+ $(OBJS)\advdll_infobar.o \
$(OBJS)\advdll_laywin.o \
$(OBJS)\advdll_notifmsgg.o \
$(OBJS)\advdll_odcombo.o \
@@ -3968,6 +3973,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\advdll_gridsel.o \
$(OBJS)\advdll_helpext.o \
$(OBJS)\advdll_hyperlinkg.o \
+ $(OBJS)\advdll_infobar.o \
$(OBJS)\advdll_laywin.o \
$(OBJS)\advdll_notifmsgg.o \
$(OBJS)\advdll_odcombo.o \
@@ -4011,6 +4017,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\advlib_gridsel.o \
$(OBJS)\advlib_helpext.o \
$(OBJS)\advlib_hyperlinkg.o \
+ $(OBJS)\advlib_infobar.o \
$(OBJS)\advlib_laywin.o \
$(OBJS)\advlib_notifmsgg.o \
$(OBJS)\advlib_odcombo.o \
@@ -4050,6 +4057,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\advlib_gridsel.o \
$(OBJS)\advlib_helpext.o \
$(OBJS)\advlib_hyperlinkg.o \
+ $(OBJS)\advlib_infobar.o \
$(OBJS)\advlib_laywin.o \
$(OBJS)\advlib_notifmsgg.o \
$(OBJS)\advlib_odcombo.o \
@@ -7984,6 +7992,11 @@ $(OBJS)\monodll_hyperlinkg.o: ../../src/generic/hyperlinkg.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
+ifeq ($(USE_GUI),1)
+$(OBJS)\monodll_infobar.o: ../../src/generic/infobar.cpp
+ $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+endif
+
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_laywin.o: ../../src/generic/laywin.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@@ -10372,6 +10385,11 @@ $(OBJS)\monolib_hyperlinkg.o: ../../src/generic/hyperlinkg.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
+ifeq ($(USE_GUI),1)
+$(OBJS)\monolib_infobar.o: ../../src/generic/infobar.cpp
+ $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+endif
+
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_laywin.o: ../../src/generic/laywin.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@@ -14225,6 +14243,9 @@ $(OBJS)\advdll_helpext.o: ../../src/generic/helpext.cpp
$(OBJS)\advdll_hyperlinkg.o: ../../src/generic/hyperlinkg.cpp
$(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\advdll_infobar.o: ../../src/generic/infobar.cpp
+ $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\advdll_laywin.o: ../../src/generic/laywin.cpp
$(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
@@ -14336,6 +14357,9 @@ $(OBJS)\advlib_helpext.o: ../../src/generic/helpext.cpp
$(OBJS)\advlib_hyperlinkg.o: ../../src/generic/hyperlinkg.cpp
$(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $<
+$(OBJS)\advlib_infobar.o: ../../src/generic/infobar.cpp
+ $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $<
+
$(OBJS)\advlib_laywin.o: ../../src/generic/laywin.cpp
$(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $<
diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc
index 39c20e8f0f..e714cf81fa 100644
--- a/build/msw/makefile.vc
+++ b/build/msw/makefile.vc
@@ -2283,6 +2283,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gridsel.obj \
$(OBJS)\monodll_helpext.obj \
$(OBJS)\monodll_hyperlinkg.obj \
+ $(OBJS)\monodll_infobar.obj \
$(OBJS)\monodll_laywin.obj \
$(OBJS)\monodll_notifmsgg.obj \
$(OBJS)\monodll_odcombo.obj \
@@ -2322,6 +2323,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_gridsel.obj \
$(OBJS)\monodll_helpext.obj \
$(OBJS)\monodll_hyperlinkg.obj \
+ $(OBJS)\monodll_infobar.obj \
$(OBJS)\monodll_laywin.obj \
$(OBJS)\monodll_notifmsgg.obj \
$(OBJS)\monodll_odcombo.obj \
@@ -2985,6 +2987,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gridsel.obj \
$(OBJS)\monolib_helpext.obj \
$(OBJS)\monolib_hyperlinkg.obj \
+ $(OBJS)\monolib_infobar.obj \
$(OBJS)\monolib_laywin.obj \
$(OBJS)\monolib_notifmsgg.obj \
$(OBJS)\monolib_odcombo.obj \
@@ -3024,6 +3027,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_gridsel.obj \
$(OBJS)\monolib_helpext.obj \
$(OBJS)\monolib_hyperlinkg.obj \
+ $(OBJS)\monolib_infobar.obj \
$(OBJS)\monolib_laywin.obj \
$(OBJS)\monolib_notifmsgg.obj \
$(OBJS)\monolib_odcombo.obj \
@@ -4113,6 +4117,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\advdll_gridsel.obj \
$(OBJS)\advdll_helpext.obj \
$(OBJS)\advdll_hyperlinkg.obj \
+ $(OBJS)\advdll_infobar.obj \
$(OBJS)\advdll_laywin.obj \
$(OBJS)\advdll_notifmsgg.obj \
$(OBJS)\advdll_odcombo.obj \
@@ -4152,6 +4157,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\advdll_gridsel.obj \
$(OBJS)\advdll_helpext.obj \
$(OBJS)\advdll_hyperlinkg.obj \
+ $(OBJS)\advdll_infobar.obj \
$(OBJS)\advdll_laywin.obj \
$(OBJS)\advdll_notifmsgg.obj \
$(OBJS)\advdll_odcombo.obj \
@@ -4197,6 +4203,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\advlib_gridsel.obj \
$(OBJS)\advlib_helpext.obj \
$(OBJS)\advlib_hyperlinkg.obj \
+ $(OBJS)\advlib_infobar.obj \
$(OBJS)\advlib_laywin.obj \
$(OBJS)\advlib_notifmsgg.obj \
$(OBJS)\advlib_odcombo.obj \
@@ -4236,6 +4243,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\advlib_gridsel.obj \
$(OBJS)\advlib_helpext.obj \
$(OBJS)\advlib_hyperlinkg.obj \
+ $(OBJS)\advlib_infobar.obj \
$(OBJS)\advlib_laywin.obj \
$(OBJS)\advlib_notifmsgg.obj \
$(OBJS)\advlib_odcombo.obj \
@@ -8080,6 +8088,11 @@ $(OBJS)\monodll_hyperlinkg.obj: ..\..\src\generic\hyperlinkg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\hyperlinkg.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monodll_infobar.obj: ..\..\src\generic\infobar.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\infobar.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_laywin.obj: ..\..\src\generic\laywin.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\generic\laywin.cpp
@@ -10356,6 +10369,11 @@ $(OBJS)\monolib_hyperlinkg.obj: ..\..\src\generic\hyperlinkg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\hyperlinkg.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monolib_infobar.obj: ..\..\src\generic\infobar.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\infobar.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_laywin.obj: ..\..\src\generic\laywin.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\generic\laywin.cpp
@@ -13985,6 +14003,9 @@ $(OBJS)\advdll_helpext.obj: ..\..\src\generic\helpext.cpp
$(OBJS)\advdll_hyperlinkg.obj: ..\..\src\generic\hyperlinkg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) ..\..\src\generic\hyperlinkg.cpp
+$(OBJS)\advdll_infobar.obj: ..\..\src\generic\infobar.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) ..\..\src\generic\infobar.cpp
+
$(OBJS)\advdll_laywin.obj: ..\..\src\generic\laywin.cpp
$(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) ..\..\src\generic\laywin.cpp
@@ -14096,6 +14117,9 @@ $(OBJS)\advlib_helpext.obj: ..\..\src\generic\helpext.cpp
$(OBJS)\advlib_hyperlinkg.obj: ..\..\src\generic\hyperlinkg.cpp
$(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) ..\..\src\generic\hyperlinkg.cpp
+$(OBJS)\advlib_infobar.obj: ..\..\src\generic\infobar.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) ..\..\src\generic\infobar.cpp
+
$(OBJS)\advlib_laywin.obj: ..\..\src\generic\laywin.cpp
$(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) ..\..\src\generic\laywin.cpp
diff --git a/build/msw/makefile.wat b/build/msw/makefile.wat
index df0e1f67df..87cb6dc4eb 100644
--- a/build/msw/makefile.wat
+++ b/build/msw/makefile.wat
@@ -735,6 +735,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = &
$(OBJS)\monodll_gridsel.obj &
$(OBJS)\monodll_helpext.obj &
$(OBJS)\monodll_hyperlinkg.obj &
+ $(OBJS)\monodll_infobar.obj &
$(OBJS)\monodll_laywin.obj &
$(OBJS)\monodll_notifmsgg.obj &
$(OBJS)\monodll_odcombo.obj &
@@ -774,6 +775,7 @@ ____ADVANCED_SRC_FILENAMES_OBJECTS = &
$(OBJS)\monodll_gridsel.obj &
$(OBJS)\monodll_helpext.obj &
$(OBJS)\monodll_hyperlinkg.obj &
+ $(OBJS)\monodll_infobar.obj &
$(OBJS)\monodll_laywin.obj &
$(OBJS)\monodll_notifmsgg.obj &
$(OBJS)\monodll_odcombo.obj &
@@ -1442,6 +1444,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = &
$(OBJS)\monolib_gridsel.obj &
$(OBJS)\monolib_helpext.obj &
$(OBJS)\monolib_hyperlinkg.obj &
+ $(OBJS)\monolib_infobar.obj &
$(OBJS)\monolib_laywin.obj &
$(OBJS)\monolib_notifmsgg.obj &
$(OBJS)\monolib_odcombo.obj &
@@ -1481,6 +1484,7 @@ ____ADVANCED_SRC_FILENAMES_1_OBJECTS = &
$(OBJS)\monolib_gridsel.obj &
$(OBJS)\monolib_helpext.obj &
$(OBJS)\monolib_hyperlinkg.obj &
+ $(OBJS)\monolib_infobar.obj &
$(OBJS)\monolib_laywin.obj &
$(OBJS)\monolib_notifmsgg.obj &
$(OBJS)\monolib_odcombo.obj &
@@ -2572,6 +2576,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = &
$(OBJS)\advdll_gridsel.obj &
$(OBJS)\advdll_helpext.obj &
$(OBJS)\advdll_hyperlinkg.obj &
+ $(OBJS)\advdll_infobar.obj &
$(OBJS)\advdll_laywin.obj &
$(OBJS)\advdll_notifmsgg.obj &
$(OBJS)\advdll_odcombo.obj &
@@ -2611,6 +2616,7 @@ ____ADVANCED_SRC_FILENAMES_2_OBJECTS = &
$(OBJS)\advdll_gridsel.obj &
$(OBJS)\advdll_helpext.obj &
$(OBJS)\advdll_hyperlinkg.obj &
+ $(OBJS)\advdll_infobar.obj &
$(OBJS)\advdll_laywin.obj &
$(OBJS)\advdll_notifmsgg.obj &
$(OBJS)\advdll_odcombo.obj &
@@ -2656,6 +2662,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = &
$(OBJS)\advlib_gridsel.obj &
$(OBJS)\advlib_helpext.obj &
$(OBJS)\advlib_hyperlinkg.obj &
+ $(OBJS)\advlib_infobar.obj &
$(OBJS)\advlib_laywin.obj &
$(OBJS)\advlib_notifmsgg.obj &
$(OBJS)\advlib_odcombo.obj &
@@ -2695,6 +2702,7 @@ ____ADVANCED_SRC_FILENAMES_3_OBJECTS = &
$(OBJS)\advlib_gridsel.obj &
$(OBJS)\advlib_helpext.obj &
$(OBJS)\advlib_hyperlinkg.obj &
+ $(OBJS)\advlib_infobar.obj &
$(OBJS)\advlib_laywin.obj &
$(OBJS)\advlib_notifmsgg.obj &
$(OBJS)\advlib_odcombo.obj &
@@ -8251,6 +8259,11 @@ $(OBJS)\monodll_hyperlinkg.obj : .AUTODEPEND ..\..\src\generic\hyperlinkg.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
!endif
+!ifeq USE_GUI 1
+$(OBJS)\monodll_infobar.obj : .AUTODEPEND ..\..\src\generic\infobar.cpp
+ $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+!endif
+
!ifeq USE_GUI 1
$(OBJS)\monodll_laywin.obj : .AUTODEPEND ..\..\src\generic\laywin.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
@@ -10639,6 +10652,11 @@ $(OBJS)\monolib_hyperlinkg.obj : .AUTODEPEND ..\..\src\generic\hyperlinkg.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
!endif
+!ifeq USE_GUI 1
+$(OBJS)\monolib_infobar.obj : .AUTODEPEND ..\..\src\generic\infobar.cpp
+ $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+!endif
+
!ifeq USE_GUI 1
$(OBJS)\monolib_laywin.obj : .AUTODEPEND ..\..\src\generic\laywin.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
@@ -14492,6 +14510,9 @@ $(OBJS)\advdll_helpext.obj : .AUTODEPEND ..\..\src\generic\helpext.cpp
$(OBJS)\advdll_hyperlinkg.obj : .AUTODEPEND ..\..\src\generic\hyperlinkg.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $<
+$(OBJS)\advdll_infobar.obj : .AUTODEPEND ..\..\src\generic\infobar.cpp
+ $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $<
+
$(OBJS)\advdll_laywin.obj : .AUTODEPEND ..\..\src\generic\laywin.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $<
@@ -14603,6 +14624,9 @@ $(OBJS)\advlib_helpext.obj : .AUTODEPEND ..\..\src\generic\helpext.cpp
$(OBJS)\advlib_hyperlinkg.obj : .AUTODEPEND ..\..\src\generic\hyperlinkg.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $<
+$(OBJS)\advlib_infobar.obj : .AUTODEPEND ..\..\src\generic\infobar.cpp
+ $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $<
+
$(OBJS)\advlib_laywin.obj : .AUTODEPEND ..\..\src\generic\laywin.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $<
diff --git a/build/msw/wx_adv.dsp b/build/msw/wx_adv.dsp
index 93220d846d..59a4f71ca9 100644
--- a/build/msw/wx_adv.dsp
+++ b/build/msw/wx_adv.dsp
@@ -529,6 +529,10 @@ SOURCE=..\..\src\generic\hyperlinkg.cpp
# End Source File
# Begin Source File
+SOURCE=..\..\src\generic\infobar.cpp
+# End Source File
+# Begin Source File
+
SOURCE=..\..\src\generic\laywin.cpp
# End Source File
# Begin Source File
@@ -878,6 +882,10 @@ SOURCE=..\..\include\wx\generic\hyperlink.h
# End Source File
# Begin Source File
+SOURCE=..\..\include\wx\generic\infobar.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\include\wx\generic\laywin.h
# End Source File
# Begin Source File
@@ -950,6 +958,10 @@ SOURCE=..\..\include\wx\hyperlink.h
# End Source File
# Begin Source File
+SOURCE=..\..\include\wx\infobar.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\include\wx\joystick.h
# End Source File
# Begin Source File
diff --git a/build/msw/wx_core.dsp b/build/msw/wx_core.dsp
index 943c51e42b..99b2a21a4b 100644
--- a/build/msw/wx_core.dsp
+++ b/build/msw/wx_core.dsp
@@ -5327,6 +5327,10 @@ SOURCE=..\..\include\wx\generic\hyperlink.h
# End Source File
# Begin Source File
+SOURCE=..\..\include\wx\generic\infobar.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\include\wx\generic\laywin.h
# End Source File
# Begin Source File
@@ -6119,6 +6123,10 @@ SOURCE=..\..\include\wx\imagxpm.h
# End Source File
# Begin Source File
+SOURCE=..\..\include\wx\infobar.h
+# End Source File
+# Begin Source File
+
SOURCE=..\..\include\wx\joystick.h
# End Source File
# Begin Source File
diff --git a/build/msw/wx_vc7_adv.vcproj b/build/msw/wx_vc7_adv.vcproj
index aa30ddbe51..60167949f3 100644
--- a/build/msw/wx_vc7_adv.vcproj
+++ b/build/msw/wx_vc7_adv.vcproj
@@ -731,6 +731,9 @@
RelativePath="..\..\src\generic\hyperlinkg.cpp">
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1344,6 +1348,10 @@
>
+
+
@@ -1417,6 +1425,10 @@
>
+
+
diff --git a/build/msw/wx_vc8_core.vcproj b/build/msw/wx_vc8_core.vcproj
index 5c8a520815..8f288659b4 100644
--- a/build/msw/wx_vc8_core.vcproj
+++ b/build/msw/wx_vc8_core.vcproj
@@ -6161,6 +6161,10 @@
>
+
+
@@ -6956,6 +6960,10 @@
>
+
+
diff --git a/build/msw/wx_vc9_adv.vcproj b/build/msw/wx_vc9_adv.vcproj
index d08a827378..0828623f03 100644
--- a/build/msw/wx_vc9_adv.vcproj
+++ b/build/msw/wx_vc9_adv.vcproj
@@ -1005,6 +1005,10 @@
>
+
+
@@ -1340,6 +1344,10 @@
>
+
+
@@ -1413,6 +1421,10 @@
>
+
+
diff --git a/build/msw/wx_vc9_core.vcproj b/build/msw/wx_vc9_core.vcproj
index 27145847a2..2f038474de 100644
--- a/build/msw/wx_vc9_core.vcproj
+++ b/build/msw/wx_vc9_core.vcproj
@@ -6157,6 +6157,10 @@
>
+
+
@@ -6952,6 +6956,10 @@
>
+
+
diff --git a/configure b/configure
index 19de3a9597..ec55083a72 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.in Id: configure.in 62071 2009-09-24 12:36:34Z JS .
+# From configure.in Id.
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for wxWidgets 2.9.1.
#
@@ -1818,6 +1818,7 @@ Optional Features:
--enable-headerctrl use wxHeaderCtrl class
--enable-hyperlink use wxHyperlinkCtrl class
--enable-imaglist use wxImageList class
+ --enable-infobar use wxInfoBar class
--enable-listbook use wxListbook class
--enable-listbox use wxListBox class
--enable-listctrl use wxListCtrl class
@@ -10886,6 +10887,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}-infobar" >&5
+echo $ECHO_N "checking for --${enablestring:-enable}-infobar... $ECHO_C" >&6; }
+ # Check whether --enable-infobar was given.
+if test "${enable_infobar+set}" = set; then
+ enableval=$enable_infobar;
+ if test "$enableval" = yes; then
+ wx_cv_use_infobar='wxUSE_INFOBAR=yes'
+ else
+ wx_cv_use_infobar='wxUSE_INFOBAR=no'
+ fi
+
+else
+
+ wx_cv_use_infobar='wxUSE_INFOBAR=${'DEFAULT_wxUSE_INFOBAR":-$defaultval}"
+
+fi
+
+
+ eval "$wx_cv_use_infobar"
+
+ if test x"$enablestring" = xdisable; then
+ if test $wxUSE_INFOBAR = no; then
+ result=yes
+ else
+ result=no
+ fi
+ else
+ result=$wxUSE_INFOBAR
+ fi
+
+ { echo "$as_me:$LINENO: result: $result" >&5
+echo "${ECHO_T}$result" >&6; }
+
+
enablestring=
defaultval=$wxUSE_ALL_FEATURES
if test -z "$defaultval"; then
@@ -45948,6 +45993,13 @@ _ACEOF
fi
+if test "$wxUSE_INFOBAR" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define wxUSE_INFOBAR 1
+_ACEOF
+
+fi
+
if test "$wxUSE_LISTBOOK" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define wxUSE_LISTBOOK 1
diff --git a/configure.in b/configure.in
index 5f7b38cfb0..7d7c54f754 100644
--- a/configure.in
+++ b/configure.in
@@ -917,6 +917,7 @@ WX_ARG_FEATURE(grid, [ --enable-grid use wxGrid class], wxUSE_
WX_ARG_FEATURE(headerctrl, [ --enable-headerctrl use wxHeaderCtrl class], wxUSE_HEADERCTRL)
WX_ARG_FEATURE(hyperlink, [ --enable-hyperlink use wxHyperlinkCtrl class], wxUSE_HYPERLINKCTRL)
WX_ARG_FEATURE(imaglist, [ --enable-imaglist use wxImageList class], wxUSE_IMAGLIST)
+WX_ARG_FEATURE(infobar, [ --enable-infobar use wxInfoBar class], wxUSE_INFOBAR)
WX_ARG_FEATURE(listbook, [ --enable-listbook use wxListbook class], wxUSE_LISTBOOK)
WX_ARG_FEATURE(listbox, [ --enable-listbox use wxListBox class], wxUSE_LISTBOX)
WX_ARG_FEATURE(listctrl, [ --enable-listctrl use wxListCtrl class], wxUSE_LISTCTRL)
@@ -6687,6 +6688,10 @@ if test "$wxUSE_IMAGLIST" = "yes"; then
AC_DEFINE(wxUSE_IMAGLIST)
fi
+if test "$wxUSE_INFOBAR" = "yes"; then
+ AC_DEFINE(wxUSE_INFOBAR)
+fi
+
if test "$wxUSE_LISTBOOK" = "yes"; then
AC_DEFINE(wxUSE_LISTBOOK)
USES_CONTROLS=1
diff --git a/docs/changes.txt b/docs/changes.txt
index 355904376a..5a34ed263b 100644
--- a/docs/changes.txt
+++ b/docs/changes.txt
@@ -408,6 +408,7 @@ All:
All (GUI):
- Added support for showing bitmaps in wxButton.
+- Added wxInfoBar.
- Added support for corner, row and column headers renderers to wxGrid.
- wxWindow::SetAutoLayout() now works for all windows, not just panels.
- Support wxListCtrl columns, items and image lists in XRC (Kinaou Hervé).
diff --git a/docs/doxygen/mainpages/cat_classes.h b/docs/doxygen/mainpages/cat_classes.h
index 97820dfb6a..a43e3ba187 100644
--- a/docs/doxygen/mainpages/cat_classes.h
+++ b/docs/doxygen/mainpages/cat_classes.h
@@ -239,6 +239,7 @@ The following are a variety of classes that are derived from wxWindow.
@li wxHVScrolledWindow: As ::wxScrolledWindow but supports scroll units of
variable sizes.
@li wxGrid: A grid (table) window
+@li wxInfoBar: An information bar usually shown on top of the main window.
@li wxSplitterWindow: Window which can be split vertically or horizontally
@li wxStatusBar: Implements the status bar on a frame
@li wxToolBar: Toolbar class
diff --git a/include/wx/chkconf.h b/include/wx/chkconf.h
index 0d4f0b008c..29868206a8 100644
--- a/include/wx/chkconf.h
+++ b/include/wx/chkconf.h
@@ -696,6 +696,14 @@
# endif
#endif /* !defined(wxUSE_IMAGLIST) */
+#ifndef wxUSE_INFOBAR
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_INFOBAR must be defined."
+# else
+# define wxUSE_INFOBAR 0
+# endif
+#endif /* !defined(wxUSE_INFOBAR) */
+
#ifndef wxUSE_JOYSTICK
# ifdef wxABORT_ON_CONFIG_ERROR
# error "wxUSE_JOYSTICK must be defined."
diff --git a/include/wx/generic/infobar.h b/include/wx/generic/infobar.h
new file mode 100644
index 0000000000..9b2109028f
--- /dev/null
+++ b/include/wx/generic/infobar.h
@@ -0,0 +1,107 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/generic/infobar.h
+// Purpose: generic wxInfoBar class declaration
+// Author: Vadim Zeitlin
+// Created: 2009-07-28
+// RCS-ID: $Id: wxhead.h,v 1.11 2009-06-29 10:23:04 zeitlin Exp $
+// Copyright: (c) 2009 Vadim Zeitlin
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_GENERIC_INFOBAR_H_
+#define _WX_GENERIC_INFOBAR_H_
+
+class WXDLLIMPEXP_FWD_CORE wxBitmapButton;
+class WXDLLIMPEXP_FWD_CORE wxStaticBitmap;
+class WXDLLIMPEXP_FWD_CORE wxStaticText;
+
+// ----------------------------------------------------------------------------
+// wxInfoBar
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxInfoBar : public wxInfoBarBase
+{
+public:
+ // the usual ctors and Create() but remember that info bar is created
+ // hidden
+ wxInfoBar() { Init(); }
+
+ wxInfoBar(wxWindow *parent, wxWindowID winid = wxID_ANY)
+ {
+ Init();
+ Create(parent, winid);
+ }
+
+ bool Create(wxWindow *parent, wxWindowID winid = wxID_ANY);
+
+
+ // implement base class methods
+ // ----------------------------
+
+ virtual void ShowMessage(const wxString& msg, int flags = wxICON_NONE);
+
+
+ // methods specific to this version
+ // --------------------------------
+
+ // set the effect(s) to use when showing/hiding the bar, may be
+ // wxSHOW_EFFECT_NONE to disable any effects entirely
+ //
+ // by default, slide to bottom/top is used when it's positioned on the top
+ // of the window for showing/hiding it and top/bottom when it's positioned
+ // at the bottom
+ void SetShowHideEffects(wxShowEffect showEffect, wxShowEffect hideEffect)
+ {
+ m_showEffect = showEffect;
+ m_hideEffect = hideEffect;
+ }
+
+ // get effect used when showing/hiding the window
+ wxShowEffect GetShowEffect() const { return m_showEffect; }
+ wxShowEffect GetHideEffect() const { return m_hideEffect; }
+
+ // set the duration of animation used when showing/hiding the bar, in ms
+ void SetEffectDuration(int duration) { m_effectDuration = duration; }
+
+ // get the currently used effect animation duration
+ int GetEffectDuration() const { return m_effectDuration; }
+
+private:
+ // common part of all ctors
+ void Init();
+
+ // handler for the close button
+ void OnButton(wxCommandEvent& event);
+
+ // update the parent after we're shown or hidden
+ void UpdateParent();
+
+ // change the parent background colour to match that of our sibling
+ void ChangeParentBackground();
+
+ // restore the parent background changed by the above function
+ void RestoreParentBackground();
+
+ // show/hide the bar
+ void DoShow();
+ void DoHide();
+
+
+ // different controls making up the bar
+ wxStaticBitmap *m_icon;
+ wxStaticText *m_text;
+ wxBitmapButton *m_button;
+
+ // the effects to use when showing/hiding and duration for them
+ wxShowEffect m_showEffect,
+ m_hideEffect;
+ int m_effectDuration;
+
+ // the original parent background colour, before we changed it
+ wxColour m_origParentBgCol;
+
+ wxDECLARE_NO_COPY_CLASS(wxInfoBar);
+};
+
+#endif // _WX_GENERIC_INFOBAR_H_
+
diff --git a/include/wx/infobar.h b/include/wx/infobar.h
new file mode 100644
index 0000000000..ffa7aadcd9
--- /dev/null
+++ b/include/wx/infobar.h
@@ -0,0 +1,49 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/infobar.h
+// Purpose: declaration of wxInfoBarBase defining common API of wxInfoBar
+// Author: Vadim Zeitlin
+// Created: 2009-07-28
+// RCS-ID: $Id: wxhead.h,v 1.11 2009-06-29 10:23:04 zeitlin Exp $
+// Copyright: (c) 2009 Vadim Zeitlin
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_INFOBAR_H_
+#define _WX_INFOBAR_H_
+
+#include "wx/defs.h"
+
+#if wxUSE_INFOBAR
+
+#include "wx/window.h"
+
+// ----------------------------------------------------------------------------
+// wxInfoBar shows non-critical but important information to the user
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxInfoBarBase : public wxWindow
+{
+public:
+ // real ctors are provided by the derived classes, just notice that unlike
+ // most of the other windows, info bar is created hidden and must be
+ // explicitly shown when it is needed (this is done because it is supposed
+ // to be shown only intermittently and hiding it after creating it from the
+ // user code would result in flicker)
+ wxInfoBarBase() { }
+
+
+ // show the info bar with the given message and optionally an icon
+ virtual void ShowMessage(const wxString& msg, int flags = wxICON_NONE) = 0;
+
+private:
+ wxDECLARE_NO_COPY_CLASS(wxInfoBarBase);
+};
+
+// include platform-dependent implementation
+//
+// TODO-GTK: implement a native version using GtkInfoBar (GTK+ 2.18+)
+#include "wx/generic/infobar.h"
+
+#endif // wxUSE_INFOBAR
+
+#endif // _WX_INFOBAR_H_
diff --git a/include/wx/motif/setup0.h b/include/wx/motif/setup0.h
index 37aa22eb2a..35117a9acc 100644
--- a/include/wx/motif/setup0.h
+++ b/include/wx/motif/setup0.h
@@ -570,6 +570,14 @@
// possible in which case setting this to 0 can gain up to 100KB.
#define wxUSE_VARIANT 1
+// Support for wxAny class, the successor for wxVariant.
+//
+// Default is 1.
+//
+// Recommended setting: 1 unless you want to reduce the library size by a small amount,
+// or your compiler cannot for some reason cope with complexity of templates used.
+#define wxUSE_ANY 1
+
// Support for regular expression matching via wxRegEx class: enable this to
// use POSIX regular expressions in your code. You need to compile regex
// library from src/regex to use it under Windows.
@@ -891,6 +899,14 @@
// enumerated above, then this class is mostly useless too)
#define wxUSE_IMAGLIST 1
+// Use wxInfoBar class.
+//
+// Default is 1.
+//
+// Recommended setting: 1 (but can be disabled without problems as nothing
+// depends on it)
+#define wxUSE_INFOBAR 1
+
// Use wxMenu, wxMenuBar, wxMenuItem.
//
// Default is 1.
diff --git a/include/wx/msw/setup0.h b/include/wx/msw/setup0.h
index 9deacf6e96..a83367c838 100644
--- a/include/wx/msw/setup0.h
+++ b/include/wx/msw/setup0.h
@@ -899,6 +899,14 @@
// enumerated above, then this class is mostly useless too)
#define wxUSE_IMAGLIST 1
+// Use wxInfoBar class.
+//
+// Default is 1.
+//
+// Recommended setting: 1 (but can be disabled without problems as nothing
+// depends on it)
+#define wxUSE_INFOBAR 1
+
// Use wxMenu, wxMenuBar, wxMenuItem.
//
// Default is 1.
diff --git a/include/wx/msw/wince/setup.h b/include/wx/msw/wince/setup.h
index e9d70cee44..8de143f395 100644
--- a/include/wx/msw/wince/setup.h
+++ b/include/wx/msw/wince/setup.h
@@ -899,6 +899,14 @@
// enumerated above, then this class is mostly useless too)
#define wxUSE_IMAGLIST 1
+// Use wxInfoBar class.
+//
+// Default is 1.
+//
+// Recommended setting: 1 (but can be disabled without problems as nothing
+// depends on it)
+#define wxUSE_INFOBAR 1
+
// Use wxMenu, wxMenuBar, wxMenuItem.
//
// Default is 1.
diff --git a/include/wx/os2/setup0.h b/include/wx/os2/setup0.h
index 5403761a21..68b80cd00b 100644
--- a/include/wx/os2/setup0.h
+++ b/include/wx/os2/setup0.h
@@ -899,6 +899,14 @@
// enumerated above, then this class is mostly useless too)
#define wxUSE_IMAGLIST 1
+// Use wxInfoBar class.
+//
+// Default is 1.
+//
+// Recommended setting: 1 (but can be disabled without problems as nothing
+// depends on it)
+#define wxUSE_INFOBAR 1
+
// Use wxMenu, wxMenuBar, wxMenuItem.
//
// Default is 1.
diff --git a/include/wx/osx/setup0.h b/include/wx/osx/setup0.h
index 2af5514a2f..7b2957c5fb 100644
--- a/include/wx/osx/setup0.h
+++ b/include/wx/osx/setup0.h
@@ -900,6 +900,14 @@
// enumerated above, then this class is mostly useless too)
#define wxUSE_IMAGLIST 1
+// Use wxInfoBar class.
+//
+// Default is 1.
+//
+// Recommended setting: 1 (but can be disabled without problems as nothing
+// depends on it)
+#define wxUSE_INFOBAR 1
+
// Use wxMenu, wxMenuBar, wxMenuItem.
//
// Default is 1.
diff --git a/include/wx/palmos/setup0.h b/include/wx/palmos/setup0.h
index 33b7c3fa88..cd01548d64 100644
--- a/include/wx/palmos/setup0.h
+++ b/include/wx/palmos/setup0.h
@@ -899,6 +899,14 @@
// enumerated above, then this class is mostly useless too)
#define wxUSE_IMAGLIST 1
+// Use wxInfoBar class.
+//
+// Default is 1.
+//
+// Recommended setting: 1 (but can be disabled without problems as nothing
+// depends on it)
+#define wxUSE_INFOBAR 1
+
// Use wxMenu, wxMenuBar, wxMenuItem.
//
// Default is 1.
diff --git a/include/wx/setup_inc.h b/include/wx/setup_inc.h
index b014a90b88..7f591cbadc 100644
--- a/include/wx/setup_inc.h
+++ b/include/wx/setup_inc.h
@@ -895,6 +895,14 @@
// enumerated above, then this class is mostly useless too)
#define wxUSE_IMAGLIST 1
+// Use wxInfoBar class.
+//
+// Default is 1.
+//
+// Recommended setting: 1 (but can be disabled without problems as nothing
+// depends on it)
+#define wxUSE_INFOBAR 1
+
// Use wxMenu, wxMenuBar, wxMenuItem.
//
// Default is 1.
diff --git a/include/wx/univ/setup0.h b/include/wx/univ/setup0.h
index 7f9cb99638..b57946e6c8 100644
--- a/include/wx/univ/setup0.h
+++ b/include/wx/univ/setup0.h
@@ -898,6 +898,14 @@
// enumerated above, then this class is mostly useless too)
#define wxUSE_IMAGLIST 1
+// Use wxInfoBar class.
+//
+// Default is 1.
+//
+// Recommended setting: 1 (but can be disabled without problems as nothing
+// depends on it)
+#define wxUSE_INFOBAR 1
+
// Use wxMenu, wxMenuBar, wxMenuItem.
//
// Default is 1.
diff --git a/interface/wx/infobar.h b/interface/wx/infobar.h
new file mode 100644
index 0000000000..70f662b95e
--- /dev/null
+++ b/interface/wx/infobar.h
@@ -0,0 +1,213 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/infobar.h
+// Purpose: interface of wxInfoBar
+// Author: Vadim Zeitlin
+// RCS-ID: $Id$
+// Copyright: (c) 2009 Vadim Zeitlin
+// Licence: wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+ An info bar is a transient window shown at top or bottom of its parent
+ window to display non-critical information to the user.
+
+ This class provides another way to show messages to the user, intermediate
+ between message boxes and status bar messages. The message boxes are modal
+ and thus interrupt the users work flow and should be used sparingly for
+ this reason. However status bar messages are often too easy not to notice
+ at all. An info bar provides a way to present the messages which has a much
+ higher chance to be noticed by the user but without being annoying.
+
+ Info bar may show an icon (on the left), text message and, optionally,
+ buttons allowing the user to react to the information presented. It always
+ has a close button at the right allowing the user to dismiss it so it isn't
+ necessary to provide a button just to close it.
+
+ wxInfoBar calls its parent wxWindow::Layout() method and assumes that it
+ will change the parent layout appropriately depending on whether the info
+ bar itself is shown or hidden. Usually this is achieved by simply using a
+ sizer for the parent window layout and adding wxInfoBar to this sizer as
+ one of the items. Considering the usual placement of the info bars,
+ normally this sizer should be a vertical wxBoxSizer and the bar its first
+ or last element so the simplest possible example of using this class would
+ be:
+ @code
+ class MyFrame : public wxFrame
+ {
+ ...
+
+ wxInfoBar *m_infoBar;
+ };
+
+ MyFrame::MyFrame()
+ {
+ ...
+ m_infoBar = new wxInfoBar(this);
+
+ wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+ sizer->Add(m_infoBar, wxSizerFlags().Expand());
+ ... add other frame controls to the sizer ...
+ SetSizer(sizer);
+ }
+
+ void MyFrame::SomeMethod()
+ {
+ m_infoBar->ShowMessage("Something happend", wxICON_INFORMATION);
+ }
+ @endcode
+
+ See the dialogs sample for more sophisticated examples.
+
+
+ Only generic implementation of this class exists currently but it is
+ planned to provide a native GTK+-based version in future wxWidgets releases
+ so avoid the use of the methods marked "generic only" for maximal
+ portability.
+
+ @library{wxadv}
+ @category{miscwnd}
+
+ @see wxStatusBar, wxMessageDialog
+
+ @since 2.9.1
+*/
+class wxInfoBar : public wxWindow
+{
+public:
+ /**
+ Default constructor.
+
+ Use Create() for the objects created using this constructor.
+ */
+ wxInfoBar();
+
+ /**
+ Constructor creating the info bar window.
+
+ @see Create()
+ */
+ wxInfoBar(wxWindow *parent, wxWindowID winid = wxID_ANY);
+
+ /**
+ Create the info bar window.
+
+ Notice that unlike most of the other wxWindow-derived classes,
+ wxInfoBar is created hidden and is only shown when ShowMessage() is
+ called. This is more convenient as usually the info bar is created to
+ be shown at some later time and not immediately and so creating it
+ hidden avoids the need to call Hide() explicitly from the code using
+ it.
+
+ This should be only called if the object was created using its default
+ constructor.
+
+ @param parent
+ A valid parent window pointer.
+ @param winid
+ The id of the info bar window, usually unused as currently no
+ events are generated by this class.
+ */
+ wxInfoBar(wxWindow *parent, wxWindowID winid = wxID_ANY);
+
+ /**
+ Add a button to be shown in the info bar.
+
+ The button added by this method will be shown to the right of the text
+ (in LTR layout), with each successive button being added to the right
+ of the previous one.
+
+ Clicking the button will generate a normal event which can be handled
+ as usual. Notice that if you wish the info bar to be hidden when the
+ button is clicked, simply call @c event.Skip() in the button handler to
+ let the base class handler do it.
+
+ @param btnid
+ Id of the button. It will be used in the button message clicking
+ this button will generate.
+ @param label
+ The label of the button. It may only be empty if @a btnid is one of
+ the stock ids in which case the corresponding stock label (see
+ wxGetStockLabel()) will be used.
+ */
+ void AddButton(wxWindowID btnid, const wxString& label = wxString());
+
+ /**
+ Show a message in the bar.
+
+ If the bar is currently hidden, it will be shown. Otherwise its message
+ will be updated in place.
+
+ @param msg
+ The text of the message.
+ @param flags
+ One of wxICON_NONE (default), wxICON_INFORMATION, wxICON_QUESTION,
+ wxICON_WARNING or wxICON_ERROR values. These flags have the same
+ meaning as in wxMessageDialog, i.e. show the corresponding icon in
+ the bar.
+ */
+ void ShowMessage(const wxString& msg, int flags = wxICON_NONE);
+
+ /**
+ @name Generic version customization methods.
+
+ All these methods exist in the generic version of the class only.
+
+ The generic version uses wxWindow::ShowWithEffect() function to
+ progressively show it on the platforms which support it. The methods
+ here allow to change the default effect used (or disable it entirely)
+ and change its duration.
+ */
+ //@{
+
+ /**
+ Set the effects to use when showing and hiding the bar.
+
+ Either or both of the parameters can be set to wxSHOW_EFFECT_NONE to
+ disable using effects entirely.
+
+ Notice that if you place the bar at the bottom of the window you should
+ reverse the effects used for showing and hiding for better appearance.
+
+ @param showEffect
+ The effect to use when showing the bar. By default,
+ wxSHOW_EFFECT_SLIDE_TO_BOTTOM which is appropriate for the bars
+ placed at the top of the window.
+ @param hideEffect
+ The effect to use when hiding the bar. By default,
+ wxSHOW_EFFECT_SLIDE_TO_TOP which is appropriate for the bars placed
+ at the top of the window.
+ */
+ void SetShowHideEffects(wxShowEffect showEffect, wxShowEffect hideEffect);
+
+ /// Return the effect currently used for showing the bar.
+ wxShowEffect GetShowEffect() const;
+
+ /// Return the effect currently used for hiding the bar.
+ wxShowEffect GetHideEffect() const;
+
+ /**
+ Set the duration of the animation used when showing or hiding the bar.
+
+ By default, 500ms duration is used.
+
+ @param duration
+ Duration of the animation, in milliseconds.
+ */
+ void SetEffectDuration(int duration);
+
+ /// Return the effect animation duration currently used.
+ int GetEffectDuration() const;
+
+ /**
+ Overridden base class methods changes the font of the text message.
+
+ wxInfoBar overrides this method to use the font passed to it for its
+ text message part. By default a larger and bold version of the standard
+ font is used.
+
+ This method is generic-only.
+ */
+ virtual bool SetFont(const wxFont& font);
+
+ //@}
+};
diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp
index 264246c1df..a45f416b92 100644
--- a/samples/dialogs/dialogs.cpp
+++ b/samples/dialogs/dialogs.cpp
@@ -87,6 +87,10 @@
#include "wx/fdrepdlg.h"
#endif // wxUSE_FINDREPLDLG
+#if wxUSE_INFOBAR
+ #include "wx/infobar.h"
+#endif // wxUSE_INFOBAR
+
#include "wx/spinctrl.h"
#include "wx/propdlg.h"
@@ -134,6 +138,10 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
#if wxUSE_LOG_DIALOG
EVT_MENU(DIALOGS_LOG_DIALOG, MyFrame::LogDialog)
#endif // wxUSE_LOG_DIALOG
+#if wxUSE_INFOBAR
+ EVT_MENU(DIALOGS_INFOBAR_SIMPLE, MyFrame::InfoBarSimple)
+ EVT_MENU(DIALOGS_INFOBAR_ADVANCED, MyFrame::InfoBarAdvanced)
+#endif // wxUSE_INFOBAR
#if wxUSE_TEXTDLG
EVT_MENU(DIALOGS_TEXT_ENTRY, MyFrame::TextEntry)
@@ -395,9 +403,14 @@ bool MyApp::OnInit()
info_menu->Append(DIALOGS_LOG_DIALOG, wxT("&Log dialog\tCtrl-L"));
#endif // wxUSE_LOG_DIALOG
+ #if wxUSE_INFOBAR
+ info_menu->Append(DIALOGS_INFOBAR_SIMPLE, "Simple &info bar\tCtrl-I");
+ info_menu->Append(DIALOGS_INFOBAR_ADVANCED, "&Advanced info bar\tShift-Ctrl-I");
+ #endif // wxUSE_INFOBAR
+
#if wxUSE_MSGDLG
info_menu->Append(DIALOGS_MESSAGE_BOX_WXINFO,
- wxT("&wxWidgets information\tCtrl-I"));
+ wxT("&wxWidgets information\tCtrl-W"));
#endif // wxUSE_MSGDLG
menuDlg->Append(wxID_ANY,wxT("&Informative dialogs"),info_menu);
@@ -414,9 +427,9 @@ bool MyApp::OnInit()
wxMenu *dialogs_menu = new wxMenu;
#if USE_MODAL_PRESENTATION
- dialogs_menu->Append(DIALOGS_MODAL, wxT("&Modal dialog\tCtrl-W"));
+ dialogs_menu->Append(DIALOGS_MODAL, wxT("&Modal dialog\tShift-Ctrl-W"));
#endif // USE_MODAL_PRESENTATION
- dialogs_menu->AppendCheckItem(DIALOGS_MODELESS, wxT("Mode&less dialog\tCtrl-Z"));
+ dialogs_menu->AppendCheckItem(DIALOGS_MODELESS, wxT("Mode&less dialog\tShift-Ctrl-Z"));
dialogs_menu->Append(DIALOGS_CENTRE_SCREEN, wxT("Centered on &screen\tShift-Ctrl-1"));
dialogs_menu->Append(DIALOGS_CENTRE_PARENT, wxT("Centered on &parent\tShift-Ctrl-2"));
#if wxUSE_MINIFRAME
@@ -510,6 +523,17 @@ MyFrame::MyFrame(const wxString& title)
#endif // wxUSE_STATUSBAR
m_canvas = new MyCanvas(this);
+
+#if wxUSE_INFOBAR
+ m_infoBarSimple = new wxInfoBar(this);
+ m_infoBarAdvanced = NULL;
+
+ // to use the info bars we need to use sizer for the window layout
+ wxBoxSizer * const sizer = new wxBoxSizer(wxVERTICAL);
+ sizer->Add(m_infoBarSimple, wxSizerFlags().Expand());
+ sizer->Add(m_canvas, wxSizerFlags(1).Expand());
+ SetSizer(sizer);
+#endif // wxUSE_INFOBAR
}
MyFrame::~MyFrame()
@@ -653,6 +677,24 @@ void MyFrame::LogDialog(wxCommandEvent& WXUNUSED(event))
}
#endif // wxUSE_LOG_DIALOG
+#if wxUSE_INFOBAR
+
+void MyFrame::InfoBarSimple(wxCommandEvent& WXUNUSED(event))
+{
+ static int s_count = 0;
+ m_infoBarSimple->ShowMessage
+ (
+ wxString::Format("Message #%d in the info bar.", ++s_count)
+ );
+}
+
+void MyFrame::InfoBarAdvanced(wxCommandEvent& WXUNUSED(event))
+{
+}
+
+#endif // wxUSE_INFOBAR
+
+
#if wxUSE_MSGDLG
void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event))
{
diff --git a/samples/dialogs/dialogs.h b/samples/dialogs/dialogs.h
index fe0b0638a9..57a7105b43 100644
--- a/samples/dialogs/dialogs.h
+++ b/samples/dialogs/dialogs.h
@@ -303,6 +303,11 @@ public:
void LogDialog(wxCommandEvent& event);
#endif // wxUSE_LOG_DIALOG
+#if wxUSE_INFOBAR
+ void InfoBarSimple(wxCommandEvent& event);
+ void InfoBarAdvanced(wxCommandEvent& event);
+#endif // wxUSE_INFOBAR
+
#if wxUSE_CHOICEDLG
void SingleChoice(wxCommandEvent& event);
void MultiChoice(wxCommandEvent& event);
@@ -423,6 +428,11 @@ private:
// just a window which we use to show the effect of font/colours selection
wxWindow *m_canvas;
+#if wxUSE_INFOBAR
+ wxInfoBar *m_infoBarSimple,
+ *m_infoBarAdvanced;
+#endif // wxUSE_INFOBAR
+
DECLARE_EVENT_TABLE()
};
@@ -472,6 +482,8 @@ enum
DIALOGS_TIP,
DIALOGS_NUM_ENTRY,
DIALOGS_LOG_DIALOG,
+ DIALOGS_INFOBAR_SIMPLE,
+ DIALOGS_INFOBAR_ADVANCED,
DIALOGS_MODAL,
DIALOGS_MODELESS,
DIALOGS_CENTRE_SCREEN,
diff --git a/setup.h.in b/setup.h.in
index 0fc38e74c7..75f4246ece 100644
--- a/setup.h.in
+++ b/setup.h.in
@@ -409,6 +409,8 @@
#define wxUSE_IMAGLIST 0
+#define wxUSE_INFOBAR 0
+
#define wxUSE_MENUS 0
#define wxUSE_NOTIFICATION_MESSAGE 0
diff --git a/src/generic/infobar.cpp b/src/generic/infobar.cpp
new file mode 100644
index 0000000000..db8708a56b
--- /dev/null
+++ b/src/generic/infobar.cpp
@@ -0,0 +1,235 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name: src/generic/infobar.cpp
+// Purpose: generic wxInfoBar implementation
+// Author: Vadim Zeitlin
+// Created: 2009-07-28
+// RCS-ID: $Id: wxhead.cpp,v 1.10 2009-06-29 10:23:04 zeitlin Exp $
+// Copyright: (c) 2009 Vadim Zeitlin
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+#if wxUSE_INFOBAR
+
+#ifndef WX_PRECOMP
+ #include "wx/artprov.h"
+ #include "wx/bmpbuttn.h"
+ #include "wx/settings.h"
+ #include "wx/statbmp.h"
+ #include "wx/stattext.h"
+#endif // WX_PRECOMP
+
+#include "wx/infobar.h"
+
+#include "wx/scopeguard.h"
+#include "wx/sizer.h"
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+void wxInfoBar::Init()
+{
+ m_icon = NULL;
+ m_text = NULL;
+ m_button = NULL;
+
+ m_showEffect = wxSHOW_EFFECT_SLIDE_TO_BOTTOM;
+ m_hideEffect = wxSHOW_EFFECT_SLIDE_TO_TOP;
+
+ // use default effect duration
+ m_effectDuration = 0;
+}
+
+bool wxInfoBar::Create(wxWindow *parent, wxWindowID winid)
+{
+ // calling Hide() before Create() ensures that we're created initially
+ // hidden
+ Hide();
+ if ( !wxWindow::Create(parent, winid) )
+ return false;
+
+ // use special, easy to notice, colours
+ SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOBK));
+ SetOwnForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOTEXT));
+
+ // create the controls: icon, text and the button to dismiss the
+ // message.
+
+ // the icon is not shown unless it's assigned a valid bitmap
+ m_icon = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap);
+
+ // by default, the text uses a larger, more noticeable, font
+ m_text = new wxStaticText(this, wxID_ANY, "");
+ m_text->SetFont(m_text->GetFont().Bold().Larger());
+
+ m_button = new wxBitmapButton
+ (
+ this,
+ wxID_ANY,
+ wxArtProvider::GetBitmap(wxART_CROSS_MARK),
+ wxDefaultPosition,
+ wxDefaultSize,
+ wxBORDER_NONE
+ );
+ m_button->SetToolTip(_("Hide this notification message."));
+
+ Connect
+ (
+ wxEVT_COMMAND_BUTTON_CLICKED,
+ wxCommandEventHandler(wxInfoBar::OnButton),
+ NULL,
+ this
+ );
+
+ // Center the text inside the sizer.
+ wxSizer * const sizer = new wxBoxSizer(wxHORIZONTAL);
+ sizer->AddStretchSpacer();
+ sizer->Add(m_icon, wxSizerFlags().Centre().DoubleBorder());
+ sizer->Add(m_text, wxSizerFlags().Centre().DoubleBorder());
+ sizer->AddStretchSpacer();
+ sizer->Add(m_button, wxSizerFlags().Centre().DoubleBorder());
+ SetSizer(sizer);
+
+ return true;
+}
+
+void wxInfoBar::UpdateParent()
+{
+ wxWindow * const parent = wxGetTopLevelParent(GetParent());
+ parent->Layout();
+}
+
+void wxInfoBar::ChangeParentBackground()
+{
+ wxWindow * const parent = GetParent();
+ m_origParentBgCol = parent->GetBackgroundColour();
+
+ wxSizer * const sizer = GetContainingSizer();
+ if ( !sizer )
+ return;
+
+ wxWindow *sibling = NULL;
+ for ( wxSizerItemList::compatibility_iterator
+ node = sizer->GetChildren().GetFirst();
+ node;
+ node = node->GetNext() )
+ {
+ if ( node->GetData()->GetWindow() == this )
+ {
+ // find the next window following us
+ for ( node = node->GetNext();
+ node;
+ node = node->GetNext() )
+ {
+ wxSizerItem * const item = node->GetData();
+ if ( item->IsWindow() )
+ {
+ sibling = item->GetWindow();
+ break;
+ }
+ }
+
+ break;
+ }
+ }
+
+ if ( sibling )
+ parent->SetOwnBackgroundColour(sibling->GetBackgroundColour());
+}
+
+void wxInfoBar::RestoreParentBackground()
+{
+ GetParent()->SetOwnBackgroundColour(m_origParentBgCol);
+}
+
+void wxInfoBar::DoHide()
+{
+ ChangeParentBackground();
+ wxON_BLOCK_EXIT_THIS0( wxInfoBar::RestoreParentBackground );
+
+ HideWithEffect(m_hideEffect, m_effectDuration);
+ UpdateParent();
+}
+
+void wxInfoBar::DoShow()
+{
+ // re-layout the parent first so that the window expands into an already
+ // unoccupied by the other controls area: for this we need to change our
+ // internal visibility flag to force Layout() to take us into account (an
+ // alternative solution to this hack would be to temporarily set
+ // wxRESERVE_SPACE_EVEN_IF_HIDDEN flag but it's not really batter)
+
+ // just change the internal flag indicating that the window is visible,
+ // without really showing it
+ wxWindowBase::Show();
+
+ // an extra hack: we want the temporarily uncovered area in which we're
+ // going to expand to look like part of this sibling for a better effect so
+ // temporarily change the background of our parent to the same colour
+ ChangeParentBackground();
+ wxON_BLOCK_EXIT_THIS0( wxInfoBar::RestoreParentBackground );
+
+ // adjust the parent layout to account for us
+ UpdateParent();
+
+ // reset the flag back before really showing the window or it wouldn't be
+ // shown at all because it would believe itself already visible
+ wxWindowBase::Show(false);
+
+
+ // finally do really show the window.
+ ShowWithEffect(m_showEffect, m_effectDuration);
+}
+
+void wxInfoBar::ShowMessage(const wxString& msg, int flags)
+{
+ // first update the controls
+ const int icon = flags & wxICON_MASK;
+ if ( !icon || (icon == wxICON_NONE) )
+ {
+ m_icon->Hide();
+ }
+ else // do show an icon
+ {
+ m_icon->SetBitmap(wxArtProvider::GetMessageBoxIcon(icon));
+ m_icon->Show();
+ }
+
+ // notice the use of EscapeMnemonics() to ensure that "&" come through
+ // correctly
+ m_text->SetLabel(wxControl::EscapeMnemonics(msg));
+
+
+ // then show this entire window if not done yet
+ if ( !IsShown() )
+ {
+ DoShow();
+ }
+ else // we're already shown
+ {
+ // just update the layout to correspond to the new message
+ Layout();
+ }
+}
+
+void wxInfoBar::OnButton(wxCommandEvent& WXUNUSED(event))
+{
+ DoHide();
+}
+
+#endif // wxUSE_INFOBAR