wx/dataview.h \
        wx/dateevt.h \
        wx/dcbuffer.h \
+       wx/generic/buttonbar.h \
        wx/generic/calctrl.h \
        wx/generic/datectrl.h \
        wx/generic/dataview.h \
        wx/dataview.h \
        wx/dateevt.h \
        wx/dcbuffer.h \
+       wx/generic/buttonbar.h \
        wx/generic/calctrl.h \
        wx/generic/datectrl.h \
        wx/generic/dataview.h \
 @COND_TOOLKIT_X11@__LOWLEVEL_SRC_OBJECTS_1 = $(COND_TOOLKIT_X11___LOWLEVEL_SRC_OBJECTS_1)
 COND_WXUNIV_0___ADVANCED_SRC_OBJECTS =  \
        monodll_datavcmn.o \
+       monodll_buttonbar.o \
        monodll_calctrl.o \
        monodll_datavgen.o \
        monodll_datectlg.o \
 @COND_WXUNIV_0@__ADVANCED_SRC_OBJECTS = $(COND_WXUNIV_0___ADVANCED_SRC_OBJECTS)
 COND_WXUNIV_1___ADVANCED_SRC_OBJECTS =  \
        monodll_datavcmn.o \
+       monodll_buttonbar.o \
        monodll_calctrl.o \
        monodll_datavgen.o \
        monodll_datectlg.o \
 @COND_TOOLKIT_X11@__LOWLEVEL_SRC_OBJECTS_3 = $(COND_TOOLKIT_X11___LOWLEVEL_SRC_OBJECTS_3)
 COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_1 =  \
        monolib_datavcmn.o \
+       monolib_buttonbar.o \
        monolib_calctrl.o \
        monolib_datavgen.o \
        monolib_datectlg.o \
 @COND_WXUNIV_0@__ADVANCED_SRC_OBJECTS_1 = $(COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_1)
 COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_1 =  \
        monolib_datavcmn.o \
+       monolib_buttonbar.o \
        monolib_calctrl.o \
        monolib_datavgen.o \
        monolib_datectlg.o \
 @COND_PLATFORM_WIN32_1@__advdll___win32rc = advdll_version_rc.o
 COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_2 =  \
        advdll_datavcmn.o \
+       advdll_buttonbar.o \
        advdll_calctrl.o \
        advdll_datavgen.o \
        advdll_datectlg.o \
 @COND_WXUNIV_0@__ADVANCED_SRC_OBJECTS_2 = $(COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_2)
 COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_2 =  \
        advdll_datavcmn.o \
+       advdll_buttonbar.o \
        advdll_calctrl.o \
        advdll_datavgen.o \
        advdll_datectlg.o \
 @COND_USE_PCH_1@       = .pch/wxprec_advlib/wx/wxprec.h.gch
 COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_3 =  \
        advlib_datavcmn.o \
+       advlib_buttonbar.o \
        advlib_calctrl.o \
        advlib_datavgen.o \
        advlib_datectlg.o \
 @COND_WXUNIV_0@__ADVANCED_SRC_OBJECTS_3 = $(COND_WXUNIV_0___ADVANCED_SRC_OBJECTS_3)
 COND_WXUNIV_1___ADVANCED_SRC_OBJECTS_3 =  \
        advlib_datavcmn.o \
+       advlib_buttonbar.o \
        advlib_calctrl.o \
        advlib_datavgen.o \
        advlib_datectlg.o \
 @COND_USE_GUI_1@monodll_datavcmn.o: $(srcdir)/src/common/datavcmn.cpp $(MONODLL_ODEP)
 @COND_USE_GUI_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/datavcmn.cpp
 
+@COND_USE_GUI_1@monodll_buttonbar.o: $(srcdir)/src/generic/buttonbar.cpp $(MONODLL_ODEP)
+@COND_USE_GUI_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/buttonbar.cpp
+
 @COND_USE_GUI_1@monodll_calctrl.o: $(srcdir)/src/generic/calctrl.cpp $(MONODLL_ODEP)
 @COND_USE_GUI_1@       $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/calctrl.cpp
 
 @COND_USE_GUI_1@monolib_datavcmn.o: $(srcdir)/src/common/datavcmn.cpp $(MONOLIB_ODEP)
 @COND_USE_GUI_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/datavcmn.cpp
 
+@COND_USE_GUI_1@monolib_buttonbar.o: $(srcdir)/src/generic/buttonbar.cpp $(MONOLIB_ODEP)
+@COND_USE_GUI_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/buttonbar.cpp
+
 @COND_USE_GUI_1@monolib_calctrl.o: $(srcdir)/src/generic/calctrl.cpp $(MONOLIB_ODEP)
 @COND_USE_GUI_1@       $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/calctrl.cpp
 
 advdll_datavcmn.o: $(srcdir)/src/common/datavcmn.cpp $(ADVDLL_ODEP)
        $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/common/datavcmn.cpp
 
+advdll_buttonbar.o: $(srcdir)/src/generic/buttonbar.cpp $(ADVDLL_ODEP)
+       $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/buttonbar.cpp
+
 advdll_calctrl.o: $(srcdir)/src/generic/calctrl.cpp $(ADVDLL_ODEP)
        $(CXXC) -c -o $@ $(ADVDLL_CXXFLAGS) $(srcdir)/src/generic/calctrl.cpp
 
 advlib_datavcmn.o: $(srcdir)/src/common/datavcmn.cpp $(ADVLIB_ODEP)
        $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/common/datavcmn.cpp
 
+advlib_buttonbar.o: $(srcdir)/src/generic/buttonbar.cpp $(ADVLIB_ODEP)
+       $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/buttonbar.cpp
+
 advlib_calctrl.o: $(srcdir)/src/generic/calctrl.cpp $(ADVLIB_ODEP)
        $(CXXC) -c -o $@ $(ADVLIB_CXXFLAGS) $(srcdir)/src/generic/calctrl.cpp
 
 
 
 <set var="ADVANCED_CMN_SRC" hints="files">
     src/common/datavcmn.cpp
+    src/generic/buttonbar.cpp
     src/generic/calctrl.cpp
     src/generic/datavgen.cpp
     src/generic/datectlg.cpp
     wx/dataview.h
     wx/dateevt.h
     wx/dcbuffer.h
+    wx/generic/buttonbar.h
     wx/generic/calctrl.h
     wx/generic/datectrl.h
     wx/generic/dataview.h
 
 !if "$(WXUNIV)" == "0"
 ____ADVANCED_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_datavcmn.obj \
+       $(OBJS)\monodll_buttonbar.obj \
        $(OBJS)\monodll_calctrl.obj \
        $(OBJS)\monodll_datavgen.obj \
        $(OBJS)\monodll_datectlg.obj \
 !if "$(WXUNIV)" == "1"
 ____ADVANCED_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_datavcmn.obj \
+       $(OBJS)\monodll_buttonbar.obj \
        $(OBJS)\monodll_calctrl.obj \
        $(OBJS)\monodll_datavgen.obj \
        $(OBJS)\monodll_datectlg.obj \
 !if "$(WXUNIV)" == "0"
 ____ADVANCED_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_datavcmn.obj \
+       $(OBJS)\monolib_buttonbar.obj \
        $(OBJS)\monolib_calctrl.obj \
        $(OBJS)\monolib_datavgen.obj \
        $(OBJS)\monolib_datectlg.obj \
 !if "$(WXUNIV)" == "1"
 ____ADVANCED_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_datavcmn.obj \
+       $(OBJS)\monolib_buttonbar.obj \
        $(OBJS)\monolib_calctrl.obj \
        $(OBJS)\monolib_datavgen.obj \
        $(OBJS)\monolib_datectlg.obj \
 !if "$(WXUNIV)" == "0"
 ____ADVANCED_SRC_FILENAMES_2_OBJECTS =  \
        $(OBJS)\advdll_datavcmn.obj \
+       $(OBJS)\advdll_buttonbar.obj \
        $(OBJS)\advdll_calctrl.obj \
        $(OBJS)\advdll_datavgen.obj \
        $(OBJS)\advdll_datectlg.obj \
 !if "$(WXUNIV)" == "1"
 ____ADVANCED_SRC_FILENAMES_2_OBJECTS =  \
        $(OBJS)\advdll_datavcmn.obj \
+       $(OBJS)\advdll_buttonbar.obj \
        $(OBJS)\advdll_calctrl.obj \
        $(OBJS)\advdll_datavgen.obj \
        $(OBJS)\advdll_datectlg.obj \
 !if "$(WXUNIV)" == "0"
 ____ADVANCED_SRC_FILENAMES_3_OBJECTS =  \
        $(OBJS)\advlib_datavcmn.obj \
+       $(OBJS)\advlib_buttonbar.obj \
        $(OBJS)\advlib_calctrl.obj \
        $(OBJS)\advlib_datavgen.obj \
        $(OBJS)\advlib_datectlg.obj \
 !if "$(WXUNIV)" == "1"
 ____ADVANCED_SRC_FILENAMES_3_OBJECTS =  \
        $(OBJS)\advlib_datavcmn.obj \
+       $(OBJS)\advlib_buttonbar.obj \
        $(OBJS)\advlib_calctrl.obj \
        $(OBJS)\advlib_datavgen.obj \
        $(OBJS)\advlib_datectlg.obj \
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monodll_buttonbar.obj: ..\..\src\generic\buttonbar.cpp
+       $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\monodll_calctrl.obj: ..\..\src\generic\calctrl.cpp
        $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $**
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monolib_buttonbar.obj: ..\..\src\generic\buttonbar.cpp
+       $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\monolib_calctrl.obj: ..\..\src\generic\calctrl.cpp
        $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $**
 $(OBJS)\advdll_datavcmn.obj: ..\..\src\common\datavcmn.cpp
        $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $**
 
+$(OBJS)\advdll_buttonbar.obj: ..\..\src\generic\buttonbar.cpp
+       $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $**
+
 $(OBJS)\advdll_calctrl.obj: ..\..\src\generic\calctrl.cpp
        $(CXX) -q -c -P -o$@ $(ADVDLL_CXXFLAGS) $**
 
 $(OBJS)\advlib_datavcmn.obj: ..\..\src\common\datavcmn.cpp
        $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $**
 
+$(OBJS)\advlib_buttonbar.obj: ..\..\src\generic\buttonbar.cpp
+       $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $**
+
 $(OBJS)\advlib_calctrl.obj: ..\..\src\generic\calctrl.cpp
        $(CXX) -q -c -P -o$@ $(ADVLIB_CXXFLAGS) $**
 
 
 ifeq ($(WXUNIV),0)
 ____ADVANCED_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_datavcmn.o \
+       $(OBJS)\monodll_buttonbar.o \
        $(OBJS)\monodll_calctrl.o \
        $(OBJS)\monodll_datavgen.o \
        $(OBJS)\monodll_datectlg.o \
 ifeq ($(WXUNIV),1)
 ____ADVANCED_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_datavcmn.o \
+       $(OBJS)\monodll_buttonbar.o \
        $(OBJS)\monodll_calctrl.o \
        $(OBJS)\monodll_datavgen.o \
        $(OBJS)\monodll_datectlg.o \
 ifeq ($(WXUNIV),0)
 ____ADVANCED_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_datavcmn.o \
+       $(OBJS)\monolib_buttonbar.o \
        $(OBJS)\monolib_calctrl.o \
        $(OBJS)\monolib_datavgen.o \
        $(OBJS)\monolib_datectlg.o \
 ifeq ($(WXUNIV),1)
 ____ADVANCED_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_datavcmn.o \
+       $(OBJS)\monolib_buttonbar.o \
        $(OBJS)\monolib_calctrl.o \
        $(OBJS)\monolib_datavgen.o \
        $(OBJS)\monolib_datectlg.o \
 ifeq ($(WXUNIV),0)
 ____ADVANCED_SRC_FILENAMES_2_OBJECTS =  \
        $(OBJS)\advdll_datavcmn.o \
+       $(OBJS)\advdll_buttonbar.o \
        $(OBJS)\advdll_calctrl.o \
        $(OBJS)\advdll_datavgen.o \
        $(OBJS)\advdll_datectlg.o \
 ifeq ($(WXUNIV),1)
 ____ADVANCED_SRC_FILENAMES_2_OBJECTS =  \
        $(OBJS)\advdll_datavcmn.o \
+       $(OBJS)\advdll_buttonbar.o \
        $(OBJS)\advdll_calctrl.o \
        $(OBJS)\advdll_datavgen.o \
        $(OBJS)\advdll_datectlg.o \
 ifeq ($(WXUNIV),0)
 ____ADVANCED_SRC_FILENAMES_3_OBJECTS =  \
        $(OBJS)\advlib_datavcmn.o \
+       $(OBJS)\advlib_buttonbar.o \
        $(OBJS)\advlib_calctrl.o \
        $(OBJS)\advlib_datavgen.o \
        $(OBJS)\advlib_datectlg.o \
 ifeq ($(WXUNIV),1)
 ____ADVANCED_SRC_FILENAMES_3_OBJECTS =  \
        $(OBJS)\advlib_datavcmn.o \
+       $(OBJS)\advlib_buttonbar.o \
        $(OBJS)\advlib_calctrl.o \
        $(OBJS)\advlib_datavgen.o \
        $(OBJS)\advlib_datectlg.o \
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 endif
 
+ifeq ($(USE_GUI),1)
+$(OBJS)\monodll_buttonbar.o: ../../src/generic/buttonbar.cpp
+       $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+endif
+
 ifeq ($(USE_GUI),1)
 $(OBJS)\monodll_calctrl.o: ../../src/generic/calctrl.cpp
        $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 endif
 
+ifeq ($(USE_GUI),1)
+$(OBJS)\monolib_buttonbar.o: ../../src/generic/buttonbar.cpp
+       $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+endif
+
 ifeq ($(USE_GUI),1)
 $(OBJS)\monolib_calctrl.o: ../../src/generic/calctrl.cpp
        $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 $(OBJS)\advdll_datavcmn.o: ../../src/common/datavcmn.cpp
        $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\advdll_buttonbar.o: ../../src/generic/buttonbar.cpp
+       $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\advdll_calctrl.o: ../../src/generic/calctrl.cpp
        $(CXX) -c -o $@ $(ADVDLL_CXXFLAGS) $(CPPDEPS) $<
 
 $(OBJS)\advlib_datavcmn.o: ../../src/common/datavcmn.cpp
        $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $<
 
+$(OBJS)\advlib_buttonbar.o: ../../src/generic/buttonbar.cpp
+       $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $<
+
 $(OBJS)\advlib_calctrl.o: ../../src/generic/calctrl.cpp
        $(CXX) -c -o $@ $(ADVLIB_CXXFLAGS) $(CPPDEPS) $<
 
 
 !if "$(WXUNIV)" == "0"
 ____ADVANCED_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_datavcmn.obj \
+       $(OBJS)\monodll_buttonbar.obj \
        $(OBJS)\monodll_calctrl.obj \
        $(OBJS)\monodll_datavgen.obj \
        $(OBJS)\monodll_datectlg.obj \
 !if "$(WXUNIV)" == "1"
 ____ADVANCED_SRC_FILENAMES_OBJECTS =  \
        $(OBJS)\monodll_datavcmn.obj \
+       $(OBJS)\monodll_buttonbar.obj \
        $(OBJS)\monodll_calctrl.obj \
        $(OBJS)\monodll_datavgen.obj \
        $(OBJS)\monodll_datectlg.obj \
 !if "$(WXUNIV)" == "0"
 ____ADVANCED_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_datavcmn.obj \
+       $(OBJS)\monolib_buttonbar.obj \
        $(OBJS)\monolib_calctrl.obj \
        $(OBJS)\monolib_datavgen.obj \
        $(OBJS)\monolib_datectlg.obj \
 !if "$(WXUNIV)" == "1"
 ____ADVANCED_SRC_FILENAMES_1_OBJECTS =  \
        $(OBJS)\monolib_datavcmn.obj \
+       $(OBJS)\monolib_buttonbar.obj \
        $(OBJS)\monolib_calctrl.obj \
        $(OBJS)\monolib_datavgen.obj \
        $(OBJS)\monolib_datectlg.obj \
 !if "$(WXUNIV)" == "0"
 ____ADVANCED_SRC_FILENAMES_2_OBJECTS =  \
        $(OBJS)\advdll_datavcmn.obj \
+       $(OBJS)\advdll_buttonbar.obj \
        $(OBJS)\advdll_calctrl.obj \
        $(OBJS)\advdll_datavgen.obj \
        $(OBJS)\advdll_datectlg.obj \
 !if "$(WXUNIV)" == "1"
 ____ADVANCED_SRC_FILENAMES_2_OBJECTS =  \
        $(OBJS)\advdll_datavcmn.obj \
+       $(OBJS)\advdll_buttonbar.obj \
        $(OBJS)\advdll_calctrl.obj \
        $(OBJS)\advdll_datavgen.obj \
        $(OBJS)\advdll_datectlg.obj \
 !if "$(WXUNIV)" == "0"
 ____ADVANCED_SRC_FILENAMES_3_OBJECTS =  \
        $(OBJS)\advlib_datavcmn.obj \
+       $(OBJS)\advlib_buttonbar.obj \
        $(OBJS)\advlib_calctrl.obj \
        $(OBJS)\advlib_datavgen.obj \
        $(OBJS)\advlib_datectlg.obj \
 !if "$(WXUNIV)" == "1"
 ____ADVANCED_SRC_FILENAMES_3_OBJECTS =  \
        $(OBJS)\advlib_datavcmn.obj \
+       $(OBJS)\advlib_buttonbar.obj \
        $(OBJS)\advlib_calctrl.obj \
        $(OBJS)\advlib_datavgen.obj \
        $(OBJS)\advlib_datectlg.obj \
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monodll_buttonbar.obj: ..\..\src\generic\buttonbar.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\monodll_calctrl.obj: ..\..\src\generic\calctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $**
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
 !endif
 
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monolib_buttonbar.obj: ..\..\src\generic\buttonbar.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
+!endif
+
 !if "$(USE_GUI)" == "1"
 $(OBJS)\monolib_calctrl.obj: ..\..\src\generic\calctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $**
 $(OBJS)\advdll_datavcmn.obj: ..\..\src\common\datavcmn.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $**
 
+$(OBJS)\advdll_buttonbar.obj: ..\..\src\generic\buttonbar.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $**
+
 $(OBJS)\advdll_calctrl.obj: ..\..\src\generic\calctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(ADVDLL_CXXFLAGS) $**
 
 $(OBJS)\advlib_datavcmn.obj: ..\..\src\common\datavcmn.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $**
 
+$(OBJS)\advlib_buttonbar.obj: ..\..\src\generic\buttonbar.cpp
+       $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $**
+
 $(OBJS)\advlib_calctrl.obj: ..\..\src\generic\calctrl.cpp
        $(CXX) /c /nologo /TP /Fo$@ $(ADVLIB_CXXFLAGS) $**
 
 
 !ifeq WXUNIV 0
 ____ADVANCED_SRC_FILENAMES_OBJECTS =  &
        $(OBJS)\monodll_datavcmn.obj &
+       $(OBJS)\monodll_buttonbar.obj &
        $(OBJS)\monodll_calctrl.obj &
        $(OBJS)\monodll_datavgen.obj &
        $(OBJS)\monodll_datectlg.obj &
 !ifeq WXUNIV 1
 ____ADVANCED_SRC_FILENAMES_OBJECTS =  &
        $(OBJS)\monodll_datavcmn.obj &
+       $(OBJS)\monodll_buttonbar.obj &
        $(OBJS)\monodll_calctrl.obj &
        $(OBJS)\monodll_datavgen.obj &
        $(OBJS)\monodll_datectlg.obj &
 !ifeq WXUNIV 0
 ____ADVANCED_SRC_FILENAMES_1_OBJECTS =  &
        $(OBJS)\monolib_datavcmn.obj &
+       $(OBJS)\monolib_buttonbar.obj &
        $(OBJS)\monolib_calctrl.obj &
        $(OBJS)\monolib_datavgen.obj &
        $(OBJS)\monolib_datectlg.obj &
 !ifeq WXUNIV 1
 ____ADVANCED_SRC_FILENAMES_1_OBJECTS =  &
        $(OBJS)\monolib_datavcmn.obj &
+       $(OBJS)\monolib_buttonbar.obj &
        $(OBJS)\monolib_calctrl.obj &
        $(OBJS)\monolib_datavgen.obj &
        $(OBJS)\monolib_datectlg.obj &
 !ifeq WXUNIV 0
 ____ADVANCED_SRC_FILENAMES_2_OBJECTS =  &
        $(OBJS)\advdll_datavcmn.obj &
+       $(OBJS)\advdll_buttonbar.obj &
        $(OBJS)\advdll_calctrl.obj &
        $(OBJS)\advdll_datavgen.obj &
        $(OBJS)\advdll_datectlg.obj &
 !ifeq WXUNIV 1
 ____ADVANCED_SRC_FILENAMES_2_OBJECTS =  &
        $(OBJS)\advdll_datavcmn.obj &
+       $(OBJS)\advdll_buttonbar.obj &
        $(OBJS)\advdll_calctrl.obj &
        $(OBJS)\advdll_datavgen.obj &
        $(OBJS)\advdll_datectlg.obj &
 !ifeq WXUNIV 0
 ____ADVANCED_SRC_FILENAMES_3_OBJECTS =  &
        $(OBJS)\advlib_datavcmn.obj &
+       $(OBJS)\advlib_buttonbar.obj &
        $(OBJS)\advlib_calctrl.obj &
        $(OBJS)\advlib_datavgen.obj &
        $(OBJS)\advlib_datectlg.obj &
 !ifeq WXUNIV 1
 ____ADVANCED_SRC_FILENAMES_3_OBJECTS =  &
        $(OBJS)\advlib_datavcmn.obj &
+       $(OBJS)\advlib_buttonbar.obj &
        $(OBJS)\advlib_calctrl.obj &
        $(OBJS)\advlib_datavgen.obj &
        $(OBJS)\advlib_datectlg.obj &
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 !endif
 
+!ifeq USE_GUI 1
+$(OBJS)\monodll_buttonbar.obj :  .AUTODEPEND ..\..\src\generic\buttonbar.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+!endif
+
 !ifeq USE_GUI 1
 $(OBJS)\monodll_calctrl.obj :  .AUTODEPEND ..\..\src\generic\calctrl.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 !endif
 
+!ifeq USE_GUI 1
+$(OBJS)\monolib_buttonbar.obj :  .AUTODEPEND ..\..\src\generic\buttonbar.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+!endif
+
 !ifeq USE_GUI 1
 $(OBJS)\monolib_calctrl.obj :  .AUTODEPEND ..\..\src\generic\calctrl.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 $(OBJS)\advdll_datavcmn.obj :  .AUTODEPEND ..\..\src\common\datavcmn.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $<
 
+$(OBJS)\advdll_buttonbar.obj :  .AUTODEPEND ..\..\src\generic\buttonbar.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $<
+
 $(OBJS)\advdll_calctrl.obj :  .AUTODEPEND ..\..\src\generic\calctrl.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(ADVDLL_CXXFLAGS) $<
 
 $(OBJS)\advlib_datavcmn.obj :  .AUTODEPEND ..\..\src\common\datavcmn.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $<
 
+$(OBJS)\advlib_buttonbar.obj :  .AUTODEPEND ..\..\src\generic\buttonbar.cpp
+       $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $<
+
 $(OBJS)\advlib_calctrl.obj :  .AUTODEPEND ..\..\src\generic\calctrl.cpp
        $(CXX) -bt=nt -zq -fo=$^@ $(ADVLIB_CXXFLAGS) $<
 
 
 # PROP Default_Filter ""
 # Begin Source File
 
+SOURCE=..\..\src\generic\buttonbar.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\src\generic\calctrl.cpp
 # End Source File
 # Begin Source File
 # PROP Default_Filter ""
 # Begin Source File
 
+SOURCE=..\..\include\wx\generic\buttonbar.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\include\wx\generic\calctrl.h
 # End Source File
 # Begin Source File
 
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\include\wx\generic\buttonbar.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\include\wx\generic\calctrl.h
 # End Source File
 # Begin Source File
 
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name:        wx/generic/buttonbar.h
+// Purpose:     wxButtonToolBar declaration
+// Author:      Julian Smart, after Robert Roebling, Vadim Zeitlin, SciTech
+// Modified by:
+// Created:     2006-04-13
+// Id:          $Id$
+// Copyright:   (c) Julian Smart, Robert Roebling, Vadim Zeitlin,
+//              SciTech Software, Inc. 
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_BUTTONBAR_H_
+#define _WX_BUTTONBAR_H_
+
+#include "wx/bmpbuttn.h"
+
+class WXDLLEXPORT wxButtonToolBarTool;
+
+// ----------------------------------------------------------------------------
+// wxButtonToolBar
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxButtonToolBar : public wxToolBarBase
+{    
+public:
+    // construction/destruction
+    wxButtonToolBar() { Init(); }
+    wxButtonToolBar(wxWindow *parent,
+              wxWindowID id,
+              const wxPoint& pos = wxDefaultPosition,
+              const wxSize& size = wxDefaultSize,
+              long style = 0,
+              const wxString& name = wxToolBarNameStr)
+    {
+        Init();
+
+        Create(parent, id, pos, size, style, name);
+    }
+
+    bool Create( wxWindow *parent,
+                 wxWindowID id,
+                 const wxPoint& pos = wxDefaultPosition,
+                 const wxSize& size = wxDefaultSize,
+                 long style = 0,
+                 const wxString& name = wxToolBarNameStr );
+                 
+    virtual ~wxButtonToolBar();
+
+    virtual bool Realize();
+
+    virtual void SetToolShortHelp(int id, const wxString& helpString);
+    virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
+
+protected:
+    // common part of all ctors
+    void Init();
+
+    // implement base class pure virtuals
+    virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
+    virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
+
+    virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable);
+    virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle);
+    virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle);
+
+    virtual wxToolBarToolBase *CreateTool(int id,
+                                          const wxString& label,
+                                          const wxBitmap& bmpNormal,
+                                          const wxBitmap& bmpDisabled,
+                                          wxItemKind kind,
+                                          wxObject *clientData,
+                                          const wxString& shortHelp,
+                                          const wxString& longHelp);
+    virtual wxToolBarToolBase *CreateTool(wxControl *control);
+
+    virtual wxSize DoGetBestClientSize() const;
+
+    // calculate layout
+    void DoLayout();
+
+    // get the bounding rect for the given tool
+    wxRect GetToolRect(wxToolBarToolBase *tool) const;
+
+    // get the rect limits depending on the orientation: top/bottom for a
+    // vertical toolbar, left/right for a horizontal one
+    void GetRectLimits(const wxRect& rect, wxCoord *start, wxCoord *end) const;
+
+    // receives button commands
+    void OnCommand(wxCommandEvent& event);
+
+private:
+    // have we calculated the positions of our tools?
+    bool m_needsLayout;
+
+    // the width of a separator
+    wxCoord m_widthSeparator;
+
+    // the total size of all toolbar elements
+    wxCoord m_maxWidth,
+            m_maxHeight;
+
+private:
+    DECLARE_DYNAMIC_CLASS(wxButtonToolBar)
+    DECLARE_EVENT_TABLE()
+};
+
+#endif
+ // _WX_BUTTONBAR_H_
+
 
 // Shrink dialog to fit current page
 #define wxPROPSHEET_SHRINKTOFIT 0x0100
 
+// Use a wxButtonToolBar toolbook
+#define wxPROPSHEET_BUTTONTOOLBOOK    0x0200
+
 class WXDLLIMPEXP_ADV wxPropertySheetDialog : public wxDialog
 {
 public:
 
 class WXDLLEXPORT wxToolBarBase;
 class WXDLLEXPORT wxCommandEvent;
 
+// Use wxButtonToolBar
+#define wxBK_BUTTONBAR            0x0100
+
 // ----------------------------------------------------------------------------
 // wxToolbook
 // ----------------------------------------------------------------------------
 
 
 #if USE_SETTINGS_DIALOG
     EVT_MENU(DIALOGS_PROPERTY_SHEET,                MyFrame::OnPropertySheet)
-    EVT_MENU(DIALOGS_PROPERTY_SHEET_TOOLBOOK,       MyFrame::OnPropertySheetToolBook)
+    EVT_MENU(DIALOGS_PROPERTY_SHEET_TOOLBOOK,       MyFrame::OnPropertySheet)
+    EVT_MENU(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, MyFrame::OnPropertySheet)
 #endif
 
     EVT_MENU(DIALOGS_REQUEST,                       MyFrame::OnRequestUserAttention)
     wxMenu *sheet_menu = new wxMenu;
     sheet_menu->Append(DIALOGS_PROPERTY_SHEET, _T("&Standard property sheet\tShift-Ctrl-P"));
     sheet_menu->Append(DIALOGS_PROPERTY_SHEET_TOOLBOOK, _T("&Toolbook sheet\tShift-Ctrl-T"));
+    sheet_menu->Append(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, _T("Button &Toolbook sheet\tShift-Ctrl-U"));
     file_menu->Append(wxID_ANY, _T("&Property sheets"), sheet_menu);
 #endif // USE_SETTINGS_DIALOG
 
 #endif // wxUSE_STARTUP_TIPS
 
 #if USE_SETTINGS_DIALOG
-void MyFrame::OnPropertySheet(wxCommandEvent& WXUNUSED(event))
+void MyFrame::OnPropertySheet(wxCommandEvent& event)
 {
-    SettingsDialog dialog(this);
-    dialog.ShowModal();
-}
-
-void MyFrame::OnPropertySheetToolBook(wxCommandEvent& WXUNUSED(event))
-{
-    SettingsDialog dialog(this, true);
+    SettingsDialog dialog(this, event.GetId());
     dialog.ShowModal();
 }
 #endif // USE_SETTINGS_DIALOG
 BEGIN_EVENT_TABLE(SettingsDialog, wxPropertySheetDialog)
 END_EVENT_TABLE()
 
-SettingsDialog::SettingsDialog(wxWindow* win, bool useToolBook)
+SettingsDialog::SettingsDialog(wxWindow* win, int dialogType)
 {
     SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
 
     int tabImage1 = -1;
     int tabImage2 = -1;
+    
+    bool useToolBook = (dialogType == DIALOGS_PROPERTY_SHEET_TOOLBOOK || dialogType == DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK);
 
     if (useToolBook)
     {
         tabImage1 = 0;
         tabImage2 = 1;
-        SetSheetStyle(wxPROPSHEET_TOOLBOOK|wxPROPSHEET_SHRINKTOFIT);
+        
+        int sheetStyle = wxPROPSHEET_SHRINKTOFIT;
+        if (dialogType == DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK)
+            sheetStyle |= wxPROPSHEET_BUTTONTOOLBOOK;
+        else
+            sheetStyle |= wxPROPSHEET_TOOLBOOK;
+            
+        SetSheetStyle(sheetStyle);
 
         // create a dummy image list with a few icons
         const wxSize imageSize(32, 32);
 
 {
 DECLARE_CLASS(SettingsDialog)
 public:
-    SettingsDialog(wxWindow* parent, bool useToolBook = false);
+    SettingsDialog(wxWindow* parent, int dialogType);
     ~SettingsDialog();
 
     wxPanel* CreateGeneralSettingsPage(wxWindow* parent);
 #endif // USE_FONTDLG_GENERIC
 
     void OnPropertySheet(wxCommandEvent& event);
-    void OnPropertySheetToolBook(wxCommandEvent& event);
     void OnRequestUserAttention(wxCommandEvent& event);
     void OnExit(wxCommandEvent& event);
 
     DIALOGS_REPLACE,
     DIALOGS_REQUEST,
     DIALOGS_PROPERTY_SHEET,
-    DIALOGS_PROPERTY_SHEET_TOOLBOOK
+    DIALOGS_PROPERTY_SHEET_TOOLBOOK,
+    DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK
 };
 
 #endif
 
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/generic/buttonbar.cpp
+// Purpose:     wxButtonToolBar implementation
+// Author:      Julian Smart, after Robert Roebling, Vadim Zeitlin, SciTech
+// Modified by:
+// Created:     2006-04-13
+// Id:          $Id$
+// Copyright:   (c) Julian Smart, Robert Roebling, Vadim Zeitlin,
+//              SciTech Software, Inc. 
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#if wxUSE_TOOLBAR && wxUSE_BMPBUTTON
+
+#ifndef WX_PRECOMP
+    #include "wx/utils.h"
+    #include "wx/app.h"
+#endif
+
+#include "wx/generic/buttonbar.h"
+#include "wx/frame.h"
+#include "wx/image.h"
+#include "wx/log.h"
+
+// ----------------------------------------------------------------------------
+// wxButtonToolBarTool: our implementation of wxToolBarToolBase
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxButtonToolBarTool : public wxToolBarToolBase
+{
+public:
+    wxButtonToolBarTool(wxButtonToolBar *tbar,
+                  int id,
+                  const wxString& label,
+                  const wxBitmap& bmpNormal,
+                  const wxBitmap& bmpDisabled,
+                  wxItemKind kind,
+                  wxObject *clientData,
+                  const wxString& shortHelp,
+                  const wxString& longHelp)
+        : wxToolBarToolBase(tbar, id, label, bmpNormal, bmpDisabled, kind,
+                            clientData, shortHelp, longHelp)
+    {
+        m_x = m_y = wxDefaultCoord;
+        m_width =
+        m_height = 0;
+        
+        m_button = NULL;
+    }
+
+    wxButtonToolBarTool(wxButtonToolBar *tbar, wxControl *control)
+        : wxToolBarToolBase(tbar, control)
+    {
+        m_x = m_y = wxDefaultCoord;
+        m_width =
+        m_height = 0;
+        m_button = NULL;
+    }
+
+    wxBitmapButton* GetButton() const { return m_button; }
+    void SetButton(wxBitmapButton* button) { m_button = button; }
+
+public:
+    // the tool position (for controls)
+    wxCoord m_x;
+    wxCoord m_y;
+    wxCoord m_width;
+    wxCoord m_height;
+
+private:
+    // the control representing the button
+    wxBitmapButton* m_button;
+};
+
+// ============================================================================
+// wxButtonToolBar implementation
+// ============================================================================
+
+IMPLEMENT_DYNAMIC_CLASS(wxButtonToolBar, wxControl)
+
+BEGIN_EVENT_TABLE(wxButtonToolBar, wxControl)
+    EVT_BUTTON(wxID_ANY, wxButtonToolBar::OnCommand)
+END_EVENT_TABLE()
+
+// ----------------------------------------------------------------------------
+// wxButtonToolBar creation
+// ----------------------------------------------------------------------------
+
+void wxButtonToolBar::Init()
+{
+    // no tools yet
+    m_needsLayout = false;
+
+    // unknown widths for the tools and separators
+    m_widthSeparator = wxDefaultCoord;
+
+    m_maxWidth =
+    m_maxHeight = 0;
+}
+
+bool wxButtonToolBar::Create(wxWindow *parent,
+                       wxWindowID id,
+                       const wxPoint& pos,
+                       const wxSize& size,
+                       long style,
+                       const wxString& name)
+{
+    if ( !wxToolBarBase::Create(parent, id, pos, size, style,
+                                wxDefaultValidator, name) )
+    {
+        return false;
+    }
+
+    return true;
+}
+
+wxButtonToolBar::~wxButtonToolBar()
+{
+}
+
+// ----------------------------------------------------------------------------
+// wxButtonToolBar tool-related methods
+// ----------------------------------------------------------------------------
+
+wxToolBarToolBase *wxButtonToolBar::FindToolForPosition(wxCoord x, wxCoord y) const
+{
+    // check the "other" direction first: it must be inside the toolbar or we
+    // don't risk finding anything
+    if ( IsVertical() )
+    {
+        if ( x < 0 || x > m_maxWidth )
+            return NULL;
+
+        // we always use x, even for a vertical toolbar, this makes the code
+        // below simpler
+        x = y;
+    }
+    else // horizontal
+    {
+        if ( y < 0 || y > m_maxHeight )
+            return NULL;
+    }
+
+    for ( wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
+          node;
+          node = node->GetNext() )
+    {
+        wxButtonToolBarTool *tool =  (wxButtonToolBarTool*) node->GetData();
+        wxRect rectTool = GetToolRect(tool);
+
+        wxCoord startTool, endTool;
+        GetRectLimits(rectTool, &startTool, &endTool);
+
+        if ( x >= startTool && x <= endTool )
+        {
+            // don't return the separators from here, they don't accept any
+            // input anyhow
+            return tool->IsSeparator() ? NULL : tool;
+        }
+    }
+
+    return NULL;
+}
+
+void wxButtonToolBar::GetRectLimits(const wxRect& rect,
+                              wxCoord *start,
+                              wxCoord *end) const
+{
+    wxCHECK_RET( start && end, _T("NULL pointer in GetRectLimits") );
+
+    if ( IsVertical() )
+    {
+        *start = rect.GetTop();
+        *end = rect.GetBottom();
+    }
+    else // horizontal
+    {
+        *start = rect.GetLeft();
+        *end = rect.GetRight();
+    }
+}
+
+
+void wxButtonToolBar::SetToolShortHelp(int id, const wxString& help)
+{
+    wxToolBarToolBase *tool = FindById(id);
+
+    wxCHECK_RET( tool, _T("SetToolShortHelp: no such tool") );
+
+    // TODO: set tooltip/short help
+    tool->SetShortHelp(help);
+}
+
+bool wxButtonToolBar::DoInsertTool(size_t WXUNUSED(pos),
+                             wxToolBarToolBase * WXUNUSED(tool))
+{
+    return true;
+}
+
+bool wxButtonToolBar::DoDeleteTool(size_t WXUNUSED(pos),
+                             wxToolBarToolBase * WXUNUSED(tool))
+{
+    // TODO
+    return true;
+}
+
+void wxButtonToolBar::DoEnableTool(wxToolBarToolBase *WXUNUSED(tool), bool WXUNUSED(enable))
+{
+    // TODO
+}
+
+void wxButtonToolBar::DoToggleTool(wxToolBarToolBase *WXUNUSED(tool), bool WXUNUSED(toggle))
+{
+    // TODO
+}
+
+void wxButtonToolBar::DoSetToggle(wxToolBarToolBase *WXUNUSED(tool), bool WXUNUSED(toggle))
+{
+    // TODO
+}
+
+wxToolBarToolBase *wxButtonToolBar::CreateTool(int id,
+                                         const wxString& label,
+                                         const wxBitmap& bmpNormal,
+                                         const wxBitmap& bmpDisabled,
+                                         wxItemKind kind,
+                                         wxObject *clientData,
+                                         const wxString& shortHelp,
+                                         const wxString& longHelp)
+{
+    return new wxButtonToolBarTool(this, id, label, bmpNormal, bmpDisabled, kind,
+                             clientData, shortHelp, longHelp);
+}
+
+wxToolBarToolBase *wxButtonToolBar::CreateTool(wxControl *control)
+{
+    return new wxButtonToolBarTool(this, control);
+}
+
+// ----------------------------------------------------------------------------
+// wxButtonToolBar geometry
+// ----------------------------------------------------------------------------
+
+wxRect wxButtonToolBar::GetToolRect(wxToolBarToolBase *toolBase) const
+{
+    const wxButtonToolBarTool *tool = (wxButtonToolBarTool *)toolBase;
+
+    wxRect rect;
+
+    wxCHECK_MSG( tool, rect, _T("GetToolRect: NULL tool") );
+
+    // ensure that we always have the valid tool position
+    if ( m_needsLayout )
+    {
+        wxConstCast(this, wxButtonToolBar)->DoLayout();
+    }
+
+    rect.x = tool->m_x - m_xMargin;
+    rect.y = tool->m_y - m_yMargin;
+
+    if ( IsVertical() )
+    {
+        if (tool->IsButton())
+        {
+            rect.width = m_defaultWidth;
+            rect.height = m_defaultHeight;
+            if (tool->GetButton())
+                rect.SetSize(tool->GetButton()->GetSize());
+        }
+        else if (tool->IsSeparator())
+        {
+            rect.width = m_defaultWidth;
+            rect.height = m_widthSeparator;
+        }
+        else // control
+        {
+            rect.width = tool->m_width;
+            rect.height = tool->m_height;
+        }
+    }
+    else // horizontal
+    {
+        if (tool->IsButton())
+        {
+            rect.width = m_defaultWidth;
+            rect.height = m_defaultHeight;
+            if (tool->GetButton())
+                rect.SetSize(tool->GetButton()->GetSize());
+        }
+        else if (tool->IsSeparator())
+        {
+            rect.width = m_widthSeparator;
+            rect.height = m_defaultHeight;
+        }
+        else // control
+        {
+            rect.width = tool->m_width;
+            rect.height = tool->m_height;
+        }
+    }
+
+    rect.width += 2*m_xMargin;
+    rect.height += 2*m_yMargin;
+
+    return rect;
+}
+
+bool wxButtonToolBar::Realize()
+{
+    if ( !wxToolBarBase::Realize() )
+        return false;
+    
+    m_needsLayout = true;
+    DoLayout();
+    
+    SetBestSize(wxSize(m_maxWidth, m_maxHeight));
+
+    return true;
+}
+
+void wxButtonToolBar::DoLayout()
+{
+    m_needsLayout = false;
+
+    wxCoord x = m_xMargin,
+            y = m_yMargin;
+
+    int maxHeight = 0;
+
+    const wxCoord widthTool = IsVertical() ? m_defaultHeight : m_defaultWidth;
+    wxCoord margin = IsVertical() ? m_xMargin : m_yMargin;
+    wxCoord *pCur = IsVertical() ? &y : &x;
+
+    // calculate the positions of all elements
+    for ( wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst();
+          node;
+          node = node->GetNext() )
+    {
+        wxButtonToolBarTool *tool = (wxButtonToolBarTool *) node->GetData();
+
+        tool->m_x = x;
+        tool->m_y = y;
+        
+        if (tool->IsButton())
+        {
+            if (!tool->GetButton())
+            {
+                wxBitmapButton* bmpButton = new wxBitmapButton(this, tool->GetId(), tool->GetNormalBitmap(), wxPoint(tool->m_x, tool->m_y), wxDefaultSize,
+                    wxBU_AUTODRAW);
+                
+                tool->SetButton(bmpButton);
+            }
+            else
+            {
+                tool->GetButton()->Move(wxPoint(tool->m_x, tool->m_y));
+            }
+            
+            int w = widthTool;
+            if (tool->GetButton())
+            {
+                wxSize sz = tool->GetButton()->GetSize();
+                w = sz.x;
+
+                maxHeight = wxMax(maxHeight, sz.y);
+            }
+
+            *pCur += (w + GetToolPacking());
+        }
+        else if (tool->IsSeparator())
+        {
+            *pCur += m_widthSeparator;
+        }
+        else if (!IsVertical()) // horizontal control
+        {
+            wxControl *control = tool->GetControl();
+            wxSize size = control->GetSize();
+            tool->m_y += (m_defaultHeight - size.y)/2;
+            tool->m_width = size.x;
+            tool->m_height = size.y;
+
+            *pCur += tool->m_width;
+
+            maxHeight = wxMax(maxHeight, size.y);
+        }
+        *pCur += margin;
+    }
+
+    // calculate the total toolbar size
+    m_maxWidth = x + 2*m_xMargin;
+    m_maxHeight = maxHeight + 2*m_yMargin;
+}
+
+wxSize wxButtonToolBar::DoGetBestClientSize() const
+{
+    return wxSize(m_maxWidth, m_maxHeight);
+}
+
+// receives button commands
+void wxButtonToolBar::OnCommand(wxCommandEvent& event)
+{
+    wxButtonToolBarTool* tool = (wxButtonToolBarTool*) FindById(event.GetId());
+    if (!tool)
+    {
+        event.Skip();
+        return;
+    }
+
+    // TODO: handle toggle items
+    OnLeftClick(event.GetId(), false);    
+}
+
+#endif // wxUSE_TOOLBAR && wxUSE_BMPBUTTON
+
 
         bookCtrl = new wxChoicebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style );
 #endif
 #if wxUSE_TOOLBOOK
-    if (GetSheetStyle() & wxPROPSHEET_TOOLBOOK)
+#if wxUSE_TOOLBAR && wxUSE_BMPBUTTON
+    if (GetSheetStyle() & wxPROPSHEET_BUTTONTOOLBOOK)
+        bookCtrl = new wxToolbook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style|wxBK_BUTTONBAR );
+    else
+#endif
+    if ((GetSheetStyle() & wxPROPSHEET_TOOLBOOK) || (GetSheetStyle() & wxPROPSHEET_BUTTONTOOLBOOK))
         bookCtrl = new wxToolbook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, style );
 #endif
 #if wxUSE_LISTBOOK
 
 #include "wx/imaglist.h"
 #include "wx/sysopt.h"
 #include "wx/toolbook.h"
+#include "wx/generic/buttonbar.h"
 
 // ----------------------------------------------------------------------------
 // various wxWidgets macros
         orient = wxTB_VERTICAL;
 
     // TODO: make more configurable
-    m_bookctrl = new wxToolBar
+    
+    if (style & wxBK_BUTTONBAR)
+    {
+        m_bookctrl = new wxButtonToolBar
+                 (
+                    this,
+                    wxID_TOOLBOOKTOOLBAR,
+                    wxDefaultPosition,
+                    wxDefaultSize,
+                    orient|wxTB_TEXT|wxTB_FLAT|wxTB_NODIVIDER|wxNO_BORDER
+                 );
+    }
+    else
+    {
+        m_bookctrl = new wxToolBar
                  (
                     this,
                     wxID_TOOLBOOKTOOLBAR,
                     wxDefaultSize,
                     orient | wxTB_TEXT|wxTB_FLAT|wxTB_NODIVIDER
                  );
+    }
 
     return true;
 }