Refactor owner-drawing code.
Only keep common code in the base class and extract all menu/listbox-specific stuff into derived classes. This makes the code cleaner and more maintainable but introduces some problems in wxCheckListBox appearance which will be fixed by the next patch. Closes #10635. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63220 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		
							
								
								
									
										23
									
								
								Makefile.in
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								Makefile.in
									
									
									
									
									
								
							@@ -2895,6 +2895,7 @@ COND_TOOLKIT_MSW_GUI_HDR =  \
 | 
				
			|||||||
	wx/msw/ole/dropsrc.h \
 | 
						wx/msw/ole/dropsrc.h \
 | 
				
			||||||
	wx/msw/ole/droptgt.h \
 | 
						wx/msw/ole/droptgt.h \
 | 
				
			||||||
	wx/msw/ole/oleutils.h \
 | 
						wx/msw/ole/oleutils.h \
 | 
				
			||||||
 | 
						wx/msw/ownerdrw.h \
 | 
				
			||||||
	wx/msw/palette.h \
 | 
						wx/msw/palette.h \
 | 
				
			||||||
	wx/msw/pen.h \
 | 
						wx/msw/pen.h \
 | 
				
			||||||
	wx/msw/printdlg.h \
 | 
						wx/msw/printdlg.h \
 | 
				
			||||||
@@ -3220,6 +3221,7 @@ COND_TOOLKIT_PM_GUI_HDR =  \
 | 
				
			|||||||
	wx/os2/minifram.h \
 | 
						wx/os2/minifram.h \
 | 
				
			||||||
	wx/os2/msgdlg.h \
 | 
						wx/os2/msgdlg.h \
 | 
				
			||||||
	wx/os2/notebook.h \
 | 
						wx/os2/notebook.h \
 | 
				
			||||||
 | 
						wx/os2/ownerdrw.h \
 | 
				
			||||||
	wx/os2/palette.h \
 | 
						wx/os2/palette.h \
 | 
				
			||||||
	wx/os2/pen.h \
 | 
						wx/os2/pen.h \
 | 
				
			||||||
	wx/os2/pnghand.h \
 | 
						wx/os2/pnghand.h \
 | 
				
			||||||
@@ -3306,6 +3308,7 @@ COND_TOOLKIT_WINCE_GUI_HDR =  \
 | 
				
			|||||||
	wx/msw/ole/dropsrc.h \
 | 
						wx/msw/ole/dropsrc.h \
 | 
				
			||||||
	wx/msw/ole/droptgt.h \
 | 
						wx/msw/ole/droptgt.h \
 | 
				
			||||||
	wx/msw/ole/oleutils.h \
 | 
						wx/msw/ole/oleutils.h \
 | 
				
			||||||
 | 
						wx/msw/ownerdrw.h \
 | 
				
			||||||
	wx/msw/palette.h \
 | 
						wx/msw/palette.h \
 | 
				
			||||||
	wx/msw/pen.h \
 | 
						wx/msw/pen.h \
 | 
				
			||||||
	wx/msw/printdlg.h \
 | 
						wx/msw/printdlg.h \
 | 
				
			||||||
@@ -4301,6 +4304,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS =  \
 | 
				
			|||||||
	monodll_mousemanager.o \
 | 
						monodll_mousemanager.o \
 | 
				
			||||||
	monodll_nbkbase.o \
 | 
						monodll_nbkbase.o \
 | 
				
			||||||
	monodll_overlaycmn.o \
 | 
						monodll_overlaycmn.o \
 | 
				
			||||||
 | 
						monodll_ownerdrwcmn.o \
 | 
				
			||||||
	monodll_paper.o \
 | 
						monodll_paper.o \
 | 
				
			||||||
	monodll_persist.o \
 | 
						monodll_persist.o \
 | 
				
			||||||
	monodll_pickerbase.o \
 | 
						monodll_pickerbase.o \
 | 
				
			||||||
@@ -4495,6 +4499,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS =  \
 | 
				
			|||||||
	monodll_mousemanager.o \
 | 
						monodll_mousemanager.o \
 | 
				
			||||||
	monodll_nbkbase.o \
 | 
						monodll_nbkbase.o \
 | 
				
			||||||
	monodll_overlaycmn.o \
 | 
						monodll_overlaycmn.o \
 | 
				
			||||||
 | 
						monodll_ownerdrwcmn.o \
 | 
				
			||||||
	monodll_paper.o \
 | 
						monodll_paper.o \
 | 
				
			||||||
	monodll_persist.o \
 | 
						monodll_persist.o \
 | 
				
			||||||
	monodll_pickerbase.o \
 | 
						monodll_pickerbase.o \
 | 
				
			||||||
@@ -6122,6 +6127,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_1 =  \
 | 
				
			|||||||
	monolib_mousemanager.o \
 | 
						monolib_mousemanager.o \
 | 
				
			||||||
	monolib_nbkbase.o \
 | 
						monolib_nbkbase.o \
 | 
				
			||||||
	monolib_overlaycmn.o \
 | 
						monolib_overlaycmn.o \
 | 
				
			||||||
 | 
						monolib_ownerdrwcmn.o \
 | 
				
			||||||
	monolib_paper.o \
 | 
						monolib_paper.o \
 | 
				
			||||||
	monolib_persist.o \
 | 
						monolib_persist.o \
 | 
				
			||||||
	monolib_pickerbase.o \
 | 
						monolib_pickerbase.o \
 | 
				
			||||||
@@ -6316,6 +6322,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_1 =  \
 | 
				
			|||||||
	monolib_mousemanager.o \
 | 
						monolib_mousemanager.o \
 | 
				
			||||||
	monolib_nbkbase.o \
 | 
						monolib_nbkbase.o \
 | 
				
			||||||
	monolib_overlaycmn.o \
 | 
						monolib_overlaycmn.o \
 | 
				
			||||||
 | 
						monolib_ownerdrwcmn.o \
 | 
				
			||||||
	monolib_paper.o \
 | 
						monolib_paper.o \
 | 
				
			||||||
	monolib_persist.o \
 | 
						monolib_persist.o \
 | 
				
			||||||
	monolib_pickerbase.o \
 | 
						monolib_pickerbase.o \
 | 
				
			||||||
@@ -8132,6 +8139,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2 =  \
 | 
				
			|||||||
	coredll_mousemanager.o \
 | 
						coredll_mousemanager.o \
 | 
				
			||||||
	coredll_nbkbase.o \
 | 
						coredll_nbkbase.o \
 | 
				
			||||||
	coredll_overlaycmn.o \
 | 
						coredll_overlaycmn.o \
 | 
				
			||||||
 | 
						coredll_ownerdrwcmn.o \
 | 
				
			||||||
	coredll_paper.o \
 | 
						coredll_paper.o \
 | 
				
			||||||
	coredll_persist.o \
 | 
						coredll_persist.o \
 | 
				
			||||||
	coredll_pickerbase.o \
 | 
						coredll_pickerbase.o \
 | 
				
			||||||
@@ -8326,6 +8334,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_2 =  \
 | 
				
			|||||||
	coredll_mousemanager.o \
 | 
						coredll_mousemanager.o \
 | 
				
			||||||
	coredll_nbkbase.o \
 | 
						coredll_nbkbase.o \
 | 
				
			||||||
	coredll_overlaycmn.o \
 | 
						coredll_overlaycmn.o \
 | 
				
			||||||
 | 
						coredll_ownerdrwcmn.o \
 | 
				
			||||||
	coredll_paper.o \
 | 
						coredll_paper.o \
 | 
				
			||||||
	coredll_persist.o \
 | 
						coredll_persist.o \
 | 
				
			||||||
	coredll_pickerbase.o \
 | 
						coredll_pickerbase.o \
 | 
				
			||||||
@@ -9626,6 +9635,7 @@ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3 =  \
 | 
				
			|||||||
	corelib_mousemanager.o \
 | 
						corelib_mousemanager.o \
 | 
				
			||||||
	corelib_nbkbase.o \
 | 
						corelib_nbkbase.o \
 | 
				
			||||||
	corelib_overlaycmn.o \
 | 
						corelib_overlaycmn.o \
 | 
				
			||||||
 | 
						corelib_ownerdrwcmn.o \
 | 
				
			||||||
	corelib_paper.o \
 | 
						corelib_paper.o \
 | 
				
			||||||
	corelib_persist.o \
 | 
						corelib_persist.o \
 | 
				
			||||||
	corelib_pickerbase.o \
 | 
						corelib_pickerbase.o \
 | 
				
			||||||
@@ -9820,6 +9830,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_3 =  \
 | 
				
			|||||||
	corelib_mousemanager.o \
 | 
						corelib_mousemanager.o \
 | 
				
			||||||
	corelib_nbkbase.o \
 | 
						corelib_nbkbase.o \
 | 
				
			||||||
	corelib_overlaycmn.o \
 | 
						corelib_overlaycmn.o \
 | 
				
			||||||
 | 
						corelib_ownerdrwcmn.o \
 | 
				
			||||||
	corelib_paper.o \
 | 
						corelib_paper.o \
 | 
				
			||||||
	corelib_persist.o \
 | 
						corelib_persist.o \
 | 
				
			||||||
	corelib_pickerbase.o \
 | 
						corelib_pickerbase.o \
 | 
				
			||||||
@@ -18901,6 +18912,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 | 
				
			|||||||
@COND_USE_GUI_1@monodll_overlaycmn.o: $(srcdir)/src/common/overlaycmn.cpp $(MONODLL_ODEP)
 | 
					@COND_USE_GUI_1@monodll_overlaycmn.o: $(srcdir)/src/common/overlaycmn.cpp $(MONODLL_ODEP)
 | 
				
			||||||
@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/overlaycmn.cpp
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/overlaycmn.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@COND_USE_GUI_1@monodll_ownerdrwcmn.o: $(srcdir)/src/common/ownerdrwcmn.cpp $(MONODLL_ODEP)
 | 
				
			||||||
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@COND_USE_GUI_1@monodll_paper.o: $(srcdir)/src/common/paper.cpp $(MONODLL_ODEP)
 | 
					@COND_USE_GUI_1@monodll_paper.o: $(srcdir)/src/common/paper.cpp $(MONODLL_ODEP)
 | 
				
			||||||
@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/paper.cpp
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/paper.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23713,6 +23727,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 | 
				
			|||||||
@COND_USE_GUI_1@monolib_overlaycmn.o: $(srcdir)/src/common/overlaycmn.cpp $(MONOLIB_ODEP)
 | 
					@COND_USE_GUI_1@monolib_overlaycmn.o: $(srcdir)/src/common/overlaycmn.cpp $(MONOLIB_ODEP)
 | 
				
			||||||
@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/overlaycmn.cpp
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/overlaycmn.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@COND_USE_GUI_1@monolib_ownerdrwcmn.o: $(srcdir)/src/common/ownerdrwcmn.cpp $(MONOLIB_ODEP)
 | 
				
			||||||
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@COND_USE_GUI_1@monolib_paper.o: $(srcdir)/src/common/paper.cpp $(MONOLIB_ODEP)
 | 
					@COND_USE_GUI_1@monolib_paper.o: $(srcdir)/src/common/paper.cpp $(MONOLIB_ODEP)
 | 
				
			||||||
@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/paper.cpp
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/paper.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28708,6 +28725,9 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP)
 | 
				
			|||||||
@COND_USE_GUI_1@coredll_overlaycmn.o: $(srcdir)/src/common/overlaycmn.cpp $(COREDLL_ODEP)
 | 
					@COND_USE_GUI_1@coredll_overlaycmn.o: $(srcdir)/src/common/overlaycmn.cpp $(COREDLL_ODEP)
 | 
				
			||||||
@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/overlaycmn.cpp
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/overlaycmn.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@COND_USE_GUI_1@coredll_ownerdrwcmn.o: $(srcdir)/src/common/ownerdrwcmn.cpp $(COREDLL_ODEP)
 | 
				
			||||||
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@COND_USE_GUI_1@coredll_paper.o: $(srcdir)/src/common/paper.cpp $(COREDLL_ODEP)
 | 
					@COND_USE_GUI_1@coredll_paper.o: $(srcdir)/src/common/paper.cpp $(COREDLL_ODEP)
 | 
				
			||||||
@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/paper.cpp
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/paper.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32251,6 +32271,9 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
 | 
				
			|||||||
@COND_USE_GUI_1@corelib_overlaycmn.o: $(srcdir)/src/common/overlaycmn.cpp $(CORELIB_ODEP)
 | 
					@COND_USE_GUI_1@corelib_overlaycmn.o: $(srcdir)/src/common/overlaycmn.cpp $(CORELIB_ODEP)
 | 
				
			||||||
@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/overlaycmn.cpp
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/overlaycmn.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@COND_USE_GUI_1@corelib_ownerdrwcmn.o: $(srcdir)/src/common/ownerdrwcmn.cpp $(CORELIB_ODEP)
 | 
				
			||||||
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@COND_USE_GUI_1@corelib_paper.o: $(srcdir)/src/common/paper.cpp $(CORELIB_ODEP)
 | 
					@COND_USE_GUI_1@corelib_paper.o: $(srcdir)/src/common/paper.cpp $(CORELIB_ODEP)
 | 
				
			||||||
@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/paper.cpp
 | 
					@COND_USE_GUI_1@	$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/paper.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -703,6 +703,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 | 
				
			|||||||
    src/common/mousemanager.cpp
 | 
					    src/common/mousemanager.cpp
 | 
				
			||||||
    src/common/nbkbase.cpp
 | 
					    src/common/nbkbase.cpp
 | 
				
			||||||
    src/common/overlaycmn.cpp
 | 
					    src/common/overlaycmn.cpp
 | 
				
			||||||
 | 
					    src/common/ownerdrwcmn.cpp
 | 
				
			||||||
    src/common/paper.cpp
 | 
					    src/common/paper.cpp
 | 
				
			||||||
    src/common/persist.cpp
 | 
					    src/common/persist.cpp
 | 
				
			||||||
    src/common/pickerbase.cpp
 | 
					    src/common/pickerbase.cpp
 | 
				
			||||||
@@ -1770,6 +1771,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 | 
				
			|||||||
    wx/msw/ole/dropsrc.h
 | 
					    wx/msw/ole/dropsrc.h
 | 
				
			||||||
    wx/msw/ole/droptgt.h
 | 
					    wx/msw/ole/droptgt.h
 | 
				
			||||||
    wx/msw/ole/oleutils.h
 | 
					    wx/msw/ole/oleutils.h
 | 
				
			||||||
 | 
					    wx/msw/ownerdrw.h
 | 
				
			||||||
    wx/msw/palette.h
 | 
					    wx/msw/palette.h
 | 
				
			||||||
    wx/msw/pen.h
 | 
					    wx/msw/pen.h
 | 
				
			||||||
    wx/msw/printdlg.h
 | 
					    wx/msw/printdlg.h
 | 
				
			||||||
@@ -2150,6 +2152,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
 | 
				
			|||||||
    wx/os2/minifram.h
 | 
					    wx/os2/minifram.h
 | 
				
			||||||
    wx/os2/msgdlg.h
 | 
					    wx/os2/msgdlg.h
 | 
				
			||||||
    wx/os2/notebook.h
 | 
					    wx/os2/notebook.h
 | 
				
			||||||
 | 
					    wx/os2/ownerdrw.h
 | 
				
			||||||
    wx/os2/palette.h
 | 
					    wx/os2/palette.h
 | 
				
			||||||
    wx/os2/pen.h
 | 
					    wx/os2/pen.h
 | 
				
			||||||
    wx/os2/pnghand.h
 | 
					    wx/os2/pnghand.h
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1818,6 +1818,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monodll_mousemanager.obj \
 | 
						$(OBJS)\monodll_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\monodll_nbkbase.obj \
 | 
						$(OBJS)\monodll_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\monodll_overlaycmn.obj \
 | 
						$(OBJS)\monodll_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\monodll_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\monodll_paper.obj \
 | 
						$(OBJS)\monodll_paper.obj \
 | 
				
			||||||
	$(OBJS)\monodll_persist.obj \
 | 
						$(OBJS)\monodll_persist.obj \
 | 
				
			||||||
	$(OBJS)\monodll_pickerbase.obj \
 | 
						$(OBJS)\monodll_pickerbase.obj \
 | 
				
			||||||
@@ -2060,6 +2061,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monodll_mousemanager.obj \
 | 
						$(OBJS)\monodll_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\monodll_nbkbase.obj \
 | 
						$(OBJS)\monodll_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\monodll_overlaycmn.obj \
 | 
						$(OBJS)\monodll_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\monodll_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\monodll_paper.obj \
 | 
						$(OBJS)\monodll_paper.obj \
 | 
				
			||||||
	$(OBJS)\monodll_persist.obj \
 | 
						$(OBJS)\monodll_persist.obj \
 | 
				
			||||||
	$(OBJS)\monodll_pickerbase.obj \
 | 
						$(OBJS)\monodll_pickerbase.obj \
 | 
				
			||||||
@@ -2518,6 +2520,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monolib_mousemanager.obj \
 | 
						$(OBJS)\monolib_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\monolib_nbkbase.obj \
 | 
						$(OBJS)\monolib_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\monolib_overlaycmn.obj \
 | 
						$(OBJS)\monolib_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\monolib_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\monolib_paper.obj \
 | 
						$(OBJS)\monolib_paper.obj \
 | 
				
			||||||
	$(OBJS)\monolib_persist.obj \
 | 
						$(OBJS)\monolib_persist.obj \
 | 
				
			||||||
	$(OBJS)\monolib_pickerbase.obj \
 | 
						$(OBJS)\monolib_pickerbase.obj \
 | 
				
			||||||
@@ -2760,6 +2763,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monolib_mousemanager.obj \
 | 
						$(OBJS)\monolib_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\monolib_nbkbase.obj \
 | 
						$(OBJS)\monolib_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\monolib_overlaycmn.obj \
 | 
						$(OBJS)\monolib_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\monolib_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\monolib_paper.obj \
 | 
						$(OBJS)\monolib_paper.obj \
 | 
				
			||||||
	$(OBJS)\monolib_persist.obj \
 | 
						$(OBJS)\monolib_persist.obj \
 | 
				
			||||||
	$(OBJS)\monolib_pickerbase.obj \
 | 
						$(OBJS)\monolib_pickerbase.obj \
 | 
				
			||||||
@@ -3111,6 +3115,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\coredll_mousemanager.obj \
 | 
						$(OBJS)\coredll_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\coredll_nbkbase.obj \
 | 
						$(OBJS)\coredll_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\coredll_overlaycmn.obj \
 | 
						$(OBJS)\coredll_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\coredll_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\coredll_paper.obj \
 | 
						$(OBJS)\coredll_paper.obj \
 | 
				
			||||||
	$(OBJS)\coredll_persist.obj \
 | 
						$(OBJS)\coredll_persist.obj \
 | 
				
			||||||
	$(OBJS)\coredll_pickerbase.obj \
 | 
						$(OBJS)\coredll_pickerbase.obj \
 | 
				
			||||||
@@ -3353,6 +3358,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\coredll_mousemanager.obj \
 | 
						$(OBJS)\coredll_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\coredll_nbkbase.obj \
 | 
						$(OBJS)\coredll_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\coredll_overlaycmn.obj \
 | 
						$(OBJS)\coredll_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\coredll_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\coredll_paper.obj \
 | 
						$(OBJS)\coredll_paper.obj \
 | 
				
			||||||
	$(OBJS)\coredll_persist.obj \
 | 
						$(OBJS)\coredll_persist.obj \
 | 
				
			||||||
	$(OBJS)\coredll_pickerbase.obj \
 | 
						$(OBJS)\coredll_pickerbase.obj \
 | 
				
			||||||
@@ -3600,6 +3606,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\corelib_mousemanager.obj \
 | 
						$(OBJS)\corelib_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\corelib_nbkbase.obj \
 | 
						$(OBJS)\corelib_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\corelib_overlaycmn.obj \
 | 
						$(OBJS)\corelib_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\corelib_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\corelib_paper.obj \
 | 
						$(OBJS)\corelib_paper.obj \
 | 
				
			||||||
	$(OBJS)\corelib_persist.obj \
 | 
						$(OBJS)\corelib_persist.obj \
 | 
				
			||||||
	$(OBJS)\corelib_pickerbase.obj \
 | 
						$(OBJS)\corelib_pickerbase.obj \
 | 
				
			||||||
@@ -3842,6 +3849,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\corelib_mousemanager.obj \
 | 
						$(OBJS)\corelib_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\corelib_nbkbase.obj \
 | 
						$(OBJS)\corelib_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\corelib_overlaycmn.obj \
 | 
						$(OBJS)\corelib_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\corelib_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\corelib_paper.obj \
 | 
						$(OBJS)\corelib_paper.obj \
 | 
				
			||||||
	$(OBJS)\corelib_persist.obj \
 | 
						$(OBJS)\corelib_persist.obj \
 | 
				
			||||||
	$(OBJS)\corelib_pickerbase.obj \
 | 
						$(OBJS)\corelib_pickerbase.obj \
 | 
				
			||||||
@@ -7306,6 +7314,11 @@ $(OBJS)\monodll_overlaycmn.obj: ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
						$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
 | 
					$(OBJS)\monodll_ownerdrwcmn.obj: ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!if "$(USE_GUI)" == "1"
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
$(OBJS)\monodll_paper.obj: ..\..\src\common\paper.cpp
 | 
					$(OBJS)\monodll_paper.obj: ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
						$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
				
			||||||
@@ -9483,6 +9496,11 @@ $(OBJS)\monolib_overlaycmn.obj: ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
						$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
 | 
					$(OBJS)\monolib_ownerdrwcmn.obj: ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!if "$(USE_GUI)" == "1"
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
$(OBJS)\monolib_paper.obj: ..\..\src\common\paper.cpp
 | 
					$(OBJS)\monolib_paper.obj: ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
						$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
				
			||||||
@@ -11663,6 +11681,11 @@ $(OBJS)\coredll_overlaycmn.obj: ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
						$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
 | 
					$(OBJS)\coredll_ownerdrwcmn.obj: ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!if "$(USE_GUI)" == "1"
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
$(OBJS)\coredll_paper.obj: ..\..\src\common\paper.cpp
 | 
					$(OBJS)\coredll_paper.obj: ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
						$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
				
			||||||
@@ -12937,6 +12960,11 @@ $(OBJS)\corelib_overlaycmn.obj: ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
						$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
 | 
					$(OBJS)\corelib_ownerdrwcmn.obj: ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!if "$(USE_GUI)" == "1"
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
$(OBJS)\corelib_paper.obj: ..\..\src\common\paper.cpp
 | 
					$(OBJS)\corelib_paper.obj: ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
						$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1845,6 +1845,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monodll_mousemanager.o \
 | 
						$(OBJS)\monodll_mousemanager.o \
 | 
				
			||||||
	$(OBJS)\monodll_nbkbase.o \
 | 
						$(OBJS)\monodll_nbkbase.o \
 | 
				
			||||||
	$(OBJS)\monodll_overlaycmn.o \
 | 
						$(OBJS)\monodll_overlaycmn.o \
 | 
				
			||||||
 | 
						$(OBJS)\monodll_ownerdrwcmn.o \
 | 
				
			||||||
	$(OBJS)\monodll_paper.o \
 | 
						$(OBJS)\monodll_paper.o \
 | 
				
			||||||
	$(OBJS)\monodll_persist.o \
 | 
						$(OBJS)\monodll_persist.o \
 | 
				
			||||||
	$(OBJS)\monodll_pickerbase.o \
 | 
						$(OBJS)\monodll_pickerbase.o \
 | 
				
			||||||
@@ -2089,6 +2090,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monodll_mousemanager.o \
 | 
						$(OBJS)\monodll_mousemanager.o \
 | 
				
			||||||
	$(OBJS)\monodll_nbkbase.o \
 | 
						$(OBJS)\monodll_nbkbase.o \
 | 
				
			||||||
	$(OBJS)\monodll_overlaycmn.o \
 | 
						$(OBJS)\monodll_overlaycmn.o \
 | 
				
			||||||
 | 
						$(OBJS)\monodll_ownerdrwcmn.o \
 | 
				
			||||||
	$(OBJS)\monodll_paper.o \
 | 
						$(OBJS)\monodll_paper.o \
 | 
				
			||||||
	$(OBJS)\monodll_persist.o \
 | 
						$(OBJS)\monodll_persist.o \
 | 
				
			||||||
	$(OBJS)\monodll_pickerbase.o \
 | 
						$(OBJS)\monodll_pickerbase.o \
 | 
				
			||||||
@@ -2551,6 +2553,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monolib_mousemanager.o \
 | 
						$(OBJS)\monolib_mousemanager.o \
 | 
				
			||||||
	$(OBJS)\monolib_nbkbase.o \
 | 
						$(OBJS)\monolib_nbkbase.o \
 | 
				
			||||||
	$(OBJS)\monolib_overlaycmn.o \
 | 
						$(OBJS)\monolib_overlaycmn.o \
 | 
				
			||||||
 | 
						$(OBJS)\monolib_ownerdrwcmn.o \
 | 
				
			||||||
	$(OBJS)\monolib_paper.o \
 | 
						$(OBJS)\monolib_paper.o \
 | 
				
			||||||
	$(OBJS)\monolib_persist.o \
 | 
						$(OBJS)\monolib_persist.o \
 | 
				
			||||||
	$(OBJS)\monolib_pickerbase.o \
 | 
						$(OBJS)\monolib_pickerbase.o \
 | 
				
			||||||
@@ -2795,6 +2798,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monolib_mousemanager.o \
 | 
						$(OBJS)\monolib_mousemanager.o \
 | 
				
			||||||
	$(OBJS)\monolib_nbkbase.o \
 | 
						$(OBJS)\monolib_nbkbase.o \
 | 
				
			||||||
	$(OBJS)\monolib_overlaycmn.o \
 | 
						$(OBJS)\monolib_overlaycmn.o \
 | 
				
			||||||
 | 
						$(OBJS)\monolib_ownerdrwcmn.o \
 | 
				
			||||||
	$(OBJS)\monolib_paper.o \
 | 
						$(OBJS)\monolib_paper.o \
 | 
				
			||||||
	$(OBJS)\monolib_persist.o \
 | 
						$(OBJS)\monolib_persist.o \
 | 
				
			||||||
	$(OBJS)\monolib_pickerbase.o \
 | 
						$(OBJS)\monolib_pickerbase.o \
 | 
				
			||||||
@@ -3160,6 +3164,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\coredll_mousemanager.o \
 | 
						$(OBJS)\coredll_mousemanager.o \
 | 
				
			||||||
	$(OBJS)\coredll_nbkbase.o \
 | 
						$(OBJS)\coredll_nbkbase.o \
 | 
				
			||||||
	$(OBJS)\coredll_overlaycmn.o \
 | 
						$(OBJS)\coredll_overlaycmn.o \
 | 
				
			||||||
 | 
						$(OBJS)\coredll_ownerdrwcmn.o \
 | 
				
			||||||
	$(OBJS)\coredll_paper.o \
 | 
						$(OBJS)\coredll_paper.o \
 | 
				
			||||||
	$(OBJS)\coredll_persist.o \
 | 
						$(OBJS)\coredll_persist.o \
 | 
				
			||||||
	$(OBJS)\coredll_pickerbase.o \
 | 
						$(OBJS)\coredll_pickerbase.o \
 | 
				
			||||||
@@ -3404,6 +3409,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\coredll_mousemanager.o \
 | 
						$(OBJS)\coredll_mousemanager.o \
 | 
				
			||||||
	$(OBJS)\coredll_nbkbase.o \
 | 
						$(OBJS)\coredll_nbkbase.o \
 | 
				
			||||||
	$(OBJS)\coredll_overlaycmn.o \
 | 
						$(OBJS)\coredll_overlaycmn.o \
 | 
				
			||||||
 | 
						$(OBJS)\coredll_ownerdrwcmn.o \
 | 
				
			||||||
	$(OBJS)\coredll_paper.o \
 | 
						$(OBJS)\coredll_paper.o \
 | 
				
			||||||
	$(OBJS)\coredll_persist.o \
 | 
						$(OBJS)\coredll_persist.o \
 | 
				
			||||||
	$(OBJS)\coredll_pickerbase.o \
 | 
						$(OBJS)\coredll_pickerbase.o \
 | 
				
			||||||
@@ -3657,6 +3663,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\corelib_mousemanager.o \
 | 
						$(OBJS)\corelib_mousemanager.o \
 | 
				
			||||||
	$(OBJS)\corelib_nbkbase.o \
 | 
						$(OBJS)\corelib_nbkbase.o \
 | 
				
			||||||
	$(OBJS)\corelib_overlaycmn.o \
 | 
						$(OBJS)\corelib_overlaycmn.o \
 | 
				
			||||||
 | 
						$(OBJS)\corelib_ownerdrwcmn.o \
 | 
				
			||||||
	$(OBJS)\corelib_paper.o \
 | 
						$(OBJS)\corelib_paper.o \
 | 
				
			||||||
	$(OBJS)\corelib_persist.o \
 | 
						$(OBJS)\corelib_persist.o \
 | 
				
			||||||
	$(OBJS)\corelib_pickerbase.o \
 | 
						$(OBJS)\corelib_pickerbase.o \
 | 
				
			||||||
@@ -3901,6 +3908,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\corelib_mousemanager.o \
 | 
						$(OBJS)\corelib_mousemanager.o \
 | 
				
			||||||
	$(OBJS)\corelib_nbkbase.o \
 | 
						$(OBJS)\corelib_nbkbase.o \
 | 
				
			||||||
	$(OBJS)\corelib_overlaycmn.o \
 | 
						$(OBJS)\corelib_overlaycmn.o \
 | 
				
			||||||
 | 
						$(OBJS)\corelib_ownerdrwcmn.o \
 | 
				
			||||||
	$(OBJS)\corelib_paper.o \
 | 
						$(OBJS)\corelib_paper.o \
 | 
				
			||||||
	$(OBJS)\corelib_persist.o \
 | 
						$(OBJS)\corelib_persist.o \
 | 
				
			||||||
	$(OBJS)\corelib_pickerbase.o \
 | 
						$(OBJS)\corelib_pickerbase.o \
 | 
				
			||||||
@@ -7472,6 +7480,11 @@ $(OBJS)\monodll_overlaycmn.o: ../../src/common/overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 | 
						$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(USE_GUI),1)
 | 
				
			||||||
 | 
					$(OBJS)\monodll_ownerdrwcmn.o: ../../src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(USE_GUI),1)
 | 
					ifeq ($(USE_GUI),1)
 | 
				
			||||||
$(OBJS)\monodll_paper.o: ../../src/common/paper.cpp
 | 
					$(OBJS)\monodll_paper.o: ../../src/common/paper.cpp
 | 
				
			||||||
	$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 | 
						$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
@@ -9649,6 +9662,11 @@ $(OBJS)\monolib_overlaycmn.o: ../../src/common/overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 | 
						$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(USE_GUI),1)
 | 
				
			||||||
 | 
					$(OBJS)\monolib_ownerdrwcmn.o: ../../src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(USE_GUI),1)
 | 
					ifeq ($(USE_GUI),1)
 | 
				
			||||||
$(OBJS)\monolib_paper.o: ../../src/common/paper.cpp
 | 
					$(OBJS)\monolib_paper.o: ../../src/common/paper.cpp
 | 
				
			||||||
	$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 | 
						$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
@@ -11829,6 +11847,11 @@ $(OBJS)\coredll_overlaycmn.o: ../../src/common/overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 | 
						$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(USE_GUI),1)
 | 
				
			||||||
 | 
					$(OBJS)\coredll_ownerdrwcmn.o: ../../src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(USE_GUI),1)
 | 
					ifeq ($(USE_GUI),1)
 | 
				
			||||||
$(OBJS)\coredll_paper.o: ../../src/common/paper.cpp
 | 
					$(OBJS)\coredll_paper.o: ../../src/common/paper.cpp
 | 
				
			||||||
	$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 | 
						$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
@@ -13103,6 +13126,11 @@ $(OBJS)\corelib_overlaycmn.o: ../../src/common/overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
 | 
						$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(USE_GUI),1)
 | 
				
			||||||
 | 
					$(OBJS)\corelib_ownerdrwcmn.o: ../../src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(USE_GUI),1)
 | 
					ifeq ($(USE_GUI),1)
 | 
				
			||||||
$(OBJS)\corelib_paper.o: ../../src/common/paper.cpp
 | 
					$(OBJS)\corelib_paper.o: ../../src/common/paper.cpp
 | 
				
			||||||
	$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
 | 
						$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2043,6 +2043,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monodll_mousemanager.obj \
 | 
						$(OBJS)\monodll_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\monodll_nbkbase.obj \
 | 
						$(OBJS)\monodll_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\monodll_overlaycmn.obj \
 | 
						$(OBJS)\monodll_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\monodll_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\monodll_paper.obj \
 | 
						$(OBJS)\monodll_paper.obj \
 | 
				
			||||||
	$(OBJS)\monodll_persist.obj \
 | 
						$(OBJS)\monodll_persist.obj \
 | 
				
			||||||
	$(OBJS)\monodll_pickerbase.obj \
 | 
						$(OBJS)\monodll_pickerbase.obj \
 | 
				
			||||||
@@ -2285,6 +2286,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monodll_mousemanager.obj \
 | 
						$(OBJS)\monodll_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\monodll_nbkbase.obj \
 | 
						$(OBJS)\monodll_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\monodll_overlaycmn.obj \
 | 
						$(OBJS)\monodll_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\monodll_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\monodll_paper.obj \
 | 
						$(OBJS)\monodll_paper.obj \
 | 
				
			||||||
	$(OBJS)\monodll_persist.obj \
 | 
						$(OBJS)\monodll_persist.obj \
 | 
				
			||||||
	$(OBJS)\monodll_pickerbase.obj \
 | 
						$(OBJS)\monodll_pickerbase.obj \
 | 
				
			||||||
@@ -2749,6 +2751,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monolib_mousemanager.obj \
 | 
						$(OBJS)\monolib_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\monolib_nbkbase.obj \
 | 
						$(OBJS)\monolib_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\monolib_overlaycmn.obj \
 | 
						$(OBJS)\monolib_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\monolib_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\monolib_paper.obj \
 | 
						$(OBJS)\monolib_paper.obj \
 | 
				
			||||||
	$(OBJS)\monolib_persist.obj \
 | 
						$(OBJS)\monolib_persist.obj \
 | 
				
			||||||
	$(OBJS)\monolib_pickerbase.obj \
 | 
						$(OBJS)\monolib_pickerbase.obj \
 | 
				
			||||||
@@ -2991,6 +2994,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\monolib_mousemanager.obj \
 | 
						$(OBJS)\monolib_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\monolib_nbkbase.obj \
 | 
						$(OBJS)\monolib_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\monolib_overlaycmn.obj \
 | 
						$(OBJS)\monolib_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\monolib_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\monolib_paper.obj \
 | 
						$(OBJS)\monolib_paper.obj \
 | 
				
			||||||
	$(OBJS)\monolib_persist.obj \
 | 
						$(OBJS)\monolib_persist.obj \
 | 
				
			||||||
	$(OBJS)\monolib_pickerbase.obj \
 | 
						$(OBJS)\monolib_pickerbase.obj \
 | 
				
			||||||
@@ -3408,6 +3412,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\coredll_mousemanager.obj \
 | 
						$(OBJS)\coredll_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\coredll_nbkbase.obj \
 | 
						$(OBJS)\coredll_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\coredll_overlaycmn.obj \
 | 
						$(OBJS)\coredll_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\coredll_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\coredll_paper.obj \
 | 
						$(OBJS)\coredll_paper.obj \
 | 
				
			||||||
	$(OBJS)\coredll_persist.obj \
 | 
						$(OBJS)\coredll_persist.obj \
 | 
				
			||||||
	$(OBJS)\coredll_pickerbase.obj \
 | 
						$(OBJS)\coredll_pickerbase.obj \
 | 
				
			||||||
@@ -3650,6 +3655,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\coredll_mousemanager.obj \
 | 
						$(OBJS)\coredll_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\coredll_nbkbase.obj \
 | 
						$(OBJS)\coredll_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\coredll_overlaycmn.obj \
 | 
						$(OBJS)\coredll_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\coredll_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\coredll_paper.obj \
 | 
						$(OBJS)\coredll_paper.obj \
 | 
				
			||||||
	$(OBJS)\coredll_persist.obj \
 | 
						$(OBJS)\coredll_persist.obj \
 | 
				
			||||||
	$(OBJS)\coredll_pickerbase.obj \
 | 
						$(OBJS)\coredll_pickerbase.obj \
 | 
				
			||||||
@@ -3903,6 +3909,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\corelib_mousemanager.obj \
 | 
						$(OBJS)\corelib_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\corelib_nbkbase.obj \
 | 
						$(OBJS)\corelib_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\corelib_overlaycmn.obj \
 | 
						$(OBJS)\corelib_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\corelib_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\corelib_paper.obj \
 | 
						$(OBJS)\corelib_paper.obj \
 | 
				
			||||||
	$(OBJS)\corelib_persist.obj \
 | 
						$(OBJS)\corelib_persist.obj \
 | 
				
			||||||
	$(OBJS)\corelib_pickerbase.obj \
 | 
						$(OBJS)\corelib_pickerbase.obj \
 | 
				
			||||||
@@ -4145,6 +4152,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  \
 | 
				
			|||||||
	$(OBJS)\corelib_mousemanager.obj \
 | 
						$(OBJS)\corelib_mousemanager.obj \
 | 
				
			||||||
	$(OBJS)\corelib_nbkbase.obj \
 | 
						$(OBJS)\corelib_nbkbase.obj \
 | 
				
			||||||
	$(OBJS)\corelib_overlaycmn.obj \
 | 
						$(OBJS)\corelib_overlaycmn.obj \
 | 
				
			||||||
 | 
						$(OBJS)\corelib_ownerdrwcmn.obj \
 | 
				
			||||||
	$(OBJS)\corelib_paper.obj \
 | 
						$(OBJS)\corelib_paper.obj \
 | 
				
			||||||
	$(OBJS)\corelib_persist.obj \
 | 
						$(OBJS)\corelib_persist.obj \
 | 
				
			||||||
	$(OBJS)\corelib_pickerbase.obj \
 | 
						$(OBJS)\corelib_pickerbase.obj \
 | 
				
			||||||
@@ -7903,6 +7911,11 @@ $(OBJS)\monodll_overlaycmn.obj: ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
 | 
					$(OBJS)\monodll_ownerdrwcmn.obj: ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!if "$(USE_GUI)" == "1"
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
$(OBJS)\monodll_paper.obj: ..\..\src\common\paper.cpp
 | 
					$(OBJS)\monodll_paper.obj: ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
				
			||||||
@@ -10080,6 +10093,11 @@ $(OBJS)\monolib_overlaycmn.obj: ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
 | 
					$(OBJS)\monolib_ownerdrwcmn.obj: ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!if "$(USE_GUI)" == "1"
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
$(OBJS)\monolib_paper.obj: ..\..\src\common\paper.cpp
 | 
					$(OBJS)\monolib_paper.obj: ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
				
			||||||
@@ -12260,6 +12278,11 @@ $(OBJS)\coredll_overlaycmn.obj: ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
 | 
					$(OBJS)\coredll_ownerdrwcmn.obj: ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!if "$(USE_GUI)" == "1"
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
$(OBJS)\coredll_paper.obj: ..\..\src\common\paper.cpp
 | 
					$(OBJS)\coredll_paper.obj: ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
				
			||||||
@@ -13534,6 +13557,11 @@ $(OBJS)\corelib_overlaycmn.obj: ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\overlaycmn.cpp
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
 | 
					$(OBJS)\corelib_ownerdrwcmn.obj: ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!if "$(USE_GUI)" == "1"
 | 
					!if "$(USE_GUI)" == "1"
 | 
				
			||||||
$(OBJS)\corelib_paper.obj: ..\..\src\common\paper.cpp
 | 
					$(OBJS)\corelib_paper.obj: ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
						$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\paper.cpp
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -411,6 +411,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  &
 | 
				
			|||||||
	$(OBJS)\monodll_mousemanager.obj &
 | 
						$(OBJS)\monodll_mousemanager.obj &
 | 
				
			||||||
	$(OBJS)\monodll_nbkbase.obj &
 | 
						$(OBJS)\monodll_nbkbase.obj &
 | 
				
			||||||
	$(OBJS)\monodll_overlaycmn.obj &
 | 
						$(OBJS)\monodll_overlaycmn.obj &
 | 
				
			||||||
 | 
						$(OBJS)\monodll_ownerdrwcmn.obj &
 | 
				
			||||||
	$(OBJS)\monodll_paper.obj &
 | 
						$(OBJS)\monodll_paper.obj &
 | 
				
			||||||
	$(OBJS)\monodll_persist.obj &
 | 
						$(OBJS)\monodll_persist.obj &
 | 
				
			||||||
	$(OBJS)\monodll_pickerbase.obj &
 | 
						$(OBJS)\monodll_pickerbase.obj &
 | 
				
			||||||
@@ -655,6 +656,7 @@ ____CORE_SRC_FILENAMES_OBJECTS =  &
 | 
				
			|||||||
	$(OBJS)\monodll_mousemanager.obj &
 | 
						$(OBJS)\monodll_mousemanager.obj &
 | 
				
			||||||
	$(OBJS)\monodll_nbkbase.obj &
 | 
						$(OBJS)\monodll_nbkbase.obj &
 | 
				
			||||||
	$(OBJS)\monodll_overlaycmn.obj &
 | 
						$(OBJS)\monodll_overlaycmn.obj &
 | 
				
			||||||
 | 
						$(OBJS)\monodll_ownerdrwcmn.obj &
 | 
				
			||||||
	$(OBJS)\monodll_paper.obj &
 | 
						$(OBJS)\monodll_paper.obj &
 | 
				
			||||||
	$(OBJS)\monodll_persist.obj &
 | 
						$(OBJS)\monodll_persist.obj &
 | 
				
			||||||
	$(OBJS)\monodll_pickerbase.obj &
 | 
						$(OBJS)\monodll_pickerbase.obj &
 | 
				
			||||||
@@ -1122,6 +1124,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  &
 | 
				
			|||||||
	$(OBJS)\monolib_mousemanager.obj &
 | 
						$(OBJS)\monolib_mousemanager.obj &
 | 
				
			||||||
	$(OBJS)\monolib_nbkbase.obj &
 | 
						$(OBJS)\monolib_nbkbase.obj &
 | 
				
			||||||
	$(OBJS)\monolib_overlaycmn.obj &
 | 
						$(OBJS)\monolib_overlaycmn.obj &
 | 
				
			||||||
 | 
						$(OBJS)\monolib_ownerdrwcmn.obj &
 | 
				
			||||||
	$(OBJS)\monolib_paper.obj &
 | 
						$(OBJS)\monolib_paper.obj &
 | 
				
			||||||
	$(OBJS)\monolib_persist.obj &
 | 
						$(OBJS)\monolib_persist.obj &
 | 
				
			||||||
	$(OBJS)\monolib_pickerbase.obj &
 | 
						$(OBJS)\monolib_pickerbase.obj &
 | 
				
			||||||
@@ -1366,6 +1369,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS =  &
 | 
				
			|||||||
	$(OBJS)\monolib_mousemanager.obj &
 | 
						$(OBJS)\monolib_mousemanager.obj &
 | 
				
			||||||
	$(OBJS)\monolib_nbkbase.obj &
 | 
						$(OBJS)\monolib_nbkbase.obj &
 | 
				
			||||||
	$(OBJS)\monolib_overlaycmn.obj &
 | 
						$(OBJS)\monolib_overlaycmn.obj &
 | 
				
			||||||
 | 
						$(OBJS)\monolib_ownerdrwcmn.obj &
 | 
				
			||||||
	$(OBJS)\monolib_paper.obj &
 | 
						$(OBJS)\monolib_paper.obj &
 | 
				
			||||||
	$(OBJS)\monolib_persist.obj &
 | 
						$(OBJS)\monolib_persist.obj &
 | 
				
			||||||
	$(OBJS)\monolib_pickerbase.obj &
 | 
						$(OBJS)\monolib_pickerbase.obj &
 | 
				
			||||||
@@ -1742,6 +1746,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  &
 | 
				
			|||||||
	$(OBJS)\coredll_mousemanager.obj &
 | 
						$(OBJS)\coredll_mousemanager.obj &
 | 
				
			||||||
	$(OBJS)\coredll_nbkbase.obj &
 | 
						$(OBJS)\coredll_nbkbase.obj &
 | 
				
			||||||
	$(OBJS)\coredll_overlaycmn.obj &
 | 
						$(OBJS)\coredll_overlaycmn.obj &
 | 
				
			||||||
 | 
						$(OBJS)\coredll_ownerdrwcmn.obj &
 | 
				
			||||||
	$(OBJS)\coredll_paper.obj &
 | 
						$(OBJS)\coredll_paper.obj &
 | 
				
			||||||
	$(OBJS)\coredll_persist.obj &
 | 
						$(OBJS)\coredll_persist.obj &
 | 
				
			||||||
	$(OBJS)\coredll_pickerbase.obj &
 | 
						$(OBJS)\coredll_pickerbase.obj &
 | 
				
			||||||
@@ -1986,6 +1991,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS =  &
 | 
				
			|||||||
	$(OBJS)\coredll_mousemanager.obj &
 | 
						$(OBJS)\coredll_mousemanager.obj &
 | 
				
			||||||
	$(OBJS)\coredll_nbkbase.obj &
 | 
						$(OBJS)\coredll_nbkbase.obj &
 | 
				
			||||||
	$(OBJS)\coredll_overlaycmn.obj &
 | 
						$(OBJS)\coredll_overlaycmn.obj &
 | 
				
			||||||
 | 
						$(OBJS)\coredll_ownerdrwcmn.obj &
 | 
				
			||||||
	$(OBJS)\coredll_paper.obj &
 | 
						$(OBJS)\coredll_paper.obj &
 | 
				
			||||||
	$(OBJS)\coredll_persist.obj &
 | 
						$(OBJS)\coredll_persist.obj &
 | 
				
			||||||
	$(OBJS)\coredll_pickerbase.obj &
 | 
						$(OBJS)\coredll_pickerbase.obj &
 | 
				
			||||||
@@ -2241,6 +2247,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  &
 | 
				
			|||||||
	$(OBJS)\corelib_mousemanager.obj &
 | 
						$(OBJS)\corelib_mousemanager.obj &
 | 
				
			||||||
	$(OBJS)\corelib_nbkbase.obj &
 | 
						$(OBJS)\corelib_nbkbase.obj &
 | 
				
			||||||
	$(OBJS)\corelib_overlaycmn.obj &
 | 
						$(OBJS)\corelib_overlaycmn.obj &
 | 
				
			||||||
 | 
						$(OBJS)\corelib_ownerdrwcmn.obj &
 | 
				
			||||||
	$(OBJS)\corelib_paper.obj &
 | 
						$(OBJS)\corelib_paper.obj &
 | 
				
			||||||
	$(OBJS)\corelib_persist.obj &
 | 
						$(OBJS)\corelib_persist.obj &
 | 
				
			||||||
	$(OBJS)\corelib_pickerbase.obj &
 | 
						$(OBJS)\corelib_pickerbase.obj &
 | 
				
			||||||
@@ -2485,6 +2492,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS =  &
 | 
				
			|||||||
	$(OBJS)\corelib_mousemanager.obj &
 | 
						$(OBJS)\corelib_mousemanager.obj &
 | 
				
			||||||
	$(OBJS)\corelib_nbkbase.obj &
 | 
						$(OBJS)\corelib_nbkbase.obj &
 | 
				
			||||||
	$(OBJS)\corelib_overlaycmn.obj &
 | 
						$(OBJS)\corelib_overlaycmn.obj &
 | 
				
			||||||
 | 
						$(OBJS)\corelib_ownerdrwcmn.obj &
 | 
				
			||||||
	$(OBJS)\corelib_paper.obj &
 | 
						$(OBJS)\corelib_paper.obj &
 | 
				
			||||||
	$(OBJS)\corelib_persist.obj &
 | 
						$(OBJS)\corelib_persist.obj &
 | 
				
			||||||
	$(OBJS)\corelib_pickerbase.obj &
 | 
						$(OBJS)\corelib_pickerbase.obj &
 | 
				
			||||||
@@ -7731,6 +7739,11 @@ $(OBJS)\monodll_overlaycmn.obj :  .AUTODEPEND ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ifeq USE_GUI 1
 | 
				
			||||||
 | 
					$(OBJS)\monodll_ownerdrwcmn.obj :  .AUTODEPEND ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!ifeq USE_GUI 1
 | 
					!ifeq USE_GUI 1
 | 
				
			||||||
$(OBJS)\monodll_paper.obj :  .AUTODEPEND ..\..\src\common\paper.cpp
 | 
					$(OBJS)\monodll_paper.obj :  .AUTODEPEND ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
 | 
				
			||||||
@@ -9908,6 +9921,11 @@ $(OBJS)\monolib_overlaycmn.obj :  .AUTODEPEND ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ifeq USE_GUI 1
 | 
				
			||||||
 | 
					$(OBJS)\monolib_ownerdrwcmn.obj :  .AUTODEPEND ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!ifeq USE_GUI 1
 | 
					!ifeq USE_GUI 1
 | 
				
			||||||
$(OBJS)\monolib_paper.obj :  .AUTODEPEND ..\..\src\common\paper.cpp
 | 
					$(OBJS)\monolib_paper.obj :  .AUTODEPEND ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
 | 
				
			||||||
@@ -12088,6 +12106,11 @@ $(OBJS)\coredll_overlaycmn.obj :  .AUTODEPEND ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ifeq USE_GUI 1
 | 
				
			||||||
 | 
					$(OBJS)\coredll_ownerdrwcmn.obj :  .AUTODEPEND ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!ifeq USE_GUI 1
 | 
					!ifeq USE_GUI 1
 | 
				
			||||||
$(OBJS)\coredll_paper.obj :  .AUTODEPEND ..\..\src\common\paper.cpp
 | 
					$(OBJS)\coredll_paper.obj :  .AUTODEPEND ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
 | 
				
			||||||
@@ -13362,6 +13385,11 @@ $(OBJS)\corelib_overlaycmn.obj :  .AUTODEPEND ..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
	$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
 | 
				
			||||||
!endif
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					!ifeq USE_GUI 1
 | 
				
			||||||
 | 
					$(OBJS)\corelib_ownerdrwcmn.obj :  .AUTODEPEND ..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
 | 
				
			||||||
 | 
					!endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
!ifeq USE_GUI 1
 | 
					!ifeq USE_GUI 1
 | 
				
			||||||
$(OBJS)\corelib_paper.obj :  .AUTODEPEND ..\..\src\common\paper.cpp
 | 
					$(OBJS)\corelib_paper.obj :  .AUTODEPEND ..\..\src\common\paper.cpp
 | 
				
			||||||
	$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
 | 
						$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -562,6 +562,10 @@ SOURCE=..\..\src\common\overlaycmn.cpp
 | 
				
			|||||||
# End Source File
 | 
					# End Source File
 | 
				
			||||||
# Begin Source File
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=..\..\src\common\ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SOURCE=..\..\src\common\paper.cpp
 | 
					SOURCE=..\..\src\common\paper.cpp
 | 
				
			||||||
# End Source File
 | 
					# End Source File
 | 
				
			||||||
# Begin Source File
 | 
					# Begin Source File
 | 
				
			||||||
@@ -5071,6 +5075,10 @@ SOURCE=..\..\include\wx\msw\ole\oleutils.h
 | 
				
			|||||||
# End Source File
 | 
					# End Source File
 | 
				
			||||||
# Begin Source File
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SOURCE=..\..\include\wx\msw\ownerdrw.h
 | 
				
			||||||
 | 
					# End Source File
 | 
				
			||||||
 | 
					# Begin Source File
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SOURCE=..\..\include\wx\msw\palette.h
 | 
					SOURCE=..\..\include\wx\msw\palette.h
 | 
				
			||||||
# End Source File
 | 
					# End Source File
 | 
				
			||||||
# Begin Source File
 | 
					# Begin Source File
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -813,6 +813,9 @@
 | 
				
			|||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath="..\..\src\common\overlaycmn.cpp">
 | 
									RelativePath="..\..\src\common\overlaycmn.cpp">
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath="..\..\src\common\ownerdrwcmn.cpp">
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath="..\..\src\common\paper.cpp">
 | 
									RelativePath="..\..\src\common\paper.cpp">
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
@@ -4416,6 +4419,9 @@
 | 
				
			|||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath="..\..\include\wx\msw\ole\oleutils.h">
 | 
									RelativePath="..\..\include\wx\msw\ole\oleutils.h">
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath="..\..\include\wx\msw\ownerdrw.h">
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath="..\..\include\wx\msw\palette.h">
 | 
									RelativePath="..\..\include\wx\msw\palette.h">
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1118,6 +1118,10 @@
 | 
				
			|||||||
				RelativePath="..\..\src\common\overlaycmn.cpp"
 | 
									RelativePath="..\..\src\common\overlaycmn.cpp"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath="..\..\src\common\ownerdrwcmn.cpp"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath="..\..\src\common\paper.cpp"
 | 
									RelativePath="..\..\src\common\paper.cpp"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
@@ -5907,6 +5911,10 @@
 | 
				
			|||||||
				RelativePath="..\..\include\wx\msw\ole\oleutils.h"
 | 
									RelativePath="..\..\include\wx\msw\ole\oleutils.h"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath="..\..\include\wx\msw\ownerdrw.h"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath="..\..\include\wx\msw\palette.h"
 | 
									RelativePath="..\..\include\wx\msw\palette.h"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1114,6 +1114,10 @@
 | 
				
			|||||||
				RelativePath="..\..\src\common\overlaycmn.cpp"
 | 
									RelativePath="..\..\src\common\overlaycmn.cpp"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath="..\..\src\common\ownerdrwcmn.cpp"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath="..\..\src\common\paper.cpp"
 | 
									RelativePath="..\..\src\common\paper.cpp"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
@@ -5903,6 +5907,10 @@
 | 
				
			|||||||
				RelativePath="..\..\include\wx\msw\ole\oleutils.h"
 | 
									RelativePath="..\..\include\wx\msw\ole\oleutils.h"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
			</File>
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath="..\..\include\wx\msw\ownerdrw.h"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
			<File
 | 
								<File
 | 
				
			||||||
				RelativePath="..\..\include\wx\msw\palette.h"
 | 
									RelativePath="..\..\include\wx\msw\palette.h"
 | 
				
			||||||
				>
 | 
									>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -152,9 +152,6 @@ protected:
 | 
				
			|||||||
    bool m_updateHorizontalExtent;
 | 
					    bool m_updateHorizontalExtent;
 | 
				
			||||||
    virtual void OnInternalIdle();
 | 
					    virtual void OnInternalIdle();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // free memory (common part of Clear() and dtor)
 | 
					 | 
				
			||||||
    void Free();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    unsigned int m_noItems;
 | 
					    unsigned int m_noItems;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,8 @@
 | 
				
			|||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
    #include  "wx/ownerdrw.h"   // base class
 | 
					    #include "wx/ownerdrw.h"
 | 
				
			||||||
 | 
					    #include "wx/bitmap.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
@@ -41,7 +42,6 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // override base class virtuals
 | 
					    // override base class virtuals
 | 
				
			||||||
    virtual void SetItemLabel(const wxString& strName);
 | 
					    virtual void SetItemLabel(const wxString& strName);
 | 
				
			||||||
    virtual void SetCheckable(bool checkable);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtual void Enable(bool bDoEnable = true);
 | 
					    virtual void Enable(bool bDoEnable = true);
 | 
				
			||||||
    virtual void Check(bool bDoCheck = true);
 | 
					    virtual void Check(bool bDoCheck = true);
 | 
				
			||||||
@@ -76,6 +76,48 @@ public:
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetBitmaps(const wxBitmap& bmpChecked,
 | 
				
			||||||
 | 
					                    const wxBitmap& bmpUnchecked = wxNullBitmap)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        m_bmpChecked = bmpChecked;
 | 
				
			||||||
 | 
					        m_bmpUnchecked = bmpUnchecked;
 | 
				
			||||||
 | 
					        SetOwnerDrawn(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetBitmap(const wxBitmap& bmp, bool bChecked = true)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ( bChecked )
 | 
				
			||||||
 | 
					            m_bmpChecked = bmp;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            m_bmpUnchecked = bmp;
 | 
				
			||||||
 | 
					        SetOwnerDrawn(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetDisabledBitmap(const wxBitmap& bmpDisabled)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        m_bmpDisabled = bmpDisabled;
 | 
				
			||||||
 | 
					        SetOwnerDrawn(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const wxBitmap& GetBitmap(bool bChecked = true) const
 | 
				
			||||||
 | 
					        { return (bChecked ? m_bmpChecked : m_bmpUnchecked); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const wxBitmap& GetDisabledBitmap() const
 | 
				
			||||||
 | 
					        { return m_bmpDisabled; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // override wxOwnerDrawn base class virtuals
 | 
				
			||||||
 | 
					    virtual wxString GetName() const;
 | 
				
			||||||
 | 
					    virtual bool OnMeasureItem(size_t *pwidth, size_t *pheight);
 | 
				
			||||||
 | 
					    virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					    virtual void GetFontToUse(wxFont& font) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    // common part of all ctors
 | 
					    // common part of all ctors
 | 
				
			||||||
    void Init();
 | 
					    void Init();
 | 
				
			||||||
@@ -93,6 +135,18 @@ private:
 | 
				
			|||||||
    // does this item start a radio group?
 | 
					    // does this item start a radio group?
 | 
				
			||||||
    bool m_isRadioGroupStart;
 | 
					    bool m_isRadioGroupStart;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					    // item bitmaps
 | 
				
			||||||
 | 
					    wxBitmap m_bmpChecked,     // bitmap to put near the item
 | 
				
			||||||
 | 
					             m_bmpUnchecked,   // (checked is used also for 'uncheckable' items)
 | 
				
			||||||
 | 
					             m_bmpDisabled;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // static variables for cache some system settings
 | 
				
			||||||
 | 
					    static wxFont ms_systemMenuFont;
 | 
				
			||||||
 | 
					    static size_t ms_systemMenuHeight;
 | 
				
			||||||
 | 
					    static bool ms_alwaysShowCues;
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenuItem)
 | 
					    DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenuItem)
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								include/wx/msw/ownerdrw.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								include/wx/msw/ownerdrw.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        wx/msw/ownerdrw.h
 | 
				
			||||||
 | 
					// Purpose:     wxOwnerDrawn class
 | 
				
			||||||
 | 
					// Author:      Marcin Malich
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     2009-09-22
 | 
				
			||||||
 | 
					// RCS-ID:      $Id$
 | 
				
			||||||
 | 
					// Copyright:   (c) 2009 Marcin Malich <me@malcom.pl>
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _WX_OWNERDRW_H_
 | 
				
			||||||
 | 
					#define _WX_OWNERDRW_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class WXDLLIMPEXP_CORE wxOwnerDrawn : public wxOwnerDrawnBase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    wxOwnerDrawn() {}
 | 
				
			||||||
 | 
					    virtual ~wxOwnerDrawn() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual bool OnDrawItem(wxDC& dc, const wxRect& rc,
 | 
				
			||||||
 | 
					                            wxODAction act, wxODStatus stat);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // _WX_OWNERDRW_H_
 | 
				
			||||||
@@ -23,7 +23,8 @@
 | 
				
			|||||||
// headers - only because ownerdrw.h is not always included and I don't want
 | 
					// headers - only because ownerdrw.h is not always included and I don't want
 | 
				
			||||||
// to write #ifdef's everywhere...
 | 
					// to write #ifdef's everywhere...
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
    #include  "wx/ownerdrw.h"
 | 
					    #include "wx/ownerdrw.h"
 | 
				
			||||||
 | 
					    #include "wx/bitmap.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
@@ -66,7 +67,6 @@ public:
 | 
				
			|||||||
    // Override base class virtuals
 | 
					    // Override base class virtuals
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    virtual void SetItemLabel(const wxString& rStrName);
 | 
					    virtual void SetItemLabel(const wxString& rStrName);
 | 
				
			||||||
    virtual void SetCheckable(bool bCheckable);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtual void Enable(bool bDoEnable = true);
 | 
					    virtual void Enable(bool bDoEnable = true);
 | 
				
			||||||
    virtual void Check(bool bDoCheck = true);
 | 
					    virtual void Check(bool bDoCheck = true);
 | 
				
			||||||
@@ -97,6 +97,48 @@ public:
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
    MENUITEM                        m_vMenuData;
 | 
					    MENUITEM                        m_vMenuData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetBitmaps(const wxBitmap& bmpChecked,
 | 
				
			||||||
 | 
					                    const wxBitmap& bmpUnchecked = wxNullBitmap)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        m_bmpChecked = bmpChecked;
 | 
				
			||||||
 | 
					        m_bmpUnchecked = bmpUnchecked;
 | 
				
			||||||
 | 
					        SetOwnerDrawn(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetBitmap(const wxBitmap& bmp, bool bChecked = true)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ( bChecked )
 | 
				
			||||||
 | 
					            m_bmpChecked = bmp;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            m_bmpUnchecked = bmp;
 | 
				
			||||||
 | 
					        SetOwnerDrawn(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetDisabledBitmap(const wxBitmap& bmpDisabled)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        m_bmpDisabled = bmpDisabled;
 | 
				
			||||||
 | 
					        SetOwnerDrawn(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const wxBitmap& GetBitmap(bool bChecked = true) const
 | 
				
			||||||
 | 
					        { return (bChecked ? m_bmpChecked : m_bmpUnchecked); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const wxBitmap& GetDisabledBitmap() const
 | 
				
			||||||
 | 
					        { return m_bmpDisabled; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // override wxOwnerDrawn base class virtuals
 | 
				
			||||||
 | 
					    virtual wxString GetName() const;
 | 
				
			||||||
 | 
					    virtual bool OnMeasureItem(size_t *pwidth, size_t *pheight);
 | 
				
			||||||
 | 
					    virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					    virtual void GetFontToUse(wxFont& font) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    void Init();
 | 
					    void Init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -117,6 +159,13 @@ private:
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
    bool                            m_bIsRadioGroupStart;
 | 
					    bool                            m_bIsRadioGroupStart;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					    // item bitmaps
 | 
				
			||||||
 | 
					    wxBitmap m_bmpChecked,     // bitmap to put near the item
 | 
				
			||||||
 | 
					             m_bmpUnchecked,   // (checked is used also for 'uncheckable' items)
 | 
				
			||||||
 | 
					             m_bmpDisabled;
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DECLARE_DYNAMIC_CLASS(wxMenuItem)
 | 
					    DECLARE_DYNAMIC_CLASS(wxMenuItem)
 | 
				
			||||||
}; // end of CLASS wxMenuItem
 | 
					}; // end of CLASS wxMenuItem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								include/wx/os2/ownerdrw.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								include/wx/os2/ownerdrw.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        wx/os2/ownerdrw.h
 | 
				
			||||||
 | 
					// Purpose:     wxOwnerDrawn class
 | 
				
			||||||
 | 
					// Author:      Marcin Malich
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     2009-09-22
 | 
				
			||||||
 | 
					// RCS-ID:      $Id$
 | 
				
			||||||
 | 
					// Copyright:   (c) 2009 Marcin Malich <me@malcom.pl>
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _WX_OWNERDRW_H_
 | 
				
			||||||
 | 
					#define _WX_OWNERDRW_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class WXDLLIMPEXP_CORE wxOwnerDrawn : public wxOwnerDrawnBase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    wxOwnerDrawn() {}
 | 
				
			||||||
 | 
					    virtual ~wxOwnerDrawn() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual bool OnDrawItem(wxDC& dc, const wxRect& rc,
 | 
				
			||||||
 | 
					                            wxODAction act, wxODStatus stat);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // _WX_OWNERDRW_H_
 | 
				
			||||||
@@ -2,23 +2,22 @@
 | 
				
			|||||||
// Name:        ownerdrw.h
 | 
					// Name:        ownerdrw.h
 | 
				
			||||||
// Purpose:     interface for owner-drawn GUI elements
 | 
					// Purpose:     interface for owner-drawn GUI elements
 | 
				
			||||||
// Author:      Vadim Zeitlin
 | 
					// Author:      Vadim Zeitlin
 | 
				
			||||||
// Modified by:
 | 
					// Modified by: Marcin Malich
 | 
				
			||||||
// Created:     11.11.97
 | 
					// Created:     11.11.97
 | 
				
			||||||
// RCS-ID:      $Id$
 | 
					// RCS-ID:      $Id$
 | 
				
			||||||
// Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 | 
					// Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 | 
				
			||||||
// Licence:     wxWindows licence
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef   _OWNERDRW_H
 | 
					#ifndef _WX_OWNERDRW_H_BASE
 | 
				
			||||||
#define   _OWNERDRW_H
 | 
					#define _WX_OWNERDRW_H_BASE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wx/defs.h"
 | 
					#include "wx/defs.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wx/bitmap.h"
 | 
					 | 
				
			||||||
#include "wx/colour.h"
 | 
					 | 
				
			||||||
#include "wx/font.h"
 | 
					#include "wx/font.h"
 | 
				
			||||||
 | 
					#include "wx/colour.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
// wxOwnerDrawn - a mix-in base class, derive from it to implement owner-drawn
 | 
					// wxOwnerDrawn - a mix-in base class, derive from it to implement owner-drawn
 | 
				
			||||||
@@ -29,150 +28,116 @@
 | 
				
			|||||||
// element or one unchangeable bitmap otherwise.
 | 
					// element or one unchangeable bitmap otherwise.
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class WXDLLIMPEXP_CORE wxOwnerDrawn
 | 
					class WXDLLIMPEXP_CORE wxOwnerDrawnBase
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  // ctor & dtor
 | 
					    wxOwnerDrawnBase()
 | 
				
			||||||
  wxOwnerDrawn(const wxString& str = wxEmptyString,
 | 
					    {
 | 
				
			||||||
               bool bCheckable = false,
 | 
					        m_ownerDrawn = false;
 | 
				
			||||||
               bool bMenuItem = false); // FIXME kludge for colors
 | 
					        m_margin = ms_defaultMargin;
 | 
				
			||||||
  virtual ~wxOwnerDrawn();
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // fix appearance
 | 
					    virtual ~wxOwnerDrawnBase() {}
 | 
				
			||||||
  void SetFont(const wxFont& font)
 | 
					 | 
				
			||||||
      { m_font = font; m_bOwnerDrawn = true; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxFont& GetFont() const { return (wxFont &)m_font; }
 | 
					    void SetFont(const wxFont& font)
 | 
				
			||||||
 | 
					        { m_font = font; m_ownerDrawn = true; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void SetTextColour(const wxColour& colText)
 | 
					    wxFont& GetFont() const
 | 
				
			||||||
      { m_colText = colText; m_bOwnerDrawn = true; }
 | 
					        { return (wxFont&) m_font; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxColour& GetTextColour() const { return (wxColour&) m_colText; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void SetBackgroundColour(const wxColour& colBack)
 | 
					    void SetTextColour(const wxColour& colText)
 | 
				
			||||||
      { m_colBack = colBack; m_bOwnerDrawn = true; }
 | 
					        { m_colText = colText; m_ownerDrawn = true; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxColour& GetBackgroundColour() const
 | 
					    wxColour& GetTextColour() const
 | 
				
			||||||
      { return (wxColour&) m_colBack ; }
 | 
					        { return (wxColour&) m_colText; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void SetBitmaps(const wxBitmap& bmpChecked,
 | 
					    void SetBackgroundColour(const wxColour& colBack)
 | 
				
			||||||
                  const wxBitmap& bmpUnchecked = wxNullBitmap)
 | 
					        { m_colBack = colBack; m_ownerDrawn = true; }
 | 
				
			||||||
      { m_bmpChecked = bmpChecked;
 | 
					 | 
				
			||||||
        m_bmpUnchecked = bmpUnchecked;
 | 
					 | 
				
			||||||
        m_bOwnerDrawn = true; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void SetBitmap(const wxBitmap& bmp, bool bChecked = true)
 | 
					    wxColour& GetBackgroundColour() const
 | 
				
			||||||
  {
 | 
					        { return (wxColour&) m_colBack ; }
 | 
				
			||||||
      if ( bChecked )
 | 
					 | 
				
			||||||
          m_bmpChecked = bmp;
 | 
					 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
          m_bmpUnchecked = bmp;
 | 
					 | 
				
			||||||
      m_bOwnerDrawn = true;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void SetDisabledBitmap( const wxBitmap& bmpDisabled )
 | 
					 | 
				
			||||||
      { m_bmpDisabled = bmpDisabled;
 | 
					 | 
				
			||||||
        m_bOwnerDrawn = true; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const wxBitmap& GetBitmap(bool bChecked = true) const
 | 
					    void SetMarginWidth(int width)
 | 
				
			||||||
      { return (bChecked ? m_bmpChecked : m_bmpUnchecked); }
 | 
					        { m_margin = width; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const wxBitmap& GetDisabledBitmap() const
 | 
					    int GetMarginWidth() const
 | 
				
			||||||
      { return m_bmpDisabled; }
 | 
					        { return m_margin; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // the height of the menu checkmark (or bitmap) is determined by the font
 | 
					    static int GetDefaultMarginWidth()
 | 
				
			||||||
  // for the current item, but the width should be always the same (for the
 | 
					        { return ms_defaultMargin; }
 | 
				
			||||||
  // items to be aligned), so by default it's taken to be the same as for
 | 
					 | 
				
			||||||
  // the last item (and default width for the first one).
 | 
					 | 
				
			||||||
  //
 | 
					 | 
				
			||||||
  // NB: default is too small for bitmaps, but ok for checkmarks.
 | 
					 | 
				
			||||||
  void SetMarginWidth(int nWidth)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
      ms_nLastMarginWidth = m_nMarginWidth = (size_t) nWidth;
 | 
					 | 
				
			||||||
      if ( ((size_t) nWidth) != ms_nDefaultMarginWidth )
 | 
					 | 
				
			||||||
          m_bOwnerDrawn = true;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int GetMarginWidth() const { return (int) m_nMarginWidth; }
 | 
					 | 
				
			||||||
  static int GetDefaultMarginWidth() { return (int) ms_nDefaultMarginWidth; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // accessors
 | 
					    // get item name (with mnemonics if exist)
 | 
				
			||||||
  void SetName(const wxString& strName)  { m_strName = strName; }
 | 
					    virtual wxString GetName() const = 0;
 | 
				
			||||||
  const wxString& GetName() const { return m_strName;    }
 | 
					 | 
				
			||||||
  void SetCheckable(bool checkable) { m_bCheckable = checkable; }
 | 
					 | 
				
			||||||
  bool IsCheckable() const { return m_bCheckable; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // this is for menu items only: accel string is drawn right aligned after the
 | 
					 | 
				
			||||||
  // menu item if not empty
 | 
					 | 
				
			||||||
  void SetAccelString(const wxString& strAccel) { m_strAccel = strAccel; }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // this function might seem strange, but if it returns false it means that
 | 
					  // this function might seem strange, but if it returns false it means that
 | 
				
			||||||
  // no non-standard attribute are set, so there is no need for this control
 | 
					  // no non-standard attribute are set, so there is no need for this control
 | 
				
			||||||
  // to be owner-drawn. Moreover, you can force owner-drawn to false if you
 | 
					  // to be owner-drawn. Moreover, you can force owner-drawn to false if you
 | 
				
			||||||
  // want to change, say, the color for the item but only if it is owner-drawn
 | 
					  // want to change, say, the color for the item but only if it is owner-drawn
 | 
				
			||||||
  // (see wxMenuItem::wxMenuItem for example)
 | 
					  // (see wxMenuItem::wxMenuItem for example)
 | 
				
			||||||
  bool IsOwnerDrawn() const { return m_bOwnerDrawn;   }
 | 
					    bool IsOwnerDrawn() const
 | 
				
			||||||
 | 
					        { return m_ownerDrawn; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // switch on/off owner-drawing the item
 | 
					    // switch on/off owner-drawing the item
 | 
				
			||||||
  void SetOwnerDrawn(bool ownerDrawn = true) { m_bOwnerDrawn = ownerDrawn; }
 | 
					    void SetOwnerDrawn(bool ownerDrawn = true)
 | 
				
			||||||
  void ResetOwnerDrawn() { m_bOwnerDrawn = false;  }
 | 
					        { m_ownerDrawn = ownerDrawn; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
  // constants used in OnDrawItem
 | 
					 | 
				
			||||||
  // (they have the same values as corresponding Win32 constants)
 | 
					 | 
				
			||||||
  enum wxODAction
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    wxODDrawAll       = 0x0001,   // redraw entire control
 | 
					 | 
				
			||||||
    wxODSelectChanged = 0x0002,   // selection changed (see Status.Select)
 | 
					 | 
				
			||||||
    wxODFocusChanged  = 0x0004    // keyboard focus changed (see Status.Focus)
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  enum wxODStatus
 | 
					    // constants used in OnDrawItem
 | 
				
			||||||
  {
 | 
					    // (they have the same values as corresponding Win32 constants)
 | 
				
			||||||
    wxODSelected  = 0x0001,         // control is currently selected
 | 
					    enum wxODAction
 | 
				
			||||||
    wxODGrayed    = 0x0002,         // item is to be grayed
 | 
					    {
 | 
				
			||||||
    wxODDisabled  = 0x0004,         // item is to be drawn as disabled
 | 
					        wxODDrawAll       = 0x0001,     // redraw entire control
 | 
				
			||||||
    wxODChecked   = 0x0008,         // item is to be checked
 | 
					        wxODSelectChanged = 0x0002,     // selection changed (see Status.Select)
 | 
				
			||||||
    wxODHasFocus  = 0x0010,         // item has the keyboard focus
 | 
					        wxODFocusChanged  = 0x0004      // keyboard focus changed (see Status.Focus)
 | 
				
			||||||
    wxODDefault   = 0x0020,         // item is the default item
 | 
					    };
 | 
				
			||||||
    wxODHidePrefix= 0x0100          // hide keyboard cues (w2k and xp only)
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // virtual functions to implement drawing (return true if processed)
 | 
					    enum wxODStatus
 | 
				
			||||||
  virtual bool OnMeasureItem(size_t *pwidth, size_t *pheight);
 | 
					    {
 | 
				
			||||||
  virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat);
 | 
					        wxODSelected  = 0x0001,         // control is currently selected
 | 
				
			||||||
 | 
					        wxODGrayed    = 0x0002,         // item is to be grayed
 | 
				
			||||||
 | 
					        wxODDisabled  = 0x0004,         // item is to be drawn as disabled
 | 
				
			||||||
 | 
					        wxODChecked   = 0x0008,         // item is to be checked
 | 
				
			||||||
 | 
					        wxODHasFocus  = 0x0010,         // item has the keyboard focus
 | 
				
			||||||
 | 
					        wxODDefault   = 0x0020,         // item is the default item
 | 
				
			||||||
 | 
					        wxODHidePrefix= 0x0100          // hide keyboard cues (w2k and xp only)
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // virtual functions to implement drawing (return true if processed)
 | 
				
			||||||
 | 
					    virtual bool OnMeasureItem(size_t *width, size_t *height);
 | 
				
			||||||
 | 
					    virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  // return true if this is a menu item
 | 
					 | 
				
			||||||
  bool IsMenuItem() const;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // get the font to use, whether m_font is set or not
 | 
					    // get the font and colour to use, whether it is set or not
 | 
				
			||||||
  wxFont GetFontToUse() const;
 | 
					    virtual void GetFontToUse(wxFont& font) const;
 | 
				
			||||||
 | 
					    virtual void GetColourToUse(wxODStatus stat, wxColour& colText, wxColour& colBack) const;
 | 
				
			||||||
 | 
					 | 
				
			||||||
  wxString  m_strName,      // label for a manu item
 | 
					 | 
				
			||||||
            m_strAccel;     // the accel string ("Ctrl-F17") if any
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  static size_t ms_nDefaultMarginWidth; // menu check mark width
 | 
					    bool        m_ownerDrawn;       // true if something is non standard
 | 
				
			||||||
  static size_t ms_nLastMarginWidth;    // handy for aligning all items
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool      m_bCheckable,   // used only for menu or check listbox items
 | 
					    wxFont      m_font;             // font to use for drawing
 | 
				
			||||||
            m_bOwnerDrawn,  // true if something is non standard
 | 
					    wxColour    m_colText,          // color ----"---"---"----
 | 
				
			||||||
            m_isMenuItem;   // true if this is a menu item
 | 
					                m_colBack;          // background color
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  wxFont    m_font;         // font to use for drawing
 | 
					    int         m_margin;           // space occupied by bitmap to the left of the item
 | 
				
			||||||
  wxColour  m_colText,      // color ----"---"---"----
 | 
					 | 
				
			||||||
            m_colBack;      // background color
 | 
					 | 
				
			||||||
  wxBitmap  m_bmpChecked,   // bitmap to put near the item
 | 
					 | 
				
			||||||
            m_bmpUnchecked, // (checked is used also for 'uncheckable' items)
 | 
					 | 
				
			||||||
            m_bmpDisabled;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  size_t    m_nHeight,      // font height
 | 
					    static int  ms_defaultMargin;
 | 
				
			||||||
            m_nMarginWidth; // space occupied by bitmap to the left of the item
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// include the platform-specific class declaration
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(__WXMSW__)
 | 
				
			||||||
 | 
					    #include "wx/msw/ownerdrw.h"
 | 
				
			||||||
 | 
					#elif defined(__WXPM__)
 | 
				
			||||||
 | 
					    #include "wx/os2/ownerdrw.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif // _WX_OWNERDRW_H_BASE
 | 
				
			||||||
  // _OWNERDRW_H
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										96
									
								
								src/common/ownerdrwcmn.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/common/ownerdrwcmn.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        src/common/ownerdrwcmn.cpp
 | 
				
			||||||
 | 
					// Purpose:     wxOwnerDrawn class methods common to all platforms
 | 
				
			||||||
 | 
					// Author:      Marcin Malich
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     2009-09-22
 | 
				
			||||||
 | 
					// RCS-ID:      $Id$
 | 
				
			||||||
 | 
					// Copyright:   (c) 2009 Marcin Malich <me@malcom.pl>
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					// declarations
 | 
				
			||||||
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// headers
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// For compilers that support precompilation, includes "wx.h".
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __BORLANDC__
 | 
				
			||||||
 | 
					    #pragma hdrstop
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/ownerdrw.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WX_PRECOMP
 | 
				
			||||||
 | 
					    #include "wx/window.h"
 | 
				
			||||||
 | 
					    #include "wx/font.h"
 | 
				
			||||||
 | 
					    #include "wx/colour.h"
 | 
				
			||||||
 | 
					    #include "wx/dcmemory.h"
 | 
				
			||||||
 | 
					    #include "wx/settings.h"
 | 
				
			||||||
 | 
					    #include "wx/utils.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					// implementation
 | 
				
			||||||
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool wxOwnerDrawnBase::OnMeasureItem(size_t *width, size_t *height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( IsOwnerDrawn() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxMemoryDC dc;
 | 
				
			||||||
 | 
					        wxFont font;
 | 
				
			||||||
 | 
					        GetFontToUse(font);
 | 
				
			||||||
 | 
					        dc.SetFont(font);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // item name/text without mnemonics
 | 
				
			||||||
 | 
					        wxString name = wxStripMenuCodes(GetName(), wxStrip_Mnemonics);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wxCoord w, h;
 | 
				
			||||||
 | 
					        dc.GetTextExtent(name, &w, &h);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        *width = w + m_margin;
 | 
				
			||||||
 | 
					        *height = h;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        *width = 0;
 | 
				
			||||||
 | 
					        *height = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxOwnerDrawnBase::GetFontToUse(wxFont& font) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    font = m_font.IsOk() ? m_font : *wxNORMAL_FONT;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxOwnerDrawnBase::GetColourToUse(wxODStatus stat, wxColour& colText, wxColour& colBack) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( stat & wxODSelected )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        colText = wxSystemSettings::GetColour(
 | 
				
			||||||
 | 
					                !(stat & wxODDisabled) ? wxSYS_COLOUR_HIGHLIGHTTEXT
 | 
				
			||||||
 | 
					                                       : wxSYS_COLOUR_GRAYTEXT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        colBack = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // fall back to default colors if none explicitly specified
 | 
				
			||||||
 | 
					        colText = m_colText.Ok() ? m_colText
 | 
				
			||||||
 | 
					                                 : wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT);
 | 
				
			||||||
 | 
					        colBack = m_colBack.Ok() ? m_colBack
 | 
				
			||||||
 | 
					                                 : wxSystemSettings::GetColour(wxSYS_COLOUR_MENU);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
@@ -141,6 +141,8 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void SendEvent();
 | 
					    void SendEvent();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual wxString GetName() const { return m_pParent->GetString(m_nIndex); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    bool            m_bChecked;
 | 
					    bool            m_bChecked;
 | 
				
			||||||
    wxCheckListBox *m_pParent;
 | 
					    wxCheckListBox *m_pParent;
 | 
				
			||||||
@@ -150,7 +152,6 @@ private:
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex)
 | 
					wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex)
 | 
				
			||||||
                  : wxOwnerDrawn(wxEmptyString, true)   // checkable
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_bChecked = false;
 | 
					    m_bChecked = false;
 | 
				
			||||||
    m_pParent  = pParent;
 | 
					    m_pParent  = pParent;
 | 
				
			||||||
@@ -160,7 +161,7 @@ wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex)
 | 
				
			|||||||
    // done in OnMeasure while they are used only in OnDraw and we
 | 
					    // done in OnMeasure while they are used only in OnDraw and we
 | 
				
			||||||
    // know that there will always be OnMeasure before OnDraw
 | 
					    // know that there will always be OnMeasure before OnDraw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SetMarginWidth(::GetSystemMetrics(SM_CXMENUCHECK) - 2);
 | 
					    SetMarginWidth(::GetSystemMetrics(SM_CXMENUCHECK));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SetBackgroundColour(pParent->GetBackgroundColour());
 | 
					    SetBackgroundColour(pParent->GetBackgroundColour());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -118,18 +118,25 @@ TODO PROPERTIES
 | 
				
			|||||||
class wxListBoxItem : public wxOwnerDrawn
 | 
					class wxListBoxItem : public wxOwnerDrawn
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    wxListBoxItem(const wxString& str = wxEmptyString);
 | 
					    wxListBoxItem(wxListBox *parent)
 | 
				
			||||||
};
 | 
					        { m_parent = parent; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxListBoxItem::wxListBoxItem(const wxString& str) : wxOwnerDrawn(str, false)
 | 
					    wxListBox *GetParent() const
 | 
				
			||||||
{
 | 
					        { return m_parent; }
 | 
				
			||||||
    // no bitmaps/checkmarks
 | 
					
 | 
				
			||||||
    SetMarginWidth(0);
 | 
					    int GetIndex() const
 | 
				
			||||||
}
 | 
					        { return m_parent->GetItemIndex(const_cast<wxListBoxItem*>(this)); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxString GetName() const
 | 
				
			||||||
 | 
					        { return m_parent->GetString(GetIndex()); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    wxListBox *m_parent;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxOwnerDrawn *wxListBox::CreateLboxItem(size_t WXUNUSED(n))
 | 
					wxOwnerDrawn *wxListBox::CreateLboxItem(size_t WXUNUSED(n))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return new wxListBoxItem();
 | 
					    return new wxListBoxItem(this);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif  //USE_OWNER_DRAWN
 | 
					#endif  //USE_OWNER_DRAWN
 | 
				
			||||||
@@ -279,6 +286,11 @@ void wxListBox::DoDeleteOneItem(unsigned int n)
 | 
				
			|||||||
    wxCHECK_RET( IsValid(n),
 | 
					    wxCHECK_RET( IsValid(n),
 | 
				
			||||||
                 wxT("invalid index in wxListBox::Delete") );
 | 
					                 wxT("invalid index in wxListBox::Delete") );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					    delete m_aItems[n];
 | 
				
			||||||
 | 
					    m_aItems.RemoveAt(n);
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SendMessage(GetHwnd(), LB_DELETESTRING, n, 0);
 | 
					    SendMessage(GetHwnd(), LB_DELETESTRING, n, 0);
 | 
				
			||||||
    m_noItems--;
 | 
					    m_noItems--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -303,7 +315,12 @@ int wxListBox::FindString(const wxString& s, bool bCase) const
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void wxListBox::DoClear()
 | 
					void wxListBox::DoClear()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Free();
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					    if ( m_windowStyle & wxLB_OWNERDRAW )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        WX_CLEAR_ARRAY(m_aItems);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ListBox_ResetContent(GetHwnd());
 | 
					    ListBox_ResetContent(GetHwnd());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -313,16 +330,6 @@ void wxListBox::DoClear()
 | 
				
			|||||||
    UpdateOldSelections();
 | 
					    UpdateOldSelections();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxListBox::Free()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
    if ( m_windowStyle & wxLB_OWNERDRAW )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        WX_CLEAR_ARRAY(m_aItems);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void wxListBox::DoSetSelection(int N, bool select)
 | 
					void wxListBox::DoSetSelection(int N, bool select)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxCHECK_RET( N == wxNOT_FOUND || IsValid(N),
 | 
					    wxCHECK_RET( N == wxNOT_FOUND || IsValid(N),
 | 
				
			||||||
@@ -469,7 +476,6 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items,
 | 
				
			|||||||
        if ( HasFlag(wxLB_OWNERDRAW) )
 | 
					        if ( HasFlag(wxLB_OWNERDRAW) )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            wxOwnerDrawn *pNewItem = CreateLboxItem(n);
 | 
					            wxOwnerDrawn *pNewItem = CreateLboxItem(n);
 | 
				
			||||||
            pNewItem->SetName(items[i]);
 | 
					 | 
				
			||||||
            pNewItem->SetFont(GetFont());
 | 
					            pNewItem->SetFont(GetFont());
 | 
				
			||||||
            m_aItems.Insert(pNewItem, n);
 | 
					            m_aItems.Insert(pNewItem, n);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -524,14 +530,6 @@ void wxListBox::SetString(unsigned int n, const wxString& s)
 | 
				
			|||||||
    else if ( oldObjData )
 | 
					    else if ( oldObjData )
 | 
				
			||||||
        SetClientObject(n, oldObjData);
 | 
					        SetClientObject(n, oldObjData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
    if ( m_windowStyle & wxLB_OWNERDRAW )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // update item's text
 | 
					 | 
				
			||||||
        m_aItems[n]->SetName(s);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif  //USE_OWNER_DRAWN
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // we may have lost the selection
 | 
					    // we may have lost the selection
 | 
				
			||||||
    if ( wasSelected )
 | 
					    if ( wasSelected )
 | 
				
			||||||
        Select(n);
 | 
					        Select(n);
 | 
				
			||||||
@@ -745,7 +743,7 @@ bool wxListBox::MSWOnDraw(WXDRAWITEMSTRUCT *item)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return pItem->OnDrawItem(dc, wxRectFromRECT(pStruct->rcItem),
 | 
					    return pItem->OnDrawItem(dc, wxRectFromRECT(pStruct->rcItem),
 | 
				
			||||||
                             (wxOwnerDrawn::wxODAction)pStruct->itemAction,
 | 
					                             (wxOwnerDrawn::wxODAction)pStruct->itemAction,
 | 
				
			||||||
                             (wxOwnerDrawn::wxODStatus)pStruct->itemState);
 | 
					                             (wxOwnerDrawn::wxODStatus)(pStruct->itemState | wxOwnerDrawn::wxODHidePrefix));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -578,7 +578,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                // tell the item that it's not really owner-drawn but only
 | 
					                // tell the item that it's not really owner-drawn but only
 | 
				
			||||||
                // needs to draw its bitmap, the rest is done by Windows
 | 
					                // needs to draw its bitmap, the rest is done by Windows
 | 
				
			||||||
                pItem->ResetOwnerDrawn();
 | 
					                pItem->SetOwnerDrawn(false);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
#endif // __DMC__
 | 
					#endif // __DMC__
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,6 +45,7 @@
 | 
				
			|||||||
#endif // wxUSE_ACCEL
 | 
					#endif // wxUSE_ACCEL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wx/msw/private.h"
 | 
					#include "wx/msw/private.h"
 | 
				
			||||||
 | 
					#include "wx/msw/dc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __WXWINCE__
 | 
					#ifdef __WXWINCE__
 | 
				
			||||||
// Implemented in menu.cpp
 | 
					// Implemented in menu.cpp
 | 
				
			||||||
@@ -58,17 +59,25 @@ UINT GetMenuState(HMENU hMenu, UINT id, UINT flags) ;
 | 
				
			|||||||
// hide the ugly cast
 | 
					// hide the ugly cast
 | 
				
			||||||
#define GetHMenuOf(menu)    ((HMENU)menu->GetHMenu())
 | 
					#define GetHMenuOf(menu)    ((HMENU)menu->GetHMenu())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// conditional compilation
 | 
					 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
    #define OWNER_DRAWN_ONLY( code ) if ( IsOwnerDrawn() ) code
 | 
					 | 
				
			||||||
#else // !wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
    #define OWNER_DRAWN_ONLY( code )
 | 
					 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ============================================================================
 | 
					// ============================================================================
 | 
				
			||||||
// implementation
 | 
					// implementation
 | 
				
			||||||
// ============================================================================
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/fontutil.h"
 | 
				
			||||||
 | 
					#include "wx/msw/private/metrics.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef SPI_GETKEYBOARDCUES
 | 
				
			||||||
 | 
					#define SPI_GETKEYBOARDCUES 0x100A
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef DSS_HIDEPREFIX
 | 
				
			||||||
 | 
					#define DSS_HIDEPREFIX  0x0200
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
// dynamic classes implementation
 | 
					// dynamic classes implementation
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
@@ -120,6 +129,17 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject)
 | 
				
			|||||||
// wxMenuItem
 | 
					// wxMenuItem
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// these static variables are from the wxMenuItem object for cache
 | 
				
			||||||
 | 
					// system settings returned by the Win32 API's SystemParametersInfo() call
 | 
				
			||||||
 | 
					wxFont wxMenuItem::ms_systemMenuFont;
 | 
				
			||||||
 | 
					size_t wxMenuItem::ms_systemMenuHeight = 0;
 | 
				
			||||||
 | 
					bool   wxMenuItem::ms_alwaysShowCues = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ctor & dtor
 | 
					// ctor & dtor
 | 
				
			||||||
// -----------
 | 
					// -----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -130,9 +150,6 @@ wxMenuItem::wxMenuItem(wxMenu *pParentMenu,
 | 
				
			|||||||
                       wxItemKind kind,
 | 
					                       wxItemKind kind,
 | 
				
			||||||
                       wxMenu *pSubMenu)
 | 
					                       wxMenu *pSubMenu)
 | 
				
			||||||
          : wxMenuItemBase(pParentMenu, id, text, strHelp, kind, pSubMenu)
 | 
					          : wxMenuItemBase(pParentMenu, id, text, strHelp, kind, pSubMenu)
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
            , wxOwnerDrawn(text, kind == wxITEM_CHECK, true)
 | 
					 | 
				
			||||||
#endif // owner drawn
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Init();
 | 
					    Init();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -146,9 +163,6 @@ wxMenuItem::wxMenuItem(wxMenu *parentMenu,
 | 
				
			|||||||
                       wxMenu *subMenu)
 | 
					                       wxMenu *subMenu)
 | 
				
			||||||
          : wxMenuItemBase(parentMenu, id, text, help,
 | 
					          : wxMenuItemBase(parentMenu, id, text, help,
 | 
				
			||||||
                           isCheckable ? wxITEM_CHECK : wxITEM_NORMAL, subMenu)
 | 
					                           isCheckable ? wxITEM_CHECK : wxITEM_NORMAL, subMenu)
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
           , wxOwnerDrawn(text, isCheckable, true)
 | 
					 | 
				
			||||||
#endif // owner drawn
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Init();
 | 
					    Init();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -161,6 +175,24 @@ void wxMenuItem::Init()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if  wxUSE_OWNER_DRAWN
 | 
					#if  wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // init static varaibles
 | 
				
			||||||
 | 
					    if ( !ms_systemMenuHeight )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        const NONCLIENTMETRICS& metrics = wxMSWImpl::GetNonClientMetrics();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ms_systemMenuFont = wxFont(wxNativeFontInfo(metrics.lfMenuFont));
 | 
				
			||||||
 | 
					        ms_systemMenuHeight = metrics.iMenuHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ( ::SystemParametersInfo(SPI_GETKEYBOARDCUES, 0,
 | 
				
			||||||
 | 
					                                    &ms_alwaysShowCues, 0) == 0 )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // if it's not supported, we must be on an old Windows version
 | 
				
			||||||
 | 
					            // which always shows them
 | 
				
			||||||
 | 
					            ms_alwaysShowCues = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // when the color is not valid, wxOwnerDraw takes the default ones.
 | 
					    // when the color is not valid, wxOwnerDraw takes the default ones.
 | 
				
			||||||
    // If we set the colors here and they are changed by the user during
 | 
					    // If we set the colors here and they are changed by the user during
 | 
				
			||||||
    // the execution, then the colors are not updated until the application
 | 
					    // the execution, then the colors are not updated until the application
 | 
				
			||||||
@@ -169,14 +201,12 @@ void wxMenuItem::Init()
 | 
				
			|||||||
    SetBackgroundColour(wxNullColour);
 | 
					    SetBackgroundColour(wxNullColour);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // setting default colors switched ownerdraw on: switch it off again
 | 
					    // setting default colors switched ownerdraw on: switch it off again
 | 
				
			||||||
    ResetOwnerDrawn();
 | 
					    SetOwnerDrawn(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //  switch ownerdraw back on if using a non default margin
 | 
					    //  switch ownerdraw back on if using a non default margin
 | 
				
			||||||
    if ( !IsSeparator() )
 | 
					    if ( !IsSeparator() )
 | 
				
			||||||
        SetMarginWidth(GetMarginWidth());
 | 
					        SetMarginWidth(GetMarginWidth());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // tell the owner drawing code to show the accel string as well
 | 
					 | 
				
			||||||
    SetAccelString(m_text.AfterFirst(wxT('\t')));
 | 
					 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -365,15 +395,6 @@ void wxMenuItem::SetItemLabel(const wxString& txt)
 | 
				
			|||||||
    // wxMenuItemBase will do stock ID checks
 | 
					    // wxMenuItemBase will do stock ID checks
 | 
				
			||||||
    wxMenuItemBase::SetItemLabel(text);
 | 
					    wxMenuItemBase::SetItemLabel(text);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // m_text could now be different from 'text' if we are a stock menu item,
 | 
					 | 
				
			||||||
    // so use only m_text below
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    OWNER_DRAWN_ONLY( wxOwnerDrawn::SetName(m_text) );
 | 
					 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
    // tell the owner drawing code to to show the accel string as well
 | 
					 | 
				
			||||||
    SetAccelString(m_text.AfterFirst(wxT('\t')));
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // the item can be not attached to any menu yet and SetItemLabel() is still
 | 
					    // the item can be not attached to any menu yet and SetItemLabel() is still
 | 
				
			||||||
    // valid to call in this case and should do nothing else
 | 
					    // valid to call in this case and should do nothing else
 | 
				
			||||||
    if ( !m_parentMenu )
 | 
					    if ( !m_parentMenu )
 | 
				
			||||||
@@ -430,12 +451,318 @@ void wxMenuItem::SetItemLabel(const wxString& txt)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxMenuItem::SetCheckable(bool checkable)
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxString wxMenuItem::GetName() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxMenuItemBase::SetCheckable(checkable);
 | 
					    return GetItemLabelText();
 | 
				
			||||||
    OWNER_DRAWN_ONLY( wxOwnerDrawn::SetCheckable(checkable) );
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool wxMenuItem::OnMeasureItem(size_t *width, size_t *height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( IsOwnerDrawn() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wxString str = GetName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // if we have a valid accel string, then pad out
 | 
				
			||||||
 | 
					        // the menu string so that the menu and accel string are not
 | 
				
			||||||
 | 
					        // placed on top of each other.
 | 
				
			||||||
 | 
					        wxString accel = GetItemLabel().AfterFirst(wxT('\t'));
 | 
				
			||||||
 | 
					        if ( !accel.empty() )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            str.Pad(str.length()%8);
 | 
				
			||||||
 | 
					            str += accel;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wxMemoryDC dc;
 | 
				
			||||||
 | 
					        wxFont font;
 | 
				
			||||||
 | 
					        GetFontToUse(font);
 | 
				
			||||||
 | 
					        dc.SetFont(font);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wxCoord w, h;
 | 
				
			||||||
 | 
					        dc.GetTextExtent(str, &w, &h);
 | 
				
			||||||
 | 
					        *width = w;
 | 
				
			||||||
 | 
					        *height = h;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else // don't draw the text, just the bitmap (if any)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        *width = 0;
 | 
				
			||||||
 | 
					        *height = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // increase size to accommodate bigger bitmaps if necessary
 | 
				
			||||||
 | 
					    if (m_bmpChecked.Ok())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Is BMP height larger than text height?
 | 
				
			||||||
 | 
					        size_t adjustedHeight = m_bmpChecked.GetHeight();
 | 
				
			||||||
 | 
					        if ( *height < adjustedHeight )
 | 
				
			||||||
 | 
					            *height = adjustedHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const int widthBmp = m_bmpChecked.GetWidth();
 | 
				
			||||||
 | 
					        if ( IsOwnerDrawn() )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // widen the margin to fit the bitmap if necessary
 | 
				
			||||||
 | 
					            if ( GetMarginWidth() < widthBmp )
 | 
				
			||||||
 | 
					                SetMarginWidth(widthBmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else // we must allocate enough space for the bitmap
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            *width += widthBmp;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // add a 4-pixel separator, otherwise menus look cluttered
 | 
				
			||||||
 | 
					    *width += 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // notice that this adjustment must be done after (possibly) changing the
 | 
				
			||||||
 | 
					    // margin width above
 | 
				
			||||||
 | 
					    if ( IsOwnerDrawn() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // add space at the end of the menu for the submenu expansion arrow
 | 
				
			||||||
 | 
					        // this will also allow offsetting the accel string from the right edge
 | 
				
			||||||
 | 
					        *width += GetMarginWidth() + 16;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // make sure that this item is at least as tall as the system menu height
 | 
				
			||||||
 | 
					    if ( *height < ms_systemMenuHeight )
 | 
				
			||||||
 | 
					      *height = ms_systemMenuHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool wxMenuItem::OnDrawItem(wxDC& dc, const wxRect& rc,
 | 
				
			||||||
 | 
					                            wxODAction WXUNUSED(act), wxODStatus stat)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // this flag determines whether or not an edge will
 | 
				
			||||||
 | 
					    // be drawn around the bitmap. In most "windows classic"
 | 
				
			||||||
 | 
					    // applications, a 1-pixel highlight edge is drawn around
 | 
				
			||||||
 | 
					    // the bitmap of an item when it is selected.  However,
 | 
				
			||||||
 | 
					    // with the new "luna" theme, no edge is drawn around
 | 
				
			||||||
 | 
					    // the bitmap because the background is white (this applies
 | 
				
			||||||
 | 
					    // only to "non-XP style" menus w/ bitmaps --
 | 
				
			||||||
 | 
					    // see IE 6 menus for an example)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool draw_bitmap_edge = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // set the colors
 | 
				
			||||||
 | 
					    // --------------
 | 
				
			||||||
 | 
					    wxColour colText1, colBack1;
 | 
				
			||||||
 | 
					    GetColourToUse(stat, colText1, colBack1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    DWORD colText = wxColourToPalRGB(colText1);
 | 
				
			||||||
 | 
					    DWORD colBack = wxColourToPalRGB(colBack1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( IsOwnerDrawn() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // don't draw an edge around the bitmap, if background is white ...
 | 
				
			||||||
 | 
					        DWORD menu_bg_color = GetSysColor(COLOR_MENU);
 | 
				
			||||||
 | 
					        if ( GetRValue( menu_bg_color ) >= 0xf0 &&
 | 
				
			||||||
 | 
					             GetGValue( menu_bg_color ) >= 0xf0 &&
 | 
				
			||||||
 | 
					             GetBValue( menu_bg_color ) >= 0xf0 )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            draw_bitmap_edge = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else // edge doesn't look well with default Windows drawing
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        draw_bitmap_edge = false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
 | 
				
			||||||
 | 
					    HDC hdc = GetHdcOf(*impl);
 | 
				
			||||||
 | 
					    COLORREF colOldText = ::SetTextColor(hdc, colText);
 | 
				
			||||||
 | 
					    COLORREF colOldBack = ::SetBkColor(hdc, colBack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // *2, as in wxSYS_EDGE_Y
 | 
				
			||||||
 | 
					    int margin = GetMarginWidth() + 2 * wxSystemSettings::GetMetric(wxSYS_EDGE_X);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // select the font and draw the text
 | 
				
			||||||
 | 
					    // ---------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // determine where to draw and leave space for a check-mark.
 | 
				
			||||||
 | 
					    // + 1 pixel to separate the edge from the highlight rectangle
 | 
				
			||||||
 | 
					    int xText = rc.x + margin + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // using native API because it recognizes '&'
 | 
				
			||||||
 | 
					    if ( IsOwnerDrawn() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        int prevMode = SetBkMode(hdc, TRANSPARENT);
 | 
				
			||||||
 | 
					        AutoHBRUSH hbr(colBack);
 | 
				
			||||||
 | 
					        SelectInHDC selBrush(hdc, hbr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        RECT rectFill;
 | 
				
			||||||
 | 
					        wxCopyRectToRECT(rc, rectFill);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ( (stat & wxODSelected) && m_bmpChecked.Ok() && draw_bitmap_edge )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // only draw the highlight under the text, not under
 | 
				
			||||||
 | 
					            // the bitmap or checkmark
 | 
				
			||||||
 | 
					            rectFill.left = xText;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ::FillRect(hdc, &rectFill, hbr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // use default font if no font set
 | 
				
			||||||
 | 
					        wxFont font;
 | 
				
			||||||
 | 
					        GetFontToUse(font);
 | 
				
			||||||
 | 
					        SelectInHDC selFont(hdc, GetHfontOf(font));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // item text name with menemonic
 | 
				
			||||||
 | 
					        wxString text = GetItemLabel().BeforeFirst('\t');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        xText += 3; // separate text from the highlight rectangle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        SIZE textRect;
 | 
				
			||||||
 | 
					        ::GetTextExtentPoint32(hdc, text.c_str(), text.length(), &textRect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int flags = DST_PREFIXTEXT;
 | 
				
			||||||
 | 
					        if ( (stat & wxODDisabled) && !(stat & wxODSelected) )
 | 
				
			||||||
 | 
					            flags |= DSS_DISABLED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ( (stat & wxODHidePrefix) && !ms_alwaysShowCues )
 | 
				
			||||||
 | 
					            flags |= DSS_HIDEPREFIX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int x = xText;
 | 
				
			||||||
 | 
					        int y = rc.y + (rc.GetHeight() - textRect.cy) / 2;
 | 
				
			||||||
 | 
					        int cx = rc.GetWidth() - GetMarginWidth();
 | 
				
			||||||
 | 
					        int cy = textRect.cy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ::DrawState(hdc, NULL, NULL, (LPARAM)text.wx_str(),
 | 
				
			||||||
 | 
					                    text.length(), x, y, cx, cy, flags);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // ::SetTextAlign(hdc, TA_RIGHT) doesn't work with DSS_DISABLED or DSS_MONO
 | 
				
			||||||
 | 
					        // as the last parameter in DrawState() (at least with Windows98). So we have
 | 
				
			||||||
 | 
					        // to take care of right alignment ourselves.
 | 
				
			||||||
 | 
					        wxString accel = GetItemLabel().AfterFirst(wxT('\t'));
 | 
				
			||||||
 | 
					        if ( !accel.empty() )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            SIZE accelRect;
 | 
				
			||||||
 | 
					            ::GetTextExtentPoint32(hdc, accel.c_str(), accel.length(), &accelRect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            int flags = DST_TEXT;
 | 
				
			||||||
 | 
					            if ( (stat & wxODDisabled) && !(stat & wxODSelected) )
 | 
				
			||||||
 | 
					                flags |= DSS_DISABLED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // right align accel string with right edge of menu
 | 
				
			||||||
 | 
					            // (offset by the margin width)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            int x = rc.GetWidth() - 16 - accelRect.cx;
 | 
				
			||||||
 | 
					            int y = rc.y + (rc.GetHeight() - accelRect.cy) / 2;
 | 
				
			||||||
 | 
					            ::DrawState(hdc, NULL, NULL, (LPARAM)accel.wx_str(),
 | 
				
			||||||
 | 
					                        accel.length(), x, y, 0, 0, flags);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ::SetBkMode(hdc, prevMode);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // draw the bitmap
 | 
				
			||||||
 | 
					    // ---------------
 | 
				
			||||||
 | 
					    if ( IsCheckable() && !m_bmpChecked.Ok() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ( stat & wxODChecked )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // what goes on: DrawFrameControl creates a b/w mask,
 | 
				
			||||||
 | 
					            // then we copy it to screen to have right colors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // first create a monochrome bitmap in a memory DC
 | 
				
			||||||
 | 
					            HDC hdcMem = CreateCompatibleDC(hdc);
 | 
				
			||||||
 | 
					            HBITMAP hbmpCheck = CreateBitmap(margin, rc.GetHeight(), 1, 1, 0);
 | 
				
			||||||
 | 
					            SelectObject(hdcMem, hbmpCheck);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // then draw a check mark into it
 | 
				
			||||||
 | 
					            RECT rect = { 0, 0, margin, rc.GetHeight() };
 | 
				
			||||||
 | 
					            if ( rc.GetHeight() > 0 )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ::DrawFrameControl(hdcMem, &rect, DFC_MENU, DFCS_MENUCHECK);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // finally copy it to screen DC and clean up
 | 
				
			||||||
 | 
					            BitBlt(hdc, rc.x, rc.y, margin, rc.GetHeight(), hdcMem, 0, 0, SRCCOPY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            DeleteDC(hdcMem);
 | 
				
			||||||
 | 
					            DeleteObject(hbmpCheck);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxBitmap bmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ( stat & wxODDisabled )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            bmp = GetDisabledBitmap();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ( !bmp.Ok() )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // for not checkable bitmaps we should always use unchecked one
 | 
				
			||||||
 | 
					            // because their checked bitmap is not set
 | 
				
			||||||
 | 
					            bmp = GetBitmap(!IsCheckable() || (stat & wxODChecked));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_IMAGE
 | 
				
			||||||
 | 
					            if ( bmp.Ok() && stat & wxODDisabled )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // we need to grey out the bitmap as we don't have any specific
 | 
				
			||||||
 | 
					                // disabled bitmap
 | 
				
			||||||
 | 
					                wxImage imgGrey = bmp.ConvertToImage().ConvertToGreyscale();
 | 
				
			||||||
 | 
					                if ( imgGrey.Ok() )
 | 
				
			||||||
 | 
					                    bmp = wxBitmap(imgGrey);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					#endif // wxUSE_IMAGE
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ( bmp.Ok() )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            wxMemoryDC dcMem(&dc);
 | 
				
			||||||
 | 
					            dcMem.SelectObjectAsSource(bmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // center bitmap
 | 
				
			||||||
 | 
					            int nBmpWidth = bmp.GetWidth(),
 | 
				
			||||||
 | 
					                nBmpHeight = bmp.GetHeight();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // there should be enough space!
 | 
				
			||||||
 | 
					            wxASSERT((nBmpWidth <= rc.GetWidth()) && (nBmpHeight <= rc.GetHeight()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            int heightDiff = rc.GetHeight() - nBmpHeight;
 | 
				
			||||||
 | 
					            dc.Blit(rc.x + (margin - nBmpWidth) / 2,
 | 
				
			||||||
 | 
					                    rc.y + heightDiff / 2,
 | 
				
			||||||
 | 
					                    nBmpWidth, nBmpHeight,
 | 
				
			||||||
 | 
					                    &dcMem, 0, 0, wxCOPY, true /* use mask */);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if ( ( stat & wxODSelected ) && !( stat & wxODDisabled ) && draw_bitmap_edge )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                RECT rectBmp = { rc.GetLeft(), rc.GetTop(),
 | 
				
			||||||
 | 
					                                 rc.GetLeft() + margin,
 | 
				
			||||||
 | 
					                                 rc.GetTop() + rc.GetHeight() };
 | 
				
			||||||
 | 
					                SetBkColor(hdc, colBack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                DrawEdge(hdc, &rectBmp, BDR_RAISEDINNER, BF_RECT);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ::SetTextColor(hdc, colOldText);
 | 
				
			||||||
 | 
					    ::SetBkColor(hdc, colOldBack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxMenuItem::GetFontToUse(wxFont& font) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    font = GetFont();
 | 
				
			||||||
 | 
					    if ( !font.IsOk() )
 | 
				
			||||||
 | 
					        font = ms_systemMenuFont;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
// wxMenuItemBase
 | 
					// wxMenuItemBase
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Name:        src/msw/ownerdrw.cpp
 | 
					// Name:        src/msw/ownerdrw.cpp
 | 
				
			||||||
// Purpose:     implementation of wxOwnerDrawn class
 | 
					// Purpose:     implementation of wxOwnerDrawn class
 | 
				
			||||||
// Author:      Vadim Zeitlin
 | 
					// Author:      Vadim Zeitlin
 | 
				
			||||||
// Modified by:
 | 
					// Modified by: Marcin Malich
 | 
				
			||||||
// Created:     13.11.97
 | 
					// Created:     13.11.97
 | 
				
			||||||
// RCS-ID:      $Id$
 | 
					// RCS-ID:      $Id$
 | 
				
			||||||
// Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 | 
					// Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 | 
				
			||||||
@@ -18,521 +18,81 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef WX_PRECOMP
 | 
					 | 
				
			||||||
    #include "wx/window.h"
 | 
					 | 
				
			||||||
    #include "wx/font.h"
 | 
					 | 
				
			||||||
    #include "wx/bitmap.h"
 | 
					 | 
				
			||||||
    #include "wx/image.h"
 | 
					 | 
				
			||||||
    #include "wx/dcmemory.h"
 | 
					 | 
				
			||||||
    #include "wx/menu.h"
 | 
					 | 
				
			||||||
    #include "wx/utils.h"
 | 
					 | 
				
			||||||
    #include "wx/settings.h"
 | 
					 | 
				
			||||||
    #include "wx/menuitem.h"
 | 
					 | 
				
			||||||
    #include "wx/module.h"
 | 
					 | 
				
			||||||
    #include "wx/msw/wrapcctl.h"
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "wx/ownerdrw.h"
 | 
					#include "wx/ownerdrw.h"
 | 
				
			||||||
#include "wx/fontutil.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "wx/msw/private.h"
 | 
					 | 
				
			||||||
#include "wx/msw/private/metrics.h"
 | 
					 | 
				
			||||||
#include "wx/msw/dc.h"
 | 
					#include "wx/msw/dc.h"
 | 
				
			||||||
 | 
					#include "wx/msw/private.h"
 | 
				
			||||||
#ifndef SPI_GETKEYBOARDCUES
 | 
					#include "wx/msw/private/dc.h"
 | 
				
			||||||
#define SPI_GETKEYBOARDCUES 0x100A
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef DSS_HIDEPREFIX
 | 
					#ifndef DSS_HIDEPREFIX
 | 
				
			||||||
#define DSS_HIDEPREFIX  0x0200
 | 
					#define DSS_HIDEPREFIX  0x0200
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class wxMSWSystemMenuFontModule : public wxModule
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
{
 | 
					// constants for base class
 | 
				
			||||||
public:
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
    virtual bool OnInit()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    virtual void OnExit()
 | 
					int wxOwnerDrawnBase::ms_defaultMargin = 3;
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if ( ms_systemMenuFont )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            delete ms_systemMenuFont;
 | 
					 | 
				
			||||||
            ms_systemMenuFont = NULL;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static const wxFont& GetSystemMenuFont()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if ( !ms_systemMenuFont )
 | 
					 | 
				
			||||||
            DoInitFont();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return *ms_systemMenuFont;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static int GetSystemMenuHeight()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if ( !ms_systemMenuHeight )
 | 
					 | 
				
			||||||
            DoInitMetrics();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return ms_systemMenuHeight;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static bool AlwaysShowCues()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if ( !ms_systemMenuHeight )
 | 
					 | 
				
			||||||
            DoInitMetrics();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return ms_alwaysShowCues;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    static void DoInitMetrics()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // iMenuHeight is the menu bar height and the menu items are less tall,
 | 
					 | 
				
			||||||
        // although I don't know by how much -- below is the value for my system
 | 
					 | 
				
			||||||
        ms_systemMenuHeight = wxMSWImpl::GetNonClientMetrics().iMenuHeight - 4;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        wxASSERT_MSG( ms_systemMenuHeight > 0,
 | 
					 | 
				
			||||||
                        "menu height should be positive" );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( ::SystemParametersInfo(SPI_GETKEYBOARDCUES, 0,
 | 
					 | 
				
			||||||
                                    &ms_alwaysShowCues, 0) == 0 )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            // if it's not supported, we must be on an old Windows version
 | 
					 | 
				
			||||||
            // which always shows them
 | 
					 | 
				
			||||||
            ms_alwaysShowCues = true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static void DoInitFont()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        ms_systemMenuFont = new
 | 
					 | 
				
			||||||
          wxFont(wxNativeFontInfo(wxMSWImpl::GetNonClientMetrics().lfMenuFont));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static wxFont* ms_systemMenuFont;
 | 
					 | 
				
			||||||
    static int ms_systemMenuHeight;
 | 
					 | 
				
			||||||
    static bool ms_alwaysShowCues;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    DECLARE_DYNAMIC_CLASS(wxMSWSystemMenuFontModule)
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// these static variables are from the wxMSWSystemMenuFontModule object
 | 
					 | 
				
			||||||
// and reflect the system settings returned by the Win32 API's
 | 
					 | 
				
			||||||
// SystemParametersInfo() call.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wxFont* wxMSWSystemMenuFontModule::ms_systemMenuFont = NULL;
 | 
					 | 
				
			||||||
int wxMSWSystemMenuFontModule::ms_systemMenuHeight = 0;
 | 
					 | 
				
			||||||
bool wxMSWSystemMenuFontModule::ms_alwaysShowCues = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IMPLEMENT_DYNAMIC_CLASS(wxMSWSystemMenuFontModule, wxModule)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// VC++ 6 gives a warning here:
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//      return type for 'OwnerDrawnSet_wxImplementation_HashTable::iterator::
 | 
					 | 
				
			||||||
//      operator ->' is 'class wxOwnerDrawn ** ' (ie; not a UDT or reference to
 | 
					 | 
				
			||||||
//      a UDT.  Will produce errors if applied using infix notation.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// shut it down
 | 
					 | 
				
			||||||
#if defined __VISUALC__ && __VISUALC__ <= 1300
 | 
					 | 
				
			||||||
    #if __VISUALC__ >= 1200
 | 
					 | 
				
			||||||
        #pragma warning(push)
 | 
					 | 
				
			||||||
        #define POP_WARNINGS
 | 
					 | 
				
			||||||
    #endif
 | 
					 | 
				
			||||||
    #pragma warning(disable: 4284)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "wx/hashset.h"
 | 
					 | 
				
			||||||
WX_DECLARE_HASH_SET(wxOwnerDrawn*, wxPointerHash, wxPointerEqual, OwnerDrawnSet);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef POP_WARNINGS
 | 
					 | 
				
			||||||
    #pragma warning(pop)
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ============================================================================
 | 
					// ============================================================================
 | 
				
			||||||
// implementation of wxOwnerDrawn class
 | 
					// implementation of wxOwnerDrawn class
 | 
				
			||||||
// ============================================================================
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ctor
 | 
					 | 
				
			||||||
// ----
 | 
					 | 
				
			||||||
wxOwnerDrawn::wxOwnerDrawn(const wxString& str,
 | 
					 | 
				
			||||||
                           bool bCheckable,
 | 
					 | 
				
			||||||
                           bool bMenuItem)
 | 
					 | 
				
			||||||
            : m_strName(str)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if ( ms_nDefaultMarginWidth == 0 )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
       ms_nDefaultMarginWidth = ::GetSystemMetrics(SM_CXMENUCHECK) +
 | 
					 | 
				
			||||||
                                wxSystemSettings::GetMetric(wxSYS_EDGE_X);
 | 
					 | 
				
			||||||
       ms_nLastMarginWidth = ms_nDefaultMarginWidth;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    m_bCheckable   = bCheckable;
 | 
					 | 
				
			||||||
    m_bOwnerDrawn  = false;
 | 
					 | 
				
			||||||
    m_isMenuItem   = bMenuItem;
 | 
					 | 
				
			||||||
    m_nHeight      = 0;
 | 
					 | 
				
			||||||
    m_nMarginWidth = ms_nLastMarginWidth;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wxOwnerDrawn::~wxOwnerDrawn()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool wxOwnerDrawn::IsMenuItem() const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return m_isMenuItem;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// these items will be set during the first invocation of the ctor,
 | 
					 | 
				
			||||||
// because the values will be determined by checking the system settings,
 | 
					 | 
				
			||||||
// which is a chunk of code
 | 
					 | 
				
			||||||
size_t wxOwnerDrawn::ms_nDefaultMarginWidth = 0;
 | 
					 | 
				
			||||||
size_t wxOwnerDrawn::ms_nLastMarginWidth = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// drawing
 | 
					 | 
				
			||||||
// -------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wxFont wxOwnerDrawn::GetFontToUse() const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    wxFont font = m_font;
 | 
					 | 
				
			||||||
    if ( !font.Ok() )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if ( IsMenuItem() )
 | 
					 | 
				
			||||||
            font = wxMSWSystemMenuFontModule::GetSystemMenuFont();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( !font.Ok() )
 | 
					 | 
				
			||||||
            font = *wxNORMAL_FONT;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return font;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// get size of the item
 | 
					 | 
				
			||||||
// The item size includes the menu string, the accel string,
 | 
					 | 
				
			||||||
// the bitmap and size for a submenu expansion arrow...
 | 
					 | 
				
			||||||
bool wxOwnerDrawn::OnMeasureItem(size_t *pwidth, size_t *pheight)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if ( IsOwnerDrawn() )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        wxMemoryDC dc;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        wxString str = wxStripMenuCodes(m_strName);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // if we have a valid accel string, then pad out
 | 
					 | 
				
			||||||
        // the menu string so that the menu and accel string are not
 | 
					 | 
				
			||||||
        // placed on top of each other.
 | 
					 | 
				
			||||||
        if ( !m_strAccel.empty() )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            str.Pad(str.length()%8);
 | 
					 | 
				
			||||||
            str += m_strAccel;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        dc.SetFont(GetFontToUse());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        wxCoord w, h;
 | 
					 | 
				
			||||||
        dc.GetTextExtent(str, &w, &h);
 | 
					 | 
				
			||||||
        *pwidth = w;
 | 
					 | 
				
			||||||
        *pheight = h;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else // don't draw the text, just the bitmap (if any)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        *pwidth =
 | 
					 | 
				
			||||||
        *pheight = 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // increase size to accommodate bigger bitmaps if necessary
 | 
					 | 
				
			||||||
    if (m_bmpChecked.Ok())
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // Is BMP height larger than text height?
 | 
					 | 
				
			||||||
        size_t adjustedHeight = m_bmpChecked.GetHeight();
 | 
					 | 
				
			||||||
        if ( *pheight < adjustedHeight )
 | 
					 | 
				
			||||||
            *pheight = adjustedHeight;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const int widthBmp = m_bmpChecked.GetWidth();
 | 
					 | 
				
			||||||
        if ( IsOwnerDrawn() )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            // widen the margin to fit the bitmap if necessary
 | 
					 | 
				
			||||||
            if ( GetMarginWidth() < widthBmp )
 | 
					 | 
				
			||||||
                SetMarginWidth(widthBmp);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else // we must allocate enough space for the bitmap
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            *pwidth += widthBmp;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // add a 4-pixel separator, otherwise menus look cluttered
 | 
					 | 
				
			||||||
    *pwidth += 4;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // notice that this adjustment must be done after (possibly) changing the
 | 
					 | 
				
			||||||
    // margin width above
 | 
					 | 
				
			||||||
    if ( IsOwnerDrawn() )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // add space at the end of the menu for the submenu expansion arrow
 | 
					 | 
				
			||||||
        // this will also allow offsetting the accel string from the right edge
 | 
					 | 
				
			||||||
        *pwidth += GetMarginWidth() + 16;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // make sure that this item is at least as tall as the system menu height
 | 
					 | 
				
			||||||
    const size_t heightStd = wxMSWSystemMenuFontModule::GetSystemMenuHeight();
 | 
					 | 
				
			||||||
    if ( *pheight < heightStd )
 | 
					 | 
				
			||||||
      *pheight = heightStd;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // remember height for use in OnDrawItem
 | 
					 | 
				
			||||||
    m_nHeight = *pheight;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// draw the item
 | 
					// draw the item
 | 
				
			||||||
bool wxOwnerDrawn::OnDrawItem(wxDC& dc,
 | 
					bool wxOwnerDrawn::OnDrawItem(wxDC& dc, const wxRect& rc,
 | 
				
			||||||
                              const wxRect& rc,
 | 
					                              wxODAction, wxODStatus stat)
 | 
				
			||||||
                              wxODAction,
 | 
					 | 
				
			||||||
                              wxODStatus st)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // this flag determines whether or not an edge will
 | 
					    // we do nothing if item isn't ownerdrawn
 | 
				
			||||||
    // be drawn around the bitmap. In most "windows classic"
 | 
					    if ( !IsOwnerDrawn() )
 | 
				
			||||||
    // applications, a 1-pixel highlight edge is drawn around
 | 
					        return true;
 | 
				
			||||||
    // the bitmap of an item when it is selected.  However,
 | 
					 | 
				
			||||||
    // with the new "luna" theme, no edge is drawn around
 | 
					 | 
				
			||||||
    // the bitmap because the background is white (this applies
 | 
					 | 
				
			||||||
    // only to "non-XP style" menus w/ bitmaps --
 | 
					 | 
				
			||||||
    // see IE 6 menus for an example)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool draw_bitmap_edge = true;
 | 
					    // set the font and colors
 | 
				
			||||||
 | 
					    wxFont font;
 | 
				
			||||||
    // set the colors
 | 
					    GetFontToUse(font);
 | 
				
			||||||
    // --------------
 | 
					 | 
				
			||||||
    DWORD colBack, colText;
 | 
					 | 
				
			||||||
    if ( st & wxODSelected )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        colBack = GetSysColor(COLOR_HIGHLIGHT);
 | 
					 | 
				
			||||||
        if (!(st & wxODDisabled))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            colText = GetSysColor(COLOR_HIGHLIGHTTEXT);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            colText = GetSysColor(COLOR_GRAYTEXT);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // fall back to default colors if none explicitly specified
 | 
					 | 
				
			||||||
        colBack = m_colBack.Ok() ? wxColourToPalRGB(m_colBack)
 | 
					 | 
				
			||||||
                                 : GetSysColor(COLOR_MENU);
 | 
					 | 
				
			||||||
        colText = m_colText.Ok() ? wxColourToPalRGB(m_colText)
 | 
					 | 
				
			||||||
                                 : GetSysColor(COLOR_MENUTEXT);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ( IsOwnerDrawn() )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // don't draw an edge around the bitmap, if background is white ...
 | 
					 | 
				
			||||||
        DWORD menu_bg_color = GetSysColor(COLOR_MENU);
 | 
					 | 
				
			||||||
        if (    ( GetRValue( menu_bg_color ) >= 0xf0 &&
 | 
					 | 
				
			||||||
                  GetGValue( menu_bg_color ) >= 0xf0 &&
 | 
					 | 
				
			||||||
                  GetBValue( menu_bg_color ) >= 0xf0 )
 | 
					 | 
				
			||||||
          )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            draw_bitmap_edge = false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else // edge doesn't look well with default Windows drawing
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        draw_bitmap_edge = false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxColour colText, colBack;
 | 
				
			||||||
 | 
					    GetColourToUse(stat, colText, colBack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
 | 
					    wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
 | 
				
			||||||
    HDC hdc = GetHdcOf(*impl);
 | 
					    HDC hdc = GetHdcOf(*impl);
 | 
				
			||||||
    COLORREF colOldText = ::SetTextColor(hdc, colText),
 | 
					 | 
				
			||||||
             colOldBack = ::SetBkColor(hdc, colBack);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // *2, as in wxSYS_EDGE_Y
 | 
					    SelectInHDC selFont(hdc, GetHfontOf(font));
 | 
				
			||||||
    int margin = GetMarginWidth() + 2 * wxSystemSettings::GetMetric(wxSYS_EDGE_X);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // select the font and draw the text
 | 
					    wxMSWImpl::wxTextColoursChanger textCol(hdc, colText, colBack);
 | 
				
			||||||
    // ---------------------------------
 | 
					    wxMSWImpl::wxBkModeChanger bkMode(hdc, wxBRUSHSTYLE_TRANSPARENT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // determine where to draw and leave space for a check-mark.
 | 
					    AutoHBRUSH hbr(wxColourToPalRGB(colBack));
 | 
				
			||||||
    // + 1 pixel to separate the edge from the highlight rectangle
 | 
					    SelectInHDC selBrush(hdc, hbr);
 | 
				
			||||||
    int xText = rc.x + margin + 1;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    RECT rectFill;
 | 
				
			||||||
 | 
					    wxCopyRectToRECT(rc, rectFill);
 | 
				
			||||||
 | 
					    ::FillRect(hdc, &rectFill, hbr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // using native API because it recognizes '&'
 | 
					    // using native API because it recognizes '&'
 | 
				
			||||||
    if ( IsOwnerDrawn() )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        int nPrevMode = SetBkMode(hdc, TRANSPARENT);
 | 
					 | 
				
			||||||
        AutoHBRUSH hbr(colBack);
 | 
					 | 
				
			||||||
        SelectInHDC selBrush(hdc, hbr);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        RECT rectFill;
 | 
					    wxString text = GetName();
 | 
				
			||||||
        wxCopyRectToRECT(rc, rectFill);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ( (st & wxODSelected) && m_bmpChecked.Ok() && draw_bitmap_edge )
 | 
					    SIZE sizeRect;
 | 
				
			||||||
        {
 | 
					    ::GetTextExtentPoint32(hdc, text.c_str(), text.length(), &sizeRect);
 | 
				
			||||||
            // only draw the highlight under the text, not under
 | 
					 | 
				
			||||||
            // the bitmap or checkmark
 | 
					 | 
				
			||||||
            rectFill.left = xText;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        FillRect(hdc, &rectFill, hbr);
 | 
					    int flags = DST_PREFIXTEXT;
 | 
				
			||||||
 | 
					    if ( (stat & wxODDisabled) && !(stat & wxODSelected) )
 | 
				
			||||||
 | 
					        flags |= DSS_DISABLED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // use default font if no font set
 | 
					    if ( (stat & wxODHidePrefix) )
 | 
				
			||||||
        wxFont fontToUse = GetFontToUse();
 | 
					        flags |= DSS_HIDEPREFIX;
 | 
				
			||||||
        SelectInHDC selFont(hdc, GetHfontOf(fontToUse));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        wxString strMenuText = m_strName.BeforeFirst('\t');
 | 
					    int x = rc.x + GetMarginWidth();
 | 
				
			||||||
 | 
					    int y = rc.y + (rc.GetHeight() - sizeRect.cy) / 2;
 | 
				
			||||||
 | 
					    int cx = rc.GetWidth() - GetMarginWidth();
 | 
				
			||||||
 | 
					    int cy = sizeRect.cy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        xText += 3; // separate text from the highlight rectangle
 | 
					    ::DrawState(hdc, NULL, NULL, (LPARAM)text.wx_str(),
 | 
				
			||||||
 | 
					                text.length(), x, y, cx, cy, flags);
 | 
				
			||||||
        SIZE sizeRect;
 | 
					 | 
				
			||||||
        ::GetTextExtentPoint32(hdc, strMenuText.c_str(), strMenuText.length(), &sizeRect);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        int flags = DST_PREFIXTEXT;
 | 
					 | 
				
			||||||
        if ( (st & wxODDisabled) && !(st & wxODSelected) )
 | 
					 | 
				
			||||||
            flags |= DSS_DISABLED;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( (st & wxODHidePrefix) &&
 | 
					 | 
				
			||||||
                !wxMSWSystemMenuFontModule::AlwaysShowCues() )
 | 
					 | 
				
			||||||
            flags |= DSS_HIDEPREFIX;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ::DrawState
 | 
					 | 
				
			||||||
        (
 | 
					 | 
				
			||||||
            hdc,
 | 
					 | 
				
			||||||
            NULL,
 | 
					 | 
				
			||||||
            NULL,
 | 
					 | 
				
			||||||
            (LPARAM)strMenuText.wx_str(),
 | 
					 | 
				
			||||||
            strMenuText.length(),
 | 
					 | 
				
			||||||
            xText,
 | 
					 | 
				
			||||||
            rc.y + (rc.height - sizeRect.cy) / 2, // centre vertically
 | 
					 | 
				
			||||||
            rc.GetWidth() - margin,
 | 
					 | 
				
			||||||
            sizeRect.cy,
 | 
					 | 
				
			||||||
            flags
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // ::SetTextAlign(hdc, TA_RIGHT) doesn't work with DSS_DISABLED or DSS_MONO
 | 
					 | 
				
			||||||
        // as the last parameter in DrawState() (at least with Windows98). So we have
 | 
					 | 
				
			||||||
        // to take care of right alignment ourselves.
 | 
					 | 
				
			||||||
        if ( !m_strAccel.empty() )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            int accel_width, accel_height;
 | 
					 | 
				
			||||||
            dc.GetTextExtent(m_strAccel, &accel_width, &accel_height);
 | 
					 | 
				
			||||||
            // right align accel string with right edge of menu ( offset by the
 | 
					 | 
				
			||||||
            // margin width )
 | 
					 | 
				
			||||||
            ::DrawState(hdc, NULL, NULL,
 | 
					 | 
				
			||||||
                    (LPARAM)m_strAccel.wx_str(),
 | 
					 | 
				
			||||||
                    m_strAccel.length(),
 | 
					 | 
				
			||||||
                    rc.width - 16 - accel_width, rc.y + (rc.height - sizeRect.cy) / 2,
 | 
					 | 
				
			||||||
                    0, 0,
 | 
					 | 
				
			||||||
                    DST_TEXT |
 | 
					 | 
				
			||||||
                    (((st & wxODDisabled) && !(st & wxODSelected)) ? DSS_DISABLED : 0));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        (void)SetBkMode(hdc, nPrevMode);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // draw the bitmap
 | 
					 | 
				
			||||||
    // ---------------
 | 
					 | 
				
			||||||
    if ( IsCheckable() && !m_bmpChecked.Ok() )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if ( st & wxODChecked )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            // what goes on: DrawFrameControl creates a b/w mask,
 | 
					 | 
				
			||||||
            // then we copy it to screen to have right colors
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // first create a monochrome bitmap in a memory DC
 | 
					 | 
				
			||||||
            HDC hdcMem = CreateCompatibleDC(hdc);
 | 
					 | 
				
			||||||
            HBITMAP hbmpCheck = CreateBitmap(margin, m_nHeight, 1, 1, 0);
 | 
					 | 
				
			||||||
            SelectObject(hdcMem, hbmpCheck);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // then draw a check mark into it
 | 
					 | 
				
			||||||
            RECT rect = { 0, 0, margin, m_nHeight };
 | 
					 | 
				
			||||||
            if ( m_nHeight > 0 )
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                ::DrawFrameControl(hdcMem, &rect, DFC_MENU, DFCS_MENUCHECK);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // finally copy it to screen DC and clean up
 | 
					 | 
				
			||||||
            BitBlt(hdc, rc.x, rc.y, margin, m_nHeight, hdcMem, 0, 0, SRCCOPY);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            DeleteDC(hdcMem);
 | 
					 | 
				
			||||||
            DeleteObject(hbmpCheck);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        wxBitmap bmp;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( st & wxODDisabled )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            bmp = GetDisabledBitmap();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( !bmp.Ok() )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            // for not checkable bitmaps we should always use unchecked one
 | 
					 | 
				
			||||||
            // because their checked bitmap is not set
 | 
					 | 
				
			||||||
            bmp = GetBitmap(!IsCheckable() || (st & wxODChecked));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if wxUSE_IMAGE
 | 
					 | 
				
			||||||
            if ( bmp.Ok() && st & wxODDisabled )
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                // we need to grey out the bitmap as we don't have any specific
 | 
					 | 
				
			||||||
                // disabled bitmap
 | 
					 | 
				
			||||||
                wxImage imgGrey = bmp.ConvertToImage().ConvertToGreyscale();
 | 
					 | 
				
			||||||
                if ( imgGrey.Ok() )
 | 
					 | 
				
			||||||
                    bmp = wxBitmap(imgGrey);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
#endif // wxUSE_IMAGE
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( bmp.Ok() )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            wxMemoryDC dcMem(&dc);
 | 
					 | 
				
			||||||
            dcMem.SelectObjectAsSource(bmp);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // center bitmap
 | 
					 | 
				
			||||||
            int nBmpWidth = bmp.GetWidth(),
 | 
					 | 
				
			||||||
                nBmpHeight = bmp.GetHeight();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // there should be enough space!
 | 
					 | 
				
			||||||
            wxASSERT((nBmpWidth <= rc.GetWidth()) && (nBmpHeight <= rc.GetHeight()));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            int heightDiff = m_nHeight - nBmpHeight;
 | 
					 | 
				
			||||||
            dc.Blit(rc.x + (margin - nBmpWidth) / 2,
 | 
					 | 
				
			||||||
                    rc.y + heightDiff / 2,
 | 
					 | 
				
			||||||
                    nBmpWidth, nBmpHeight,
 | 
					 | 
				
			||||||
                    &dcMem, 0, 0, wxCOPY, true /* use mask */);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if ( ( st & wxODSelected ) && !( st & wxODDisabled ) && draw_bitmap_edge )
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                RECT rectBmp = { rc.GetLeft(), rc.GetTop(),
 | 
					 | 
				
			||||||
                                 rc.GetLeft() + margin,
 | 
					 | 
				
			||||||
                                 rc.GetTop() + m_nHeight };
 | 
					 | 
				
			||||||
                SetBkColor(hdc, colBack);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                DrawEdge(hdc, &rectBmp, BDR_RAISEDINNER, BF_RECT);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ::SetTextColor(hdc, colOldText);
 | 
					 | 
				
			||||||
    ::SetBkColor(hdc, colOldBack);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
// global helper functions implemented here
 | 
					// global helper functions implemented here
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,12 @@
 | 
				
			|||||||
#define INCL_PM
 | 
					#define INCL_PM
 | 
				
			||||||
#include <os2.h>
 | 
					#include <os2.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// constants for base class
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const int CHECK_MARK_WIDTH = 15;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
// private functions
 | 
					// private functions
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
@@ -81,6 +87,8 @@ public:
 | 
				
			|||||||
    void Check(bool bCheck);
 | 
					    void Check(bool bCheck);
 | 
				
			||||||
    void Toggle(void) { Check(!IsChecked()); }
 | 
					    void Toggle(void) { Check(!IsChecked()); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual wxString GetName() const { return m_pParent->GetString(m_nIndex); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    bool            m_bChecked;
 | 
					    bool            m_bChecked;
 | 
				
			||||||
    wxCheckListBox* m_pParent;
 | 
					    wxCheckListBox* m_pParent;
 | 
				
			||||||
@@ -101,7 +109,7 @@ wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox* pParent, size_t nIndex)
 | 
				
			|||||||
    // done in OnMeasure while they are used only in OnDraw and we
 | 
					    // done in OnMeasure while they are used only in OnDraw and we
 | 
				
			||||||
    // know that there will always be OnMeasure before OnDraw
 | 
					    // know that there will always be OnMeasure before OnDraw
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    SetMarginWidth(GetDefaultMarginWidth());
 | 
					    SetMarginWidth(CHECK_MARK_WIDTH);
 | 
				
			||||||
} // end of wxCheckListBoxItem::wxCheckListBoxItem
 | 
					} // end of wxCheckListBoxItem::wxCheckListBoxItem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -128,7 +136,7 @@ bool wxCheckListBoxItem::OnDrawItem ( wxDC& rDc,
 | 
				
			|||||||
    vRect.y -= 3;
 | 
					    vRect.y -= 3;
 | 
				
			||||||
    if (wxOwnerDrawn::OnDrawItem( rDc, vRect, eAct, eStat))
 | 
					    if (wxOwnerDrawn::OnDrawItem( rDc, vRect, eAct, eStat))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        size_t    nCheckWidth  = GetDefaultMarginWidth();
 | 
					        size_t    nCheckWidth  = CHECK_MARK_WIDTH;
 | 
				
			||||||
        size_t    nCheckHeight = m_pParent->GetItemHeight();
 | 
					        size_t    nCheckHeight = m_pParent->GetItemHeight();
 | 
				
			||||||
        int       nParentHeight;
 | 
					        int       nParentHeight;
 | 
				
			||||||
        int       nX = rRect.GetX();
 | 
					        int       nX = rRect.GetX();
 | 
				
			||||||
@@ -333,7 +341,7 @@ long wxCheckListBox::OS2OnMeasure ( WXMEASUREITEMSTRUCT* pItem )
 | 
				
			|||||||
        //
 | 
					        //
 | 
				
			||||||
        // Add place for the check mark
 | 
					        // Add place for the check mark
 | 
				
			||||||
        //
 | 
					        //
 | 
				
			||||||
        pStruct->rclItem.xRight += wxOwnerDrawn::GetDefaultMarginWidth();
 | 
					        pStruct->rclItem.xRight += CHECK_MARK_WIDTH;
 | 
				
			||||||
        return long(MRFROM2SHORT((USHORT)m_nItemHeight, (USHORT)(pStruct->rclItem.xRight - pStruct->rclItem.xLeft)));
 | 
					        return long(MRFROM2SHORT((USHORT)m_nItemHeight, (USHORT)(pStruct->rclItem.xRight - pStruct->rclItem.xLeft)));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 0L;
 | 
					    return 0L;
 | 
				
			||||||
@@ -374,7 +382,7 @@ void wxCheckListBox::OnLeftClick ( wxMouseEvent& rEvent )
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
    // Clicking on the item selects it, clicking on the checkmark toggles
 | 
					    // Clicking on the item selects it, clicking on the checkmark toggles
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    if (rEvent.GetX() <= wxOwnerDrawn::GetDefaultMarginWidth())
 | 
					    if (rEvent.GetX() <= CHECK_MARK_WIDTH)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        int                         nParentHeight;
 | 
					        int                         nParentHeight;
 | 
				
			||||||
        wxScreenDC                  vDc;
 | 
					        wxScreenDC                  vDc;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,25 +50,25 @@ IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControlWithItems)
 | 
				
			|||||||
class wxListBoxItem : public wxOwnerDrawn
 | 
					class wxListBoxItem : public wxOwnerDrawn
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    wxListBoxItem(const wxString& rsStr = wxEmptyString);
 | 
					    wxListBoxItem(wxListBox *parent)
 | 
				
			||||||
};
 | 
					        { m_parent = parent; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxListBoxItem::wxListBoxItem(
 | 
					    wxListBox *GetParent() const
 | 
				
			||||||
  const wxString& rsStr
 | 
					        { return m_parent; }
 | 
				
			||||||
)
 | 
					
 | 
				
			||||||
: wxOwnerDrawn( rsStr
 | 
					    int GetIndex() const
 | 
				
			||||||
               ,false
 | 
					        { return m_parent->GetItemIndex(const_cast<wxListBoxItem*>(this)); }
 | 
				
			||||||
              )
 | 
					
 | 
				
			||||||
{
 | 
					    wxString GetName() const
 | 
				
			||||||
    //
 | 
					        { return m_parent->GetString(GetIndex()); }
 | 
				
			||||||
    // No bitmaps/checkmarks
 | 
					
 | 
				
			||||||
    //
 | 
					private:
 | 
				
			||||||
    SetMarginWidth(0);
 | 
					    wxListBox *m_parent;
 | 
				
			||||||
} // end of wxListBoxItem::wxListBoxItem
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxOwnerDrawn* wxListBox::CreateItem( size_t WXUNUSED(n) )
 | 
					wxOwnerDrawn* wxListBox::CreateItem( size_t WXUNUSED(n) )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return new wxListBoxItem();
 | 
					    return new wxListBoxItem(this);
 | 
				
			||||||
} // end of wxListBox::CreateItem
 | 
					} // end of wxListBox::CreateItem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif  //USE_OWNER_DRAWN
 | 
					#endif  //USE_OWNER_DRAWN
 | 
				
			||||||
@@ -225,14 +225,7 @@ bool wxListBox::Create( wxWindow* pParent,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
wxListBox::~wxListBox()
 | 
					wxListBox::~wxListBox()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					    Clear();
 | 
				
			||||||
    size_t lUiCount = m_aItems.Count();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (lUiCount-- != 0)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        delete m_aItems[lUiCount];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
} // end of wxListBox::~wxListBox
 | 
					} // end of wxListBox::~wxListBox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxListBox::SetupColours()
 | 
					void wxListBox::SetupColours()
 | 
				
			||||||
@@ -261,7 +254,7 @@ void wxListBox::DoDeleteOneItem(unsigned int n)
 | 
				
			|||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
    delete m_aItems[n];
 | 
					    delete m_aItems[n];
 | 
				
			||||||
    m_aItems.RemoveAt(n);
 | 
					    m_aItems.RemoveAt(n);
 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, (MPARAM)0);
 | 
					    ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, (MPARAM)0);
 | 
				
			||||||
    m_nNumItems--;
 | 
					    m_nNumItems--;
 | 
				
			||||||
@@ -303,12 +296,9 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items,
 | 
				
			|||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
        if (HasFlag(wxLB_OWNERDRAW))
 | 
					        if (HasFlag(wxLB_OWNERDRAW))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            wxOwnerDrawn*               pNewItem = CreateItem(n); // dummy argument
 | 
					            wxOwnerDrawn* pNewItem = CreateItem(n); // dummy argument
 | 
				
			||||||
            wxScreenDC                  vDc; // FIXME: is it really needed here?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            pNewItem->SetName(items[i]);
 | 
					 | 
				
			||||||
            m_aItems.Insert(pNewItem, n);
 | 
					 | 
				
			||||||
            pNewItem->SetFont(GetFont());
 | 
					            pNewItem->SetFont(GetFont());
 | 
				
			||||||
 | 
					            m_aItems.Insert(pNewItem, n);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        AssignNewItemClientData(n, clientData, i, type);
 | 
					        AssignNewItemClientData(n, clientData, i, type);
 | 
				
			||||||
@@ -323,14 +313,10 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items,
 | 
				
			|||||||
void wxListBox::DoClear()
 | 
					void wxListBox::DoClear()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
    unsigned int lUiCount = m_aItems.Count();
 | 
					    if ( m_windowStyle & wxLB_OWNERDRAW )
 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (lUiCount-- != 0)
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        delete m_aItems[lUiCount];
 | 
					        WX_CLEAR_ARRAY(m_aItems);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    m_aItems.Clear();
 | 
					 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
    ::WinSendMsg(GetHwnd(), LM_DELETEALL, (MPARAM)0, (MPARAM)0);
 | 
					    ::WinSendMsg(GetHwnd(), LM_DELETEALL, (MPARAM)0, (MPARAM)0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -537,14 +523,6 @@ void wxListBox::SetString(unsigned int n, const wxString& rsString)
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
    if (bWasSelected)
 | 
					    if (bWasSelected)
 | 
				
			||||||
        Select(n);
 | 
					        Select(n);
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
    if (m_windowStyle & wxLB_OWNERDRAW)
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // Update item's text
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        m_aItems[n]->SetName(rsString);
 | 
					 | 
				
			||||||
#endif  //USE_OWNER_DRAWN
 | 
					 | 
				
			||||||
} // end of wxListBox::SetString
 | 
					} // end of wxListBox::SetString
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned int wxListBox::GetCount() const
 | 
					unsigned int wxListBox::GetCount() const
 | 
				
			||||||
@@ -793,7 +771,7 @@ bool wxListBox::OS2OnDraw (
 | 
				
			|||||||
    return pData->OnDrawItem( vDc
 | 
					    return pData->OnDrawItem( vDc
 | 
				
			||||||
                             ,vRect
 | 
					                             ,vRect
 | 
				
			||||||
                             ,(wxOwnerDrawn::wxODAction)eAction
 | 
					                             ,(wxOwnerDrawn::wxODAction)eAction
 | 
				
			||||||
                             ,(wxOwnerDrawn::wxODStatus)eStatus
 | 
					                             ,(wxOwnerDrawn::wxODStatus)(eStatus | wxOwnerDrawn::wxODHidePrefix)
 | 
				
			||||||
                            );
 | 
					                            );
 | 
				
			||||||
} // end of wxListBox::OS2OnDraw
 | 
					} // end of wxListBox::OS2OnDraw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,11 +82,6 @@ wxMenuItem::wxMenuItem(
 | 
				
			|||||||
                 ,eKind
 | 
					                 ,eKind
 | 
				
			||||||
                 ,pSubMenu
 | 
					                 ,pSubMenu
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
,  wxOwnerDrawn( wxPMTextToLabel(rsText)
 | 
					 | 
				
			||||||
                ,eKind == wxITEM_CHECK
 | 
					 | 
				
			||||||
               )
 | 
					 | 
				
			||||||
#endif // owner drawn
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxASSERT_MSG(pParentMenu != NULL, wxT("a menu item should have a parent"));
 | 
					    wxASSERT_MSG(pParentMenu != NULL, wxT("a menu item should have a parent"));
 | 
				
			||||||
    memset(&m_vMenuData, '\0', sizeof(m_vMenuData));
 | 
					    memset(&m_vMenuData, '\0', sizeof(m_vMenuData));
 | 
				
			||||||
@@ -110,11 +105,6 @@ wxMenuItem::wxMenuItem(
 | 
				
			|||||||
                 ,bIsCheckable ? wxITEM_CHECK : wxITEM_NORMAL
 | 
					                 ,bIsCheckable ? wxITEM_CHECK : wxITEM_NORMAL
 | 
				
			||||||
                 ,pSubMenu
 | 
					                 ,pSubMenu
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
,  wxOwnerDrawn( wxPMTextToLabel(rsText)
 | 
					 | 
				
			||||||
                ,bIsCheckable
 | 
					 | 
				
			||||||
               )
 | 
					 | 
				
			||||||
#endif // owner drawn
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxASSERT_MSG(pParentMenu != NULL, wxT("a menu item should have a parent"));
 | 
					    wxASSERT_MSG(pParentMenu != NULL, wxT("a menu item should have a parent"));
 | 
				
			||||||
    memset(&m_vMenuData, '\0', sizeof(m_vMenuData));
 | 
					    memset(&m_vMenuData, '\0', sizeof(m_vMenuData));
 | 
				
			||||||
@@ -132,21 +122,13 @@ void wxMenuItem::Init()
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
    // Set default menu colors
 | 
					    // Set default menu colors
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    #define SYS_COLOR(c) (wxSystemSettings::GetColour(wxSYS_COLOUR_##c))
 | 
					    SetTextColour(wxNullColour);
 | 
				
			||||||
 | 
					    SetBackgroundColour(wxNullColour);
 | 
				
			||||||
    SetTextColour(SYS_COLOR(MENUTEXT));
 | 
					 | 
				
			||||||
    SetBackgroundColour(SYS_COLOR(MENU));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // We don't want normal items be owner-drawn
 | 
					    // We don't want normal items be owner-drawn
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    ResetOwnerDrawn();
 | 
					    SetOwnerDrawn(false);
 | 
				
			||||||
    #undef  SYS_COLOR
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Tell the owner drawing code to to show the accel string as well
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    SetAccelString(m_text.AfterFirst(wxT('\t')));
 | 
					 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
} // end of wxMenuItem::Init
 | 
					} // end of wxMenuItem::Init
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -376,18 +358,7 @@ void wxMenuItem::SetItemLabel( const wxString& rText )
 | 
				
			|||||||
    // wxMenuItemBase will do stock ID checks
 | 
					    // wxMenuItemBase will do stock ID checks
 | 
				
			||||||
    wxMenuItemBase::SetItemLabel(sText);
 | 
					    wxMenuItemBase::SetItemLabel(sText);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // m_text could now be different from 'text' if we are a stock menu item,
 | 
					    HWND hMenu = GetHmenuOf(m_parentMenu);
 | 
				
			||||||
    // so use only m_text below
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    OWNER_DRAWN_ONLY(wxOwnerDrawn::SetName(m_text));
 | 
					 | 
				
			||||||
#if  wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
    if (rText.IsEmpty())
 | 
					 | 
				
			||||||
        SetAccelString(m_text.AfterFirst(wxT('\t')));
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        SetAccelString(rText.AfterFirst(wxT('\t')));
 | 
					 | 
				
			||||||
#endif // wxUSE_OWNER_DRAWN
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    HWND                            hMenu = GetHmenuOf(m_parentMenu);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wxCHECK_RET(hMenu, wxT("menuitem without menu"));
 | 
					    wxCHECK_RET(hMenu, wxT("menuitem without menu"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -456,13 +427,370 @@ void wxMenuItem::SetItemLabel( const wxString& rText )
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
} // end of wxMenuItem::SetText
 | 
					} // end of wxMenuItem::SetText
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxMenuItem::SetCheckable(
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
  bool                              bCheckable
 | 
					
 | 
				
			||||||
)
 | 
					wxString wxMenuItem::GetName() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxMenuItemBase::SetCheckable(bCheckable);
 | 
					    return GetItemLabelText();
 | 
				
			||||||
    OWNER_DRAWN_ONLY(wxOwnerDrawn::SetCheckable(bCheckable));
 | 
					}
 | 
				
			||||||
} // end of wxMenuItem::SetCheckable
 | 
					
 | 
				
			||||||
 | 
					bool wxMenuItem::OnMeasureItem( size_t* pWidth, size_t* pHeight )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxMemoryDC vDC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxString  sStr = GetName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // If we have a valid accel string, then pad out
 | 
				
			||||||
 | 
					    // the menu string so that the menu and accel string are not
 | 
				
			||||||
 | 
					    // placed on top of each other.
 | 
				
			||||||
 | 
					    wxString accel = GetItemLabel().AfterFirst(wxT('\t'));
 | 
				
			||||||
 | 
					    if (!accel.empty() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        sStr.Pad(sStr.length()%8);
 | 
				
			||||||
 | 
					        sStr += accel;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    vDC.SetFont(GetFont());
 | 
				
			||||||
 | 
					    vDC.GetTextExtent( sStr
 | 
				
			||||||
 | 
					                      ,(wxCoord *)pWidth
 | 
				
			||||||
 | 
					                      ,(wxCoord *)pHeight
 | 
				
			||||||
 | 
					                     );
 | 
				
			||||||
 | 
					    if (!accel.empty())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // Measure the accelerator string, and add its width to
 | 
				
			||||||
 | 
					        // the total item width, plus 16 (Accelerators are right justified,
 | 
				
			||||||
 | 
					        // with the right edge of the text rectangle 16 pixels left of
 | 
				
			||||||
 | 
					        // the right edge of the menu)
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        int                         nAccelWidth;
 | 
				
			||||||
 | 
					        int                         nAccelHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        vDC.GetTextExtent( m_strAccel
 | 
				
			||||||
 | 
					                          ,&nAccelWidth
 | 
				
			||||||
 | 
					                          ,&nAccelHeight
 | 
				
			||||||
 | 
					                         );
 | 
				
			||||||
 | 
					        *pWidth += nAccelWidth;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Add space at the end of the menu for the submenu expansion arrow.
 | 
				
			||||||
 | 
					    // This will also allow offsetting the accel string from the right edge
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    *pWidth = (size_t)(*pWidth + GetDefaultMarginWidth() * 1.5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // JACS: items still look too tightly packed, so adding 5 pixels.
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    (*pHeight) += 5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Ray Gilbert's changes - Corrects the problem of a BMP
 | 
				
			||||||
 | 
					    // being placed next to text in a menu item, and the BMP does
 | 
				
			||||||
 | 
					    // not match the size expected by the system.  This will
 | 
				
			||||||
 | 
					    // resize the space so the BMP will fit.  Without this, BMPs
 | 
				
			||||||
 | 
					    // must be no larger or smaller than 16x16.
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    if (m_bmpChecked.Ok())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // Is BMP height larger then text height?
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        size_t                      nAdjustedHeight = m_bmpChecked.GetHeight() +
 | 
				
			||||||
 | 
					                                                      wxSystemSettings::GetMetric(wxSYS_EDGE_Y);
 | 
				
			||||||
 | 
					        if (*pHeight < nAdjustedHeight)
 | 
				
			||||||
 | 
					            *pHeight = nAdjustedHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // Does BMP encroach on default check menu position?
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        size_t                      nAdjustedWidth = m_bmpChecked.GetWidth() +
 | 
				
			||||||
 | 
					                                                     (wxSystemSettings::GetMetric(wxSYS_EDGE_X) * 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // Do we need to widen margin to fit BMP?
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        if ((size_t)GetMarginWidth() < nAdjustedWidth)
 | 
				
			||||||
 | 
					            SetMarginWidth(nAdjustedWidth);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // Add the size of the bitmap to our total size...
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        *pWidth += GetMarginWidth();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Add the size of the bitmap to our total size - even if we don't have
 | 
				
			||||||
 | 
					    // a bitmap we leave room for one...
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    *pWidth += GetMarginWidth();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Make sure that this item is at least as
 | 
				
			||||||
 | 
					    // tall as the user's system settings specify
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    const size_t heightStd = 6; // FIXME: get value from the system
 | 
				
			||||||
 | 
					    if ( *pHeight < heightStd )
 | 
				
			||||||
 | 
					      *pHeight = heightStd;
 | 
				
			||||||
 | 
					    m_nHeight = *pHeight;                // remember height for use in OnDrawItem
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					} // end of wxOwnerDrawn::OnMeasureItem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool wxMenuItem::OnDrawItem( wxDC& rDC,
 | 
				
			||||||
 | 
					                               const wxRect& rRect,
 | 
				
			||||||
 | 
					                               wxODAction eAction,
 | 
				
			||||||
 | 
					                               wxODStatus eStatus )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Select the font and draw the text
 | 
				
			||||||
 | 
					    // ---------------------------------
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    CHARBUNDLE                      vCbnd;
 | 
				
			||||||
 | 
					    wxPMDCImpl                      *impl = (wxPMDCImpl*) rDC.GetImpl();
 | 
				
			||||||
 | 
					    HPS                             hPS= impl->GetHPS();
 | 
				
			||||||
 | 
					    wxFont                          vFont;
 | 
				
			||||||
 | 
					    wxColour                        vColBack;
 | 
				
			||||||
 | 
					    wxColour                        vColText;
 | 
				
			||||||
 | 
					    COLORREF                        vRef;
 | 
				
			||||||
 | 
					    RECTL                           vRect = {rRect.x + 4, rRect.y + 1, rRect.x + (rRect.width - 2), rRect.y + rRect.height};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    memset(&vCbnd, 0, sizeof(CHARBUNDLE));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    GetFontToUse(vFont);
 | 
				
			||||||
 | 
					    GetColourToUse(eStatus, vColText, vColBack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rDC.SetFont(vFont);
 | 
				
			||||||
 | 
					    rDC.SetTextBackground(vColBack);
 | 
				
			||||||
 | 
					    rDC.SetTextForeground(vColText);
 | 
				
			||||||
 | 
					    rDC.SetBackgroundMode(wxTRANSPARENT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    vCbnd.lColor     = vColText.GetPixel();
 | 
				
			||||||
 | 
					    vCbnd.lBackColor = vColBack.GetPixel();
 | 
				
			||||||
 | 
					    ::GpiSetAttrs( hPS
 | 
				
			||||||
 | 
					                  ,PRIM_CHAR
 | 
				
			||||||
 | 
					                  ,CBB_BACK_COLOR | CBB_COLOR
 | 
				
			||||||
 | 
					                  ,0
 | 
				
			||||||
 | 
					                  ,&vCbnd
 | 
				
			||||||
 | 
					                 );
 | 
				
			||||||
 | 
					    ::GpiSetBackMix( hPS
 | 
				
			||||||
 | 
					                    ,BM_LEAVEALONE
 | 
				
			||||||
 | 
					                   );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Paint the background
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    ::WinFillRect(hPS, &vRect, vColBack.GetPixel());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Determine where to draw and leave space for a check-mark.
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    int nX = rRect.x + GetMarginWidth();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Unfortunately, unlike Win32, PM has no owner drawn specific text
 | 
				
			||||||
 | 
					    // drawing methods like ::DrawState that can cleanly handle accel
 | 
				
			||||||
 | 
					    // mnemonics and deal, automatically, with various states, so we have
 | 
				
			||||||
 | 
					    // to handle them ourselves. Notice Win32 can't handle \t in ownerdrawn
 | 
				
			||||||
 | 
					    // strings either.  We cannot handle mnemonics either.  We display
 | 
				
			||||||
 | 
					    // them, though, in the hope we can figure them out some day.
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Display main text and accel text separately to align better
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    wxString sTgt = wxT("\t");
 | 
				
			||||||
 | 
					    wxString sFullString = GetItemLabel(); // need to save the original text
 | 
				
			||||||
 | 
					    wxString sAccel;
 | 
				
			||||||
 | 
					    int      nIndex;
 | 
				
			||||||
 | 
					    size_t   nWidth;
 | 
				
			||||||
 | 
					    size_t   nCharWidth;
 | 
				
			||||||
 | 
					    size_t   nHeight;
 | 
				
			||||||
 | 
					    bool     bFoundMnemonic = false;
 | 
				
			||||||
 | 
					    bool     bFoundAccel = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Deal with the tab, extracting the Accel text
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    nIndex = sFullString.Find(sTgt);
 | 
				
			||||||
 | 
					    if (nIndex != -1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        bFoundAccel = true;
 | 
				
			||||||
 | 
					        sAccel = sFullString.Mid(nIndex + 1);
 | 
				
			||||||
 | 
					        sFullString.Remove(nIndex);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Deal with the mnemonic character
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    sTgt = wxT("~");
 | 
				
			||||||
 | 
					    nIndex = sFullString.Find(sTgt);
 | 
				
			||||||
 | 
					    if (nIndex != -1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxString sTmp = sFullString;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        bFoundMnemonic = true;
 | 
				
			||||||
 | 
					        sTmp.Remove(nIndex);
 | 
				
			||||||
 | 
					        rDC.GetTextExtent( sTmp
 | 
				
			||||||
 | 
					                          ,(wxCoord *)&nWidth
 | 
				
			||||||
 | 
					                          ,(wxCoord *)&nHeight
 | 
				
			||||||
 | 
					                         );
 | 
				
			||||||
 | 
					        sTmp = sFullString[(size_t)(nIndex + 1)];
 | 
				
			||||||
 | 
					        rDC.GetTextExtent( sTmp
 | 
				
			||||||
 | 
					                          ,(wxCoord *)&nCharWidth
 | 
				
			||||||
 | 
					                          ,(wxCoord *)&nHeight
 | 
				
			||||||
 | 
					                         );
 | 
				
			||||||
 | 
					        sFullString.Replace(sTgt.c_str(), wxEmptyString, true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Draw the main item text sans the accel text
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    POINTL                      vPntStart = {nX, rRect.y + 4};
 | 
				
			||||||
 | 
					    ::GpiCharStringAt( impl->GetHPS()
 | 
				
			||||||
 | 
					                      ,&vPntStart
 | 
				
			||||||
 | 
					                      ,sFullString.length()
 | 
				
			||||||
 | 
					                      ,sFullString.char_str()
 | 
				
			||||||
 | 
					                     );
 | 
				
			||||||
 | 
					    if (bFoundMnemonic)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // Underline the mnemonic -- still won't work, but at least it "looks" right
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        wxPen                       vPen;
 | 
				
			||||||
 | 
					        POINTL                      vPntEnd = {nX + nWidth + nCharWidth - 3, rRect.y + 2}; //CharWidth is bit wide
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        vPntStart.x = nX + nWidth - 1;
 | 
				
			||||||
 | 
					        vPntStart.y = rRect.y + 2; // Make it look pretty!
 | 
				
			||||||
 | 
					        vPen = wxPen(vColText, 1, wxSOLID); // Assuming we are always black
 | 
				
			||||||
 | 
					        rDC.SetPen(vPen);
 | 
				
			||||||
 | 
					        ::GpiMove(hPS, &vPntStart);
 | 
				
			||||||
 | 
					        ::GpiLine(hPS, &vPntEnd);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Now draw the accel text
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    if (bFoundAccel)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        size_t                      nWidth;
 | 
				
			||||||
 | 
					        size_t                      nHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rDC.GetTextExtent( sAccel
 | 
				
			||||||
 | 
					                          ,(wxCoord *)&nWidth
 | 
				
			||||||
 | 
					                          ,(wxCoord *)&nHeight
 | 
				
			||||||
 | 
					                         );
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // Back off the starting position from the right edge
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        vPntStart.x = rRect.width - (nWidth + 7);
 | 
				
			||||||
 | 
					        vPntStart.y = rRect.y + 4;
 | 
				
			||||||
 | 
					        ::GpiCharStringAt( impl->GetHPS()
 | 
				
			||||||
 | 
					                          ,&vPntStart
 | 
				
			||||||
 | 
					                          ,sAccel.length()
 | 
				
			||||||
 | 
					                          ,sAccel.char_str()
 | 
				
			||||||
 | 
					                         );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // Draw the bitmap
 | 
				
			||||||
 | 
					    // ---------------
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    if (IsCheckable() && !m_bmpChecked.Ok())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (eStatus & wxODChecked)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            RECTL                   vRect;
 | 
				
			||||||
 | 
					            HBITMAP                 hBmpCheck = ::WinGetSysBitmap(HWND_DESKTOP, SBMP_MENUCHECK);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            vRect.xLeft   = rRect.x;
 | 
				
			||||||
 | 
					            vRect.xRight  = rRect.x + GetMarginWidth();
 | 
				
			||||||
 | 
					            vRect.yBottom = rRect.y;
 | 
				
			||||||
 | 
					            vRect.yTop    = rRect.y + m_nHeight - 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ::WinDrawBitmap( hPS             // PS for this menuitem
 | 
				
			||||||
 | 
					                            ,hBmpCheck       // system checkmark
 | 
				
			||||||
 | 
					                            ,NULL            // draw the whole bitmap
 | 
				
			||||||
 | 
					                            ,(PPOINTL)&vRect // destination -- bottom left corner of the menuitem area
 | 
				
			||||||
 | 
					                            ,0L              // ignored
 | 
				
			||||||
 | 
					                            ,0L              // draw a bitmap
 | 
				
			||||||
 | 
					                            ,DBM_NORMAL      // draw normal size
 | 
				
			||||||
 | 
					                           );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // For uncheckable item we use only the 'checked' bitmap
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        wxBitmap vBmp(GetBitmap(IsCheckable() ? ((eStatus & wxODChecked) != 0) : TRUE));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (vBmp.Ok())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            wxMemoryDC              vDCMem(&rDC);
 | 
				
			||||||
 | 
					            wxMemoryDC*             pOldDC = (wxMemoryDC*)vBmp.GetSelectedInto();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(pOldDC != NULL)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                vBmp.SetSelectedInto(NULL);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            vDCMem.SelectObject(vBmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //
 | 
				
			||||||
 | 
					            // Center bitmap
 | 
				
			||||||
 | 
					            //
 | 
				
			||||||
 | 
					            int                     nBmpWidth = vBmp.GetWidth();
 | 
				
			||||||
 | 
					            int                     nBmpHeight = vBmp.GetHeight();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //
 | 
				
			||||||
 | 
					            // There should be enough space!
 | 
				
			||||||
 | 
					            //
 | 
				
			||||||
 | 
					            wxASSERT((nBmpWidth <= rRect.width) && (nBmpHeight <= rRect.height));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            int                     nHeightDiff = m_nHeight - nBmpHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            rDC.Blit( rRect.x + (GetMarginWidth() - nBmpWidth) / 2
 | 
				
			||||||
 | 
					                     ,rRect.y + nHeightDiff / 2
 | 
				
			||||||
 | 
					                     ,nBmpWidth
 | 
				
			||||||
 | 
					                     ,nBmpHeight
 | 
				
			||||||
 | 
					                     ,&vDCMem
 | 
				
			||||||
 | 
					                     ,0
 | 
				
			||||||
 | 
					                     ,0
 | 
				
			||||||
 | 
					                     ,wxCOPY
 | 
				
			||||||
 | 
					                     ,true
 | 
				
			||||||
 | 
					                    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (eStatus & wxODSelected)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                POINTL              vPnt1 = {rRect.x + 1, rRect.y + 3}; // Leave a little background border
 | 
				
			||||||
 | 
					                POINTL              vPnt2 = {rRect.x + GetMarginWidth(), rRect.y + m_nHeight - 3};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                LINEBUNDLE          vLine;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                vLine.lColor = vColBack.GetPixel();
 | 
				
			||||||
 | 
					                ::GpiSetAttrs( hPS
 | 
				
			||||||
 | 
					                              ,PRIM_LINE
 | 
				
			||||||
 | 
					                              ,LBB_COLOR
 | 
				
			||||||
 | 
					                              ,0
 | 
				
			||||||
 | 
					                              ,&vLine
 | 
				
			||||||
 | 
					                             );
 | 
				
			||||||
 | 
					                ::GpiMove(hPS, &vPnt1);
 | 
				
			||||||
 | 
					                ::GpiBox( hPS
 | 
				
			||||||
 | 
					                         ,DRO_OUTLINE
 | 
				
			||||||
 | 
					                         ,&vPnt2
 | 
				
			||||||
 | 
					                         ,0L
 | 
				
			||||||
 | 
					                         ,0L
 | 
				
			||||||
 | 
					                        );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            vBmp.SetSelectedInto(NULL);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					} // end of wxOwnerDrawn::OnDrawItem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
// wxMenuItemBase
 | 
					// wxMenuItemBase
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
// Name:        src/os2/ownerdrw.cpp
 | 
					// Name:        src/os2/ownerdrw.cpp
 | 
				
			||||||
// Purpose:     implementation of wxOwnerDrawn class
 | 
					// Purpose:     implementation of wxOwnerDrawn class
 | 
				
			||||||
// Author:      David Webster
 | 
					// Author:      David Webster
 | 
				
			||||||
// Modified by:
 | 
					// Modified by: Marcin Malich
 | 
				
			||||||
// Created:     10/12/99
 | 
					// Created:     10/12/99
 | 
				
			||||||
// RCS-ID:      $Id$
 | 
					// RCS-ID:      $Id$
 | 
				
			||||||
// Copyright:   (c) David Webster
 | 
					// Copyright:   (c) David Webster
 | 
				
			||||||
@@ -14,166 +14,26 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if wxUSE_OWNER_DRAWN
 | 
					#if wxUSE_OWNER_DRAWN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef WX_PRECOMP
 | 
					 | 
				
			||||||
    #include "wx/window.h"
 | 
					 | 
				
			||||||
    #include "wx/os2/private.h"
 | 
					 | 
				
			||||||
    #include "wx/font.h"
 | 
					 | 
				
			||||||
    #include "wx/bitmap.h"
 | 
					 | 
				
			||||||
    #include "wx/dcmemory.h"
 | 
					 | 
				
			||||||
    #include "wx/menu.h"
 | 
					 | 
				
			||||||
    #include "wx/utils.h"
 | 
					 | 
				
			||||||
    #include "wx/settings.h"
 | 
					 | 
				
			||||||
    #include "wx/menuitem.h"
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "wx/ownerdrw.h"
 | 
					#include "wx/ownerdrw.h"
 | 
				
			||||||
 | 
					#include "wx/os2/private.h"
 | 
				
			||||||
#include "wx/os2/dcclient.h"
 | 
					#include "wx/os2/dcclient.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// constants for base class
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int wxOwnerDrawnBase::ms_defaultMargin = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ============================================================================
 | 
					// ============================================================================
 | 
				
			||||||
// implementation of wxOwnerDrawn class
 | 
					// implementation of wxOwnerDrawn class
 | 
				
			||||||
// ============================================================================
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// ctor
 | 
					 | 
				
			||||||
// ----
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
wxOwnerDrawn::wxOwnerDrawn( const wxString& rsStr,
 | 
					 | 
				
			||||||
                            bool            bCheckable,
 | 
					 | 
				
			||||||
                            bool            WXUNUSED(bMenuItem) )
 | 
					 | 
				
			||||||
: m_strName(rsStr)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    m_bCheckable   = bCheckable;
 | 
					 | 
				
			||||||
    m_bOwnerDrawn  = false;
 | 
					 | 
				
			||||||
    m_nHeight      = 0;
 | 
					 | 
				
			||||||
    m_nMarginWidth = ms_nLastMarginWidth;
 | 
					 | 
				
			||||||
    if (wxNORMAL_FONT)
 | 
					 | 
				
			||||||
        m_font = *wxNORMAL_FONT;
 | 
					 | 
				
			||||||
} // end of wxOwnerDrawn::wxOwnerDrawn
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wxOwnerDrawn::~wxOwnerDrawn() { }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
size_t wxOwnerDrawn::ms_nDefaultMarginWidth = 15;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
size_t wxOwnerDrawn::ms_nLastMarginWidth = ms_nDefaultMarginWidth;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Drawing
 | 
					 | 
				
			||||||
// -------
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool wxOwnerDrawn::OnMeasureItem( size_t* pWidth,
 | 
					 | 
				
			||||||
                                  size_t* pHeight )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    wxMemoryDC vDC;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    wxString  sStr = wxStripMenuCodes(m_strName);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // If we have a valid accel string, then pad out
 | 
					 | 
				
			||||||
    // the menu string so that the menu and accel string are not
 | 
					 | 
				
			||||||
    // placed on top of each other.
 | 
					 | 
				
			||||||
    if (!m_strAccel.empty() )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        sStr.Pad(sStr.length()%8);
 | 
					 | 
				
			||||||
        sStr += m_strAccel;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    vDC.SetFont(GetFont());
 | 
					 | 
				
			||||||
    vDC.GetTextExtent( sStr
 | 
					 | 
				
			||||||
                      ,(wxCoord *)pWidth
 | 
					 | 
				
			||||||
                      ,(wxCoord *)pHeight
 | 
					 | 
				
			||||||
                     );
 | 
					 | 
				
			||||||
    if (!m_strAccel.empty())
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // Measure the accelerator string, and add its width to
 | 
					 | 
				
			||||||
        // the total item width, plus 16 (Accelerators are right justified,
 | 
					 | 
				
			||||||
        // with the right edge of the text rectangle 16 pixels left of
 | 
					 | 
				
			||||||
        // the right edge of the menu)
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        int                         nAccelWidth;
 | 
					 | 
				
			||||||
        int                         nAccelHeight;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        vDC.GetTextExtent( m_strAccel
 | 
					 | 
				
			||||||
                          ,&nAccelWidth
 | 
					 | 
				
			||||||
                          ,&nAccelHeight
 | 
					 | 
				
			||||||
                         );
 | 
					 | 
				
			||||||
        *pWidth += nAccelWidth;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Add space at the end of the menu for the submenu expansion arrow.
 | 
					 | 
				
			||||||
    // This will also allow offsetting the accel string from the right edge
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    *pWidth = (size_t)(*pWidth + GetDefaultMarginWidth() * 1.5);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // JACS: items still look too tightly packed, so adding 5 pixels.
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    (*pHeight) += 5;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Ray Gilbert's changes - Corrects the problem of a BMP
 | 
					 | 
				
			||||||
    // being placed next to text in a menu item, and the BMP does
 | 
					 | 
				
			||||||
    // not match the size expected by the system.  This will
 | 
					 | 
				
			||||||
    // resize the space so the BMP will fit.  Without this, BMPs
 | 
					 | 
				
			||||||
    // must be no larger or smaller than 16x16.
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    if (m_bmpChecked.Ok())
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // Is BMP height larger then text height?
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        size_t                      nAdjustedHeight = m_bmpChecked.GetHeight() +
 | 
					 | 
				
			||||||
                                                      wxSystemSettings::GetMetric(wxSYS_EDGE_Y);
 | 
					 | 
				
			||||||
        if (*pHeight < nAdjustedHeight)
 | 
					 | 
				
			||||||
            *pHeight = nAdjustedHeight;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // Does BMP encroach on default check menu position?
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        size_t                      nAdjustedWidth = m_bmpChecked.GetWidth() +
 | 
					 | 
				
			||||||
                                                     (wxSystemSettings::GetMetric(wxSYS_EDGE_X) * 2);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // Do we need to widen margin to fit BMP?
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        if ((size_t)GetMarginWidth() < nAdjustedWidth)
 | 
					 | 
				
			||||||
            SetMarginWidth(nAdjustedWidth);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // Add the size of the bitmap to our total size...
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        *pWidth += GetMarginWidth();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Add the size of the bitmap to our total size - even if we don't have
 | 
					 | 
				
			||||||
    // a bitmap we leave room for one...
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    *pWidth += GetMarginWidth();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Make sure that this item is at least as
 | 
					 | 
				
			||||||
    // tall as the user's system settings specify
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    const size_t heightStd = 6; // FIXME: get value from the system
 | 
					 | 
				
			||||||
    if ( *pHeight < heightStd )
 | 
					 | 
				
			||||||
      *pHeight = heightStd;
 | 
					 | 
				
			||||||
    m_nHeight = *pHeight;                // remember height for use in OnDrawItem
 | 
					 | 
				
			||||||
    return true;
 | 
					 | 
				
			||||||
} // end of wxOwnerDrawn::OnMeasureItem
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// draw the item
 | 
					// draw the item
 | 
				
			||||||
bool wxOwnerDrawn::OnDrawItem( wxDC& rDC,
 | 
					bool wxOwnerDrawn::OnDrawItem( wxDC& rDC,
 | 
				
			||||||
                               const wxRect& rRect,
 | 
					                               const wxRect& rRect,
 | 
				
			||||||
                               wxODAction eAction,
 | 
					                               wxODAction eAction,
 | 
				
			||||||
                               wxODStatus eStatus )
 | 
					                               wxODStatus eStatus )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // We do nothing on focus change
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    if (eAction == wxODFocusChanged )
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // Select the font and draw the text
 | 
					    // Select the font and draw the text
 | 
				
			||||||
@@ -183,6 +43,7 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC,
 | 
				
			|||||||
    CHARBUNDLE                      vCbnd;
 | 
					    CHARBUNDLE                      vCbnd;
 | 
				
			||||||
    wxPMDCImpl                      *impl = (wxPMDCImpl*) rDC.GetImpl();
 | 
					    wxPMDCImpl                      *impl = (wxPMDCImpl*) rDC.GetImpl();
 | 
				
			||||||
    HPS                             hPS= impl->GetHPS();
 | 
					    HPS                             hPS= impl->GetHPS();
 | 
				
			||||||
 | 
					    wxFont                          vFont;
 | 
				
			||||||
    wxColour                        vColBack;
 | 
					    wxColour                        vColBack;
 | 
				
			||||||
    wxColour                        vColText;
 | 
					    wxColour                        vColText;
 | 
				
			||||||
    COLORREF                        vRef;
 | 
					    COLORREF                        vRef;
 | 
				
			||||||
@@ -190,85 +51,14 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    memset(&vCbnd, 0, sizeof(CHARBUNDLE));
 | 
					    memset(&vCbnd, 0, sizeof(CHARBUNDLE));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    GetFontToUse(vFont);
 | 
				
			||||||
    // Use default font if no font set
 | 
					    GetColourToUse(eStatus, vColText, vColBack);
 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    if (m_font.Ok())
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        m_font.RealizeResource();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        ::GpiSetCharSet(hPS, LCID_DEFAULT);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Based on the status of the menu item, pick the right colors
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    if (eStatus & wxODSelected)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
 | 
					 | 
				
			||||||
                                         ,SYSCLR_MENUHILITEBGND
 | 
					 | 
				
			||||||
                                         ,0L
 | 
					 | 
				
			||||||
                                        );
 | 
					 | 
				
			||||||
        vColBack.Set( GetRValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetGValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetBValue(vRef)
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
        vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
 | 
					 | 
				
			||||||
                                         ,SYSCLR_MENUHILITE
 | 
					 | 
				
			||||||
                                         ,0L
 | 
					 | 
				
			||||||
                                        );
 | 
					 | 
				
			||||||
        vColText.Set( GetRValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetGValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetBValue(vRef)
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else if (eStatus & wxODDisabled)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
 | 
					 | 
				
			||||||
                                         ,SYSCLR_MENU // Light gray
 | 
					 | 
				
			||||||
                                         ,0L
 | 
					 | 
				
			||||||
                                        );
 | 
					 | 
				
			||||||
        vColBack.Set( GetRValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetGValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetBValue(vRef)
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
        vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
 | 
					 | 
				
			||||||
                                         ,SYSCLR_MENUDISABLEDTEXT // dark gray
 | 
					 | 
				
			||||||
                                         ,0L
 | 
					 | 
				
			||||||
                                        );
 | 
					 | 
				
			||||||
        vColText.Set( GetRValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetGValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetBValue(vRef)
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // Fall back to default colors if none explicitly specified
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        vRef = ::WinQuerySysColor( HWND_DESKTOP
 | 
					 | 
				
			||||||
                                  ,SYSCLR_MENU  // we are using gray for all our window backgrounds in wxWidgets
 | 
					 | 
				
			||||||
                                  ,0L
 | 
					 | 
				
			||||||
                                 );
 | 
					 | 
				
			||||||
        vColBack.Set( GetRValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetGValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetBValue(vRef)
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
        vRef = ::WinQuerySysColor( HWND_DESKTOP
 | 
					 | 
				
			||||||
                                  ,SYSCLR_WINDOWTEXT // Black
 | 
					 | 
				
			||||||
                                  ,0L
 | 
					 | 
				
			||||||
                                 );
 | 
					 | 
				
			||||||
        vColText.Set( GetRValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetGValue(vRef)
 | 
					 | 
				
			||||||
                     ,GetBValue(vRef)
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rDC.SetFont(vFont);
 | 
				
			||||||
    rDC.SetTextBackground(vColBack);
 | 
					    rDC.SetTextBackground(vColBack);
 | 
				
			||||||
    rDC.SetTextForeground(vColText);
 | 
					    rDC.SetTextForeground(vColText);
 | 
				
			||||||
    rDC.SetBackgroundMode(wxTRANSPARENT);
 | 
					    rDC.SetBackgroundMode(wxTRANSPARENT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vCbnd.lColor     = vColText.GetPixel();
 | 
					    vCbnd.lColor     = vColText.GetPixel();
 | 
				
			||||||
    vCbnd.lBackColor = vColBack.GetPixel();
 | 
					    vCbnd.lBackColor = vColBack.GetPixel();
 | 
				
			||||||
    ::GpiSetAttrs( hPS
 | 
					    ::GpiSetAttrs( hPS
 | 
				
			||||||
@@ -289,7 +79,7 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC,
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
    // Determine where to draw and leave space for a check-mark.
 | 
					    // Determine where to draw and leave space for a check-mark.
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    int                             nX = rRect.x + GetMarginWidth();
 | 
					    int nX = rRect.x + GetMarginWidth();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // Unfortunately, unlike Win32, PM has no owner drawn specific text
 | 
					    // Unfortunately, unlike Win32, PM has no owner drawn specific text
 | 
				
			||||||
@@ -301,34 +91,19 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC,
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // Display main text and accel text separately to align better
 | 
					    // Display main text
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    wxString sTgt = wxT("\t");
 | 
					    wxString sFullString = GetItemLabel(); // need to save the original text
 | 
				
			||||||
    wxString sFullString = m_strName; // need to save the original text
 | 
					 | 
				
			||||||
    wxString sAccel;
 | 
					 | 
				
			||||||
    int      nIndex;
 | 
					    int      nIndex;
 | 
				
			||||||
    size_t   nWidth;
 | 
					    size_t   nWidth;
 | 
				
			||||||
    size_t   nCharWidth;
 | 
					    size_t   nCharWidth;
 | 
				
			||||||
    size_t   nHeight;
 | 
					    size_t   nHeight;
 | 
				
			||||||
    bool     bFoundMnemonic = false;
 | 
					    bool     bFoundMnemonic = false;
 | 
				
			||||||
    bool     bFoundAccel = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Deal with the tab, extracting the Accel text
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    nIndex = sFullString.Find(sTgt);
 | 
					 | 
				
			||||||
    if (nIndex != -1)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        bFoundAccel = true;
 | 
					 | 
				
			||||||
        sAccel = sFullString.Mid(nIndex + 1);
 | 
					 | 
				
			||||||
        sFullString.Remove(nIndex);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // Deal with the mnemonic character
 | 
					    // Deal with the mnemonic character
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    sTgt = wxT("~");
 | 
					    nIndex = sFullString.Find(wxT("~"));
 | 
				
			||||||
    nIndex = sFullString.Find(sTgt);
 | 
					 | 
				
			||||||
    if (nIndex != -1)
 | 
					    if (nIndex != -1)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        wxString sTmp = sFullString;
 | 
					        wxString sTmp = sFullString;
 | 
				
			||||||
@@ -372,124 +147,6 @@ bool wxOwnerDrawn::OnDrawItem( wxDC& rDC,
 | 
				
			|||||||
        ::GpiLine(hPS, &vPntEnd);
 | 
					        ::GpiLine(hPS, &vPntEnd);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Now draw the accel text
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    if (bFoundAccel)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        size_t                      nWidth;
 | 
					 | 
				
			||||||
        size_t                      nHeight;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        rDC.GetTextExtent( sAccel
 | 
					 | 
				
			||||||
                          ,(wxCoord *)&nWidth
 | 
					 | 
				
			||||||
                          ,(wxCoord *)&nHeight
 | 
					 | 
				
			||||||
                         );
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // Back off the starting position from the right edge
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        vPntStart.x = rRect.width - (nWidth + 7);
 | 
					 | 
				
			||||||
        vPntStart.y = rRect.y + 4;
 | 
					 | 
				
			||||||
        ::GpiCharStringAt( impl->GetHPS()
 | 
					 | 
				
			||||||
                          ,&vPntStart
 | 
					 | 
				
			||||||
                          ,sAccel.length()
 | 
					 | 
				
			||||||
                          ,sAccel.char_str()
 | 
					 | 
				
			||||||
                         );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Draw the bitmap
 | 
					 | 
				
			||||||
    // ---------------
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    if (IsCheckable() && !m_bmpChecked.Ok())
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if (eStatus & wxODChecked)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            RECTL                   vRect;
 | 
					 | 
				
			||||||
            HBITMAP                 hBmpCheck = ::WinGetSysBitmap(HWND_DESKTOP, SBMP_MENUCHECK);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            vRect.xLeft   = rRect.x;
 | 
					 | 
				
			||||||
            vRect.xRight  = rRect.x + GetMarginWidth();
 | 
					 | 
				
			||||||
            vRect.yBottom = rRect.y;
 | 
					 | 
				
			||||||
            vRect.yTop    = rRect.y + m_nHeight - 3;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            ::WinDrawBitmap( hPS             // PS for this menuitem
 | 
					 | 
				
			||||||
                            ,hBmpCheck       // system checkmark
 | 
					 | 
				
			||||||
                            ,NULL            // draw the whole bitmap
 | 
					 | 
				
			||||||
                            ,(PPOINTL)&vRect // destination -- bottom left corner of the menuitem area
 | 
					 | 
				
			||||||
                            ,0L              // ignored
 | 
					 | 
				
			||||||
                            ,0L              // draw a bitmap
 | 
					 | 
				
			||||||
                            ,DBM_NORMAL      // draw normal size
 | 
					 | 
				
			||||||
                           );
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        // For uncheckable item we use only the 'checked' bitmap
 | 
					 | 
				
			||||||
        //
 | 
					 | 
				
			||||||
        wxBitmap vBmp(GetBitmap(IsCheckable() ? ((eStatus & wxODChecked) != 0) : TRUE));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (vBmp.Ok())
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            wxMemoryDC              vDCMem(&rDC);
 | 
					 | 
				
			||||||
            wxMemoryDC*             pOldDC = (wxMemoryDC*)vBmp.GetSelectedInto();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if(pOldDC != NULL)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                vBmp.SetSelectedInto(NULL);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            vDCMem.SelectObject(vBmp);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //
 | 
					 | 
				
			||||||
            // Center bitmap
 | 
					 | 
				
			||||||
            //
 | 
					 | 
				
			||||||
            int                     nBmpWidth = vBmp.GetWidth();
 | 
					 | 
				
			||||||
            int                     nBmpHeight = vBmp.GetHeight();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //
 | 
					 | 
				
			||||||
            // There should be enough space!
 | 
					 | 
				
			||||||
            //
 | 
					 | 
				
			||||||
            wxASSERT((nBmpWidth <= rRect.width) && (nBmpHeight <= rRect.height));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            int                     nHeightDiff = m_nHeight - nBmpHeight;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            rDC.Blit( rRect.x + (GetMarginWidth() - nBmpWidth) / 2
 | 
					 | 
				
			||||||
                     ,rRect.y + nHeightDiff / 2
 | 
					 | 
				
			||||||
                     ,nBmpWidth
 | 
					 | 
				
			||||||
                     ,nBmpHeight
 | 
					 | 
				
			||||||
                     ,&vDCMem
 | 
					 | 
				
			||||||
                     ,0
 | 
					 | 
				
			||||||
                     ,0
 | 
					 | 
				
			||||||
                     ,wxCOPY
 | 
					 | 
				
			||||||
                     ,true
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (eStatus & wxODSelected)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                POINTL              vPnt1 = {rRect.x + 1, rRect.y + 3}; // Leave a little background border
 | 
					 | 
				
			||||||
                POINTL              vPnt2 = {rRect.x + GetMarginWidth(), rRect.y + m_nHeight - 3};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                LINEBUNDLE          vLine;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                vLine.lColor = vColBack.GetPixel();
 | 
					 | 
				
			||||||
                ::GpiSetAttrs( hPS
 | 
					 | 
				
			||||||
                              ,PRIM_LINE
 | 
					 | 
				
			||||||
                              ,LBB_COLOR
 | 
					 | 
				
			||||||
                              ,0
 | 
					 | 
				
			||||||
                              ,&vLine
 | 
					 | 
				
			||||||
                             );
 | 
					 | 
				
			||||||
                ::GpiMove(hPS, &vPnt1);
 | 
					 | 
				
			||||||
                ::GpiBox( hPS
 | 
					 | 
				
			||||||
                         ,DRO_OUTLINE
 | 
					 | 
				
			||||||
                         ,&vPnt2
 | 
					 | 
				
			||||||
                         ,0L
 | 
					 | 
				
			||||||
                         ,0L
 | 
					 | 
				
			||||||
                        );
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            vBmp.SetSelectedInto(NULL);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
} // end of wxOwnerDrawn::OnDrawItem
 | 
					} // end of wxOwnerDrawn::OnDrawItem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user