From: Vadim Zeitlin Date: Sat, 5 May 2007 22:03:27 +0000 (+0000) Subject: extracted wxAcceleratorEntry code from menucmn.cpp in a separate file (this globally... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/c36d477458df6ffe02aef30fc31efb1ae2522a49 extracted wxAcceleratorEntry code from menucmn.cpp in a separate file (this globally makes sense and also fixes link when wxUSE_MENUS==0) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45855 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/Makefile.in b/Makefile.in index d62c52a268..16e8ed3a61 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3634,6 +3634,7 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS = \ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS = \ $(__LOWLEVEL_SRC_OBJECTS) \ $(__GUI_SRC_OBJECTS) \ + monodll_accelcmn.o \ monodll_accesscmn.o \ monodll_anidecod.o \ monodll_appcmn.o \ @@ -3812,6 +3813,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS = \ monodll_metal.o \ monodll_mono.o \ monodll_win32.o \ + monodll_accelcmn.o \ monodll_accesscmn.o \ monodll_anidecod.o \ monodll_appcmn.o \ @@ -5442,6 +5444,7 @@ COND_USE_GUI_1___MONOLIB_GUI_SRC_OBJECTS_1 = \ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_1 = \ $(__LOWLEVEL_SRC_OBJECTS_2) \ $(__GUI_SRC_OBJECTS_1) \ + monolib_accelcmn.o \ monolib_accesscmn.o \ monolib_anidecod.o \ monolib_appcmn.o \ @@ -5620,6 +5623,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_1 = \ monolib_metal.o \ monolib_mono.o \ monolib_win32.o \ + monolib_accelcmn.o \ monolib_accesscmn.o \ monolib_anidecod.o \ monolib_appcmn.o \ @@ -7484,6 +7488,7 @@ COND_USE_SOSYMLINKS_1___coredll___so_symlinks_uninst_cmd = rm -f \ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_2 = \ $(__LOWLEVEL_SRC_OBJECTS_4) \ $(__GUI_SRC_OBJECTS_2) \ + coredll_accelcmn.o \ coredll_accesscmn.o \ coredll_anidecod.o \ coredll_appcmn.o \ @@ -7662,6 +7667,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_2 = \ coredll_metal.o \ coredll_mono.o \ coredll_win32.o \ + coredll_accelcmn.o \ coredll_accesscmn.o \ coredll_anidecod.o \ coredll_appcmn.o \ @@ -8946,6 +8952,7 @@ COND_MONOLITHIC_0_SHARED_0_USE_GUI_1___corelib___depname = \ COND_USE_GUI_1_WXUNIV_0___CORE_SRC_OBJECTS_3 = \ $(__LOWLEVEL_SRC_OBJECTS_6) \ $(__GUI_SRC_OBJECTS_3) \ + corelib_accelcmn.o \ corelib_accesscmn.o \ corelib_anidecod.o \ corelib_appcmn.o \ @@ -9124,6 +9131,7 @@ COND_USE_GUI_1_WXUNIV_1___CORE_SRC_OBJECTS_3 = \ corelib_metal.o \ corelib_mono.o \ corelib_win32.o \ + corelib_accelcmn.o \ corelib_accesscmn.o \ corelib_anidecod.o \ corelib_appcmn.o \ @@ -16818,6 +16826,9 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP) @COND_USE_GUI_1_WXUNIV_1@monodll_mdig.o: $(srcdir)/src/generic/mdig.cpp $(MONODLL_ODEP) @COND_USE_GUI_1_WXUNIV_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp +@COND_USE_GUI_1@monodll_accelcmn.o: $(srcdir)/src/common/accelcmn.cpp $(MONODLL_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/accelcmn.cpp + @COND_USE_GUI_1@monodll_accesscmn.o: $(srcdir)/src/common/accesscmn.cpp $(MONODLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/accesscmn.cpp @@ -21015,6 +21026,9 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1_WXUNIV_1@monolib_mdig.o: $(srcdir)/src/generic/mdig.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1_WXUNIV_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp +@COND_USE_GUI_1@monolib_accelcmn.o: $(srcdir)/src/common/accelcmn.cpp $(MONOLIB_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/accelcmn.cpp + @COND_USE_GUI_1@monolib_accesscmn.o: $(srcdir)/src/common/accesscmn.cpp $(MONOLIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/accesscmn.cpp @@ -25593,6 +25607,9 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP) @COND_USE_GUI_1_WXUNIV_1@coredll_mdig.o: $(srcdir)/src/generic/mdig.cpp $(COREDLL_ODEP) @COND_USE_GUI_1_WXUNIV_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp +@COND_USE_GUI_1@coredll_accelcmn.o: $(srcdir)/src/common/accelcmn.cpp $(COREDLL_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/accelcmn.cpp + @COND_USE_GUI_1@coredll_accesscmn.o: $(srcdir)/src/common/accesscmn.cpp $(COREDLL_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/accesscmn.cpp @@ -28557,6 +28574,9 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP) @COND_USE_GUI_1_WXUNIV_1@corelib_mdig.o: $(srcdir)/src/generic/mdig.cpp $(CORELIB_ODEP) @COND_USE_GUI_1_WXUNIV_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp +@COND_USE_GUI_1@corelib_accelcmn.o: $(srcdir)/src/common/accelcmn.cpp $(CORELIB_ODEP) +@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/accelcmn.cpp + @COND_USE_GUI_1@corelib_accesscmn.o: $(srcdir)/src/common/accesscmn.cpp $(CORELIB_ODEP) @COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/accesscmn.cpp diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 315dc51df1..2e9633e2d1 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -580,6 +580,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! + src/common/accelcmn.cpp src/common/accesscmn.cpp src/common/anidecod.cpp src/common/appcmn.cpp diff --git a/build/msw/makefile.bcc b/build/msw/makefile.bcc index 1933110cd2..355c4ae86e 100644 --- a/build/msw/makefile.bcc +++ b/build/msw/makefile.bcc @@ -1578,6 +1578,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_checklst.obj \ $(OBJS)\monodll_fdrepdlg.obj \ $(OBJS)\monodll_fontdlg.obj \ + $(OBJS)\monodll_accelcmn.obj \ $(OBJS)\monodll_accesscmn.obj \ $(OBJS)\monodll_anidecod.obj \ $(OBJS)\monodll_appcmn.obj \ @@ -1806,6 +1807,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_metal.obj \ $(OBJS)\monodll_mono.obj \ $(OBJS)\monodll_win32.obj \ + $(OBJS)\monodll_accelcmn.obj \ $(OBJS)\monodll_accesscmn.obj \ $(OBJS)\monodll_anidecod.obj \ $(OBJS)\monodll_appcmn.obj \ @@ -2210,6 +2212,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_checklst.obj \ $(OBJS)\monolib_fdrepdlg.obj \ $(OBJS)\monolib_fontdlg.obj \ + $(OBJS)\monolib_accelcmn.obj \ $(OBJS)\monolib_accesscmn.obj \ $(OBJS)\monolib_anidecod.obj \ $(OBJS)\monolib_appcmn.obj \ @@ -2438,6 +2441,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_metal.obj \ $(OBJS)\monolib_mono.obj \ $(OBJS)\monolib_win32.obj \ + $(OBJS)\monolib_accelcmn.obj \ $(OBJS)\monolib_accesscmn.obj \ $(OBJS)\monolib_anidecod.obj \ $(OBJS)\monolib_appcmn.obj \ @@ -2756,6 +2760,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_checklst.obj \ $(OBJS)\coredll_fdrepdlg.obj \ $(OBJS)\coredll_fontdlg.obj \ + $(OBJS)\coredll_accelcmn.obj \ $(OBJS)\coredll_accesscmn.obj \ $(OBJS)\coredll_anidecod.obj \ $(OBJS)\coredll_appcmn.obj \ @@ -2984,6 +2989,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_metal.obj \ $(OBJS)\coredll_mono.obj \ $(OBJS)\coredll_win32.obj \ + $(OBJS)\coredll_accelcmn.obj \ $(OBJS)\coredll_accesscmn.obj \ $(OBJS)\coredll_anidecod.obj \ $(OBJS)\coredll_appcmn.obj \ @@ -3213,6 +3219,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_checklst.obj \ $(OBJS)\corelib_fdrepdlg.obj \ $(OBJS)\corelib_fontdlg.obj \ + $(OBJS)\corelib_accelcmn.obj \ $(OBJS)\corelib_accesscmn.obj \ $(OBJS)\corelib_anidecod.obj \ $(OBJS)\corelib_appcmn.obj \ @@ -3441,6 +3448,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_metal.obj \ $(OBJS)\corelib_mono.obj \ $(OBJS)\corelib_win32.obj \ + $(OBJS)\corelib_accelcmn.obj \ $(OBJS)\corelib_accesscmn.obj \ $(OBJS)\corelib_anidecod.obj \ $(OBJS)\corelib_appcmn.obj \ @@ -6470,6 +6478,11 @@ $(OBJS)\monodll_fdrepdlg.obj: ..\..\src\generic\fdrepdlg.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monodll_accelcmn.obj: ..\..\src\common\accelcmn.cpp + $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monodll_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) $** @@ -8531,6 +8544,11 @@ $(OBJS)\monolib_fdrepdlg.obj: ..\..\src\generic\fdrepdlg.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monolib_accelcmn.obj: ..\..\src\common\accelcmn.cpp + $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monolib_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) $** @@ -10631,6 +10649,11 @@ $(OBJS)\coredll_fdrepdlg.obj: ..\..\src\generic\fdrepdlg.cpp $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\coredll_accelcmn.obj: ..\..\src\common\accelcmn.cpp + $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\coredll_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) $** @@ -11921,6 +11944,11 @@ $(OBJS)\corelib_fdrepdlg.obj: ..\..\src\generic\fdrepdlg.cpp $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\corelib_accelcmn.obj: ..\..\src\common\accelcmn.cpp + $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\corelib_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) $** diff --git a/build/msw/makefile.gcc b/build/msw/makefile.gcc index 3b467dc855..b84daa5555 100644 --- a/build/msw/makefile.gcc +++ b/build/msw/makefile.gcc @@ -1588,6 +1588,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_checklst.o \ $(OBJS)\monodll_fdrepdlg.o \ $(OBJS)\monodll_fontdlg.o \ + $(OBJS)\monodll_accelcmn.o \ $(OBJS)\monodll_accesscmn.o \ $(OBJS)\monodll_anidecod.o \ $(OBJS)\monodll_appcmn.o \ @@ -1818,6 +1819,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_metal.o \ $(OBJS)\monodll_mono.o \ $(OBJS)\monodll_win32.o \ + $(OBJS)\monodll_accelcmn.o \ $(OBJS)\monodll_accesscmn.o \ $(OBJS)\monodll_anidecod.o \ $(OBJS)\monodll_appcmn.o \ @@ -2226,6 +2228,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_checklst.o \ $(OBJS)\monolib_fdrepdlg.o \ $(OBJS)\monolib_fontdlg.o \ + $(OBJS)\monolib_accelcmn.o \ $(OBJS)\monolib_accesscmn.o \ $(OBJS)\monolib_anidecod.o \ $(OBJS)\monolib_appcmn.o \ @@ -2456,6 +2459,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_metal.o \ $(OBJS)\monolib_mono.o \ $(OBJS)\monolib_win32.o \ + $(OBJS)\monolib_accelcmn.o \ $(OBJS)\monolib_accesscmn.o \ $(OBJS)\monolib_anidecod.o \ $(OBJS)\monolib_appcmn.o \ @@ -2788,6 +2792,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_checklst.o \ $(OBJS)\coredll_fdrepdlg.o \ $(OBJS)\coredll_fontdlg.o \ + $(OBJS)\coredll_accelcmn.o \ $(OBJS)\coredll_accesscmn.o \ $(OBJS)\coredll_anidecod.o \ $(OBJS)\coredll_appcmn.o \ @@ -3018,6 +3023,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_metal.o \ $(OBJS)\coredll_mono.o \ $(OBJS)\coredll_win32.o \ + $(OBJS)\coredll_accelcmn.o \ $(OBJS)\coredll_accesscmn.o \ $(OBJS)\coredll_anidecod.o \ $(OBJS)\coredll_appcmn.o \ @@ -3253,6 +3259,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_checklst.o \ $(OBJS)\corelib_fdrepdlg.o \ $(OBJS)\corelib_fontdlg.o \ + $(OBJS)\corelib_accelcmn.o \ $(OBJS)\corelib_accesscmn.o \ $(OBJS)\corelib_anidecod.o \ $(OBJS)\corelib_appcmn.o \ @@ -3483,6 +3490,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_metal.o \ $(OBJS)\corelib_mono.o \ $(OBJS)\corelib_win32.o \ + $(OBJS)\corelib_accelcmn.o \ $(OBJS)\corelib_accesscmn.o \ $(OBJS)\corelib_anidecod.o \ $(OBJS)\corelib_appcmn.o \ @@ -6731,6 +6739,11 @@ $(OBJS)\monodll_fdrepdlg.o: ../../src/generic/fdrepdlg.cpp endif endif +ifeq ($(USE_GUI),1) +$(OBJS)\monodll_accelcmn.o: ../../src/common/accelcmn.cpp + $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\monodll_accesscmn.o: ../../src/common/accesscmn.cpp $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $< @@ -8892,6 +8905,11 @@ $(OBJS)\monolib_fdrepdlg.o: ../../src/generic/fdrepdlg.cpp endif endif +ifeq ($(USE_GUI),1) +$(OBJS)\monolib_accelcmn.o: ../../src/common/accelcmn.cpp + $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\monolib_accesscmn.o: ../../src/common/accesscmn.cpp $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $< @@ -11092,6 +11110,11 @@ $(OBJS)\coredll_fdrepdlg.o: ../../src/generic/fdrepdlg.cpp endif endif +ifeq ($(USE_GUI),1) +$(OBJS)\coredll_accelcmn.o: ../../src/common/accelcmn.cpp + $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\coredll_accesscmn.o: ../../src/common/accesscmn.cpp $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $< @@ -12482,6 +12505,11 @@ $(OBJS)\corelib_fdrepdlg.o: ../../src/generic/fdrepdlg.cpp endif endif +ifeq ($(USE_GUI),1) +$(OBJS)\corelib_accelcmn.o: ../../src/common/accelcmn.cpp + $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $< +endif + ifeq ($(USE_GUI),1) $(OBJS)\corelib_accesscmn.o: ../../src/common/accesscmn.cpp $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $< diff --git a/build/msw/makefile.vc b/build/msw/makefile.vc index 2b5b9633ee..59b1e1aae9 100644 --- a/build/msw/makefile.vc +++ b/build/msw/makefile.vc @@ -1756,6 +1756,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_checklst.obj \ $(OBJS)\monodll_fdrepdlg.obj \ $(OBJS)\monodll_fontdlg.obj \ + $(OBJS)\monodll_accelcmn.obj \ $(OBJS)\monodll_accesscmn.obj \ $(OBJS)\monodll_anidecod.obj \ $(OBJS)\monodll_appcmn.obj \ @@ -1984,6 +1985,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \ $(OBJS)\monodll_metal.obj \ $(OBJS)\monodll_mono.obj \ $(OBJS)\monodll_win32.obj \ + $(OBJS)\monodll_accelcmn.obj \ $(OBJS)\monodll_accesscmn.obj \ $(OBJS)\monodll_anidecod.obj \ $(OBJS)\monodll_appcmn.obj \ @@ -2394,6 +2396,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_checklst.obj \ $(OBJS)\monolib_fdrepdlg.obj \ $(OBJS)\monolib_fontdlg.obj \ + $(OBJS)\monolib_accelcmn.obj \ $(OBJS)\monolib_accesscmn.obj \ $(OBJS)\monolib_anidecod.obj \ $(OBJS)\monolib_appcmn.obj \ @@ -2622,6 +2625,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \ $(OBJS)\monolib_metal.obj \ $(OBJS)\monolib_mono.obj \ $(OBJS)\monolib_win32.obj \ + $(OBJS)\monolib_accelcmn.obj \ $(OBJS)\monolib_accesscmn.obj \ $(OBJS)\monolib_anidecod.obj \ $(OBJS)\monolib_appcmn.obj \ @@ -2970,6 +2974,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_checklst.obj \ $(OBJS)\coredll_fdrepdlg.obj \ $(OBJS)\coredll_fontdlg.obj \ + $(OBJS)\coredll_accelcmn.obj \ $(OBJS)\coredll_accesscmn.obj \ $(OBJS)\coredll_anidecod.obj \ $(OBJS)\coredll_appcmn.obj \ @@ -3198,6 +3203,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \ $(OBJS)\coredll_metal.obj \ $(OBJS)\coredll_mono.obj \ $(OBJS)\coredll_win32.obj \ + $(OBJS)\coredll_accelcmn.obj \ $(OBJS)\coredll_accesscmn.obj \ $(OBJS)\coredll_anidecod.obj \ $(OBJS)\coredll_appcmn.obj \ @@ -3433,6 +3439,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_checklst.obj \ $(OBJS)\corelib_fdrepdlg.obj \ $(OBJS)\corelib_fontdlg.obj \ + $(OBJS)\corelib_accelcmn.obj \ $(OBJS)\corelib_accesscmn.obj \ $(OBJS)\corelib_anidecod.obj \ $(OBJS)\corelib_appcmn.obj \ @@ -3661,6 +3668,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \ $(OBJS)\corelib_metal.obj \ $(OBJS)\corelib_mono.obj \ $(OBJS)\corelib_win32.obj \ + $(OBJS)\corelib_accelcmn.obj \ $(OBJS)\corelib_accesscmn.obj \ $(OBJS)\corelib_anidecod.obj \ $(OBJS)\corelib_appcmn.obj \ @@ -4516,7 +4524,7 @@ clean: -if exist $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl.lib del $(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_gl.lib cd ..\..\samples $(MAKE) -f makefile.vc $(MAKEARGS) clean - cd $(MAKEDIR) + cd "$(MAKEDIR)" setup_h: $(SETUPHDIR)\wx ..\..\include\wx\$(__SETUP_H_SUBDIR_FILENAMES)\setup.h $(SETUPHDIR)\wx\setup.h $(SETUPHDIR)\wx\msw\rcdefs.h @@ -4869,7 +4877,7 @@ wxgl: $(____wxgl_namedll_DEP) $(____wxgl_namelib_DEP) sub_samples: cd ..\..\samples $(MAKE) -f makefile.vc $(MAKEARGS) all - cd $(MAKEDIR) + cd "$(MAKEDIR)" $(LIBDIRNAME): if not exist $(LIBDIRNAME) mkdir $(LIBDIRNAME) @@ -6822,6 +6830,11 @@ $(OBJS)\monodll_fdrepdlg.obj: ..\..\src\generic\fdrepdlg.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monodll_accelcmn.obj: ..\..\src\common\accelcmn.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monodll_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) $** @@ -8883,6 +8896,11 @@ $(OBJS)\monolib_fdrepdlg.obj: ..\..\src\generic\fdrepdlg.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\monolib_accelcmn.obj: ..\..\src\common\accelcmn.cpp + $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\monolib_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) $** @@ -10983,6 +11001,11 @@ $(OBJS)\coredll_fdrepdlg.obj: ..\..\src\generic\fdrepdlg.cpp $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\coredll_accelcmn.obj: ..\..\src\common\accelcmn.cpp + $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\coredll_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) $** @@ -12273,6 +12296,11 @@ $(OBJS)\corelib_fdrepdlg.obj: ..\..\src\generic\fdrepdlg.cpp $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $** !endif +!if "$(USE_GUI)" == "1" +$(OBJS)\corelib_accelcmn.obj: ..\..\src\common\accelcmn.cpp + $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $** +!endif + !if "$(USE_GUI)" == "1" $(OBJS)\corelib_accesscmn.obj: ..\..\src\common\accesscmn.cpp $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) $** diff --git a/build/msw/makefile.wat b/build/msw/makefile.wat index eb760492fb..895e70d1f1 100644 --- a/build/msw/makefile.wat +++ b/build/msw/makefile.wat @@ -309,6 +309,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = & $(OBJS)\monodll_checklst.obj & $(OBJS)\monodll_fdrepdlg.obj & $(OBJS)\monodll_fontdlg.obj & + $(OBJS)\monodll_accelcmn.obj & $(OBJS)\monodll_accesscmn.obj & $(OBJS)\monodll_anidecod.obj & $(OBJS)\monodll_appcmn.obj & @@ -539,6 +540,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = & $(OBJS)\monodll_metal.obj & $(OBJS)\monodll_mono.obj & $(OBJS)\monodll_win32.obj & + $(OBJS)\monodll_accelcmn.obj & $(OBJS)\monodll_accesscmn.obj & $(OBJS)\monodll_anidecod.obj & $(OBJS)\monodll_appcmn.obj & @@ -952,6 +954,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = & $(OBJS)\monolib_checklst.obj & $(OBJS)\monolib_fdrepdlg.obj & $(OBJS)\monolib_fontdlg.obj & + $(OBJS)\monolib_accelcmn.obj & $(OBJS)\monolib_accesscmn.obj & $(OBJS)\monolib_anidecod.obj & $(OBJS)\monolib_appcmn.obj & @@ -1182,6 +1185,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = & $(OBJS)\monolib_metal.obj & $(OBJS)\monolib_mono.obj & $(OBJS)\monolib_win32.obj & + $(OBJS)\monolib_accelcmn.obj & $(OBJS)\monolib_accesscmn.obj & $(OBJS)\monolib_anidecod.obj & $(OBJS)\monolib_appcmn.obj & @@ -1525,6 +1529,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = & $(OBJS)\coredll_checklst.obj & $(OBJS)\coredll_fdrepdlg.obj & $(OBJS)\coredll_fontdlg.obj & + $(OBJS)\coredll_accelcmn.obj & $(OBJS)\coredll_accesscmn.obj & $(OBJS)\coredll_anidecod.obj & $(OBJS)\coredll_appcmn.obj & @@ -1755,6 +1760,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = & $(OBJS)\coredll_metal.obj & $(OBJS)\coredll_mono.obj & $(OBJS)\coredll_win32.obj & + $(OBJS)\coredll_accelcmn.obj & $(OBJS)\coredll_accesscmn.obj & $(OBJS)\coredll_anidecod.obj & $(OBJS)\coredll_appcmn.obj & @@ -1992,6 +1998,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = & $(OBJS)\corelib_checklst.obj & $(OBJS)\corelib_fdrepdlg.obj & $(OBJS)\corelib_fontdlg.obj & + $(OBJS)\corelib_accelcmn.obj & $(OBJS)\corelib_accesscmn.obj & $(OBJS)\corelib_anidecod.obj & $(OBJS)\corelib_appcmn.obj & @@ -2222,6 +2229,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = & $(OBJS)\corelib_metal.obj & $(OBJS)\corelib_mono.obj & $(OBJS)\corelib_win32.obj & + $(OBJS)\corelib_accelcmn.obj & $(OBJS)\corelib_accesscmn.obj & $(OBJS)\corelib_anidecod.obj & $(OBJS)\corelib_appcmn.obj & @@ -7003,6 +7011,11 @@ $(OBJS)\monodll_fdrepdlg.obj : .AUTODEPEND ..\..\src\generic\fdrepdlg.cpp !endif !endif +!ifeq USE_GUI 1 +$(OBJS)\monodll_accelcmn.obj : .AUTODEPEND ..\..\src\common\accelcmn.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\monodll_accesscmn.obj : .AUTODEPEND ..\..\src\common\accesscmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $< @@ -9164,6 +9177,11 @@ $(OBJS)\monolib_fdrepdlg.obj : .AUTODEPEND ..\..\src\generic\fdrepdlg.cpp !endif !endif +!ifeq USE_GUI 1 +$(OBJS)\monolib_accelcmn.obj : .AUTODEPEND ..\..\src\common\accelcmn.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\monolib_accesscmn.obj : .AUTODEPEND ..\..\src\common\accesscmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $< @@ -11364,6 +11382,11 @@ $(OBJS)\coredll_fdrepdlg.obj : .AUTODEPEND ..\..\src\generic\fdrepdlg.cpp !endif !endif +!ifeq USE_GUI 1 +$(OBJS)\coredll_accelcmn.obj : .AUTODEPEND ..\..\src\common\accelcmn.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\coredll_accesscmn.obj : .AUTODEPEND ..\..\src\common\accesscmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $< @@ -12754,6 +12777,11 @@ $(OBJS)\corelib_fdrepdlg.obj : .AUTODEPEND ..\..\src\generic\fdrepdlg.cpp !endif !endif +!ifeq USE_GUI 1 +$(OBJS)\corelib_accelcmn.obj : .AUTODEPEND ..\..\src\common\accelcmn.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $< +!endif + !ifeq USE_GUI 1 $(OBJS)\corelib_accesscmn.obj : .AUTODEPEND ..\..\src\common\accesscmn.cpp $(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $< diff --git a/build/msw/wx_core.dsp b/build/msw/wx_core.dsp index 104d4d6023..8d496b4024 100644 --- a/build/msw/wx_core.dsp +++ b/build/msw/wx_core.dsp @@ -452,6 +452,10 @@ LIB32=link.exe -lib # PROP Default_Filter "" # Begin Source File +SOURCE=..\..\src\common\accelcmn.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\common\accesscmn.cpp # End Source File # Begin Source File diff --git a/src/common/accelcmn.cpp b/src/common/accelcmn.cpp new file mode 100644 index 0000000000..a038c58d20 --- /dev/null +++ b/src/common/accelcmn.cpp @@ -0,0 +1,347 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: src/common/accelcmn.cpp +// Purpose: implementation of platform-independent wxAcceleratorEntry parts +// Author: Vadim Zeitlin +// Created: 2007-05-05 +// RCS-ID: $Id$ +// Copyright: (c) 2007 Vadim Zeitlin +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_ACCEL + +#ifndef WX_PRECOMP + #include "wx/string.h" + #include "wx/accel.h" +#endif //WX_PRECOMP + +// ============================================================================ +// wxAcceleratorEntry implementation +// ============================================================================ + +static const struct wxKeyName +{ + wxKeyCode code; + const wxChar *name; +} wxKeyNames[] = +{ + { WXK_DELETE, wxTRANSLATE("DEL") }, + { WXK_DELETE, wxTRANSLATE("DELETE") }, + { WXK_BACK, wxTRANSLATE("BACK") }, + { WXK_INSERT, wxTRANSLATE("INS") }, + { WXK_INSERT, wxTRANSLATE("INSERT") }, + { WXK_RETURN, wxTRANSLATE("ENTER") }, + { WXK_RETURN, wxTRANSLATE("RETURN") }, + { WXK_PAGEUP, wxTRANSLATE("PGUP") }, + { WXK_PAGEDOWN, wxTRANSLATE("PGDN") }, + { WXK_LEFT, wxTRANSLATE("LEFT") }, + { WXK_RIGHT, wxTRANSLATE("RIGHT") }, + { WXK_UP, wxTRANSLATE("UP") }, + { WXK_DOWN, wxTRANSLATE("DOWN") }, + { WXK_HOME, wxTRANSLATE("HOME") }, + { WXK_END, wxTRANSLATE("END") }, + { WXK_SPACE, wxTRANSLATE("SPACE") }, + { WXK_TAB, wxTRANSLATE("TAB") }, + { WXK_ESCAPE, wxTRANSLATE("ESC") }, + { WXK_ESCAPE, wxTRANSLATE("ESCAPE") }, + { WXK_CANCEL, wxTRANSLATE("CANCEL") }, + { WXK_CLEAR, wxTRANSLATE("CLEAR") }, + { WXK_MENU, wxTRANSLATE("MENU") }, + { WXK_PAUSE, wxTRANSLATE("PAUSE") }, + { WXK_CAPITAL, wxTRANSLATE("CAPITAL") }, + { WXK_SELECT, wxTRANSLATE("SELECT") }, + { WXK_PRINT, wxTRANSLATE("PRINT") }, + { WXK_EXECUTE, wxTRANSLATE("EXECUTE") }, + { WXK_SNAPSHOT, wxTRANSLATE("SNAPSHOT") }, + { WXK_HELP, wxTRANSLATE("HELP") }, + { WXK_ADD, wxTRANSLATE("ADD") }, + { WXK_SEPARATOR, wxTRANSLATE("SEPARATOR") }, + { WXK_SUBTRACT, wxTRANSLATE("SUBTRACT") }, + { WXK_DECIMAL, wxTRANSLATE("DECIMAL") }, + { WXK_DIVIDE, wxTRANSLATE("DIVIDE") }, + { WXK_NUMLOCK, wxTRANSLATE("NUM_LOCK") }, + { WXK_SCROLL, wxTRANSLATE("SCROLL_LOCK") }, + { WXK_PAGEUP, wxTRANSLATE("PAGEUP") }, + { WXK_PAGEDOWN, wxTRANSLATE("PAGEDOWN") }, + { WXK_NUMPAD_SPACE, wxTRANSLATE("KP_SPACE") }, + { WXK_NUMPAD_TAB, wxTRANSLATE("KP_TAB") }, + { WXK_NUMPAD_ENTER, wxTRANSLATE("KP_ENTER") }, + { WXK_NUMPAD_HOME, wxTRANSLATE("KP_HOME") }, + { WXK_NUMPAD_LEFT, wxTRANSLATE("KP_LEFT") }, + { WXK_NUMPAD_UP, wxTRANSLATE("KP_UP") }, + { WXK_NUMPAD_RIGHT, wxTRANSLATE("KP_RIGHT") }, + { WXK_NUMPAD_DOWN, wxTRANSLATE("KP_DOWN") }, + { WXK_NUMPAD_PAGEUP, wxTRANSLATE("KP_PRIOR") }, + { WXK_NUMPAD_PAGEUP, wxTRANSLATE("KP_PAGEUP") }, + { WXK_NUMPAD_PAGEDOWN, wxTRANSLATE("KP_NEXT") }, + { WXK_NUMPAD_PAGEDOWN, wxTRANSLATE("KP_PAGEDOWN") }, + { WXK_NUMPAD_END, wxTRANSLATE("KP_END") }, + { WXK_NUMPAD_BEGIN, wxTRANSLATE("KP_BEGIN") }, + { WXK_NUMPAD_INSERT, wxTRANSLATE("KP_INSERT") }, + { WXK_NUMPAD_DELETE, wxTRANSLATE("KP_DELETE") }, + { WXK_NUMPAD_EQUAL, wxTRANSLATE("KP_EQUAL") }, + { WXK_NUMPAD_MULTIPLY, wxTRANSLATE("KP_MULTIPLY") }, + { WXK_NUMPAD_ADD, wxTRANSLATE("KP_ADD") }, + { WXK_NUMPAD_SEPARATOR, wxTRANSLATE("KP_SEPARATOR") }, + { WXK_NUMPAD_SUBTRACT, wxTRANSLATE("KP_SUBTRACT") }, + { WXK_NUMPAD_DECIMAL, wxTRANSLATE("KP_DECIMAL") }, + { WXK_NUMPAD_DIVIDE, wxTRANSLATE("KP_DIVIDE") }, + { WXK_WINDOWS_LEFT, wxTRANSLATE("WINDOWS_LEFT") }, + { WXK_WINDOWS_RIGHT, wxTRANSLATE("WINDOWS_RIGHT") }, + { WXK_WINDOWS_MENU, wxTRANSLATE("WINDOWS_MENU") }, + { WXK_COMMAND, wxTRANSLATE("COMMAND") }, +}; + +// return true if the 2 strings refer to the same accel +// +// as accels can be either translated or not, check for both possibilities and +// also compare case-insensitively as the key names case doesn't count +static inline bool CompareAccelString(const wxString& str, const wxChar *accel) +{ + return str.CmpNoCase(accel) == 0 +#if wxUSE_INTL + || str.CmpNoCase(wxGetTranslation(accel)) == 0 +#endif + ; +} + +// return prefixCode+number if the string is of the form "" and +// 0 if it isn't +// +// first and last parameter specify the valid domain for "number" part +static int IsNumberedAccelKey(const wxString& str, + const wxChar *prefix, + wxKeyCode prefixCode, + unsigned first, + unsigned last) +{ + const size_t lenPrefix = wxStrlen(prefix); + if ( !CompareAccelString(str.Left(lenPrefix), prefix) ) + return 0; + + unsigned long num; + if ( !str.Mid(lenPrefix).ToULong(&num) ) + return 0; + + if ( num < first || num > last ) + { + // this must be a mistake, chances that this is a valid name of another + // key are vanishingly small + wxLogDebug(_T("Invalid key string \"%s\""), str.c_str()); + return 0; + } + + return prefixCode + num - first; +} + +/* static */ +bool +wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) +{ + // the parser won't like trailing spaces + wxString label = text; + label.Trim(true); // the initial \t must be preserved so don't strip leading whitespaces + + // check for accelerators: they are given after '\t' + int posTab = label.Find(wxT('\t')); + if ( posTab == wxNOT_FOUND ) + { + return false; + } + + // parse the accelerator string + int accelFlags = wxACCEL_NORMAL; + wxString current; + for ( size_t n = (size_t)posTab + 1; n < label.length(); n++ ) + { + if ( (label[n] == '+') || (label[n] == '-') ) + { + if ( CompareAccelString(current, wxTRANSLATE("ctrl")) ) + accelFlags |= wxACCEL_CTRL; + else if ( CompareAccelString(current, wxTRANSLATE("alt")) ) + accelFlags |= wxACCEL_ALT; + else if ( CompareAccelString(current, wxTRANSLATE("shift")) ) + accelFlags |= wxACCEL_SHIFT; + else // not a recognized modifier name + { + // we may have "Ctrl-+", for example, but we still want to + // catch typos like "Crtl-A" so only give the warning if we + // have something before the current '+' or '-', else take + // it as a literal symbol + if ( current.empty() ) + { + current += label[n]; + + // skip clearing it below + continue; + } + else + { + wxLogDebug(wxT("Unknown accel modifier: '%s'"), + current.c_str()); + } + } + + current.clear(); + } + else // not special character + { + current += (wxChar) wxTolower(label[n]); + } + } + + int keyCode; + const size_t len = current.length(); + switch ( len ) + { + case 0: + wxLogDebug(wxT("No accel key found, accel string ignored.")); + return false; + + case 1: + // it's just a letter + keyCode = current[0U]; + + // if the key is used with any modifiers, make it an uppercase one + // because Ctrl-A and Ctrl-a are the same; but keep it as is if it's + // used alone as 'a' and 'A' are different + if ( accelFlags != wxACCEL_NORMAL ) + keyCode = wxToupper(keyCode); + break; + + default: + keyCode = IsNumberedAccelKey(current, wxTRANSLATE("F"), + WXK_F1, 1, 12); + if ( !keyCode ) + { + for ( size_t n = 0; n < WXSIZEOF(wxKeyNames); n++ ) + { + const wxKeyName& kn = wxKeyNames[n]; + if ( CompareAccelString(current, kn.name) ) + { + keyCode = kn.code; + break; + } + } + } + + if ( !keyCode ) + keyCode = IsNumberedAccelKey(current, wxTRANSLATE("KP_"), + WXK_NUMPAD0, 0, 9); + if ( !keyCode ) + keyCode = IsNumberedAccelKey(current, wxTRANSLATE("SPECIAL"), + WXK_SPECIAL1, 1, 20); + + if ( !keyCode ) + { + wxLogDebug(wxT("Unrecognized accel key '%s', accel string ignored."), + current.c_str()); + return false; + } + } + + + wxASSERT_MSG( keyCode, _T("logic error: should have key code here") ); + + if ( flagsOut ) + *flagsOut = accelFlags; + if ( keyOut ) + *keyOut = keyCode; + + return true; +} + +/* static */ +wxAcceleratorEntry *wxAcceleratorEntry::Create(const wxString& str) +{ + int flags, + keyCode; + if ( !ParseAccel(str, &flags, &keyCode) ) + return NULL; + + return new wxAcceleratorEntry(flags, keyCode); +} + +bool wxAcceleratorEntry::FromString(const wxString& str) +{ + return ParseAccel(str, &m_flags, &m_keyCode); +} + +wxString wxAcceleratorEntry::ToString() const +{ + wxString text; + + int flags = GetFlags(); + if ( flags & wxACCEL_ALT ) + text += _("Alt-"); + if ( flags & wxACCEL_CTRL ) + text += _("Ctrl-"); + if ( flags & wxACCEL_SHIFT ) + text += _("Shift-"); + + const int code = GetKeyCode(); + + if ( code >= WXK_F1 && code <= WXK_F12 ) + text << _("F") << code - WXK_F1 + 1; + else if ( code >= WXK_NUMPAD0 && code <= WXK_NUMPAD9 ) + text << _("KP_") << code - WXK_NUMPAD0; + else if ( code >= WXK_SPECIAL1 && code <= WXK_SPECIAL20 ) + text << _("SPECIAL") << code - WXK_SPECIAL1 + 1; + else // check the named keys + { + size_t n; + for ( n = 0; n < WXSIZEOF(wxKeyNames); n++ ) + { + const wxKeyName& kn = wxKeyNames[n]; + if ( code == kn.code ) + { + text << wxGetTranslation(kn.name); + break; + } + } + + if ( n == WXSIZEOF(wxKeyNames) ) + { + // must be a simple key + if ( +#if !wxUSE_UNICODE + isascii(code) && +#endif // ANSI + wxIsalnum(code) ) + { + text << (wxChar)code; + } + else + { + wxFAIL_MSG( wxT("unknown keyboard accelerator code") ); + } + } + } + + return text; +} + +wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) +{ + return wxAcceleratorEntry::Create(label); +} + +#endif // wxUSE_ACCEL + + + diff --git a/src/common/menucmn.cpp b/src/common/menucmn.cpp index 87969e0411..2b65f80845 100644 --- a/src/common/menucmn.cpp +++ b/src/common/menucmn.cpp @@ -26,8 +26,6 @@ #if wxUSE_MENUS -#include - #ifndef WX_PRECOMP #include "wx/intl.h" #include "wx/log.h" @@ -50,325 +48,7 @@ WX_DEFINE_LIST(wxMenuItemList) // ============================================================================ // ---------------------------------------------------------------------------- -// wxAcceleratorEntry -// ---------------------------------------------------------------------------- - - -#if wxUSE_ACCEL - -static const struct wxKeyName -{ - wxKeyCode code; - const wxChar *name; -} wxKeyNames[] = -{ - { WXK_DELETE, wxTRANSLATE("DEL") }, - { WXK_DELETE, wxTRANSLATE("DELETE") }, - { WXK_BACK, wxTRANSLATE("BACK") }, - { WXK_INSERT, wxTRANSLATE("INS") }, - { WXK_INSERT, wxTRANSLATE("INSERT") }, - { WXK_RETURN, wxTRANSLATE("ENTER") }, - { WXK_RETURN, wxTRANSLATE("RETURN") }, - { WXK_PAGEUP, wxTRANSLATE("PGUP") }, - { WXK_PAGEDOWN, wxTRANSLATE("PGDN") }, - { WXK_LEFT, wxTRANSLATE("LEFT") }, - { WXK_RIGHT, wxTRANSLATE("RIGHT") }, - { WXK_UP, wxTRANSLATE("UP") }, - { WXK_DOWN, wxTRANSLATE("DOWN") }, - { WXK_HOME, wxTRANSLATE("HOME") }, - { WXK_END, wxTRANSLATE("END") }, - { WXK_SPACE, wxTRANSLATE("SPACE") }, - { WXK_TAB, wxTRANSLATE("TAB") }, - { WXK_ESCAPE, wxTRANSLATE("ESC") }, - { WXK_ESCAPE, wxTRANSLATE("ESCAPE") }, - { WXK_CANCEL, wxTRANSLATE("CANCEL") }, - { WXK_CLEAR, wxTRANSLATE("CLEAR") }, - { WXK_MENU, wxTRANSLATE("MENU") }, - { WXK_PAUSE, wxTRANSLATE("PAUSE") }, - { WXK_CAPITAL, wxTRANSLATE("CAPITAL") }, - { WXK_SELECT, wxTRANSLATE("SELECT") }, - { WXK_PRINT, wxTRANSLATE("PRINT") }, - { WXK_EXECUTE, wxTRANSLATE("EXECUTE") }, - { WXK_SNAPSHOT, wxTRANSLATE("SNAPSHOT") }, - { WXK_HELP, wxTRANSLATE("HELP") }, - { WXK_ADD, wxTRANSLATE("ADD") }, - { WXK_SEPARATOR, wxTRANSLATE("SEPARATOR") }, - { WXK_SUBTRACT, wxTRANSLATE("SUBTRACT") }, - { WXK_DECIMAL, wxTRANSLATE("DECIMAL") }, - { WXK_DIVIDE, wxTRANSLATE("DIVIDE") }, - { WXK_NUMLOCK, wxTRANSLATE("NUM_LOCK") }, - { WXK_SCROLL, wxTRANSLATE("SCROLL_LOCK") }, - { WXK_PAGEUP, wxTRANSLATE("PAGEUP") }, - { WXK_PAGEDOWN, wxTRANSLATE("PAGEDOWN") }, - { WXK_NUMPAD_SPACE, wxTRANSLATE("KP_SPACE") }, - { WXK_NUMPAD_TAB, wxTRANSLATE("KP_TAB") }, - { WXK_NUMPAD_ENTER, wxTRANSLATE("KP_ENTER") }, - { WXK_NUMPAD_HOME, wxTRANSLATE("KP_HOME") }, - { WXK_NUMPAD_LEFT, wxTRANSLATE("KP_LEFT") }, - { WXK_NUMPAD_UP, wxTRANSLATE("KP_UP") }, - { WXK_NUMPAD_RIGHT, wxTRANSLATE("KP_RIGHT") }, - { WXK_NUMPAD_DOWN, wxTRANSLATE("KP_DOWN") }, - { WXK_NUMPAD_PAGEUP, wxTRANSLATE("KP_PRIOR") }, - { WXK_NUMPAD_PAGEUP, wxTRANSLATE("KP_PAGEUP") }, - { WXK_NUMPAD_PAGEDOWN, wxTRANSLATE("KP_NEXT") }, - { WXK_NUMPAD_PAGEDOWN, wxTRANSLATE("KP_PAGEDOWN") }, - { WXK_NUMPAD_END, wxTRANSLATE("KP_END") }, - { WXK_NUMPAD_BEGIN, wxTRANSLATE("KP_BEGIN") }, - { WXK_NUMPAD_INSERT, wxTRANSLATE("KP_INSERT") }, - { WXK_NUMPAD_DELETE, wxTRANSLATE("KP_DELETE") }, - { WXK_NUMPAD_EQUAL, wxTRANSLATE("KP_EQUAL") }, - { WXK_NUMPAD_MULTIPLY, wxTRANSLATE("KP_MULTIPLY") }, - { WXK_NUMPAD_ADD, wxTRANSLATE("KP_ADD") }, - { WXK_NUMPAD_SEPARATOR, wxTRANSLATE("KP_SEPARATOR") }, - { WXK_NUMPAD_SUBTRACT, wxTRANSLATE("KP_SUBTRACT") }, - { WXK_NUMPAD_DECIMAL, wxTRANSLATE("KP_DECIMAL") }, - { WXK_NUMPAD_DIVIDE, wxTRANSLATE("KP_DIVIDE") }, - { WXK_WINDOWS_LEFT, wxTRANSLATE("WINDOWS_LEFT") }, - { WXK_WINDOWS_RIGHT, wxTRANSLATE("WINDOWS_RIGHT") }, - { WXK_WINDOWS_MENU, wxTRANSLATE("WINDOWS_MENU") }, - { WXK_COMMAND, wxTRANSLATE("COMMAND") }, -}; - -// return true if the 2 strings refer to the same accel -// -// as accels can be either translated or not, check for both possibilities and -// also compare case-insensitively as the key names case doesn't count -static inline bool CompareAccelString(const wxString& str, const wxChar *accel) -{ - return str.CmpNoCase(accel) == 0 -#if wxUSE_INTL - || str.CmpNoCase(wxGetTranslation(accel)) == 0 -#endif - ; -} - -// return prefixCode+number if the string is of the form "" and -// 0 if it isn't -// -// first and last parameter specify the valid domain for "number" part -static int - IsNumberedAccelKey(const wxString& str, - const wxChar *prefix, - wxKeyCode prefixCode, - unsigned first, - unsigned last) -{ - const size_t lenPrefix = wxStrlen(prefix); - if ( !CompareAccelString(str.Left(lenPrefix), prefix) ) - return 0; - - unsigned long num; - if ( !str.Mid(lenPrefix).ToULong(&num) ) - return 0; - - if ( num < first || num > last ) - { - // this must be a mistake, chances that this is a valid name of another - // key are vanishingly small - wxLogDebug(_T("Invalid key string \"%s\""), str.c_str()); - return 0; - } - - return prefixCode + num - first; -} - -/* static */ -bool -wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) -{ - // the parser won't like trailing spaces - wxString label = text; - label.Trim(true); // the initial \t must be preserved so don't strip leading whitespaces - - // check for accelerators: they are given after '\t' - int posTab = label.Find(wxT('\t')); - if ( posTab == wxNOT_FOUND ) - { - return false; - } - - // parse the accelerator string - int accelFlags = wxACCEL_NORMAL; - wxString current; - for ( size_t n = (size_t)posTab + 1; n < label.length(); n++ ) - { - if ( (label[n] == '+') || (label[n] == '-') ) - { - if ( CompareAccelString(current, wxTRANSLATE("ctrl")) ) - accelFlags |= wxACCEL_CTRL; - else if ( CompareAccelString(current, wxTRANSLATE("alt")) ) - accelFlags |= wxACCEL_ALT; - else if ( CompareAccelString(current, wxTRANSLATE("shift")) ) - accelFlags |= wxACCEL_SHIFT; - else // not a recognized modifier name - { - // we may have "Ctrl-+", for example, but we still want to - // catch typos like "Crtl-A" so only give the warning if we - // have something before the current '+' or '-', else take - // it as a literal symbol - if ( current.empty() ) - { - current += label[n]; - - // skip clearing it below - continue; - } - else - { - wxLogDebug(wxT("Unknown accel modifier: '%s'"), - current.c_str()); - } - } - - current.clear(); - } - else // not special character - { - current += (wxChar) wxTolower(label[n]); - } - } - - int keyCode; - const size_t len = current.length(); - switch ( len ) - { - case 0: - wxLogDebug(wxT("No accel key found, accel string ignored.")); - return false; - - case 1: - // it's just a letter - keyCode = current[0U]; - - // if the key is used with any modifiers, make it an uppercase one - // because Ctrl-A and Ctrl-a are the same; but keep it as is if it's - // used alone as 'a' and 'A' are different - if ( accelFlags != wxACCEL_NORMAL ) - keyCode = wxToupper(keyCode); - break; - - default: - keyCode = IsNumberedAccelKey(current, wxTRANSLATE("F"), - WXK_F1, 1, 12); - if ( !keyCode ) - { - for ( size_t n = 0; n < WXSIZEOF(wxKeyNames); n++ ) - { - const wxKeyName& kn = wxKeyNames[n]; - if ( CompareAccelString(current, kn.name) ) - { - keyCode = kn.code; - break; - } - } - } - - if ( !keyCode ) - keyCode = IsNumberedAccelKey(current, wxTRANSLATE("KP_"), - WXK_NUMPAD0, 0, 9); - if ( !keyCode ) - keyCode = IsNumberedAccelKey(current, wxTRANSLATE("SPECIAL"), - WXK_SPECIAL1, 1, 20); - - if ( !keyCode ) - { - wxLogDebug(wxT("Unrecognized accel key '%s', accel string ignored."), - current.c_str()); - return false; - } - } - - - wxASSERT_MSG( keyCode, _T("logic error: should have key code here") ); - - if ( flagsOut ) - *flagsOut = accelFlags; - if ( keyOut ) - *keyOut = keyCode; - - return true; -} - -/* static */ -wxAcceleratorEntry *wxAcceleratorEntry::Create(const wxString& str) -{ - int flags, - keyCode; - if ( !ParseAccel(str, &flags, &keyCode) ) - return NULL; - - return new wxAcceleratorEntry(flags, keyCode); -} - -bool wxAcceleratorEntry::FromString(const wxString& str) -{ - return ParseAccel(str, &m_flags, &m_keyCode); -} - -wxString wxAcceleratorEntry::ToString() const -{ - wxString text; - - int flags = GetFlags(); - if ( flags & wxACCEL_ALT ) - text += _("Alt-"); - if ( flags & wxACCEL_CTRL ) - text += _("Ctrl-"); - if ( flags & wxACCEL_SHIFT ) - text += _("Shift-"); - - const int code = GetKeyCode(); - - if ( code >= WXK_F1 && code <= WXK_F12 ) - text << _("F") << code - WXK_F1 + 1; - else if ( code >= WXK_NUMPAD0 && code <= WXK_NUMPAD9 ) - text << _("KP_") << code - WXK_NUMPAD0; - else if ( code >= WXK_SPECIAL1 && code <= WXK_SPECIAL20 ) - text << _("SPECIAL") << code - WXK_SPECIAL1 + 1; - else // check the named keys - { - size_t n; - for ( n = 0; n < WXSIZEOF(wxKeyNames); n++ ) - { - const wxKeyName& kn = wxKeyNames[n]; - if ( code == kn.code ) - { - text << wxGetTranslation(kn.name); - break; - } - } - - if ( n == WXSIZEOF(wxKeyNames) ) - { - // must be a simple key - if ( -#if !wxUSE_UNICODE - isascii(code) && -#endif // ANSI - wxIsalnum(code) ) - { - text << (wxChar)code; - } - else - { - wxFAIL_MSG( wxT("unknown keyboard accelerator code") ); - } - } - } - - return text; -} - -wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) -{ - return wxAcceleratorEntry::Create(label); -} - -#endif // wxUSE_ACCEL - - -// ---------------------------------------------------------------------------- -// wxMenuItem +// wxMenuItemBase // ---------------------------------------------------------------------------- wxMenuItemBase::wxMenuItemBase(wxMenu *parentMenu,