From 54cbd22ded556860cce0ea4fc49a02a1f942ea9e Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Fri, 4 Mar 2016 14:17:41 +0100 Subject: [PATCH 1/5] Remove OS X statusbar code targeting MacOS. --- src/osx/carbon/statbrma.cpp | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/src/osx/carbon/statbrma.cpp b/src/osx/carbon/statbrma.cpp index 35e1b86893..9bc4274227 100644 --- a/src/osx/carbon/statbrma.cpp +++ b/src/osx/carbon/statbrma.cpp @@ -125,27 +125,17 @@ void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event)) wxPaintDC dc(this); dc.Clear(); - int major, minor; - wxGetOsVersion( &major, &minor ); int w, h; GetSize( &w, &h ); if ( MacIsReallyHilited() ) { wxPen white( *wxWHITE , 1 , wxPENSTYLE_SOLID ); - if (major >= 10) - { - // Finder statusbar border color: (Project Builder similar is 9B9B9B) - if ( MacGetTopLevelWindow()->GetExtraStyle() & wxFRAME_EX_METAL ) - dc.SetPen(wxPen(wxColour(0x40, 0x40, 0x40), 1, wxPENSTYLE_SOLID)); - else - dc.SetPen(wxPen(wxColour(0xB1, 0xB1, 0xB1), 1, wxPENSTYLE_SOLID)); - } + // Finder statusbar border color: (Project Builder similar is 9B9B9B) + if ( MacGetTopLevelWindow()->GetExtraStyle() & wxFRAME_EX_METAL ) + dc.SetPen(wxPen(wxColour(0x40, 0x40, 0x40), 1, wxPENSTYLE_SOLID)); else - { - wxPen black( *wxBLACK , 1 , wxPENSTYLE_SOLID ); - dc.SetPen(black); - } + dc.SetPen(wxPen(wxColour(0xB1, 0xB1, 0xB1), 1, wxPENSTYLE_SOLID)); dc.DrawLine(0, 0, w, 0); dc.SetPen(white); @@ -153,11 +143,8 @@ void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event)) } else { - if (major >= 10) - // Finder statusbar border color: (Project Builder similar is 9B9B9B) - dc.SetPen(wxPen(wxColour(0xB1, 0xB1, 0xB1), 1, wxPENSTYLE_SOLID)); - else - dc.SetPen(wxPen(wxColour(0x80, 0x80, 0x80), 1, wxPENSTYLE_SOLID)); + // Finder statusbar border color: (Project Builder similar is 9B9B9B) + dc.SetPen(wxPen(wxColour(0xB1, 0xB1, 0xB1), 1, wxPENSTYLE_SOLID)); dc.DrawLine(0, 0, w, 0); } From d0d4018748f03528f56e319b949102d58c71f6f4 Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Fri, 4 Mar 2016 14:21:57 +0100 Subject: [PATCH 2/5] Remove unused OS X carbon resource files. --- src/osx/carbon/apprsrc.r | 1 - src/osx/carbon/carbrsrc.r | 7 -- src/osx/carbon/corersrc.r | 159 -------------------------------------- 3 files changed, 167 deletions(-) delete mode 100644 src/osx/carbon/apprsrc.r delete mode 100644 src/osx/carbon/carbrsrc.r delete mode 100644 src/osx/carbon/corersrc.r diff --git a/src/osx/carbon/apprsrc.r b/src/osx/carbon/apprsrc.r deleted file mode 100644 index 4113a172a0..0000000000 --- a/src/osx/carbon/apprsrc.r +++ /dev/null @@ -1 +0,0 @@ -/* not needed anymore */ diff --git a/src/osx/carbon/carbrsrc.r b/src/osx/carbon/carbrsrc.r deleted file mode 100644 index 9326cc3b56..0000000000 --- a/src/osx/carbon/carbrsrc.r +++ /dev/null @@ -1,7 +0,0 @@ -// carbon for 9 -data 'carb' (0) { - $"0000" /* .. */ -}; - -// the plist resource should only be included in the application -// since it contains the bundle information and should not be duplicated diff --git a/src/osx/carbon/corersrc.r b/src/osx/carbon/corersrc.r deleted file mode 100644 index 676a4d3d2a..0000000000 --- a/src/osx/carbon/corersrc.r +++ /dev/null @@ -1,159 +0,0 @@ -#ifdef __UNIX__ - #include -#else - #include - #if UNIVERSAL_INTERFACES_VERSION > 0x320 - #include - #endif -#endif - -resource 'ldes' ( 128 ) -{ - versionZero - { - 0 , - 0 , - 0 , - 0 , - hasVertScroll , - noHorizScroll , - 0 , - noGrowSpace , - } -} ; - -resource 'ldes' ( 129 ) -{ - versionZero - { - 0 , - 0 , - 0 , - 0 , - hasVertScroll , - hasHorizScroll , - 0 , - noGrowSpace , - } -} ; - -data 'CURS' (10) { - $"0000 03E0 0630 0808 1004 31C6 2362 2222" - $"2362 31C6 1004 0808 0630 03E0 0000 0000" - $"0000 03E0 07F0 0FF8 1FFC 3FFE 3FFE 3FFE" - $"3FFE 3FFE 1FFC 0FF8 07F0 03E0 0000 0000" - $"0007 0008" -}; - -data 'CURS' (11) { - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000" -}; - -data 'CURS' (12) { - $"00F0 0088 0108 0190 0270 0220 0440 0440" - $"0880 0880 1100 1E00 1C00 1800 1000 0000" - $"00F0 00F8 01F8 01F0 03F0 03E0 07C0 07C0" - $"0F80 0F80 1F00 1E00 1C00 1800 1000 0000" - $"000E 0003" -}; - -data 'CURS' (13) { - $"0000 1E00 2100 4080 4080 4080 4080 2180" - $"1FC0 00E0 0070 0038 001C 000E 0006 0000" - $"3F00 7F80 FFC0 FFC0 FFC0 FFC0 FFC0 7FC0" - $"3FE0 1FF0 00F8 007C 003E 001F 000F 0007" - $"0004 0004" -}; - -data 'CURS' (14) { - $"0000 07E0 1FF0 3838 3C0C 6E0E 6706 6386" - $"61C6 60E6 7076 303C 1C1C 0FF8 07E0 0000" - $"0540 0FF0 3FF8 3C3C 7E0E FF0F 6F86 E7C7" - $"63E6 E1F7 70FE 707E 3C3C 1FFC 0FF0 0540" - $"0007 0007" -}; - -data 'CURS' (15) { - $"0000 0380 0380 0380 0380 0380 0380 0FE0" - $"1FF0 1FF0 0000 1FF0 1FF0 1550 1550 1550" - $"07C0 07C0 07C0 07C0 07C0 07C0 0FE0 1FF0" - $"3FF8 3FF8 3FF8 3FF8 3FF8 3FF8 3FF8 3FF8" - $"000B 0007" -}; - -data 'CURS' (16) { - $"00C0 0140 0640 08C0 3180 47FE 8001 8001" - $"81FE 8040 01C0 0040 03C0 C080 3F80 0000" - $"00C0 01C0 07C0 0FC0 3F80 7FFE FFFF FFFF" - $"FFFE FFC0 FFC0 FFC0 FFC0 FF80 3F80 0000" - $"0006 000F" -}; - -data 'CURS' (17) { - $"0100 0280 0260 0310 018C 7FE3 8000 8000" - $"7F80 0200 0380 0200 03C0 0107 01F8 0000" - $"0100 0380 03E0 03F0 01FC 7FFF FFFF FFFF" - $"FFFF 03FF 03FF 03FF 03FF 01FF 01F8 0000" - $"0006 0000" -}; - -data 'CURS' (18) { - $"0000 4078 60FC 71CE 7986 7C06 7E0E 7F1C" - $"7FB8 7C30 6C30 4600 0630 0330 0300 0000" - $"C078 E0FC F1FE FBFF FFCF FF8F FF1F FFBE" - $"FFFC FE78 FF78 EFF8 CFF8 87F8 07F8 0300" - $"0001 0001" -}; - -data 'CURS' (19) { - $"0000 0002 0006 000E 001E 003E 007E 00FE" - $"01FE 003E 0036 0062 0060 00C0 00C0 0000" - $"0003 0007 000F 001F 003F 007F 00FF 01FF" - $"03FF 07FF 007F 00F7 00F3 01E1 01E0 01C0" - $"0001 000E" -}; - -data 'CURS' (20) { - $"0000 0080 01C0 03E0 0080 0080 0080 1FFC" - $"1FFC 0080 0080 0080 03E0 01C0 0080 0000" - $"0080 01C0 03E0 07F0 0FF8 01C0 3FFE 3FFE" - $"3FFE 3FFE 01C0 0FF8 07F0 03E0 01C0 0080" - $"0007 0008" -}; - -data 'CURS' (21) { - $"0000 0080 01C0 03E0 0080 0888 188C 3FFE" - $"188C 0888 0080 03E0 01C0 0080 0000 0000" - $"0080 01C0 03E0 07F0 0BE8 1DDC 3FFE 7FFF" - $"3FFE 1DDC 0BE8 07F0 03E0 01C0 0080 0000" - $"0007 0008" -}; - -data 'CURS' (22) { - $"0000 001E 000E 060E 0712 03A0 01C0 00E0" - $"0170 1238 1C18 1C00 1E00 0000 0000 0000" - $"007F 003F 0E1F 0F0F 0F97 07E3 03E1 21F0" - $"31F8 3A7C 3C3C 3E1C 3F00 3F80 0000 0000" - $"0006 0009" -}; - -data 'CURS' (23) { - $"0000 7800 7000 7060 48E0 05C0 0380 0700" - $"0E80 1C48 1838 0038 0078 0000 0000 0000" - $"FE00 FC00 F870 F0F0 E9F0 C7E0 87C0 0F84" - $"1F8C 3E5C 3C3C 387C 00FC 01FC 0000 0000" - $"0006 0006" -}; - -data 'CURS' (24) { - $"0006 000E 001C 0018 0020 0040 00F8 0004" - $"1FF4 200C 2AA8 1FF0 1F80 3800 6000 8000" - $"000F 001F 003E 007C 0070 00E0 01FC 3FF6" - $"7FF6 7FFE 7FFC 7FF8 3FF0 7FC0 F800 E000" - $"000A 0006" -}; - From 1125dd8c126b58a37cce4ed6b2c088596cd0d3b9 Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Fri, 4 Mar 2016 14:28:56 +0100 Subject: [PATCH 3/5] Remove remaining unused carbon implementation code. Remove code and files which should have already been removed in 5ba67c67e47d069f65d648ab16dfc505c5400bfc. --- Makefile.in | 28 - build/bakefiles/files.bkl | 1 - build/files | 1 - build/osx/wxcocoa.xcodeproj/project.pbxproj | 8 - build/osx/wxiphone.xcodeproj/project.pbxproj | 4 - include/wx/osx/glcanvas.h | 7 - src/osx/carbon/combobox.cpp | 668 ---------------- src/osx/carbon/combobxc.cpp | 783 ------------------- src/osx/carbon/dirmac.cpp | 256 ------ 9 files changed, 1756 deletions(-) delete mode 100644 src/osx/carbon/combobox.cpp delete mode 100644 src/osx/carbon/combobxc.cpp delete mode 100644 src/osx/carbon/dirmac.cpp diff --git a/Makefile.in b/Makefile.in index ab6beaf2f4..f94b6b0086 100644 --- a/Makefile.in +++ b/Makefile.in @@ -13209,7 +13209,6 @@ COND_PLATFORM_MACOSX_1___OSX_COMMON_SRC_OBJECTS = \ monodll_carbon_gdiobj.o \ monodll_carbon_icon.o \ monodll_carbon_app.o \ - monodll_carbon_combobox.o \ monodll_carbon_control.o \ monodll_carbon_dataobj.o \ monodll_carbon_dcclient.o \ @@ -13354,7 +13353,6 @@ COND_PLATFORM_MACOSX_1___OSX_COMMON_SRC_OBJECTS_0 = \ monolib_carbon_gdiobj.o \ monolib_carbon_icon.o \ monolib_carbon_app.o \ - monolib_carbon_combobox.o \ monolib_carbon_control.o \ monolib_carbon_dataobj.o \ monolib_carbon_dcclient.o \ @@ -13499,7 +13497,6 @@ COND_PLATFORM_MACOSX_1___OSX_COMMON_SRC_OBJECTS_8 = \ coredll_carbon_gdiobj.o \ coredll_carbon_icon.o \ coredll_carbon_app.o \ - coredll_carbon_combobox.o \ coredll_carbon_control.o \ coredll_carbon_dataobj.o \ coredll_carbon_dcclient.o \ @@ -13629,7 +13626,6 @@ COND_PLATFORM_MACOSX_1___OSX_COMMON_SRC_OBJECTS_9 = \ corelib_carbon_gdiobj.o \ corelib_carbon_icon.o \ corelib_carbon_app.o \ - corelib_carbon_combobox.o \ corelib_carbon_control.o \ corelib_carbon_dataobj.o \ corelib_carbon_dcclient.o \ @@ -19314,12 +19310,6 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@monodll_carbon_app.o: $(srcdir)/src/osx/carbon/app.cpp $(MONODLL_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/app.cpp -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monodll_carbon_combobox.o: $(srcdir)/src/osx/carbon/combobox.cpp $(MONODLL_ODEP) -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/combobox.cpp - -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@monodll_carbon_combobox.o: $(srcdir)/src/osx/carbon/combobox.cpp $(MONODLL_ODEP) -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/combobox.cpp - @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monodll_carbon_control.o: $(srcdir)/src/osx/carbon/control.cpp $(MONODLL_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/osx/carbon/control.cpp @@ -24141,12 +24131,6 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@monolib_carbon_app.o: $(srcdir)/src/osx/carbon/app.cpp $(MONOLIB_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/osx/carbon/app.cpp -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monolib_carbon_combobox.o: $(srcdir)/src/osx/carbon/combobox.cpp $(MONOLIB_ODEP) -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/osx/carbon/combobox.cpp - -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@monolib_carbon_combobox.o: $(srcdir)/src/osx/carbon/combobox.cpp $(MONOLIB_ODEP) -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/osx/carbon/combobox.cpp - @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@monolib_carbon_control.o: $(srcdir)/src/osx/carbon/control.cpp $(MONOLIB_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/osx/carbon/control.cpp @@ -29022,12 +29006,6 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@coredll_carbon_app.o: $(srcdir)/src/osx/carbon/app.cpp $(COREDLL_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/app.cpp -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@coredll_carbon_combobox.o: $(srcdir)/src/osx/carbon/combobox.cpp $(COREDLL_ODEP) -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/combobox.cpp - -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@coredll_carbon_combobox.o: $(srcdir)/src/osx/carbon/combobox.cpp $(COREDLL_ODEP) -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/combobox.cpp - @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@coredll_carbon_control.o: $(srcdir)/src/osx/carbon/control.cpp $(COREDLL_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/osx/carbon/control.cpp @@ -32415,12 +32393,6 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@corelib_carbon_app.o: $(srcdir)/src/osx/carbon/app.cpp $(CORELIB_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/app.cpp -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@corelib_carbon_combobox.o: $(srcdir)/src/osx/carbon/combobox.cpp $(CORELIB_ODEP) -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/combobox.cpp - -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@corelib_carbon_combobox.o: $(srcdir)/src/osx/carbon/combobox.cpp $(CORELIB_ODEP) -@COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_IPHONE_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/combobox.cpp - @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@corelib_carbon_control.o: $(srcdir)/src/osx/carbon/control.cpp $(CORELIB_ODEP) @COND_PLATFORM_MACOSX_1_TOOLKIT_OSX_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/osx/carbon/control.cpp diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 98b0d840da..e51be9d6fc 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -2275,7 +2275,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/osx/carbon/gdiobj.cpp src/osx/carbon/icon.cpp src/osx/carbon/app.cpp - src/osx/carbon/combobox.cpp src/osx/carbon/control.cpp src/osx/carbon/dataobj.cpp src/osx/carbon/dcclient.cpp diff --git a/build/files b/build/files index 216467bc67..66520c08de 100644 --- a/build/files +++ b/build/files @@ -2117,7 +2117,6 @@ OSX_COMMON_SRC = src/osx/carbon/gdiobj.cpp src/osx/carbon/icon.cpp src/osx/carbon/app.cpp - src/osx/carbon/combobox.cpp src/osx/carbon/control.cpp src/osx/carbon/dataobj.cpp src/osx/carbon/dcclient.cpp diff --git a/build/osx/wxcocoa.xcodeproj/project.pbxproj b/build/osx/wxcocoa.xcodeproj/project.pbxproj index ef21984639..9783fbdf30 100644 --- a/build/osx/wxcocoa.xcodeproj/project.pbxproj +++ b/build/osx/wxcocoa.xcodeproj/project.pbxproj @@ -2027,9 +2027,6 @@ BAFF04F1680F32DA988EB03D /* stockitem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B180290089B139F18B0C7BBA /* stockitem.cpp */; }; BAFF04F1680F32DA988EB03E /* stockitem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B180290089B139F18B0C7BBA /* stockitem.cpp */; }; BAFF04F1680F32DA988EB03F /* stockitem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B180290089B139F18B0C7BBA /* stockitem.cpp */; }; - BB31D65BA1253A1CB64CE9D2 /* combobox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A3F26F539473705AA82411D /* combobox.cpp */; }; - BB31D65BA1253A1CB64CE9D3 /* combobox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A3F26F539473705AA82411D /* combobox.cpp */; }; - BB31D65BA1253A1CB64CE9D4 /* combobox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A3F26F539473705AA82411D /* combobox.cpp */; }; BB6FE851028C3DE7A070C213 /* convauto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20B922D61CDB3CCEB59A5194 /* convauto.cpp */; }; BB6FE851028C3DE7A070C214 /* convauto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20B922D61CDB3CCEB59A5194 /* convauto.cpp */; }; BB6FE851028C3DE7A070C215 /* convauto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20B922D61CDB3CCEB59A5194 /* convauto.cpp */; }; @@ -4272,7 +4269,6 @@ 7A1CE0B28CB73F90AE92B5AB /* richtooltipcmn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = richtooltipcmn.cpp; path = ../../src/common/richtooltipcmn.cpp; sourceTree = ""; }; 7A24E9101688368296C21EBE /* gzclose.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gzclose.c; path = ../../src/zlib/gzclose.c; sourceTree = ""; }; 7A34C5BBBA543DC0A50DE1B6 /* event.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = event.cpp; path = ../../src/common/event.cpp; sourceTree = ""; }; - 7A3F26F539473705AA82411D /* combobox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = combobox.cpp; path = ../../src/osx/carbon/combobox.cpp; sourceTree = ""; }; 7AF8F8A78A5130DCB4D46729 /* LexCmake.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexCmake.cxx; path = ../../src/stc/scintilla/lexers/LexCmake.cxx; sourceTree = ""; }; 7B389A14D6BF3AFD8CCE0807 /* protocol.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = protocol.cpp; path = ../../src/common/protocol.cpp; sourceTree = ""; }; 7BA6ADD758693BD180D3275B /* treebase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = treebase.cpp; path = ../../src/common/treebase.cpp; sourceTree = ""; }; @@ -5326,7 +5322,6 @@ 377056CEB1FC3EEB8526E7A6 /* gdiobj.cpp */, F5DAF1F49F0F3F41A427A21D /* icon.cpp */, 757B31FCCA1F381C95B30DF8 /* app.cpp */, - 7A3F26F539473705AA82411D /* combobox.cpp */, 12363D1F50FE301DAEE7F04A /* control.cpp */, 271B4B77622B3411A7BF6634 /* dataobj.cpp */, B17772732159304AA7312D72 /* dcclient.cpp */, @@ -7527,7 +7522,6 @@ 692FCCABFB963696AFC1E124 /* gdiobj.cpp in Sources */, 01D4C5F2147F3942A7CE91AC /* icon.cpp in Sources */, B0E94A59C83637C09FAAE71E /* app.cpp in Sources */, - BB31D65BA1253A1CB64CE9D4 /* combobox.cpp in Sources */, EB52C6A91594381393294500 /* control.cpp in Sources */, 45AB45C6B24A3983B22E56A7 /* dataobj.cpp in Sources */, D088E7DDE38C31DC9C9B3419 /* dcclient.cpp in Sources */, @@ -8201,7 +8195,6 @@ 692FCCABFB963696AFC1E123 /* gdiobj.cpp in Sources */, 01D4C5F2147F3942A7CE91AB /* icon.cpp in Sources */, B0E94A59C83637C09FAAE71D /* app.cpp in Sources */, - BB31D65BA1253A1CB64CE9D3 /* combobox.cpp in Sources */, EB52C6A915943813932944FF /* control.cpp in Sources */, 45AB45C6B24A3983B22E56A6 /* dataobj.cpp in Sources */, D088E7DDE38C31DC9C9B3418 /* dcclient.cpp in Sources */, @@ -9410,7 +9403,6 @@ 692FCCABFB963696AFC1E122 /* gdiobj.cpp in Sources */, 01D4C5F2147F3942A7CE91AA /* icon.cpp in Sources */, B0E94A59C83637C09FAAE71C /* app.cpp in Sources */, - BB31D65BA1253A1CB64CE9D2 /* combobox.cpp in Sources */, EB52C6A915943813932944FE /* control.cpp in Sources */, 45AB45C6B24A3983B22E56A5 /* dataobj.cpp in Sources */, D088E7DDE38C31DC9C9B3417 /* dcclient.cpp in Sources */, diff --git a/build/osx/wxiphone.xcodeproj/project.pbxproj b/build/osx/wxiphone.xcodeproj/project.pbxproj index 4046c2ab1e..f175d3774a 100644 --- a/build/osx/wxiphone.xcodeproj/project.pbxproj +++ b/build/osx/wxiphone.xcodeproj/project.pbxproj @@ -605,7 +605,6 @@ BAA75384DA82370298672333 /* helpctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42E433D1700631A8907B8227 /* helpctrl.cpp */; }; BAAB6B1D80A33843A8436B10 /* appunix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B40E0F6AA0273ACD9BDEAD72 /* appunix.cpp */; }; BAFF04F1680F32DA988EB03D /* stockitem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B180290089B139F18B0C7BBA /* stockitem.cpp */; }; - BB31D65BA1253A1CB64CE9D2 /* combobox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A3F26F539473705AA82411D /* combobox.cpp */; }; BB6FE851028C3DE7A070C213 /* convauto.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20B922D61CDB3CCEB59A5194 /* convauto.cpp */; }; BBAABF3C693E37D3B0FF2502 /* colrdlgg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 66AC0EA493AB3B6A86DAE174 /* colrdlgg.cpp */; }; BCD81FD3D1EC305F801E1C1B /* sckipc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F6E23CCDC1932BC985EFBD2 /* sckipc.cpp */; }; @@ -1246,7 +1245,6 @@ 7A1CE0B28CB73F90AE92B5AB /* richtooltipcmn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = richtooltipcmn.cpp; path = ../../src/common/richtooltipcmn.cpp; sourceTree = ""; }; 7A24E9101688368296C21EBE /* gzclose.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gzclose.c; path = ../../src/zlib/gzclose.c; sourceTree = ""; }; 7A34C5BBBA543DC0A50DE1B6 /* event.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = event.cpp; path = ../../src/common/event.cpp; sourceTree = ""; }; - 7A3F26F539473705AA82411D /* combobox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = combobox.cpp; path = ../../src/osx/carbon/combobox.cpp; sourceTree = ""; }; 7AF8F8A78A5130DCB4D46729 /* LexCmake.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexCmake.cxx; path = ../../src/stc/scintilla/lexers/LexCmake.cxx; sourceTree = ""; }; 7B389A14D6BF3AFD8CCE0807 /* protocol.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = protocol.cpp; path = ../../src/common/protocol.cpp; sourceTree = ""; }; 7BA6ADD758693BD180D3275B /* treebase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = treebase.cpp; path = ../../src/common/treebase.cpp; sourceTree = ""; }; @@ -1972,7 +1970,6 @@ 377056CEB1FC3EEB8526E7A6 /* gdiobj.cpp */, F5DAF1F49F0F3F41A427A21D /* icon.cpp */, 757B31FCCA1F381C95B30DF8 /* app.cpp */, - 7A3F26F539473705AA82411D /* combobox.cpp */, 12363D1F50FE301DAEE7F04A /* control.cpp */, 271B4B77622B3411A7BF6634 /* dataobj.cpp */, B17772732159304AA7312D72 /* dcclient.cpp */, @@ -3023,7 +3020,6 @@ 692FCCABFB963696AFC1E122 /* gdiobj.cpp in Sources */, 01D4C5F2147F3942A7CE91AA /* icon.cpp in Sources */, B0E94A59C83637C09FAAE71C /* app.cpp in Sources */, - BB31D65BA1253A1CB64CE9D2 /* combobox.cpp in Sources */, EB52C6A915943813932944FE /* control.cpp in Sources */, 45AB45C6B24A3983B22E56A5 /* dataobj.cpp in Sources */, D088E7DDE38C31DC9C9B3417 /* dcclient.cpp in Sources */, diff --git a/include/wx/osx/glcanvas.h b/include/wx/osx/glcanvas.h index 268b5d43a5..24cac5b5d2 100644 --- a/include/wx/osx/glcanvas.h +++ b/include/wx/osx/glcanvas.h @@ -161,13 +161,6 @@ protected: WXGLPixelFormat m_glFormat; wxGLAttributes m_GLAttrs; -#if wxOSX_USE_CARBON - bool m_macCanvasIsShown, - m_needsUpdate; - WXGLContext m_dummyContext; - GLint m_bufferName; -#endif - wxDECLARE_EVENT_TABLE(); wxDECLARE_CLASS(wxGLCanvas); }; diff --git a/src/osx/carbon/combobox.cpp b/src/osx/carbon/combobox.cpp deleted file mode 100644 index 263276c4e9..0000000000 --- a/src/osx/carbon/combobox.cpp +++ /dev/null @@ -1,668 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: src/osx/carbon/combobox.cpp -// Purpose: wxComboBox class -// Author: Stefan Csomor, Dan "Bud" Keith (composite combobox) -// Modified by: -// Created: 1998-01-01 -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#include "wx/wxprec.h" - -#if wxUSE_COMBOBOX && wxOSX_USE_CARBON - -#include "wx/combobox.h" - -#ifndef WX_PRECOMP - #include "wx/button.h" - #include "wx/menu.h" - #include "wx/containr.h" - #include "wx/toplevel.h" - #include "wx/textctrl.h" -#endif - -#include "wx/osx/private.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// the margin between the text control and the choice -// margin should be bigger on OS X due to blue highlight -// around text control. -static const wxCoord MARGIN = 4; -// this is the border a focus rect on OSX is needing -static const int TEXTFOCUSBORDER = 3 ; - - -// ---------------------------------------------------------------------------- -// wxComboBoxText: text control forwards events to combobox -// ---------------------------------------------------------------------------- - -class wxComboBoxText : public wxTextCtrl -{ -public: - wxComboBoxText( wxComboBox * cb ) - : wxTextCtrl( cb , 1 ) - { - m_cb = cb; - } - -protected: - void OnChar( wxKeyEvent& event ) - { - // Allows processing the tab key to go to the next control - if (event.GetKeyCode() == WXK_TAB) - { - wxNavigationKeyEvent NavEvent; - NavEvent.SetEventObject(this); - NavEvent.SetDirection(!event.ShiftDown()); - NavEvent.SetWindowChange(false); - - // Get the parent of the combo and have it process the navigation? - if (m_cb->GetParent()->HandleWindowEvent(NavEvent)) - return; - } - - // send the event to the combobox class in case the user has bound EVT_CHAR - wxKeyEvent kevt(event); - kevt.SetEventObject(m_cb); - if (m_cb->HandleWindowEvent(kevt)) - // If the event was handled and not skipped then we're done - return; - - if ( event.GetKeyCode() == WXK_RETURN ) - { - wxCommandEvent event(wxEVT_TEXT_ENTER, m_cb->GetId()); - event.SetString( GetValue() ); - event.SetInt( m_cb->GetSelection() ); - event.SetEventObject( m_cb ); - - // This will invoke the dialog default action, - // such as the clicking the default button. - if (!m_cb->HandleWindowEvent( event )) - { - wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); - if ( tlw && tlw->GetDefaultItem() ) - { - wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton); - if ( def && def->IsEnabled() ) - { - wxCommandEvent event( wxEVT_BUTTON, def->GetId() ); - event.SetEventObject(def); - def->Command(event); - } - } - - return; - } - } - - event.Skip(); - } - - void OnKeyUp( wxKeyEvent& event ) - { - event.SetEventObject(m_cb); - event.SetId(m_cb->GetId()); - if (! m_cb->HandleWindowEvent(event)) - event.Skip(); - } - - void OnKeyDown( wxKeyEvent& event ) - { - event.SetEventObject(m_cb); - event.SetId(m_cb->GetId()); - if (! m_cb->HandleWindowEvent(event)) - event.Skip(); - } - - void OnText( wxCommandEvent& event ) - { - event.SetEventObject(m_cb); - event.SetId(m_cb->GetId()); - if (! m_cb->HandleWindowEvent(event)) - event.Skip(); - } - - void OnFocus( wxFocusEvent& event ) - { - // in case the textcontrol gets the focus we propagate - // it to the parent's handlers. - wxFocusEvent evt2(event.GetEventType(),m_cb->GetId()); - evt2.SetEventObject(m_cb); - m_cb->GetEventHandler()->ProcessEvent(evt2); - - event.Skip(); - } - -private: - wxComboBox *m_cb; - - wxDECLARE_EVENT_TABLE(); -}; - -wxBEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl) - EVT_KEY_DOWN(wxComboBoxText::OnKeyDown) - EVT_CHAR(wxComboBoxText::OnChar) - EVT_KEY_UP(wxComboBoxText::OnKeyUp) - EVT_SET_FOCUS(wxComboBoxText::OnFocus) - EVT_KILL_FOCUS(wxComboBoxText::OnFocus) - EVT_TEXT(wxID_ANY, wxComboBoxText::OnText) -wxEND_EVENT_TABLE() - -class wxComboBoxChoice : public wxChoice -{ -public: - wxComboBoxChoice( wxComboBox *cb, int style ) - : wxChoice( cb , 1 , wxDefaultPosition , wxDefaultSize , 0 , NULL , style & (wxCB_SORT) ) - { - m_cb = cb; - } - - int GetPopupWidth() const - { - switch ( GetWindowVariant() ) - { - case wxWINDOW_VARIANT_NORMAL : - case wxWINDOW_VARIANT_LARGE : - return 24 ; - - default : - return 21 ; - } - } - -protected: - void OnChoice( wxCommandEvent& e ) - { - wxString s = e.GetString(); - - m_cb->DelegateChoice( s ); - wxCommandEvent event2(wxEVT_COMBOBOX, m_cb->GetId() ); - event2.SetInt(m_cb->GetSelection()); - event2.SetEventObject(m_cb); - event2.SetString(m_cb->GetStringSelection()); - m_cb->ProcessCommand(event2); - - // For consistency with MSW and GTK, also send a text updated event - // After all, the text is updated when a selection is made - wxCommandEvent TextEvent( wxEVT_TEXT, m_cb->GetId() ); - TextEvent.SetString( m_cb->GetStringSelection() ); - TextEvent.SetEventObject( m_cb ); - m_cb->ProcessCommand( TextEvent ); - } - - virtual wxSize DoGetBestSize() const - { - wxSize sz = wxChoice::DoGetBestSize() ; - if (! m_cb->HasFlag(wxCB_READONLY) ) - sz.x = GetPopupWidth() ; - - return sz ; - } - -private: - wxComboBox *m_cb; - - friend class wxComboBox; - - wxDECLARE_EVENT_TABLE(); -}; - -wxBEGIN_EVENT_TABLE(wxComboBoxChoice, wxChoice) - EVT_CHOICE(wxID_ANY, wxComboBoxChoice::OnChoice) -wxEND_EVENT_TABLE() - -wxComboBox::~wxComboBox() -{ - // delete the controls now, don't leave them alive even though they would - // still be eventually deleted by our parent - but it will be too late, the - // user code expects them to be gone now - wxDELETE(m_text); - wxDELETE(m_choice); -} - -// ---------------------------------------------------------------------------- -// geometry -// ---------------------------------------------------------------------------- - -wxSize wxComboBox::DoGetBestSize() const -{ - if (!m_choice && !m_text) - return GetSize(); - - wxSize size = m_choice->GetBestSize(); - - if ( m_text != NULL ) - { - wxSize sizeText = m_text->GetBestSize(); - if (sizeText.y + 2 * TEXTFOCUSBORDER > size.y) - size.y = sizeText.y + 2 * TEXTFOCUSBORDER; - - size.x = m_choice->GetPopupWidth() + sizeText.x + MARGIN; - size.x += TEXTFOCUSBORDER ; - } - else - { - // clipping is too tight - size.y += 1 ; - } - - return size; -} - -void wxComboBox::DoMoveWindow(int x, int y, int width, int height) -{ - wxControl::DoMoveWindow( x, y, width , height ); - - if ( m_text == NULL ) - { - // we might not be fully constructed yet, therefore watch out... - if ( m_choice ) - m_choice->SetSize(0, 0 , width, -1); - } - else - { - wxCoord wText = width - m_choice->GetPopupWidth() - MARGIN; - m_text->SetSize(TEXTFOCUSBORDER, TEXTFOCUSBORDER, wText, -1); - wxSize tSize = m_text->GetSize(); - wxSize cSize = m_choice->GetSize(); - - int yOffset = ( tSize.y + 2 * TEXTFOCUSBORDER - cSize.y ) / 2; - - // put it at an inset of 1 to have outer area shadows drawn as well - m_choice->SetSize(TEXTFOCUSBORDER + wText + MARGIN - 1 , yOffset, m_choice->GetPopupWidth() , -1); - } -} - -// ---------------------------------------------------------------------------- -// operations forwarded to the subcontrols -// ---------------------------------------------------------------------------- - -bool wxComboBox::Enable(bool enable) -{ - if ( !wxControl::Enable(enable) ) - return false; - - if (m_text) - m_text->Enable(enable); - - return true; -} - -bool wxComboBox::Show(bool show) -{ - if ( !wxControl::Show(show) ) - return false; - - return true; -} - -void wxComboBox::DelegateTextChanged( const wxString& value ) -{ - SetStringSelection( value ); -} - -void wxComboBox::DelegateChoice( const wxString& value ) -{ - SetStringSelection( value ); -} - -bool wxComboBox::Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style, - const wxValidator& validator, - const wxString& name) -{ - if ( !Create( parent, id, value, pos, size, 0, NULL, - style, validator, name ) ) - return false; - - Append(choices); - - return true; -} - -bool wxComboBox::Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - int n, - const wxString choices[], - long style, - const wxValidator& validator, - const wxString& name) -{ - if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, style , - validator, name) ) - { - return false; - } - - wxSize csize = size; - if ( style & wxCB_READONLY ) - { - m_text = NULL; - } - else - { - m_text = new wxComboBoxText(this); - if ( size.y == -1 ) - { - csize.y = m_text->GetSize().y ; - csize.y += 2 * TEXTFOCUSBORDER ; - } - } - m_choice = new wxComboBoxChoice(this, style ); - - DoSetSize(pos.x, pos.y, csize.x, csize.y); - - Append( n, choices ); - - // Needed because it is a wxControlWithItems - SetInitialSize(size); - SetStringSelection(value); - - return true; -} - -void wxComboBox::EnableTextChangedEvents(bool enable) -{ - if ( m_text ) - m_text->ForwardEnableTextChangedEvents(enable); -} - -wxString wxComboBox::DoGetValue() const -{ - wxCHECK_MSG( m_text, wxString(), "can't be called for read-only combobox" ); - - return m_text->GetValue(); -} - -wxString wxComboBox::GetValue() const -{ - wxString result; - - if ( m_text == NULL ) - result = m_choice->GetString( m_choice->GetSelection() ); - else - result = m_text->GetValue(); - - return result; -} - -unsigned int wxComboBox::GetCount() const -{ - return m_choice->GetCount() ; -} - -void wxComboBox::SetValue(const wxString& value) -{ - if ( HasFlag(wxCB_READONLY) ) - SetStringSelection( value ) ; - else - m_text->SetValue( value ); -} - -void wxComboBox::WriteText(const wxString& text) -{ - m_text->WriteText(text); -} - -void wxComboBox::GetSelection(long *from, long *to) const -{ - m_text->GetSelection(from, to); -} - -// Clipboard operations - -void wxComboBox::Copy() -{ - if ( m_text != NULL ) - m_text->Copy(); -} - -void wxComboBox::Cut() -{ - if ( m_text != NULL ) - m_text->Cut(); -} - -void wxComboBox::Paste() -{ - if ( m_text != NULL ) - m_text->Paste(); -} - -void wxComboBox::SetEditable(bool editable) -{ - if ( ( m_text == NULL ) && editable ) - { - m_text = new wxComboBoxText( this ); - } - else if ( !editable ) - { - wxDELETE(m_text); - } - - int currentX, currentY; - GetPosition( ¤tX, ¤tY ); - - int currentW, currentH; - GetSize( ¤tW, ¤tH ); - - DoMoveWindow( currentX, currentY, currentW, currentH ); -} - -void wxComboBox::SetInsertionPoint(long pos) -{ - if ( m_text ) - m_text->SetInsertionPoint(pos); -} - -void wxComboBox::SetInsertionPointEnd() -{ - if ( m_text ) - m_text->SetInsertionPointEnd(); -} - -long wxComboBox::GetInsertionPoint() const -{ - if ( m_text ) - return m_text->GetInsertionPoint(); - return 0; -} - -wxTextPos wxComboBox::GetLastPosition() const -{ - if ( m_text ) - return m_text->GetLastPosition(); - return 0; -} - -void wxComboBox::Replace(long from, long to, const wxString& value) -{ - if ( m_text ) - m_text->Replace(from,to,value); -} - -void wxComboBox::Remove(long from, long to) -{ - if ( m_text ) - m_text->Remove(from,to); -} - -void wxComboBox::SetSelection(long from, long to) -{ - if ( m_text ) - m_text->SetSelection(from,to); -} - -int wxComboBox::DoInsertItems(const wxArrayStringsAdapter& items, - unsigned int pos, - void **clientData, - wxClientDataType type) -{ - return m_choice->DoInsertItems(items, pos, clientData, type); -} - -void wxComboBox::DoSetItemClientData(unsigned int n, void* clientData) -{ - return m_choice->DoSetItemClientData( n , clientData ) ; -} - -void* wxComboBox::DoGetItemClientData(unsigned int n) const -{ - return m_choice->DoGetItemClientData( n ) ; -} - -wxClientDataType wxComboBox::GetClientDataType() const -{ - return m_choice->GetClientDataType(); -} - -void wxComboBox::SetClientDataType(wxClientDataType clientDataItemsType) -{ - m_choice->SetClientDataType(clientDataItemsType); -} - -void wxComboBox::DoDeleteOneItem(unsigned int n) -{ - m_choice->DoDeleteOneItem( n ); -} - -void wxComboBox::DoClear() -{ - m_choice->DoClear(); -} - -int wxComboBox::GetSelection() const -{ - return m_choice->GetSelection(); -} - -void wxComboBox::SetSelection(int n) -{ - m_choice->SetSelection( n ); - - if ( m_text != NULL ) - m_text->SetValue(n != wxNOT_FOUND ? GetString(n) : wxString(wxEmptyString)); -} - -int wxComboBox::FindString(const wxString& s, bool bCase) const -{ - return m_choice->FindString( s, bCase ); -} - -wxString wxComboBox::GetString(unsigned int n) const -{ - return m_choice->GetString( n ); -} - -wxString wxComboBox::GetStringSelection() const -{ - int sel = GetSelection(); - if (sel != wxNOT_FOUND) - return wxString(this->GetString((unsigned int)sel)); - else - return wxEmptyString; -} - -void wxComboBox::SetString(unsigned int n, const wxString& s) -{ - m_choice->SetString( n , s ); -} - -bool wxComboBox::IsEditable() const -{ - return m_text != NULL && !HasFlag(wxCB_READONLY); -} - -void wxComboBox::Undo() -{ - if (m_text != NULL) - m_text->Undo(); -} - -void wxComboBox::Redo() -{ - if (m_text != NULL) - m_text->Redo(); -} - -void wxComboBox::SelectAll() -{ - if (m_text != NULL) - m_text->SelectAll(); -} - -bool wxComboBox::CanCopy() const -{ - if (m_text != NULL) - return m_text->CanCopy(); - else - return false; -} - -bool wxComboBox::CanCut() const -{ - if (m_text != NULL) - return m_text->CanCut(); - else - return false; -} - -bool wxComboBox::CanPaste() const -{ - if (m_text != NULL) - return m_text->CanPaste(); - else - return false; -} - -bool wxComboBox::CanUndo() const -{ - if (m_text != NULL) - return m_text->CanUndo(); - else - return false; -} - -bool wxComboBox::CanRedo() const -{ - if (m_text != NULL) - return m_text->CanRedo(); - else - return false; -} - -bool wxComboBox::OSXHandleClicked( double WXUNUSED(timestampsec) ) -{ -/* - For consistency with other platforms, clicking in the text area does not constitute a selection - wxCommandEvent event(wxEVT_COMBOBOX, m_windowId ); - event.SetInt(GetSelection()); - event.SetEventObject(this); - event.SetString(GetStringSelection()); - ProcessCommand(event); -*/ - - return true ; -} - -wxTextWidgetImpl* wxComboBox::GetTextPeer() const -{ - if (m_text) - return m_text->GetTextPeer(); - - return NULL; -} - -#endif // wxUSE_COMBOBOX && wxOSX_USE_CARBON diff --git a/src/osx/carbon/combobxc.cpp b/src/osx/carbon/combobxc.cpp deleted file mode 100644 index e6aaa1857f..0000000000 --- a/src/osx/carbon/combobxc.cpp +++ /dev/null @@ -1,783 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: src/osx/carbon/combobxc.cpp -// Purpose: wxComboBox class using HIView ComboBox -// Author: Stefan Csomor -// Modified by: -// Created: 1998-01-01 -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#include "wx/wxprec.h" - -#include "wx/combobox.h" - -#ifndef WX_PRECOMP - #include "wx/button.h" - #include "wx/menu.h" -#endif - -#include "wx/osx/uma.h" -#if TARGET_API_MAC_OSX -#ifndef __HIVIEW__ - #include -#endif -#endif - -#if TARGET_API_MAC_OSX -#define USE_HICOMBOBOX 1 //use hi combobox define -#else -#define USE_HICOMBOBOX 0 -#endif - -static int nextPopUpMenuId = 1000; -MenuHandle NewUniqueMenu() -{ - MenuHandle handle = NewMenu( nextPopUpMenuId , "\pMenu" ); - nextPopUpMenuId++; - return handle; -} - -#if USE_HICOMBOBOX -static const EventTypeSpec eventList[] = -{ - { kEventClassTextField , kEventTextAccepted } , -}; - -static pascal OSStatus wxMacComboBoxEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) -{ - OSStatus result = eventNotHandledErr; - wxComboBox* cb = (wxComboBox*) data; - - wxMacCarbonEvent cEvent( event ); - - switch( cEvent.GetClass() ) - { - case kEventClassTextField : - switch( cEvent.GetKind() ) - { - case kEventTextAccepted : - { - wxCommandEvent event( wxEVT_COMBOBOX, cb->GetId() ); - event.SetInt( cb->GetSelection() ); - event.SetString( cb->GetStringSelection() ); - event.SetEventObject( cb ); - cb->HandleWindowEvent( event ); - } - break; - default : - break; - } - break; - default : - break; - } - - - return result; -} - -DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacComboBoxEventHandler ) - -#endif - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// the margin between the text control and the choice -static const wxCoord MARGIN = 2; -#if TARGET_API_MAC_OSX -static const int POPUPWIDTH = 24; -#else -static const int POPUPWIDTH = 18; -#endif -static const int POPUPHEIGHT = 23; - -// ---------------------------------------------------------------------------- -// wxComboBoxText: text control forwards events to combobox -// ---------------------------------------------------------------------------- - -class wxComboBoxText : public wxTextCtrl -{ -public: - wxComboBoxText( wxComboBox * cb ) - : wxTextCtrl( cb , 1 ) - { - m_cb = cb; - } - -protected: - void OnChar( wxKeyEvent& event ) - { - if ( event.GetKeyCode() == WXK_RETURN ) - { - wxString value = GetValue(); - - if ( m_cb->GetCount() == 0 ) - { - // make Enter generate "selected" event if there is only one item - // in the combobox - without it, it's impossible to select it at - // all! - wxCommandEvent event( wxEVT_COMBOBOX, m_cb->GetId() ); - event.SetInt( 0 ); - event.SetString( value ); - event.SetEventObject( m_cb ); - m_cb->HandleWindowEvent( event ); - } - else - { - // add the item to the list if it's not there yet - if ( m_cb->FindString(value) == wxNOT_FOUND ) - { - m_cb->Append(value); - m_cb->SetStringSelection(value); - - // and generate the selected event for it - wxCommandEvent event( wxEVT_COMBOBOX, m_cb->GetId() ); - event.SetInt( m_cb->GetCount() - 1 ); - event.SetString( value ); - event.SetEventObject( m_cb ); - m_cb->HandleWindowEvent( event ); - } - - // This will invoke the dialog default action, such - // as the clicking the default button. - - wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); - if ( tlw && tlw->GetDefaultItem() ) - { - wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton); - if ( def && def->IsEnabled() ) - { - wxCommandEvent event(wxEVT_BUTTON, def->GetId() ); - event.SetEventObject(def); - def->Command(event); - return; - } - } - - return; - } - } - - event.Skip(); - } -private: - wxComboBox *m_cb; - - wxDECLARE_EVENT_TABLE(); -}; - -wxBEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl) - EVT_CHAR( wxComboBoxText::OnChar) -wxEND_EVENT_TABLE() - -class wxComboBoxChoice : public wxChoice -{ -public: - wxComboBoxChoice(wxComboBox *cb, int style) - : wxChoice( cb , 1 ) - { - m_cb = cb; - } - -protected: - void OnChoice( wxCommandEvent& e ) - { - wxString s = e.GetString(); - - m_cb->DelegateChoice( s ); - wxCommandEvent event2(wxEVT_COMBOBOX, m_cb->GetId() ); - event2.SetInt(m_cb->GetSelection()); - event2.SetEventObject(m_cb); - event2.SetString(m_cb->GetStringSelection()); - m_cb->ProcessCommand(event2); - } - virtual wxSize DoGetBestSize() const - { - wxSize sz = wxChoice::DoGetBestSize(); - sz.x = POPUPWIDTH; - return sz; - } - -private: - wxComboBox *m_cb; - - wxDECLARE_EVENT_TABLE(); -}; - -wxBEGIN_EVENT_TABLE(wxComboBoxChoice, wxChoice) - EVT_CHOICE(wxID_ANY, wxComboBoxChoice::OnChoice) -wxEND_EVENT_TABLE() - -wxComboBox::~wxComboBox() -{ - // delete the controls now, don't leave them alive even though they would - // still be eventually deleted by our parent - but it will be too late, the - // user code expects them to be gone now - wxDELETE( m_text ); - wxDELETE( m_choice ); -} - - -// ---------------------------------------------------------------------------- -// geometry -// ---------------------------------------------------------------------------- - -wxSize wxComboBox::DoGetBestSize() const -{ -#if USE_HICOMBOBOX - return wxControl::DoGetBestSize(); -#else - wxSize size = m_choice->GetBestSize(); - - if ( m_text != NULL ) - { - wxSize sizeText = m_text->GetBestSize(); - - size.x = POPUPWIDTH + sizeText.x + MARGIN; - } - - return size; -#endif -} - -void wxComboBox::DoMoveWindow(int x, int y, int width, int height) { -#if USE_HICOMBOBOX - wxControl::DoMoveWindow(x, y, width, height); -#else - height = POPUPHEIGHT; - - wxControl::DoMoveWindow(x, y, width, height); - - if ( m_text == NULL ) - { - // we might not be fully constructed yet, therefore watch out... - if ( m_choice ) - m_choice->SetSize(0, 0 , width, wxDefaultCoord); - } - else - { - wxCoord wText = width - POPUPWIDTH - MARGIN; - m_text->SetSize(0, 0, wText, height); - m_choice->SetSize(0 + wText + MARGIN, 0, POPUPWIDTH, wxDefaultCoord); - } -#endif -} - - - -// ---------------------------------------------------------------------------- -// operations forwarded to the subcontrols -// ---------------------------------------------------------------------------- - -bool wxComboBox::Enable(bool enable) -{ - if ( !wxControl::Enable(enable) ) - return false; - - return true; -} - -bool wxComboBox::Show(bool show) -{ - if ( !wxControl::Show(show) ) - return false; - - return true; -} - -void wxComboBox::SetFocus() -{ -#if USE_HICOMBOBOX - wxControl::SetFocus(); -#else - if ( m_text != NULL) { - m_text->SetFocus(); - } -#endif -} - - -void wxComboBox::DelegateTextChanged( const wxString& value ) -{ - SetStringSelection( value ); -} - - -void wxComboBox::DelegateChoice( const wxString& value ) -{ - SetStringSelection( value ); -} - - -bool wxComboBox::Create(wxWindow *parent, wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style, - const wxValidator& validator, - const wxString& name) -{ - wxCArrayString chs( choices ); - - return Create( parent, id, value, pos, size, chs.GetCount(), - chs.GetStrings(), style, validator, name ); -} - - -bool wxComboBox::Create(wxWindow *parent, wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - int n, const wxString choices[], - long style, - const wxValidator& validator, - const wxString& name) -{ - m_text = NULL; - m_choice = NULL; -#if USE_HICOMBOBOX - DontCreatePeer(); -#endif - if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, style , - wxDefaultValidator, name) ) - { - return false; - } -#if USE_HICOMBOBOX - Rect bounds = wxMacGetBoundsForControl( this , pos , size ); - HIRect hiRect; - - hiRect.origin.x = 20; //bounds.left; - hiRect.origin.y = 25; //bounds.top; - hiRect.size.width = 120;// bounds.right - bounds.left; - hiRect.size.height = 24; - - //For some reason, this code causes the combo box not to be displayed at all. - //hiRect.origin.x = bounds.left; - //hiRect.origin.y = bounds.top; - //hiRect.size.width = bounds.right - bounds.left; - //hiRect.size.height = bounds.bottom - bounds.top; - //printf("left = %d, right = %d, top = %d, bottom = %d\n", bounds.left, bounds.right, bounds.top, bounds.bottom); - //printf("x = %d, y = %d, width = %d, height = %d\n", hibounds.origin.x, hibounds.origin.y, hibounds.size.width, hibounds.size.height); - m_peer = new wxMacControl(this); - verify_noerr( HIComboBoxCreate( &hiRect, CFSTR(""), NULL, NULL, kHIComboBoxStandardAttributes, m_peer->GetControlRefAddr() ) ); - - - m_peer->SetMinimum( 0 ); - m_peer->SetMaximum( 100); - if ( n > 0 ) - m_peer->SetValue( 1 ); - - MacPostControlCreate(pos,size); - - Append( choices[ i ] ); - - HIViewSetVisible( m_peer->GetControlRef(), true ); - SetSelection(0); - EventHandlerRef comboEventHandler; - InstallControlEventHandler( m_peer->GetControlRef(), GetwxMacComboBoxEventHandlerUPP(), - GetEventTypeCount(eventList), eventList, this, - (EventHandlerRef *)&comboEventHandler); -#else - m_choice = new wxComboBoxChoice(this, style ); - m_choice->SetMinSize( wxSize( POPUPWIDTH , POPUPHEIGHT ) ); - - wxSize csize = size; - if ( style & wxCB_READONLY ) - { - m_text = NULL; - } - else - { - m_text = new wxComboBoxText(this); - if ( size.y == wxDefaultCoord ) { - csize.y = m_text->GetSize().y; - } - } - - DoSetSize(pos.x, pos.y, csize.x, csize.y); - - m_choice->Append( n, choices ); - SetInitialSize(csize); // Needed because it is a wxControlWithItems -#endif - - return true; -} - -wxString wxComboBox::GetValue() const -{ -#if USE_HICOMBOBOX - CFStringRef myString; - HIComboBoxCopyTextItemAtIndex( m_peer->GetControlRef(), (CFIndex)GetSelection(), &myString ); - return wxMacCFStringHolder( myString, GetFont().GetEncoding() ).AsString(); -#else - wxString result; - - if ( m_text == NULL ) - { - result = m_choice->GetString( m_choice->GetSelection() ); - } - else - { - result = m_text->GetValue(); - } - - return result; -#endif -} - -void wxComboBox::SetValue(const wxString& value) -{ -#if USE_HICOMBOBOX - -#else - int s = FindString (value); - if (s == wxNOT_FOUND && !HasFlag(wxCB_READONLY) ) - { - m_choice->Append(value); - } - SetStringSelection( value ); -#endif -} - -// Clipboard operations -void wxComboBox::Copy() -{ - if ( m_text != NULL ) - { - m_text->Copy(); - } -} - -void wxComboBox::Cut() -{ - if ( m_text != NULL ) - { - m_text->Cut(); - } -} - -void wxComboBox::Paste() -{ - if ( m_text != NULL ) - { - m_text->Paste(); - } -} - -void wxComboBox::SetEditable(bool editable) -{ - if ( ( m_text == NULL ) && editable ) - { - m_text = new wxComboBoxText( this ); - } - else if ( !editable ) - { - wxDELETE(m_text); - } - - int currentX, currentY; - GetPosition( ¤tX, ¤tY ); - - int currentW, currentH; - GetSize( ¤tW, ¤tH ); - - DoMoveWindow( currentX, currentY, currentW, currentH ); -} - -void wxComboBox::SetInsertionPoint(long pos) -{ - // TODO -} - -void wxComboBox::SetInsertionPointEnd() -{ - // TODO -} - -long wxComboBox::GetInsertionPoint() const -{ - // TODO - return 0; -} - -wxTextPos wxComboBox::GetLastPosition() const -{ - // TODO - return 0; -} - -void wxComboBox::Replace(long from, long to, const wxString& value) -{ - // TODO -} - -void wxComboBox::Remove(long from, long to) -{ - // TODO -} - -void wxComboBox::SetSelection(long from, long to) -{ - // TODO -} - -int wxComboBox::DoInsertItems(const wxArrayStringsAdapter& items, - unsigned int pos, - void **clientData, wxClientDataType type) -{ -#if USE_HICOMBOBOX - const unsigned int count = items.GetCount(); - for ( unsigned int i = 0; i < count; ++i, ++pos ) - { - HIComboBoxInsertTextItemAtIndex(m_peer->GetControlRef(), - (CFIndex)pos, - wxMacCFStringHolder(items[i], - GetFont().GetEncoding())); - AssignNewItemClientData(pos, clientData, i, type); - } - - //SetControl32BitMaximum( m_peer->GetControlRef(), GetCount() ); - - return pos - 1; -#else - return m_choice->DoInsertItems( items, pos, clientData, type ); -#endif -} - -void wxComboBox::DoSetItemClientData(unsigned int n, void* clientData) -{ -#if USE_HICOMBOBOX - return; //TODO -#else - return m_choice->DoSetItemClientData( n , clientData ); -#endif -} - -void* wxComboBox::DoGetItemClientData(unsigned int n) const -{ -#if USE_HICOMBOBOX - return NULL; //TODO -#else - return m_choice->DoGetItemClientData( n ); -#endif -} - -unsigned int wxComboBox::GetCount() const { -#if USE_HICOMBOBOX - return (unsigned int) HIComboBoxGetItemCount( m_peer->GetControlRef() ); -#else - return m_choice->GetCount(); -#endif -} - -void wxComboBox::DoDeleteOneItem(unsigned int n) -{ -#if USE_HICOMBOBOX - HIComboBoxRemoveItemAtIndex( m_peer->GetControlRef(), (CFIndex)n ); -#else - m_choice->Delete( n ); -#endif -} - -void wxComboBox::DoClear() -{ -#if USE_HICOMBOBOX - for ( CFIndex i = GetCount() - 1; i >= 0; ++ i ) - verify_noerr( HIComboBoxRemoveItemAtIndex( m_peer->GetControlRef(), i ) ); - m_peer->SetData(kHIComboBoxEditTextPart,kControlEditTextCFStringTag,CFSTR("")); -#else - m_choice->Clear(); -#endif -} - -int wxComboBox::GetSelection() const -{ -#if USE_HICOMBOBOX - return FindString( GetStringSelection() ); -#else - return m_choice->GetSelection(); -#endif -} - -void wxComboBox::SetSelection(int n) -{ -#if USE_HICOMBOBOX - SetControl32BitValue( m_peer->GetControlRef() , n + 1 ); -#else - m_choice->SetSelection( n ); - - if ( m_text != NULL ) - { - m_text->SetValue(GetString(n)); - } -#endif -} - -int wxComboBox::FindString(const wxString& s, bool bCase) const -{ -#if USE_HICOMBOBOX - for( unsigned int i = 0 ; i < GetCount() ; i++ ) - { - if (GetString(i).IsSameAs(s, bCase) ) - return i ; - } - return wxNOT_FOUND; -#else - return m_choice->FindString( s, bCase ); -#endif -} - -wxString wxComboBox::GetString(unsigned int n) const -{ -#if USE_HICOMBOBOX - CFStringRef itemText; - HIComboBoxCopyTextItemAtIndex( m_peer->GetControlRef(), (CFIndex)n, &itemText ); - return wxMacCFStringHolder(itemText).AsString(); -#else - return m_choice->GetString( n ); -#endif -} - -wxString wxComboBox::GetStringSelection() const -{ -#if USE_HICOMBOBOX - return wxMacCFStringHolder(m_peer->GetData(kHIComboBoxEditTextPart,kControlEditTextCFStringTag)).AsString(); -#else - int sel = GetSelection (); - if (sel != wxNOT_FOUND) - return wxString(this->GetString((unsigned int)sel)); - else - return wxEmptyString; -#endif -} - -void wxComboBox::SetString(unsigned int n, const wxString& s) -{ -#if USE_HICOMBOBOX - verify_noerr ( HIComboBoxInsertTextItemAtIndex( m_peer->GetControlRef(), (CFIndex) n, - wxMacCFStringHolder(s, GetFont().GetEncoding()) ) ); - verify_noerr ( HIComboBoxRemoveItemAtIndex( m_peer->GetControlRef(), (CFIndex) n + 1 ) ); -#else - m_choice->SetString( n , s ); -#endif -} - -bool wxComboBox::IsEditable() const -{ -#if USE_HICOMBOBOX - // TODO - return !HasFlag(wxCB_READONLY); -#else - return m_text != NULL && !HasFlag(wxCB_READONLY); -#endif -} - -void wxComboBox::Undo() -{ -#if USE_HICOMBOBOX - // TODO -#else - if (m_text != NULL) - m_text->Undo(); -#endif -} - -void wxComboBox::Redo() -{ -#if USE_HICOMBOBOX - // TODO -#else - if (m_text != NULL) - m_text->Redo(); -#endif -} - -void wxComboBox::SelectAll() -{ -#if USE_HICOMBOBOX - // TODO -#else - if (m_text != NULL) - m_text->SelectAll(); -#endif -} - -bool wxComboBox::CanCopy() const -{ -#if USE_HICOMBOBOX - // TODO - return false; -#else - if (m_text != NULL) - return m_text->CanCopy(); - else - return false; -#endif -} - -bool wxComboBox::CanCut() const -{ -#if USE_HICOMBOBOX - // TODO - return false; -#else - if (m_text != NULL) - return m_text->CanCut(); - else - return false; -#endif -} - -bool wxComboBox::CanPaste() const -{ -#if USE_HICOMBOBOX - // TODO - return false; -#else - if (m_text != NULL) - return m_text->CanPaste(); - else - return false; -#endif -} - -bool wxComboBox::CanUndo() const -{ -#if USE_HICOMBOBOX - // TODO - return false; -#else - if (m_text != NULL) - return m_text->CanUndo(); - else - return false; -#endif -} - -bool wxComboBox::CanRedo() const -{ -#if USE_HICOMBOBOX - // TODO - return false; -#else - if (m_text != NULL) - return m_text->CanRedo(); - else - return false; -#endif -} - -bool wxComboBox::OSXHandleClicked( double timestampsec ) -{ - wxCommandEvent event(wxEVT_COMBOBOX, m_windowId ); - event.SetInt(GetSelection()); - event.SetEventObject(this); - event.SetString(GetStringSelection()); - ProcessCommand(event); - return true; -} diff --git a/src/osx/carbon/dirmac.cpp b/src/osx/carbon/dirmac.cpp deleted file mode 100644 index f565a30688..0000000000 --- a/src/osx/carbon/dirmac.cpp +++ /dev/null @@ -1,256 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: src/osx/carbon/dirmac.cpp -// Purpose: wxDir implementation for Mac -// Author: Stefan Csomor -// Modified by: -// Created: 08.12.99 -// Copyright: (c) 1999 Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// ============================================================================ -// declarations -// ============================================================================ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -// For compilers that support precompilation, includes "wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#include "wx/dir.h" - -#ifndef WX_PRECOMP - #include "wx/intl.h" - #include "wx/log.h" -#endif // PCH - -#include "wx/filename.h" -#include "wx/osx/private.h" - -// ---------------------------------------------------------------------------- -// private classes -// ---------------------------------------------------------------------------- - -// this class stores everything we need to enumerate the files -class wxDirData -{ -public: - wxDirData(const wxString& dirname); - ~wxDirData(); - - void Close() ; - void SetFileSpec(const wxString& filespec) { m_filespec = filespec; } - void SetFlags(int flags) { m_flags = flags; } - - bool Read(wxString *filename); // reads the next - void Rewind() ; - - const wxString& GetName() const { return m_dirname; } - -private: - FSIterator m_iterator ; - - wxString m_dirname; - wxString m_filespec; - - int m_flags; -}; - -// ============================================================================ -// implementation -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxDirData -// ---------------------------------------------------------------------------- - -wxDirData::wxDirData(const wxString& dirname) - : m_dirname(dirname) -{ - // throw away the trailing slashes - size_t n = m_dirname.length(); - wxCHECK_RET( n, wxT("empty dir name in wxDir") ); - - while ( n > 0 && wxIsPathSeparator(m_dirname[--n]) ) - ; - - m_dirname.Truncate(n + 1); - m_iterator = NULL ; -} - -wxDirData::~wxDirData() -{ - Close() ; -} - -void wxDirData::Close() -{ - if ( m_iterator ) - { - FSCloseIterator( m_iterator ) ; - m_iterator = NULL ; - } -} - -void wxDirData::Rewind() -{ - Close() ; -} - -bool wxDirData::Read(wxString *filename) -{ - wxString result; - OSStatus err = noErr ; - if ( NULL == m_iterator ) - { - FSRef dirRef; - err = wxMacPathToFSRef( m_dirname , &dirRef ) ; - if ( err == noErr ) - { - err = FSOpenIterator(&dirRef, kFSIterateFlat, &m_iterator); - } - if ( err ) - { - Close() ; - return false ; - } - } - - wxString name ; - wxString lowerfilespec = m_filespec.Lower(); - - while( noErr == err ) - { - HFSUniStr255 uniname ; - FSRef fileRef; - FSCatalogInfo catalogInfo; - ItemCount fetched = 0; - - err = FSGetCatalogInfoBulk( m_iterator, 1, &fetched, NULL, kFSCatInfoNodeFlags | kFSCatInfoFinderInfo , &catalogInfo , &fileRef, NULL, &uniname ); - - // expected error codes - - if ( errFSNoMoreItems == err ) - return false ; - if ( afpAccessDenied == err ) - return false ; - - if ( noErr != err ) - break ; - - name = wxMacHFSUniStrToString( &uniname ) ; - wxString lowername = name.Lower(); - - if ( ( name == wxT(".") || name == wxT("..") ) && !(m_flags & wxDIR_DOTDOT) ) - continue; - - if ( ( name[0U] == '.' ) && !(m_flags & wxDIR_HIDDEN ) ) - continue ; - - if ( (((FileInfo*)&catalogInfo.finderInfo)->finderFlags & kIsInvisible ) && !(m_flags & wxDIR_HIDDEN ) ) - continue ; - - // its a dir and we don't want it - if ( (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask) && !(m_flags & wxDIR_DIRS) ) - continue ; - - // its a file but we don't want it - if ( (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask) == 0 && !(m_flags & wxDIR_FILES ) ) - continue ; - - if ( m_filespec.empty() || m_filespec == wxT("*.*") || m_filespec == wxT("*") ) - { - } - else if ( !wxMatchWild(lowerfilespec, lowername , false) ) - { - continue ; - } - - break ; - } - if ( err != noErr ) - { - return false ; - } - - *filename = name ; - return true; -} - -// ---------------------------------------------------------------------------- -// wxDir construction/destruction -// ---------------------------------------------------------------------------- - -wxDir::wxDir(const wxString& dirname) -{ - m_data = NULL; - - (void)Open(dirname); -} - -bool wxDir::Open(const wxString& dirname) -{ - delete m_data; - m_data = new wxDirData(dirname); - - return true; -} - -bool wxDir::IsOpened() const -{ - return m_data != NULL; -} - -wxString wxDir::GetName() const -{ - wxString name; - if ( m_data ) - { - name = m_data->GetName(); - if ( !name.empty() && (name.Last() == wxT('/')) ) - { - // chop off the last (back)slash - name.Truncate(name.length() - 1); - } - } - - return name; -} - -wxDir::~wxDir() -{ - wxDELETE(m_data); -} - -// ---------------------------------------------------------------------------- -// wxDir enumerating -// ---------------------------------------------------------------------------- - -bool wxDir::GetFirst(wxString *filename, - const wxString& filespec, - int flags) const -{ - wxCHECK_MSG( IsOpened(), false, wxT("must wxDir::Open() first") ); - - m_data->Rewind(); - - m_data->SetFileSpec(filespec); - m_data->SetFlags(flags); - - return GetNext(filename); -} - -bool wxDir::GetNext(wxString *filename) const -{ - wxCHECK_MSG( IsOpened(), false, wxT("must wxDir::Open() first") ); - - wxCHECK_MSG( filename, false, wxT("bad pointer in wxDir::GetNext()") ); - - return m_data->Read(filename); -} From c17202c6965c0829fa755ed805c5c7376a72a669 Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Fri, 4 Mar 2016 15:16:04 +0100 Subject: [PATCH 4/5] Remove extra handling of wxAppTraits::GetStandardPaths() on OS X. Since the removal of carbon in 5ba67c67e47d069f65d648ab16dfc505c5400bfc there is no longer any special handling required. --- include/wx/apptrait.h | 1 - include/wx/unix/apptrait.h | 3 --- src/osx/core/utilsexc_cf.cpp | 20 -------------------- 3 files changed, 24 deletions(-) diff --git a/include/wx/apptrait.h b/include/wx/apptrait.h index d69a7b964c..51168eb5d6 100644 --- a/include/wx/apptrait.h +++ b/include/wx/apptrait.h @@ -73,7 +73,6 @@ public: virtual wxRendererNative *CreateRenderer() = 0; // wxStandardPaths object is normally the same for wxBase and wxGUI - // except in the case of wxMac and wxCocoa virtual wxStandardPaths& GetStandardPaths(); diff --git a/include/wx/unix/apptrait.h b/include/wx/unix/apptrait.h index dc96980526..1095a3c37b 100644 --- a/include/wx/unix/apptrait.h +++ b/include/wx/unix/apptrait.h @@ -58,9 +58,6 @@ public: virtual void MutexGuiLeave() wxOVERRIDE; #endif -#if defined(__WXMAC__) && wxUSE_STDPATHS - virtual wxStandardPaths& GetStandardPaths() wxOVERRIDE; -#endif wxPortId GetToolkitVersion(int *majVer = NULL, int *minVer = NULL, int *microVer = NULL) const wxOVERRIDE; diff --git a/src/osx/core/utilsexc_cf.cpp b/src/osx/core/utilsexc_cf.cpp index e071bd255f..2614cb4fc4 100644 --- a/src/osx/core/utilsexc_cf.cpp +++ b/src/osx/core/utilsexc_cf.cpp @@ -152,26 +152,6 @@ wxEventLoopSourcesManagerBase* wxGUIAppTraits::GetEventLoopSourcesManager() ///////////////////////////////////////////////////////////////////////////// -// NOTE: This doesn't really belong here but this was a handy file to -// put it in because it's already compiled for wxCocoa and wxMac GUI lib. -#if wxUSE_STDPATHS -wxStandardPaths& wxGUIAppTraits::GetStandardPaths() -{ - // Derive a class just to be able to create it: wxStandardPaths ctor is - // protected to prevent its misuse, but it also means we can't create an - // object of this class directly. - class wxStandardPathsDefault : public wxStandardPaths - { - public: - wxStandardPathsDefault() { } - }; - - static wxStandardPathsDefault gs_stdPaths; - - return gs_stdPaths; -} -#endif - #if wxUSE_SOCKETS // we need to implement this method in a file of the core library as it should From 7dd279c49e5f81523e29f8973d248d98946538cc Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Fri, 4 Mar 2016 15:29:33 +0100 Subject: [PATCH 5/5] Remove duplicate wxmac icon file. osx/carbon/wxmac.icns contained an older version of the logo and was used when building samples. --- src/osx/carbon/wxmac.icns | Bin 36901 -> 45458 bytes src/osx/wxmac.icns | Bin 45458 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/osx/wxmac.icns diff --git a/src/osx/carbon/wxmac.icns b/src/osx/carbon/wxmac.icns index 2c4e6f097d2f4315aaabf16668dbab4f4db6ebd0..5ec807b5d66d0e6f9b78cbee335154826d2e64e0 100644 GIT binary patch literal 45458 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 KIRZa^1pXfZSr0V; literal 36901 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 KIRZa^1pXfZSr0V;