This commit is contained in:
JulianSmart 2015-10-07 14:41:13 +01:00
commit ca606fb3b6
103 changed files with 3992 additions and 4076 deletions

4
.gitattributes vendored
View file

@ -27,8 +27,12 @@
configure.in eol=lf
Makefile.am eol=lf
Makefile.in eol=lf
makefile.unx eol=lf
config.guess eol=lf
config.sub eol=lf
configure eol=lf
configure.in eol=lf
# Ignore changes in the generated files.
build/upmake -diff

2422
.gitignore vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -30,6 +30,12 @@
autoconf,borland,dmars_smake,dmars,mingw,msvc,msvc6prj,msevc4prj,msvs2003prj,msvs2005prj,msvs2008prj,watcom
</add-formats>
<!-- MSVC projects for the library itself (but not the samples etc) are now
kept up to date with upmake, not bakefile -->
<del-formats files="wx.bkl">
msvs2003prj,msvs2005prj,msvs2008prj
</del-formats>
<del-formats files="../../samples/*.bkl">
autoconf,msvc6prj,msevc4prj,msvs2003prj,msvs2005prj,msvs2008prj
</del-formats>

View file

@ -69,7 +69,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/unix/fdiounix.cpp
src/unix/snglinst.cpp
src/unix/stackwalk.cpp
src/unix/stdpaths.cpp
src/unix/timerunx.cpp
src/unix/threadpsx.cpp
src/unix/utilsunx.cpp
@ -85,7 +84,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/unix/evtloop.h
wx/unix/evtloopsrc.h
wx/unix/pipe.h
wx/unix/stdpaths.h
wx/unix/stackwalk.h
wx/unix/tls.h
wx/unix/fswatcher_kqueue.h
@ -115,10 +113,12 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="BASE_UNIX_SRC" hints="files">
$(BASE_UNIX_AND_DARWIN_NOTWXMAC_SRC)
src/unix/fswatcher_inotify.cpp
src/unix/stdpaths.cpp
</set>
<set var="BASE_UNIX_HDR" hints="files">
$(BASE_UNIX_AND_DARWIN_NOTWXMAC_HDR)
wx/unix/fswatcher_inotify.h
wx/unix/stdpaths.h
</set>
<!-- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
@ -181,7 +181,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="BASE_COREFOUNDATION_SRC" hints="files">
src/osx/core/cfstring.cpp
src/osx/core/evtloop_cf.cpp
src/osx/core/stdpaths_cf.cpp
src/osx/core/strconv_cf.cpp
src/osx/core/utilsexc_base.cpp
</set>
@ -212,11 +211,14 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="BASE_AND_GUI_OSX_CARBON_SRC" hints="files">
src/osx/carbon/utils.cpp
src/osx/carbon/uma.cpp
src/unix/stdpaths.cpp
src/osx/core/stdpaths_cf.cpp
</set>
<set var="BASE_AND_GUI_OSX_COCOA_SRC" hints="files">
src/osx/cocoa/utils.mm
src/osx/cocoa/power.mm
src/osx/cocoa/stdpaths.mm
</set>
<set var="BASE_AND_GUI_OSX_IPHONE_SRC" hints="files">
@ -2289,7 +2291,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/osx/carbon/overlay.cpp
src/osx/carbon/popupwin.cpp
src/osx/carbon/renderer.cpp
src/osx/carbon/settings.cpp
src/osx/carbon/statbrma.cpp
src/osx/carbon/region.cpp
<!-- cocoa bridge -->
@ -2454,6 +2455,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/osx/carbon/toolbar.cpp
src/osx/carbon/tooltip.cpp
src/osx/carbon/window.cpp
src/osx/carbon/settings.cpp
</set>
<!-- wxMac Carbon header files -->
@ -2510,6 +2512,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/osx/cocoa/toolbar.mm
src/osx/cocoa/tooltip.mm
src/osx/cocoa/window.mm
src/osx/cocoa/settings.mm
</set>
<set var="OSX_COCOA_HDR" hints="files">
wx/osx/cocoa/chkconf.h
@ -3653,6 +3656,18 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/aui/tabartgtk.h
</if>
</set>
<set var="AUI_MSW_SRC" hints="files">
src/aui/tabartmsw.cpp
</set>
<set var="AUI_MSW_HDR" hints="files">
wx/aui/tabartmsw.h
</set>
<set var="AUI_PLATFORM_SRC" hints="files">
<if cond="TOOLKIT=='MSW'">$(AUI_MSW_SRC)</if>
</set>
<set var="AUI_PLATFORM_HDR" hints="files">
<if cond="TOOLKIT=='MSW'">$(AUI_MSW_HDR)</if>
</set>
<set var="AUI_CMN_SRC" hints="files">
src/aui/framemanager.cpp
src/aui/dockart.cpp
@ -3667,6 +3682,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="AUI_SRC" hints="files">
$(AUI_CMN_SRC)
$(AUI_GTK_SRC)
$(AUI_PLATFORM_SRC)
</set>
<set var="AUI_CMN_HDR" hints="files">
wx/aui/framemanager.h
@ -3683,6 +3699,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
<set var="AUI_HDR" hints="files">
$(AUI_CMN_HDR)
$(AUI_GTK_HDR)
$(AUI_PLATFORM_HDR)
</set>
<!-- ====================================================================== -->

View file

@ -33,7 +33,6 @@ BASE_UNIX_AND_DARWIN_SRC =
src/unix/fdiounix.cpp
src/unix/snglinst.cpp
src/unix/stackwalk.cpp
src/unix/stdpaths.cpp
src/unix/timerunx.cpp
src/unix/threadpsx.cpp
src/unix/utilsunx.cpp
@ -48,7 +47,6 @@ BASE_UNIX_AND_DARWIN_HDR =
wx/unix/evtloop.h
wx/unix/evtloopsrc.h
wx/unix/pipe.h
wx/unix/stdpaths.h
wx/unix/stackwalk.h
wx/unix/tls.h
wx/unix/fswatcher_kqueue.h
@ -71,10 +69,12 @@ BASE_UNIX_AND_DARWIN_NOTWXMAC_HDR =
BASE_UNIX_SRC =
$(BASE_UNIX_AND_DARWIN_NOTWXMAC_SRC)
src/unix/fswatcher_inotify.cpp
src/unix/stdpaths.cpp
BASE_UNIX_HDR =
$(BASE_UNIX_AND_DARWIN_NOTWXMAC_HDR)
wx/unix/fswatcher_inotify.h
wx/unix/stdpaths.h
## Windows
@ -134,7 +134,6 @@ BASE_WIN32_HDR =
BASE_COREFOUNDATION_SRC =
src/osx/core/cfstring.cpp
src/osx/core/evtloop_cf.cpp
src/osx/core/stdpaths_cf.cpp
src/osx/core/strconv_cf.cpp
src/osx/core/utilsexc_base.cpp
@ -164,10 +163,13 @@ BASE_OSX_SHARED_HDR =
BASE_AND_GUI_OSX_CARBON_SRC =
src/osx/carbon/utils.cpp
src/osx/carbon/uma.cpp
src/unix/stdpaths.cpp
src/osx/core/stdpaths_cf.cpp
BASE_AND_GUI_OSX_COCOA_SRC =
src/osx/cocoa/utils.mm
src/osx/cocoa/power.mm
src/osx/cocoa/stdpaths.mm
BASE_AND_GUI_OSX_IPHONE_SRC =
src/osx/iphone/utils.mm
@ -1934,7 +1936,6 @@ OSX_CARBON_COCOA_SRC =
src/osx/carbon/overlay.cpp
src/osx/carbon/popupwin.cpp
src/osx/carbon/renderer.cpp
src/osx/carbon/settings.cpp
src/osx/carbon/statbrma.cpp
src/osx/carbon/region.cpp
# cocoa bridge
@ -2083,6 +2084,7 @@ OSX_CARBON_SRC =
src/osx/carbon/printdlg.cpp
src/osx/carbon/radiobut.cpp
src/osx/carbon/scrolbar.cpp
src/osx/carbon/settings.cpp
src/osx/carbon/slider.cpp
src/osx/carbon/spinbutt.cpp
src/osx/carbon/srchctrl.cpp
@ -2136,6 +2138,7 @@ OSX_COCOA_SRC =
src/osx/cocoa/preferences.mm
src/osx/cocoa/printdlg.mm
src/osx/cocoa/scrolbar.mm
src/osx/cocoa/settings.mm
src/osx/cocoa/slider.mm
src/osx/cocoa/spinbutt.mm
src/osx/cocoa/srchctrl.mm
@ -3086,6 +3089,11 @@ AUI_CMN_HDR =
wx/xrc/xh_auinotbk.h
wx/xrc/xh_auitoolb.h
AUI_MSW_HDR =
wx/aui/tabartmsw.h
AUI_MSW_SRC =
src/aui/tabartmsw.cpp
# wxRibbon
RIBBON_SRC =

View file

@ -1354,7 +1354,8 @@ AUIDLL_OBJECTS = \
$(OBJS)\auidll_tabmdi.obj \
$(OBJS)\auidll_tabart.obj \
$(OBJS)\auidll_xh_auinotbk.obj \
$(OBJS)\auidll_xh_auitoolb.obj
$(OBJS)\auidll_xh_auitoolb.obj \
$(OBJS)\auidll_tabartmsw.obj
AUILIB_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
@ -1373,7 +1374,8 @@ AUILIB_OBJECTS = \
$(OBJS)\auilib_tabmdi.obj \
$(OBJS)\auilib_tabart.obj \
$(OBJS)\auilib_xh_auinotbk.obj \
$(OBJS)\auilib_xh_auitoolb.obj
$(OBJS)\auilib_xh_auitoolb.obj \
$(OBJS)\auilib_tabartmsw.obj
RIBBONDLL_CXXFLAGS = $(__RUNTIME_LIBS) -I$(BCCDIR)\include $(__DEBUGINFO) \
$(__OPTIMIZEFLAG) $(__THREADSFLAG) -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
@ -1734,6 +1736,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_tabart.obj \
$(OBJS)\monodll_xh_auinotbk.obj \
$(OBJS)\monodll_xh_auitoolb.obj \
$(OBJS)\monodll_tabartmsw.obj \
$(OBJS)\monodll_advprops.obj \
$(OBJS)\monodll_editors.obj \
$(OBJS)\monodll_manager.obj \
@ -2555,6 +2558,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_tabart.obj \
$(OBJS)\monolib_xh_auinotbk.obj \
$(OBJS)\monolib_xh_auitoolb.obj \
$(OBJS)\monolib_tabartmsw.obj \
$(OBJS)\monolib_advprops.obj \
$(OBJS)\monolib_editors.obj \
$(OBJS)\monolib_manager.obj \
@ -7389,6 +7393,9 @@ $(OBJS)\monodll_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\monodll_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
$(OBJS)\monodll_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
$(OBJS)\monodll_advprops.obj: ..\..\src\propgrid\advprops.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
@ -9896,6 +9903,9 @@ $(OBJS)\monolib_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\monolib_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
$(OBJS)\monolib_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
$(OBJS)\monolib_advprops.obj: ..\..\src\propgrid\advprops.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
@ -16082,6 +16092,9 @@ $(OBJS)\auidll_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\auidll_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
$(OBJS)\auidll_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
$(CXX) -q -c -P -o$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
$(OBJS)\auilib_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) -H ..\..\src\common\dummy.cpp
@ -16112,6 +16125,9 @@ $(OBJS)\auilib_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\auilib_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
$(OBJS)\auilib_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
$(CXX) -q -c -P -o$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
$(OBJS)\ribbondll_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) -q -c -P -o$@ $(RIBBONDLL_CXXFLAGS) -H ..\..\src\common\dummy.cpp

View file

@ -1360,7 +1360,8 @@ AUIDLL_OBJECTS = \
$(OBJS)\auidll_tabmdi.o \
$(OBJS)\auidll_tabart.o \
$(OBJS)\auidll_xh_auinotbk.o \
$(OBJS)\auidll_xh_auitoolb.o
$(OBJS)\auidll_xh_auitoolb.o \
$(OBJS)\auidll_tabartmsw.o
AUILIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) $(GCCFLAGS) \
-DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) \
$(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) \
@ -1379,7 +1380,8 @@ AUILIB_OBJECTS = \
$(OBJS)\auilib_tabmdi.o \
$(OBJS)\auilib_tabart.o \
$(OBJS)\auilib_xh_auinotbk.o \
$(OBJS)\auilib_xh_auitoolb.o
$(OBJS)\auilib_xh_auitoolb.o \
$(OBJS)\auilib_tabartmsw.o
RIBBONDLL_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
$(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
$(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
@ -1752,6 +1754,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_tabart.o \
$(OBJS)\monodll_xh_auinotbk.o \
$(OBJS)\monodll_xh_auitoolb.o \
$(OBJS)\monodll_tabartmsw.o \
$(OBJS)\monodll_advprops.o \
$(OBJS)\monodll_editors.o \
$(OBJS)\monodll_manager.o \
@ -2579,6 +2582,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_tabart.o \
$(OBJS)\monolib_xh_auinotbk.o \
$(OBJS)\monolib_xh_auitoolb.o \
$(OBJS)\monolib_tabartmsw.o \
$(OBJS)\monolib_advprops.o \
$(OBJS)\monolib_editors.o \
$(OBJS)\monolib_manager.o \
@ -7564,6 +7568,9 @@ $(OBJS)\monodll_xh_auinotbk.o: ../../src/xrc/xh_auinotbk.cpp
$(OBJS)\monodll_xh_auitoolb.o: ../../src/xrc/xh_auitoolb.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_tabartmsw.o: ../../src/aui/tabartmsw.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_advprops.o: ../../src/propgrid/advprops.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@ -10071,6 +10078,9 @@ $(OBJS)\monolib_xh_auinotbk.o: ../../src/xrc/xh_auinotbk.cpp
$(OBJS)\monolib_xh_auitoolb.o: ../../src/xrc/xh_auitoolb.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_tabartmsw.o: ../../src/aui/tabartmsw.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monolib_advprops.o: ../../src/propgrid/advprops.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@ -16257,6 +16267,9 @@ $(OBJS)\auidll_xh_auinotbk.o: ../../src/xrc/xh_auinotbk.cpp
$(OBJS)\auidll_xh_auitoolb.o: ../../src/xrc/xh_auitoolb.cpp
$(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\auidll_tabartmsw.o: ../../src/aui/tabartmsw.cpp
$(CXX) -c -o $@ $(AUIDLL_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\auilib_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<
@ -16287,6 +16300,9 @@ $(OBJS)\auilib_xh_auinotbk.o: ../../src/xrc/xh_auinotbk.cpp
$(OBJS)\auilib_xh_auitoolb.o: ../../src/xrc/xh_auitoolb.cpp
$(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\auilib_tabartmsw.o: ../../src/aui/tabartmsw.cpp
$(CXX) -c -o $@ $(AUILIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\ribbondll_dummy.o: ../../src/common/dummy.cpp
$(CXX) -c -o $@ $(RIBBONDLL_CXXFLAGS) $(CPPDEPS) $<

View file

@ -1498,7 +1498,8 @@ AUIDLL_OBJECTS = \
$(OBJS)\auidll_tabmdi.obj \
$(OBJS)\auidll_tabart.obj \
$(OBJS)\auidll_xh_auinotbk.obj \
$(OBJS)\auidll_xh_auitoolb.obj
$(OBJS)\auidll_xh_auitoolb.obj \
$(OBJS)\auidll_tabartmsw.obj
AUIDLL_RESOURCES = \
$(OBJS)\auidll_version.res
AUILIB_CXXFLAGS = /M$(__RUNTIME_LIBS_472)$(__DEBUGRUNTIME) /DWIN32 \
@ -1523,7 +1524,8 @@ AUILIB_OBJECTS = \
$(OBJS)\auilib_tabmdi.obj \
$(OBJS)\auilib_tabart.obj \
$(OBJS)\auilib_xh_auinotbk.obj \
$(OBJS)\auilib_xh_auitoolb.obj
$(OBJS)\auilib_xh_auitoolb.obj \
$(OBJS)\auilib_tabartmsw.obj
RIBBONDLL_CXXFLAGS = /M$(__RUNTIME_LIBS_488)$(__DEBUGRUNTIME) /DWIN32 \
$(__DEBUGINFO) \
/Fd$(LIBDIRNAME)\wx$(PORTNAME)$(WXUNIVNAME)$(WX_VERSION_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_ribbon$(WXCOMPILER)$(VENDORTAG).pdb \
@ -2034,6 +2036,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_tabart.obj \
$(OBJS)\monodll_xh_auinotbk.obj \
$(OBJS)\monodll_xh_auitoolb.obj \
$(OBJS)\monodll_tabartmsw.obj \
$(OBJS)\monodll_advprops.obj \
$(OBJS)\monodll_editors.obj \
$(OBJS)\monodll_manager.obj \
@ -2861,6 +2864,7 @@ ____MONOLIB_GUI_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_tabart.obj \
$(OBJS)\monolib_xh_auinotbk.obj \
$(OBJS)\monolib_xh_auitoolb.obj \
$(OBJS)\monolib_tabartmsw.obj \
$(OBJS)\monolib_advprops.obj \
$(OBJS)\monolib_editors.obj \
$(OBJS)\monolib_manager.obj \
@ -8081,6 +8085,9 @@ $(OBJS)\monodll_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\monodll_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
$(OBJS)\monodll_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
$(OBJS)\monodll_advprops.obj: ..\..\src\propgrid\advprops.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
@ -10588,6 +10595,9 @@ $(OBJS)\monolib_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\monolib_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
$(OBJS)\monolib_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
$(OBJS)\monolib_advprops.obj: ..\..\src\propgrid\advprops.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\propgrid\advprops.cpp
@ -16774,6 +16784,9 @@ $(OBJS)\auidll_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\auidll_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
$(OBJS)\auidll_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(AUIDLL_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
$(OBJS)\auilib_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp
@ -16804,6 +16817,9 @@ $(OBJS)\auilib_xh_auinotbk.obj: ..\..\src\xrc\xh_auinotbk.cpp
$(OBJS)\auilib_xh_auitoolb.obj: ..\..\src\xrc\xh_auitoolb.cpp
$(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) ..\..\src\xrc\xh_auitoolb.cpp
$(OBJS)\auilib_tabartmsw.obj: ..\..\src\aui\tabartmsw.cpp
$(CXX) /c /nologo /TP /Fo$@ $(AUILIB_CXXFLAGS) ..\..\src\aui\tabartmsw.cpp
$(OBJS)\ribbondll_dummy.obj: ..\..\src\common\dummy.cpp
$(CXX) /c /nologo /TP /Fo$@ $(RIBBONDLL_CXXFLAGS) /Ycwx/wxprec.h ..\..\src\common\dummy.cpp

View file

@ -465,6 +465,7 @@
<ClCompile Include="..\..\src\aui\tabmdi.cpp" />
<ClCompile Include="..\..\src\xrc\xh_auinotbk.cpp" />
<ClCompile Include="..\..\src\xrc\xh_auitoolb.cpp" />
<ClCompile Include="..\..\src\aui\tabartmsw.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\msw\version.rc">
@ -505,6 +506,7 @@
<ClInclude Include="..\..\include\wx\aui\tabmdi.h" />
<ClInclude Include="..\..\include\wx\xrc\xh_auinotbk.h" />
<ClInclude Include="..\..\include\wx\xrc\xh_auitoolb.h" />
<ClInclude Include="..\..\include\wx\aui\tabartmsw.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View file

@ -43,6 +43,9 @@
<ClCompile Include="..\..\src\aui\tabart.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\aui\tabartmsw.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\aui\tabmdi.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -80,6 +83,9 @@
<ClInclude Include="..\..\include\wx\aui\tabart.h">
<Filter>Common Headers</Filter>
</ClInclude>
<ClInclude Include="..\..\include\wx\aui\tabartmsw.h">
<Filter>Common Headers</Filter>
</ClInclude>
<ClInclude Include="..\..\include\wx\aui\tabmdi.h">
<Filter>Common Headers</Filter>
</ClInclude>

View file

@ -901,6 +901,7 @@
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)msw_%(Filename).obj</ObjectFileName>
</ClCompile>
<ClCompile Include="..\..\src\msw\statusbar.cpp" />
<ClCompile Include="..\..\src\msw\systhemectrl.cpp" />
<ClCompile Include="..\..\src\msw\taskbarbutton.cpp" />
<ClCompile Include="..\..\src\msw\textctrl.cpp">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(IntDir)msw_%(Filename).obj</ObjectFileName>
@ -1004,7 +1005,6 @@
<ClCompile Include="..\..\src\generic\vlbox.cpp" />
<ClCompile Include="..\..\src\generic\vscroll.cpp" />
<ClCompile Include="..\..\src\xrc\xmlreshandler.cpp" />
<ClCompile Include="..\..\src\msw\systhemectrl.cpp" />
<ClCompile Include="..\..\src\generic\collheaderctrlg.cpp" />
</ItemGroup>
<ItemGroup>
@ -1014,7 +1014,6 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ResourceCompile>
<ClInclude Include="..\..\src\msw\systhemectrl.cpp" />
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\include\wx\msw\setup.h">
@ -1335,6 +1334,7 @@
<ClInclude Include="..\..\include\wx\statline.h" />
<ClInclude Include="..\..\include\wx\stattext.h" />
<ClInclude Include="..\..\include\wx\statusbr.h" />
<ClInclude Include="..\..\include\wx\systhemectrl.h" />
<ClInclude Include="..\..\include\wx\taskbarbutton.h" />
<ClInclude Include="..\..\include\wx\tbarbase.h" />
<ClInclude Include="..\..\include\wx\textcompleter.h" />
@ -1375,7 +1375,6 @@
<ClInclude Include="..\..\include\wx\preferences.h" />
<ClInclude Include="..\..\include\wx\testing.h" />
<ClInclude Include="..\..\include\wx\msw\ole\safearray.h" />
<ClInclude Include="..\..\include\wx\systhemectrl.h" />
<ClInclude Include="..\..\include\wx\collheaderctrl.h" />
<ClInclude Include="..\..\include\wx\generic\collheaderctrl.h" />
</ItemGroup>

View file

@ -482,6 +482,7 @@
<ClCompile Include="..\..\src\html\m_tables.cpp" />
<ClCompile Include="..\..\src\html\styleparams.cpp" />
<ClCompile Include="..\..\src\html\winpars.cpp" />
<ClCompile Include="..\..\src\html\chm.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\..\src\msw\version.rc">

View file

@ -33,6 +33,9 @@
<ClCompile Include="..\..\src\generic\htmllbox.cpp">
<Filter>Generic Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\html\chm.cpp">
<Filter>wxHTML Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\html\helpctrl.cpp">
<Filter>wxHTML Sources</Filter>
</ClCompile>

View file

@ -434,6 +434,9 @@
<File
RelativePath="..\..\include\wx\aui\tabart.h">
</File>
<File
RelativePath="..\..\include\wx\aui\tabartmsw.h">
</File>
<File
RelativePath="..\..\include\wx\aui\tabmdi.h">
</File>
@ -466,6 +469,9 @@
<File
RelativePath="..\..\src\aui\tabart.cpp">
</File>
<File
RelativePath="..\..\src\aui\tabartmsw.cpp">
</File>
<File
RelativePath="..\..\src\aui\tabmdi.cpp">
</File>

View file

@ -2594,6 +2594,9 @@
<File
RelativePath="..\..\include\wx\aui\tabart.h">
</File>
<File
RelativePath="..\..\include\wx\aui\tabartmsw.h">
</File>
<File
RelativePath="..\..\include\wx\aui\tabmdi.h">
</File>

View file

@ -1081,6 +1081,10 @@
RelativePath="..\..\include\wx\aui\tabart.h"
>
</File>
<File
RelativePath="..\..\include\wx\aui\tabartmsw.h"
>
</File>
<File
RelativePath="..\..\include\wx\aui\tabmdi.h"
>
@ -1123,6 +1127,10 @@
RelativePath="..\..\src\aui\tabart.cpp"
>
</File>
<File
RelativePath="..\..\src\aui\tabartmsw.cpp"
>
</File>
<File
RelativePath="..\..\src\aui\tabmdi.cpp"
>

View file

@ -3960,6 +3960,10 @@
RelativePath="..\..\include\wx\aui\tabart.h"
>
</File>
<File
RelativePath="..\..\include\wx\aui\tabartmsw.h"
>
</File>
<File
RelativePath="..\..\include\wx\aui\tabmdi.h"
>

View file

@ -1077,6 +1077,10 @@
RelativePath="..\..\include\wx\aui\tabart.h"
>
</File>
<File
RelativePath="..\..\include\wx\aui\tabartmsw.h"
>
</File>
<File
RelativePath="..\..\include\wx\aui\tabmdi.h"
>
@ -1119,6 +1123,10 @@
RelativePath="..\..\src\aui\tabart.cpp"
>
</File>
<File
RelativePath="..\..\src\aui\tabartmsw.cpp"
>
</File>
<File
RelativePath="..\..\src\aui\tabmdi.cpp"
>

View file

@ -3956,6 +3956,10 @@
RelativePath="..\..\include\wx\aui\tabart.h"
>
</File>
<File
RelativePath="..\..\include\wx\aui\tabartmsw.h"
>
</File>
<File
RelativePath="..\..\include\wx\aui\tabmdi.h"
>

View file

@ -253,9 +253,6 @@
131B879180AE3FB481F81CC8 /* fs_mem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9A305CEC03B3085B159B617 /* fs_mem.cpp */; };
131B879180AE3FB481F81CC9 /* fs_mem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9A305CEC03B3085B159B617 /* fs_mem.cpp */; };
131B879180AE3FB481F81CCA /* fs_mem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9A305CEC03B3085B159B617 /* fs_mem.cpp */; };
13250B531B1B3F9998C59DA9 /* stdpaths_cf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B2DEE3EC7CE374DB0CE6EEA /* stdpaths_cf.cpp */; };
13250B531B1B3F9998C59DAA /* stdpaths_cf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B2DEE3EC7CE374DB0CE6EEA /* stdpaths_cf.cpp */; };
13250B531B1B3F9998C59DAB /* stdpaths_cf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B2DEE3EC7CE374DB0CE6EEA /* stdpaths_cf.cpp */; };
135DFCE48FC03D8294D01A89 /* xmlrsall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29922DF1D0D63C33A186E783 /* xmlrsall.cpp */; };
135DFCE48FC03D8294D01A8A /* xmlrsall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29922DF1D0D63C33A186E783 /* xmlrsall.cpp */; };
135DFCE48FC03D8294D01A8B /* xmlrsall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29922DF1D0D63C33A186E783 /* xmlrsall.cpp */; };
@ -532,6 +529,12 @@
24A5A71C79733E9CB913C5B7 /* LexPB.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8744F2C80ECF375999195935 /* LexPB.cxx */; };
24A5A71C79733E9CB913C5B8 /* LexPB.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8744F2C80ECF375999195935 /* LexPB.cxx */; };
24A5A71C79733E9CB913C5B9 /* LexPB.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8744F2C80ECF375999195935 /* LexPB.cxx */; };
24D4E0F61BA05FC200586317 /* stdpaths.mm in Sources */ = {isa = PBXBuildFile; fileRef = 24D4E0F51BA05FC200586317 /* stdpaths.mm */; };
24D4E0F71BA05FC200586317 /* stdpaths.mm in Sources */ = {isa = PBXBuildFile; fileRef = 24D4E0F51BA05FC200586317 /* stdpaths.mm */; };
24D4E0F81BA05FC200586317 /* stdpaths.mm in Sources */ = {isa = PBXBuildFile; fileRef = 24D4E0F51BA05FC200586317 /* stdpaths.mm */; };
24AC00E71BA6C3900042A970 /* settings.mm in Sources */ = {isa = PBXBuildFile; fileRef = 24AC00E61BA6C3900042A970 /* settings.mm */; };
24AC00E81BA6C3900042A970 /* settings.mm in Sources */ = {isa = PBXBuildFile; fileRef = 24AC00E61BA6C3900042A970 /* settings.mm */; };
24AC00E91BA6C3900042A970 /* settings.mm in Sources */ = {isa = PBXBuildFile; fileRef = 24AC00E61BA6C3900042A970 /* settings.mm */; };
254028D56649374E8D3CC85C /* libwx_osx_cocoau_html.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D9F65758E0363AF9AEC59A47 /* libwx_osx_cocoau_html.dylib */; };
254028D56649374E8D3CC85D /* libwx_osx_cocoau_html.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D9F65758E0363AF9AEC59A47 /* libwx_osx_cocoau_html.dylib */; };
2563C775427E3D68BD384F2F /* richtextstyles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D30617843F33310089C1F77A /* richtextstyles.cpp */; };
@ -844,9 +847,6 @@
42ED9BAFD6E936849F1D36CB /* xtixml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4048A3523EC03409BD899BEF /* xtixml.cpp */; };
42ED9BAFD6E936849F1D36CC /* xtixml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4048A3523EC03409BD899BEF /* xtixml.cpp */; };
42ED9BAFD6E936849F1D36CD /* xtixml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4048A3523EC03409BD899BEF /* xtixml.cpp */; };
437519A6002A3A0FB2C9A8FC /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6CC2B05353C3284B37B2DD7 /* settings.cpp */; };
437519A6002A3A0FB2C9A8FD /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6CC2B05353C3284B37B2DD7 /* settings.cpp */; };
437519A6002A3A0FB2C9A8FE /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6CC2B05353C3284B37B2DD7 /* settings.cpp */; };
438EAEA4B30C325C827F6197 /* xh_fontpicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 87E609641B583666AB9D1D58 /* xh_fontpicker.cpp */; };
438EAEA4B30C325C827F6198 /* xh_fontpicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 87E609641B583666AB9D1D58 /* xh_fontpicker.cpp */; };
438EAEA4B30C325C827F6199 /* xh_fontpicker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 87E609641B583666AB9D1D58 /* xh_fontpicker.cpp */; };
@ -2527,9 +2527,6 @@
E8EE34F0A78C31B489B19FEE /* LexMSSQL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1C71BF55495034FFBE653C80 /* LexMSSQL.cxx */; };
E8EE34F0A78C31B489B19FEF /* LexMSSQL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1C71BF55495034FFBE653C80 /* LexMSSQL.cxx */; };
E8EE34F0A78C31B489B19FF0 /* LexMSSQL.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1C71BF55495034FFBE653C80 /* LexMSSQL.cxx */; };
E8F0C87119C63E8E81423A7C /* stdpaths.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8C1E6D73ABD3A219B2C0603 /* stdpaths.cpp */; };
E8F0C87119C63E8E81423A7D /* stdpaths.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8C1E6D73ABD3A219B2C0603 /* stdpaths.cpp */; };
E8F0C87119C63E8E81423A7E /* stdpaths.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F8C1E6D73ABD3A219B2C0603 /* stdpaths.cpp */; };
E92EB502F79638B0BE569EF4 /* CallTip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4F58B88D42A93BD0B74ADF75 /* CallTip.cxx */; };
E92EB502F79638B0BE569EF5 /* CallTip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4F58B88D42A93BD0B74ADF75 /* CallTip.cxx */; };
E92EB502F79638B0BE569EF6 /* CallTip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4F58B88D42A93BD0B74ADF75 /* CallTip.cxx */; };
@ -3939,7 +3936,9 @@
24396D584D053948A3FF0DCD /* imagpng.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = imagpng.cpp; path = ../../src/common/imagpng.cpp; sourceTree = "<group>"; };
24720CD91BB03D77008E8A43 /* collheaderctrlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = collheaderctrlg.cpp; path = ../../src/generic/collheaderctrlg.cpp; sourceTree = "<group>"; };
24930711031D35288D28B04B /* choiccmn.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = choiccmn.cpp; path = ../../src/common/choiccmn.cpp; sourceTree = "<group>"; };
24AC00E61BA6C3900042A970 /* settings.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = settings.mm; path = ../../src/osx/cocoa/settings.mm; sourceTree = "<group>"; };
24BD2EF635673E819B8406CB /* LexRust.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexRust.cxx; path = ../../src/stc/scintilla/lexers/LexRust.cxx; sourceTree = "<group>"; };
24D4E0F51BA05FC200586317 /* stdpaths.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = stdpaths.mm; path = ../../src/osx/cocoa/stdpaths.mm; sourceTree = "<group>"; };
24DF23D67E693D999B875101 /* toolbkg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = toolbkg.cpp; path = ../../src/generic/toolbkg.cpp; sourceTree = "<group>"; };
24E82A05E9A9323287CDB15B /* artstd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = artstd.cpp; path = ../../src/common/artstd.cpp; sourceTree = "<group>"; };
25A81E9028793C109D868068 /* xh_timectrl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xh_timectrl.cpp; path = ../../src/xrc/xh_timectrl.cpp; sourceTree = "<group>"; };
@ -4237,7 +4236,6 @@
7A34C5BBBA543DC0A50DE1B6 /* event.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = event.cpp; path = ../../src/common/event.cpp; sourceTree = "<group>"; };
7A3F26F539473705AA82411D /* combobox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = combobox.cpp; path = ../../src/osx/carbon/combobox.cpp; sourceTree = "<group>"; };
7AF8F8A78A5130DCB4D46729 /* LexCmake.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexCmake.cxx; path = ../../src/stc/scintilla/lexers/LexCmake.cxx; sourceTree = "<group>"; };
7B2DEE3EC7CE374DB0CE6EEA /* stdpaths_cf.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stdpaths_cf.cpp; path = ../../src/osx/core/stdpaths_cf.cpp; sourceTree = "<group>"; };
7B389A14D6BF3AFD8CCE0807 /* protocol.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = protocol.cpp; path = ../../src/common/protocol.cpp; sourceTree = "<group>"; };
7BA6ADD758693BD180D3275B /* treebase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = treebase.cpp; path = ../../src/common/treebase.cpp; sourceTree = "<group>"; };
7C6CC76872BA32D2B61EB8AB /* libwx_baseu_xml.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwx_baseu_xml.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
@ -4630,7 +4628,6 @@
E5357E76650035639844D15B /* stringimpl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stringimpl.cpp; path = ../../src/common/stringimpl.cpp; sourceTree = "<group>"; };
E5A9B63746753EDFB2EC48D3 /* xh_frame.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xh_frame.cpp; path = ../../src/xrc/xh_frame.cpp; sourceTree = "<group>"; };
E6AB648BC5173104A96CAE66 /* xml.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xml.cpp; path = ../../src/xml/xml.cpp; sourceTree = "<group>"; };
E6CC2B05353C3284B37B2DD7 /* settings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = settings.cpp; path = ../../src/osx/carbon/settings.cpp; sourceTree = "<group>"; };
E72CF5F9C1E53BCFAA2BC253 /* KeyMap.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyMap.cxx; path = ../../src/stc/scintilla/src/KeyMap.cxx; sourceTree = "<group>"; };
E72F0A2EE3DB34E193D8CCA7 /* LexLaTeX.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexLaTeX.cxx; path = ../../src/stc/scintilla/lexers/LexLaTeX.cxx; sourceTree = "<group>"; };
E78CBF86AAE637CB982B2EC0 /* LexMarkdown.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LexMarkdown.cxx; path = ../../src/stc/scintilla/lexers/LexMarkdown.cxx; sourceTree = "<group>"; };
@ -4697,7 +4694,6 @@
F83172EE2DAE352FB969D4F2 /* jcapistd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapistd.c; path = ../../src/jpeg/jcapistd.c; sourceTree = "<group>"; };
F84F0DB790A23D92A193D2B4 /* http.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = http.cpp; path = ../../src/common/http.cpp; sourceTree = "<group>"; };
F8638A6CCF773CCFB70DFC29 /* xh_collpane.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xh_collpane.cpp; path = ../../src/xrc/xh_collpane.cpp; sourceTree = "<group>"; };
F8C1E6D73ABD3A219B2C0603 /* stdpaths.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stdpaths.cpp; path = ../../src/unix/stdpaths.cpp; sourceTree = "<group>"; };
FA59091E3ED83FB781FB9659 /* glcanvas_osx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = glcanvas_osx.cpp; path = ../../src/osx/glcanvas_osx.cpp; sourceTree = "<group>"; };
FA7029BB5751398AA02D8C24 /* imagtga.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = imagtga.cpp; path = ../../src/common/imagtga.cpp; sourceTree = "<group>"; };
FADE850169F7347F83FE1499 /* xh_statbar.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xh_statbar.cpp; path = ../../src/xrc/xh_statbar.cpp; sourceTree = "<group>"; };
@ -5293,7 +5289,6 @@
2128AD8BD12E3F33AD57478E /* overlay.cpp */,
530DC2E26BF2313E8702AD43 /* popupwin.cpp */,
425BFA3FDB7D3EA7ADCE1087 /* renderer.cpp */,
E6CC2B05353C3284B37B2DD7 /* settings.cpp */,
E1F2E9C9052D3E53BBD17DE3 /* statbrma.cpp */,
00DA3D3EEF5E305CA73A1871 /* region.cpp */,
2AFC4A1CDA473688A590D19F /* utilscocoa.mm */,
@ -5335,6 +5330,7 @@
835C22B71A0F3C469310E1E0 /* preferences.mm */,
C9E32802E8ED3E729FF34CFC /* printdlg.mm */,
CC2E24773D853A77B9FEFA4C /* scrolbar.mm */,
24AC00E61BA6C3900042A970 /* settings.mm */,
9B862D1027C4367BBF44420F /* slider.mm */,
3C4A7A93CAFC3E22A2A5F7F3 /* spinbutt.mm */,
14EF4B028AD63B4A885D29A1 /* srchctrl.mm */,
@ -5954,7 +5950,6 @@
7C97C1F26B5A38C49543060C /* mimetype.cpp */,
5168ADF7BE39351F8F24E1E6 /* cfstring.cpp */,
5BD6231188AB329CAA5E1171 /* evtloop_cf.cpp */,
7B2DEE3EC7CE374DB0CE6EEA /* stdpaths_cf.cpp */,
D5F9383D1CE931499F339D85 /* strconv_cf.cpp */,
81390F96937631078EFCD891 /* utilsexc_base.cpp */,
47F784C2BB5A3B5DAD276583 /* fdiodispatcher.cpp */,
@ -5967,7 +5962,6 @@
3B548B1FF2A238809315C8A9 /* fdiounix.cpp */,
3D5D8B68EA743F6E97ADF612 /* snglinst.cpp */,
EA2520F427493A22A70A5C09 /* stackwalk.cpp */,
F8C1E6D73ABD3A219B2C0603 /* stdpaths.cpp */,
0CB2CC8E60833A6993BEA321 /* timerunx.cpp */,
AB466912FDA23F8B87A00A3C /* threadpsx.cpp */,
DC75C7251C1732B0B07C7BD3 /* utilsunx.cpp */,
@ -5980,6 +5974,7 @@
4188821BBA833CCAA678B234 /* utilscmn.cpp */,
789F45D14FF23E248FCFB5FA /* utils.mm */,
60DFD5962DE3379F801AF78F /* power.mm */,
24D4E0F51BA05FC200586317 /* stdpaths.mm */,
);
name = base;
sourceTree = "<group>";
@ -7358,7 +7353,6 @@
4657E7382E9E3EDC8DE24020 /* mimetype.cpp in Sources */,
1DBDF75500D73A3098015E81 /* cfstring.cpp in Sources */,
9FBC642677C63D01AA2511BE /* evtloop_cf.cpp in Sources */,
13250B531B1B3F9998C59DAB /* stdpaths_cf.cpp in Sources */,
AAAB5DF8E60736D88273DD00 /* strconv_cf.cpp in Sources */,
4E140367282F38C8A904A006 /* utilsexc_base.cpp in Sources */,
D36E76A4CAF5352D9397E201 /* fdiodispatcher.cpp in Sources */,
@ -7367,11 +7361,11 @@
403FBA20CEFE3EAFB4E6B907 /* dir.cpp in Sources */,
20BEEFFA08F3396791596872 /* dlunix.cpp in Sources */,
CBBD7B32DB7B3E24AE745D7A /* epolldispatcher.cpp in Sources */,
24D4E0F81BA05FC200586317 /* stdpaths.mm in Sources */,
D18E2985C48733B2B7B3D444 /* evtloopunix.cpp in Sources */,
3D22FC202D903007AEE3D166 /* fdiounix.cpp in Sources */,
4B88254FF9963833A276A64E /* snglinst.cpp in Sources */,
5F78DB0417BF3CE1B4E35C81 /* stackwalk.cpp in Sources */,
E8F0C87119C63E8E81423A7E /* stdpaths.cpp in Sources */,
2F35A207C3993DE08E4FE0B2 /* timerunx.cpp in Sources */,
F5D2146C94E733FAAB6D286C /* threadpsx.cpp in Sources */,
B5C7FD8C27F43F3289A77FCB /* utilsunx.cpp in Sources */,
@ -7455,6 +7449,7 @@
A3321FE2A87D3BD69E0BB00B /* notebook_osx.cpp in Sources */,
0C9A379D97B133FA831175A9 /* printdlg_osx.cpp in Sources */,
B1775EF7C72233408044034D /* radiobox_osx.cpp in Sources */,
24AC00E91BA6C3900042A970 /* settings.mm in Sources */,
6A081BF19747385CB4C18781 /* radiobut_osx.cpp in Sources */,
DF8CE011EAC23F73BDA1C44F /* scrolbar_osx.cpp in Sources */,
27E73CA5C35A30CE89946ECC /* slider_osx.cpp in Sources */,
@ -7491,7 +7486,6 @@
CD2A9111B8A83AFA8B5B97E7 /* overlay.cpp in Sources */,
805CCAE64D023561AD334B55 /* popupwin.cpp in Sources */,
6832385DDBB33D1B90C73CBC /* renderer.cpp in Sources */,
437519A6002A3A0FB2C9A8FE /* settings.cpp in Sources */,
F6A1AC5CF84E32C19F91A616 /* statbrma.cpp in Sources */,
D070C3BE95483FE38BABA1C0 /* region.cpp in Sources */,
07158EBC05A637ECA9DC7B51 /* utilscocoa.mm in Sources */,
@ -8063,7 +8057,6 @@
4657E7382E9E3EDC8DE2401F /* mimetype.cpp in Sources */,
1DBDF75500D73A3098015E80 /* cfstring.cpp in Sources */,
9FBC642677C63D01AA2511BD /* evtloop_cf.cpp in Sources */,
13250B531B1B3F9998C59DAA /* stdpaths_cf.cpp in Sources */,
AAAB5DF8E60736D88273DCFF /* strconv_cf.cpp in Sources */,
4E140367282F38C8A904A005 /* utilsexc_base.cpp in Sources */,
D36E76A4CAF5352D9397E200 /* fdiodispatcher.cpp in Sources */,
@ -8076,7 +8069,6 @@
3D22FC202D903007AEE3D165 /* fdiounix.cpp in Sources */,
4B88254FF9963833A276A64D /* snglinst.cpp in Sources */,
5F78DB0417BF3CE1B4E35C80 /* stackwalk.cpp in Sources */,
E8F0C87119C63E8E81423A7D /* stdpaths.cpp in Sources */,
2F35A207C3993DE08E4FE0B1 /* timerunx.cpp in Sources */,
F5D2146C94E733FAAB6D286B /* threadpsx.cpp in Sources */,
B5C7FD8C27F43F3289A77FCA /* utilsunx.cpp in Sources */,
@ -8163,7 +8155,6 @@
CD2A9111B8A83AFA8B5B97E6 /* overlay.cpp in Sources */,
805CCAE64D023561AD334B54 /* popupwin.cpp in Sources */,
6832385DDBB33D1B90C73CBB /* renderer.cpp in Sources */,
437519A6002A3A0FB2C9A8FD /* settings.cpp in Sources */,
F6A1AC5CF84E32C19F91A615 /* statbrma.cpp in Sources */,
D070C3BE95483FE38BABA1BF /* region.cpp in Sources */,
07158EBC05A637ECA9DC7B50 /* utilscocoa.mm in Sources */,
@ -8203,6 +8194,7 @@
9241AAE354C53190BF3D5BA4 /* radiobut.mm in Sources */,
8EE5A2467401365C8217AF30 /* preferences.mm in Sources */,
22E90F33B5C9308EBF37A701 /* printdlg.mm in Sources */,
24D4E0F71BA05FC200586317 /* stdpaths.mm in Sources */,
5303FA25D0773FAEB963D8E4 /* scrolbar.mm in Sources */,
30AEDF41EC5C374DBF96EFFC /* slider.mm in Sources */,
5DA146A9F7653F53BF5299E9 /* spinbutt.mm in Sources */,
@ -8385,6 +8377,7 @@
B84642DA949638A189032CE7 /* http.cpp in Sources */,
6CA1BAEBBDB4336E9E201F96 /* protocol.cpp in Sources */,
E39021D3CDCD33BAA646B007 /* sckaddr.cpp in Sources */,
24AC00E81BA6C3900042A970 /* settings.mm in Sources */,
9F608A33D52D327FAA295625 /* sckfile.cpp in Sources */,
BCD81FD3D1EC305F801E1C1C /* sckipc.cpp in Sources */,
A3A898DA3114311EB7F02228 /* sckstrm.cpp in Sources */,
@ -9255,7 +9248,6 @@
4657E7382E9E3EDC8DE2401E /* mimetype.cpp in Sources */,
1DBDF75500D73A3098015E7F /* cfstring.cpp in Sources */,
9FBC642677C63D01AA2511BC /* evtloop_cf.cpp in Sources */,
13250B531B1B3F9998C59DA9 /* stdpaths_cf.cpp in Sources */,
AAAB5DF8E60736D88273DCFE /* strconv_cf.cpp in Sources */,
4E140367282F38C8A904A004 /* utilsexc_base.cpp in Sources */,
D36E76A4CAF5352D9397E1FF /* fdiodispatcher.cpp in Sources */,
@ -9268,7 +9260,6 @@
3D22FC202D903007AEE3D164 /* fdiounix.cpp in Sources */,
4B88254FF9963833A276A64C /* snglinst.cpp in Sources */,
5F78DB0417BF3CE1B4E35C7F /* stackwalk.cpp in Sources */,
E8F0C87119C63E8E81423A7C /* stdpaths.cpp in Sources */,
2F35A207C3993DE08E4FE0B0 /* timerunx.cpp in Sources */,
F5D2146C94E733FAAB6D286A /* threadpsx.cpp in Sources */,
B5C7FD8C27F43F3289A77FC9 /* utilsunx.cpp in Sources */,
@ -9355,7 +9346,6 @@
CD2A9111B8A83AFA8B5B97E5 /* overlay.cpp in Sources */,
805CCAE64D023561AD334B53 /* popupwin.cpp in Sources */,
6832385DDBB33D1B90C73CBA /* renderer.cpp in Sources */,
437519A6002A3A0FB2C9A8FC /* settings.cpp in Sources */,
F6A1AC5CF84E32C19F91A614 /* statbrma.cpp in Sources */,
D070C3BE95483FE38BABA1BE /* region.cpp in Sources */,
07158EBC05A637ECA9DC7B4F /* utilscocoa.mm in Sources */,
@ -9395,6 +9385,7 @@
9241AAE354C53190BF3D5BA3 /* radiobut.mm in Sources */,
8EE5A2467401365C8217AF2F /* preferences.mm in Sources */,
22E90F33B5C9308EBF37A700 /* printdlg.mm in Sources */,
24D4E0F61BA05FC200586317 /* stdpaths.mm in Sources */,
5303FA25D0773FAEB963D8E3 /* scrolbar.mm in Sources */,
30AEDF41EC5C374DBF96EFFB /* slider.mm in Sources */,
5DA146A9F7653F53BF5299E8 /* spinbutt.mm in Sources */,
@ -9577,6 +9568,7 @@
B84642DA949638A189032CE6 /* http.cpp in Sources */,
6CA1BAEBBDB4336E9E201F95 /* protocol.cpp in Sources */,
E39021D3CDCD33BAA646B006 /* sckaddr.cpp in Sources */,
24AC00E71BA6C3900042A970 /* settings.mm in Sources */,
9F608A33D52D327FAA295624 /* sckfile.cpp in Sources */,
BCD81FD3D1EC305F801E1C1B /* sckipc.cpp in Sources */,
A3A898DA3114311EB7F02227 /* sckstrm.cpp in Sources */,

View file

@ -1,78 +0,0 @@
package Text::Upmake;
use strict;
use warnings;
use autodie;
use Exporter qw(import);
our @EXPORT = qw(read_files_list upmake);
=head1 NAME
Text::Upmake - Update make files.
=head1 SYNOPSIS
=head1 AUTHOR
Vadim Zeitlin
=cut
# Reads the file containing the file lists definitions and returns a hash ref
# with variable names as keys and refs to arrays of the file names as values.
#
# Takes an (open) file handle as argument.
sub read_files_list
{
my ($fh) = @_;
my ($var, %vars);
while (<$fh>) {
chomp;
s/#.*$//;
s/^\s+//;
s/\s+$//;
next if !$_;
if (/^(\w+)\s*=$/) {
$var = $1;
} else {
die "Unexpected contents outside variable definition at line $.\n"
unless defined $var;
push @{$vars{$var}}, $_;
}
}
return \%vars;
}
# Update the file with the given name in place using the specified function and
# passing it the rest of the arguments.
#
# This is meant to be used with update_xxx() below.
sub upmake
{
my ($fname, $updater, @args) = @_;
my $fname_new = "$fname.upmake.new"; # TODO make it more unique
open my $in, '<', $fname;
open my $out, '>', $fname_new;
my $changed = $updater->($in, $out, @args);
close $in;
close $out;
if ($changed) {
rename $fname_new, $fname;
} else {
unlink $fname_new;
}
$changed
}
1;

View file

@ -1,97 +0,0 @@
package Text::Upmake::Bakefile0;
use Exporter qw(import);
our @EXPORT = qw(update_bakefile_0);
=head1 NAME
Text::Upmake::Bakefile0 - Update bakefile-0.x files list.
=head1 SYNOPSIS
This is used exclusively to update wxWidgets C<files.bkl> and is probably not
useful outside of wxWidgets project.
use Text::Upmake::Bakefile0;
Text::Upmake::upmake('bakefiles/files.bkl', \&update_bakefile_0, $vars);
=head1 SEE ALSO
Text::Upmake
=head1 AUTHOR
Vadim Zeitlin
=cut
# Update file with variable definitions in bakefile-0 format with the data
# from the hash ref containing all the file lists.
#
# Takes the (open) file handles of the files to read and to write and the file
# lists hash ref as arguments.
#
# Returns 1 if any changes were made.
#
# The caller must take care of actually renaming the second file to the first
# one.
sub update_bakefile_0
{
my ($in, $out, $vars) = @_;
# Variable whose contents is being currently replaced.
my $var;
# Hash with files defined for the specified variable as keys and 0 or 1
# depending on whether we have seen them in the input file as values.
my %files;
# Set to 1 if we made any changes.
my $changed = 0;
while (<$in>) {
chomp;
if (/<set var="(\w+)" hints="files">/ && exists $vars->{$1}) {
$var = $1;
%files = map { $_ => 0 } @{$vars->{$var}};
} elsif (defined $var) {
local $_ = $_;
s/<!-- .* -->//;
s/^\s+//;
s/\s+$//;
if (m{</set>}) {
# Check if we have any new files.
#
# TODO Insert them in alphabetical order.
while (my ($file, $seen) = each(%files)) {
if (!$seen) {
# This file was wasn't present in the input, add it.
# TODO Use proper indentation.
print $out " $file\n";
$changed = 1;
}
}
undef $var;
} elsif ($_) {
if (not exists $files{$_}) {
# This file was removed.
$changed = 1;
next;
}
if ($files{$_}) {
warn qq{Duplicate file "$_" in the definition of the } .
qq{variable "$var" at line $.\n}
} else {
$files{$_} = 1;
}
}
}
print $out "$_\n";
}
$changed
}

View file

@ -1,252 +0,0 @@
package Text::Upmake::MSBuild;
use Exporter qw(import);
our @EXPORT = qw(update_msbuild update_msbuild_filters);
=head1 NAME
Text::Upmake::MSBuild - Update list of sources and headers in MSBuild projects.
=head1 SYNOPSIS
Given an MSBuild project C<project.vcxproj> and its associated filters file
C<projects.vcxproj.filters>, the functions in this module can be used to update
the list of files in them to correspond to the given ones.
use Text::Upmake::Bakefile0;
Text::Upmake::upmake('projects.vcxproj', \&update_msbuild, \@sources, \@headers);
Text::Upmake::upmake('projects.vcxproj.filters', \&update_msbuild_filters, \@sources, \@headers);
=head1 SEE ALSO
Text::Upmake
=head1 AUTHOR
Vadim Zeitlin
=cut
# Update sources and headers in an MSBuild project.
#
# Parameters: input and output file handles and array references to the sources
# and the headers to be used in this project.
#
# Returns 1 if any changes were made.
sub update_msbuild
{
my ($in, $out, $sources, $headers) = @_;
# Hashes mapping the sources/headers names to 1 if they have been seen in
# the project or 0 otherwise.
my %sources = map { $_ => 0 } @$sources;
my %headers = map { $_ => 0 } @$headers;
# Reference to the hash corresponding to the files currently being
# processed.
my $files;
# Set to 1 when we are inside any <ItemGroup> tag.
my $in_group = 0;
# Set to 1 when we are inside an item group containing sources or headers
# respectively.
my ($in_sources, $in_headers) = 0;
# Set to 1 if we made any changes.
my $changed = 0;
while (my $line_with_eol = <$in>) {
(my $line = $line_with_eol) =~ s/\r?\n?$//;
if ($line =~ /^\s*<ItemGroup>$/) {
$in_group = 1;
} elsif ($line =~ m{^\s*</ItemGroup>$}) {
if (defined $files) {
my $kind = $in_sources ? 'Compile' : 'Include';
# Check if we have any new files.
#
# TODO Insert them in alphabetical order.
while (my ($file, $seen) = each(%$files)) {
if (!$seen) {
# Convert path separator to the one used by MSBuild.
$file =~ s@/@\\@g;
print $out qq{ <Cl$kind Include="$file" />\n};
$changed = 1;
}
}
$in_sources = $in_headers = 0;
}
$in_group = 0;
} elsif ($in_group) {
if ($line =~ m{^\s*<Cl(?<kind>Compile|Include) Include="(?<file>[^"]+)"\s*(?<slash>/)?>$}) {
if ($+{kind} eq 'Compile') {
warn "Mix of sources and headers at line $.\n" if $in_headers;
$in_sources = 1;
$files = \%sources;
} else {
warn "Mix of headers and sources at line $.\n" if $in_sources;
$in_headers = 1;
$files = \%headers;
}
my $closed_tag = defined $+{slash};
# Normalize the path separator, we always use Unix ones but the
# project files use Windows one.
my $file = $+{file};
$file =~ s@\\@/@g;
if (not exists $files->{$file}) {
# This file was removed.
$changed = 1;
if (!$closed_tag) {
# We have just the opening <ClCompile> tag, ignore
# everything until the next </ClCompile>
while (<$in>) {
last if m{^\s*</ClCompile>$};
}
}
# In any case skip either this line containing the full
# <ClCompile/> tag or the line with the closing tag.
next;
} else {
if ($files->{$file}) {
warn qq{Duplicate file "$file" in the project at line $.\n};
} else {
$files->{$file} = 1;
}
}
}
}
print $out $line_with_eol;
}
$changed
}
# Update sources and headers in an MSBuild filters file.
#
# Parameters: input and output file handles, array references to the sources
# and the headers to be used in this project and a callback used to determine
# the filter for the new files.
#
# Returns 1 if any changes were made.
sub update_msbuild_filters
{
my ($in, $out, $sources, $headers, $filter_cb) = @_;
# Hashes mapping the sources/headers names to the text representing them in
# the input file if they have been seen in it or nothing otherwise.
my %sources = map { $_ => undef } @$sources;
my %headers = map { $_ => undef } @$headers;
# Reference to the hash corresponding to the files currently being
# processed.
my $files;
# Set to 1 when we are inside any <ItemGroup> tag.
my $in_group = 0;
# Set to 1 when we are inside an item group containing sources or headers
# respectively.
my ($in_sources, $in_headers) = 0;
# Set to 1 if we made any changes.
my $changed = 0;
while (my $line_with_eol = <$in>) {
(my $line = $line_with_eol) =~ s/\r?\n?$//;
if ($line =~ /^\s*<ItemGroup>?$/) {
$in_group = 1;
} elsif ($line =~ m{^\s*</ItemGroup>?$}) {
if (defined $files) {
# Output the group contents now, all at once, inserting any new
# files: we must do it like this to ensure that they are
# inserted in alphabetical order.
my $kind = $in_sources ? 'Compile' : 'Include';
foreach my $file (sort keys %$files) {
if (defined $files->{$file}) {
print $out $files->{$file};
} else {
my $filter = defined $filter_cb ? $filter_cb->($file) : undef;
# Convert path separator to the one used by MSBuild.
$file =~ s@/@\\@g;
my $indent = ' ' x 2;
print $out qq{$indent$indent<Cl$kind Include="$file"};
if (defined $filter) {
print $out ">\n$indent$indent$indent<Filter>$filter</Filter>\n$indent$indent</Cl$kind>\n";
} else {
print $out " />\n";
}
$changed = 1;
}
}
$in_sources = $in_headers = 0;
$files = undef;
}
$in_group = 0;
} elsif ($in_group &&
$line =~ m{^\s*<Cl(?<kind>Compile|Include) Include="(?<file>[^"]+)"\s*(?<slash>/)?>?$}) {
my $kind = $+{kind};
if ($kind eq 'Compile') {
warn "Mix of sources and headers at line $.\n" if $in_headers;
$in_sources = 1;
$files = \%sources;
} else {
warn "Mix of headers and sources at line $.\n" if $in_sources;
$in_headers = 1;
$files = \%headers;
}
my $closed_tag = defined $+{slash};
# Normalize the path separator, we always use Unix ones but the
# project files use Windows one.
my $file = $+{file};
$file =~ s@\\@/@g;
my $text = $line_with_eol;
if (!$closed_tag) {
# We have just the opening <ClCompile> tag, get everything
# until the next </ClCompile>.
while (<$in>) {
$text .= $_;
last if m{^\s*</Cl$kind>\r?\n?$};
}
}
if (not exists $files->{$file}) {
# This file was removed.
$changed = 1;
} else {
if ($files->{$file}) {
warn qq{Duplicate file "$file" in the project at line $.\n};
} else {
$files->{$file} = $text;
}
}
# Don't output this line yet, wait until the end of the group.
next
}
print $out $line_with_eol;
}
$changed
}

View file

@ -1,24 +0,0 @@
use strict;
use warnings;
use autodie;
use Test::More;
BEGIN { use_ok('Text::Upmake'); }
my $vars = read_files_list(*DATA);
is_deeply($vars->{VAR1}, [qw(file1 file2)], 'VAR1 has expected value');
is_deeply($vars->{VAR2}, [qw(file3 file4)], 'VAR2 has expected value');
done_testing()
__DATA__
# Some comments
VAR1 =
file1
# comment between the files
file2
VAR2 =
file3
file4 # comment
# another comment

View file

@ -1,47 +0,0 @@
use strict;
use warnings;
use autodie;
use Test::More;
BEGIN { use_ok('Text::Upmake::Bakefile0'); }
my $vars = {
VAR1 => [qw(file1 file2 fileNew)],
VAR2 => [qw(file3 file4 file5 fileNew2)],
};
open my $out, '>', \my $outstr;
update_bakefile_0(*DATA, $out, $vars);
note("Result: $outstr");
like($outstr, qr/file1/, 'existing file was preserved');
like($outstr, qr/fileNew$/m, 'new file was added');
unlike($outstr, qr/fileOld/, 'old file was removed');
like($outstr, qr/fileNew2/, 'another new file was added');
like($outstr, qr/file3\s+file4/s, 'files remain in correct order');
done_testing()
__DATA__
<?xml version="1.0" ?>
<makefile>
<!--
Some comment
-->
<set var="VAR1" hints="files">
file1
<!-- comment between the files -->
file2
</set>
<set var="VAR2" hints="files">
file3
file4 <!-- comment after the file -->
file5
fileOld
</set>
</makefile>

View file

@ -1,50 +0,0 @@
use strict;
use warnings;
use autodie;
use Test::More;
use Text::Upmake;
BEGIN { use_ok('Text::Upmake::MSBuild'); }
my $sources = [qw(file1.cpp file2.cpp fileNew.cpp)];
my $headers = [qw(file1.h file2.h fileNew.h)];
open my $out, '>', \my $outstr;
update_msbuild(*DATA, $out, $sources, $headers);
note("Result: $outstr");
like($outstr, qr/file1\.cpp/, 'existing source file was preserved');
like($outstr, qr/fileNew\.cpp/m, 'new source file was added');
unlike($outstr, qr/fileOld\.cpp/, 'old source file was removed');
unlike($outstr, qr/file3\.h/, 'old header was removed');
like($outstr, qr/fileNew\.h/, 'new header was added');
done_testing()
__DATA__
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="file1.cpp" />
<ClCompile Include="file2.cpp" />
<ClCompile Include="fileOld.cpp" />
<ClCompile Include="file3.cpp" >
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="file1.h" />
<ClInclude Include="file2.h" />
<ClInclude Include="file3.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -1,67 +0,0 @@
use strict;
use warnings;
use autodie;
use Test::More;
use Text::Upmake;
BEGIN { use_ok('Text::Upmake::MSBuild'); }
my $sources = [qw(file1.cpp file2.cpp file4.cpp fileNew.cpp)];
my $headers = [qw(file1.h file2.h fileNew.h)];
sub filter_cb
{
my ($file) = @_;
return 'New Sources' if $file =~ /New\./;
undef
}
open my $out, '>', \my $outstr;
update_msbuild_filters(*DATA, $out, $sources, $headers, \&filter_cb);
note("Result: $outstr");
like($outstr, qr/file1\.cpp/, 'existing source file was preserved');
like($outstr, qr/fileNew\.cpp/m, 'new source file was added');
unlike($outstr, qr/fileOld\.cpp/, 'old source file was removed');
unlike($outstr, qr/file3\.cpp/, 'another old source file was removed');
unlike($outstr, qr/file3\.h/, 'old header was removed');
like($outstr, qr/fileNew\.h/, 'new header was added');
done_testing()
__DATA__
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Common Sources">
<UniqueIdentifier>{...}</UniqueIdentifier>
</Filter>
<Filter Include="Common Headers">
<UniqueIdentifier>{...}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="fileOld.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
<ClCompile Include="file1.cpp">
<Filter>Common Sources</Filter>
</ClCompile>
<ClCompile Include="file2.cpp" />
<ClCompile Include="file3.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="file1.h">
<Filter>Common Headers</Filter>
</ClInclude>
<ClInclude Include="file2.h">
<Filter>Common Headers</Filter>
</ClInclude>
<ClInclude Include="file3.h">
<Filter>Common Headers</Filter>
</ClInclude>
</ItemGroup>
</Project>

File diff suppressed because it is too large Load diff

185
build/upmake_script.pl Executable file
View file

@ -0,0 +1,185 @@
#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
use Getopt::Long;
use FindBin qw($Bin);
use Makefile::Update;
use Makefile::Update::Bakefile0;
use Makefile::Update::MSBuild;
use Makefile::Update::VCProj;
my $verbose = 0;
my $quiet = 0;
my ($only_bkl, $only_msvs, $only_project, $only_version);
GetOptions(
'verbose|v' => \$verbose,
'quiet|q' => \$quiet,
'only-bkl' => \$only_bkl,
'only-project=s' => sub { $only_msvs = 1; $only_project = $_[1] },
'only-version=i' => sub { $only_msvs = 1; $only_version = $_[1] },
) or die <<EOF
Usage: $0 [--verbose] [--quiet] [--only-bkl] [--only-project=<name>] [--only-version=<ver>]
Update the files used by bakefile and MSVC projects from the master list
of files in build/files.
If --no-xxx option is specified, the corresponding outputs are not updated.
By default everything is.
The version argument of --only-version can be 7, 8, 9 or 10 with the latter
selecting the MSBuild projects.
EOF
;
if ($only_bkl && $only_msvs) {
die qq{Options --only-bkl and --only-project or --only-version can't be used together.\n}
}
sub call_upmake
{
my ($fname, @args) = @_;
upmake({file => $fname, quiet => $quiet, verbose => $verbose}, @args)
}
open my $files, '<', "$Bin/files";
my $vars = read_files_list($files);
if (!$only_msvs) {
if (call_upmake("$Bin/bakefiles/files.bkl", \&update_bakefile_0, $vars)) {
print qq{Don't forget to run "bakefile_gen -b wx.bkl".} if $verbose;
}
}
if (!$only_bkl) {
# Path to the project root directory from the directory containing the
# projects.
my $top_srcdir = '../../';
# The base names of all our projects with the list of variables
# containing the files that should appear in them.
my %projects_vars = (
adv => [qw(ADVANCED_CMN ADVANCED_MSW ADVANCED_MSW_DESKTOP ADVANCED_MSW_NATIVE)],
aui => [qw(AUI_CMN)],
base => [qw(BASE_CMN BASE_AND_GUI_CMN BASE_WIN32 BASE_AND_GUI_WIN32)],
core => [qw(BASE_AND_GUI_CMN BASE_AND_GUI_WIN32 MSW_LOWLEVEL MSW_DESKTOP_LOWLEVEL MSW MSW_DESKTOP GUI_CMN)],
gl => [qw(OPENGL_CMN OPENGL_MSW)],
html => [qw(HTML_CMN HTML_MSW)],
media => [qw(MEDIA_CMN MEDIA_MSW MEDIA_MSW_DESKTOP)],
net => [qw(NET_CMN NET_WIN32)],
propgrid => [qw(PROPGRID)],
qa => [qw(QA)],
ribbon => [qw(RIBBON)],
richtext => [qw(RICHTEXT)],
stc => [qw(STC)],
webview => [qw(WEBVIEW_CMN WEBVIEW_MSW)],
xml => [qw(XML)],
xrc => [qw(XRC)],
);
# The versions of non-MSBuild projects (MSBuild ones all use version "10").
my @vcproj_versions = qw(7 8 9);
# Return the "filter" to use for the given file.
sub filter_cb
{
my ($file) = @_;
my %filters = (
'src/common/.*' => 'Common Sources',
'src/gtk/.*' => 'GTK+ Sources',
'src/msw/.*' => 'MSW Sources',
'src/generic/.*' => 'Generic Sources',
'src/univ/.*' => 'wxUniv Sources',
'src/html/.*' => 'wxHTML Sources',
'include/.*/setup.h' => 'Setup Headers',
'include/wx/gtk/.*' => 'GTK+ Headers',
'include/wx/msw/.*' => 'MSW Headers',
'include/wx/generic/.*' => 'Generic Headers',
'include/wx/univ/.*' => 'wxUniv Headers',
'include/wx/html/.*' => 'wxHTML Headers',
);
foreach (keys %filters) {
return $filters{$_} if $file =~ qr{^${top_srcdir}$_$};
}
# Two fall backs which can't be used in the hash as they must be
# checked after the other patterns.
return 'Source Files' if $file =~ q{src/.*};
return 'Common Headers' if $file =~ q{include/wx/.*};
warn qq{No filter defined for the file "$file".\n};
undef
}
foreach my $proj (sort keys %projects_vars) {
next if defined $only_project && $proj ne $only_project;
my (@sources, @headers);
# All our projects use the special dummy file for PCH creation, but it's
# not included in the file lists.
push @sources, "${top_srcdir}src/common/dummy.cpp";
foreach my $var (@{$projects_vars{$proj}}) {
# The paths in the files lists are relative to the project root,
# so add relative path to it from the projects directory.
push @sources, "${top_srcdir}$_" for @{$vars->{"${var}_SRC"}};
# It is possible that we don't have any headers of some kind at all.
if (exists $vars->{"${var}_HDR"}) {
# Our files lists don't use the full path for the headers, the
# common "include/" prefix is omitted, add it back here.
push @headers, "${top_srcdir}include/$_" for @{$vars->{"${var}_HDR"}};
}
}
my @args = (\@sources, \@headers, \&filter_cb);
# First deal with MSBuild project, it's the simplest case.
if (!defined $only_version || $only_version == 10) {
call_upmake("$Bin/msw/wx_${proj}.vcxproj", \&update_msbuild, @args);
call_upmake("$Bin/msw/wx_${proj}.vcxproj.filters", \&update_msbuild_filters, @args);
}
# Pre-MSBuild projects also put this header together with all the other
# ones, so it needs to be added (with MSBuild it's a <CustomBuild>
# element and so is completely separate from the real headers that use
# <ClInclude>).
push @headers, "${top_srcdir}include/wx/msw/genrcdefs.h";
# And core project also includes all GUI headers instead of just those
# it really uses.
if ($proj eq 'core') {
foreach my $gui_proj (grep { $_ ne 'base' &&
$_ ne 'core' &&
$_ ne 'net' &&
$_ ne 'xml' } keys %projects_vars) {
foreach my $var (@{$projects_vars{$gui_proj}}) {
push @headers, "${top_srcdir}include/$_" for @{$vars->{"${var}_HDR"}};
}
}
}
# For compatibility with the existing bakefile-generated projects,
# don't include *.cpp files in the list of headers -- even these files
# are actually used as headers (i.e. they are #include'd).
if ($proj eq 'base') {
@headers = grep { $_ !~ /\.cpp$/ } @headers;
}
foreach my $ver (@vcproj_versions) {
next if defined $only_version && $ver != $only_version;
call_upmake("$Bin/msw/wx_vc${ver}_${proj}.vcproj", \&update_vcproj, @args);
}
}
}

View file

@ -50,6 +50,7 @@ Changes in behaviour which may result in build errors
All:
- Add UTF-8 and ZIP 64 support to wxZip{Input,Output}Stream (Tobias Taschner).
- Add wxStandardPaths::GetUserDir() (Tobias Taschner).
- Allow calling wxItemContainer::Add() and similar with std::vector<> argument.
- Add "%z" support to printf()-like functions like wxString::Format() (RIVDSL).
- Add DOCTYPE support to wxXmlDocument (Nick Matthews).
@ -140,6 +141,7 @@ wxGTK:
wxMSW:
- Make default wxSizer border DPI-aware.
- Implement native tab art for wxAUI (Tobias Taschner).
- Improve wxMimeTypesManager open command detection (Eric Jensen).
- Make wxFILTER_INCLUDE_LIST in wxTextValidator actually usable.
- Fix handling crashes in wxEVT_PAINT event handlers.
@ -184,3 +186,4 @@ wxOSX/Cocoa:
- Add support for wxEVT_COMBOBOX_DROPDOWN and wxEVT_COMBOBOX_CLOSEUP
events (Igor Korot).
- Implement strike-through support in wxFont (Igor Korot).
- Provide native implementation of wxStandardPaths (Tobias Taschner).

View file

@ -99,6 +99,7 @@ public:
wxBitmap bitmap; // tab's bitmap
wxRect rect; // tab's hit rectangle
bool active; // true if the page is currently active
bool hover; // true if mouse hovering over tab
};
class WXDLLIMPEXP_AUI wxAuiTabContainerButton
@ -234,6 +235,8 @@ protected:
wxAuiTabContainerButton* m_hoverButton;
wxAuiTabContainerButton* m_pressedButton;
void SetHoverTab(wxWindow* wnd);
#ifndef SWIG
wxDECLARE_CLASS(wxAuiTabCtrl);
wxDECLARE_EVENT_TABLE();

View file

@ -312,6 +312,10 @@ protected:
#define wxHAS_NATIVE_TABART
#include "wx/aui/tabartgtk.h"
#define wxAuiDefaultTabArt wxAuiGtkTabArt
#elif defined(__WXMSW__)
#define wxHAS_NATIVE_TABART
#include "wx/aui/tabartmsw.h"
#define wxAuiDefaultTabArt wxAuiMSWTabArt
#endif
#endif // !__WXUNIVERSAL__

View file

@ -0,0 +1,90 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/aui/tabartmsw.h
// Purpose: wxAuiMSWTabArt declaration
// Author: Tobias Taschner
// Created: 2015-09-26
// Copyright: (c) 2015 wxWidgets development team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_AUI_TABARTMSW_H_
#define _WX_AUI_TABARTMSW_H_
class WXDLLIMPEXP_AUI wxAuiMSWTabArt : public wxAuiGenericTabArt
{
public:
wxAuiMSWTabArt();
virtual ~wxAuiMSWTabArt();
wxAuiTabArt* Clone() wxOVERRIDE;
void SetSizingInfo(const wxSize& tabCtrlSize,
size_t tabCount) wxOVERRIDE;
void DrawBorder(
wxDC& dc,
wxWindow* wnd,
const wxRect& rect) wxOVERRIDE;
void DrawBackground(
wxDC& dc,
wxWindow* wnd,
const wxRect& rect) wxOVERRIDE;
void DrawTab(wxDC& dc,
wxWindow* wnd,
const wxAuiNotebookPage& pane,
const wxRect& inRect,
int closeButtonState,
wxRect* outTabRect,
wxRect* outButtonRect,
int* xExtent) wxOVERRIDE;
void DrawButton(
wxDC& dc,
wxWindow* wnd,
const wxRect& inRect,
int bitmapId,
int buttonState,
int orientation,
wxRect* outRect) wxOVERRIDE;
int GetIndentSize() wxOVERRIDE;
int GetBorderWidth(
wxWindow* wnd) wxOVERRIDE;
int GetAdditionalBorderSpace(
wxWindow* wnd) wxOVERRIDE;
wxSize GetTabSize(
wxDC& dc,
wxWindow* wnd,
const wxString& caption,
const wxBitmap& bitmap,
bool active,
int closeButtonState,
int* xExtent) wxOVERRIDE;
int ShowDropDown(
wxWindow* wnd,
const wxAuiNotebookPageArray& items,
int activeIdx) wxOVERRIDE;
int GetBestTabCtrlSize(wxWindow* wnd,
const wxAuiNotebookPageArray& pages,
const wxSize& requiredBmpSize) wxOVERRIDE;
private:
bool m_themed;
wxSize m_closeBtnSize;
wxSize m_tabSize;
int m_maxTabHeight;
void InitSizes(wxWindow* wnd, wxDC& dc);
bool IsThemed() const;
};
#endif // _WX_AUI_TABARTMSW_H_

View file

@ -20,34 +20,11 @@
#if wxUSE_CONTROLS
#include "wx/window.h" // base class
#include "wx/gdicmn.h" // wxEllipsize...
extern WXDLLIMPEXP_DATA_CORE(const char) wxControlNameStr[];
// ----------------------------------------------------------------------------
// Ellipsize() constants
// ----------------------------------------------------------------------------
enum wxEllipsizeFlags
{
wxELLIPSIZE_FLAGS_NONE = 0,
wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS = 1,
wxELLIPSIZE_FLAGS_EXPAND_TABS = 2,
wxELLIPSIZE_FLAGS_DEFAULT = wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS |
wxELLIPSIZE_FLAGS_EXPAND_TABS
};
// NB: Don't change the order of these values, they're the same as in
// PangoEllipsizeMode enum.
enum wxEllipsizeMode
{
wxELLIPSIZE_NONE,
wxELLIPSIZE_START,
wxELLIPSIZE_MIDDLE,
wxELLIPSIZE_END
};
// ----------------------------------------------------------------------------
// wxControl is the base class for all controls
// ----------------------------------------------------------------------------

View file

@ -155,6 +155,30 @@ enum wxStockCursor
#define wxCURSOR_CLOSED_HAND wxCURSOR_HAND
#endif
// ----------------------------------------------------------------------------
// Ellipsize() constants
// ----------------------------------------------------------------------------
enum wxEllipsizeFlags
{
wxELLIPSIZE_FLAGS_NONE = 0,
wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS = 1,
wxELLIPSIZE_FLAGS_EXPAND_TABS = 2,
wxELLIPSIZE_FLAGS_DEFAULT = wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS |
wxELLIPSIZE_FLAGS_EXPAND_TABS
};
// NB: Don't change the order of these values, they're the same as in
// PangoEllipsizeMode enum.
enum wxEllipsizeMode
{
wxELLIPSIZE_NONE,
wxELLIPSIZE_START,
wxELLIPSIZE_MIDDLE,
wxELLIPSIZE_END
};
// ---------------------------------------------------------------------------
// macros
// ---------------------------------------------------------------------------

View file

@ -102,10 +102,6 @@ public:
// wasn't found at all
static int GetComCtl32Version();
// the same for shell32.dll: returns 400, 471, 500, 600, ... (4.70 not
// currently detected)
static int GetShell32Version();
// the SW_XXX value to be used for the frames opened by the application
// (currently seems unused which is a bug -- TODO)
static int m_nCmdShow;

View file

@ -11,6 +11,8 @@
#ifndef _WX_MSW_STDPATHS_H_
#define _WX_MSW_STDPATHS_H_
struct _GUID;
// ----------------------------------------------------------------------------
// wxStandardPaths
// ----------------------------------------------------------------------------
@ -26,7 +28,7 @@ public:
virtual wxString GetUserDataDir() const;
virtual wxString GetUserLocalDataDir() const;
virtual wxString GetPluginsDir() const;
virtual wxString GetDocumentsDir() const;
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
// MSW-specific methods
@ -72,6 +74,8 @@ protected:
// get the path corresponding to the given standard CSIDL_XXX constant
static wxString DoGetDirectory(int csidl);
static wxString DoGetKnownFolder(const _GUID& rfid);
// return the directory of the application itself
wxString GetAppDir() const;

View file

@ -0,0 +1,43 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/stdpaths.h
// Purpose: wxStandardPaths for Cocoa
// Author: Tobias Taschner
// Created: 2015-09-09
// Copyright: (c) 2015 wxWidgets development team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_COCOA_STDPATHS_H_
#define _WX_COCOA_STDPATHS_H_
// ----------------------------------------------------------------------------
// wxStandardPaths
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxStandardPaths : public wxStandardPathsBase
{
public:
virtual ~wxStandardPaths();
// implement base class pure virtuals
virtual wxString GetExecutablePath() const wxOVERRIDE;
virtual wxString GetConfigDir() const wxOVERRIDE;
virtual wxString GetUserConfigDir() const wxOVERRIDE;
virtual wxString GetDataDir() const wxOVERRIDE;
virtual wxString GetLocalDataDir() const wxOVERRIDE;
virtual wxString GetUserDataDir() const wxOVERRIDE;
virtual wxString GetPluginsDir() const wxOVERRIDE;
virtual wxString GetResourcesDir() const wxOVERRIDE;
virtual wxString
GetLocalizedResourcesDir(const wxString& lang,
ResourceCat category = ResourceCat_None) const wxOVERRIDE;
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
protected:
// Ctor is protected, use wxStandardPaths::Get() instead of instantiating
// objects of this class directly.
wxStandardPaths();
};
#endif // _WX_COCOA_STDPATHS_H_

View file

@ -52,7 +52,7 @@ public:
virtual wxString
GetLocalizedResourcesDir(const wxString& lang,
ResourceCat category = ResourceCat_None) const;
virtual wxString GetDocumentsDir() const;
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
protected:
// Ctor is protected, use wxStandardPaths::Get() instead of instantiating

View file

@ -62,6 +62,7 @@ enum
wxCONTROL_EXPANDED = wxCONTROL_SPECIAL, // only for the tree items
wxCONTROL_SIZEGRIP = wxCONTROL_SPECIAL, // only for the status bar panes
wxCONTROL_FLAT = wxCONTROL_SPECIAL, // checkboxes only: flat border
wxCONTROL_CELL = wxCONTROL_SPECIAL, // only for item selection rect
wxCONTROL_CURRENT = 0x00000010, // mouse is currently over the control
wxCONTROL_SELECTED = 0x00000020, // selected item in e.g. listbox
wxCONTROL_CHECKED = 0x00000040, // (check/radio button) is checked
@ -346,7 +347,8 @@ public:
const wxString& text,
const wxRect& rect,
int align = wxALIGN_LEFT | wxALIGN_TOP,
int flags = 0) = 0;
int flags = 0,
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END) = 0;
// geometry functions
// ------------------
@ -548,8 +550,9 @@ public:
const wxString& text,
const wxRect& rect,
int align = wxALIGN_LEFT | wxALIGN_TOP,
int flags = 0)
{ m_rendererNative.DrawItemText(win, dc, text, rect, align, flags); }
int flags = 0,
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END)
{ m_rendererNative.DrawItemText(win, dc, text, rect, align, flags, ellipsizeMode); }
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win)
{ return m_rendererNative.GetSplitterParams(win); }

View file

@ -49,6 +49,15 @@ public:
AppInfo_VendorName = 2 // the vendor name
};
enum Dir
{
Dir_Documents,
Dir_Desktop,
Dir_Downloads,
Dir_Music,
Dir_Pictures,
Dir_Videos
};
// return the global standard paths object
static wxStandardPaths& Get();
@ -130,7 +139,10 @@ public:
//
// C:\Documents and Settings\username\My Documents under Windows,
// $HOME under Unix and ~/Documents under Mac
virtual wxString GetDocumentsDir() const;
virtual wxString GetDocumentsDir() const
{
return GetUserDir(Dir_Documents);
}
// return the directory for the documents files used by this application:
// it's a subdirectory of GetDocumentsDir() constructed using the
@ -140,6 +152,7 @@ public:
// return the temporary directory for the current user
virtual wxString GetTempDir() const;
virtual wxString GetUserDir(Dir userDir) const;
// virtual dtor for the base class
virtual ~wxStandardPathsBase();
@ -174,6 +187,9 @@ protected:
#if defined(__WINDOWS__)
#include "wx/msw/stdpaths.h"
#define wxHAS_NATIVE_STDPATHS
#elif defined(__WXOSX_COCOA__) || defined(__WXOSX_IPHONE__)
#include "wx/osx/cocoa/stdpaths.h"
#define wxHAS_NATIVE_STDPATHS
// We want CoreFoundation paths on both CarbonLib and Darwin (for all ports)
#elif defined(__WXMAC__) || defined(__DARWIN__)
#include "wx/osx/core/stdpaths.h"
@ -205,7 +221,7 @@ public:
virtual wxString GetLocalDataDir() const { return m_prefix; }
virtual wxString GetUserDataDir() const { return m_prefix; }
virtual wxString GetPluginsDir() const { return m_prefix; }
virtual wxString GetDocumentsDir() const { return m_prefix; }
virtual wxString GetUserDir(Dir WXUNUSED(userDir)) const { return m_prefix; }
protected:
// Ctor is protected because wxStandardPaths::Get() should always be used

View file

@ -47,7 +47,7 @@ public:
virtual wxString GetLocalizedResourcesDir(const wxString& lang,
ResourceCat category) const wxOVERRIDE;
#ifndef __VMS
virtual wxString GetDocumentsDir() const wxOVERRIDE;
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
#endif
protected:

View file

@ -35,7 +35,7 @@ wxEventType wxEVT_CHOICEBOOK_PAGE_CHANGING;
@beginStyleTable
@style{wxCHB_DEFAULT}
Choose the default location for the labels depending on the current
platform (left everywhere except Mac where it is top).
platform (but currently it's the same everywhere, namely wxCHB_TOP).
@style{wxCHB_TOP}
Place labels above the page area.
@style{wxCHB_LEFT}

View file

@ -5,60 +5,6 @@
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
/**
Flags used by wxControl::Ellipsize function.
*/
enum wxEllipsizeFlags
{
/// No special flags.
wxELLIPSIZE_FLAGS_NONE = 0,
/**
Take mnemonics into account when calculating the text width.
With this flag when calculating the size of the passed string,
mnemonics characters (see wxControl::SetLabel) will be automatically
reduced to a single character. This leads to correct calculations only
if the string passed to Ellipsize() will be used with
wxControl::SetLabel. If you don't want ampersand to be interpreted as
mnemonics (e.g. because you use wxControl::SetLabelText) then don't use
this flag.
*/
wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS = 1,
/**
Expand tabs in spaces when calculating the text width.
This flag tells wxControl::Ellipsize() to calculate the width of tab
characters @c '\\t' as 6 spaces.
*/
wxELLIPSIZE_FLAGS_EXPAND_TABS = 2,
/// The default flags for wxControl::Ellipsize.
wxELLIPSIZE_FLAGS_DEFAULT = wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS|
wxELLIPSIZE_FLAGS_EXPAND_TABS
};
/**
The different ellipsization modes supported by the
wxControl::Ellipsize function.
*/
enum wxEllipsizeMode
{
/// Don't ellipsize the text at all. @since 2.9.1
wxELLIPSIZE_NONE,
/// Put the ellipsis at the start of the string, if the string needs ellipsization.
wxELLIPSIZE_START,
/// Put the ellipsis in the middle of the string, if the string needs ellipsization.
wxELLIPSIZE_MIDDLE,
/// Put the ellipsis at the end of the string, if the string needs ellipsization.
wxELLIPSIZE_END
};
/**
@class wxControl

View file

@ -164,9 +164,8 @@ struct wxFontMetrics
@section Support for Transformation Matrix
On some platforms (currently only under MSW and only on Windows NT, i.e.
not Windows 9x/ME, systems) wxDC has support for applying an arbitrary
affine transformation matrix to its coordinate system. Call
On some platforms (currently only under MSW) wxDC has support for applying
an arbitrary affine transformation matrix to its coordinate system. Call
CanUseTransformMatrix() to check if this support is available and then call
SetTransformMatrix() if it is. If the transformation matrix is not
supported, SetTransformMatrix() always simply returns false and doesn't do
@ -1516,10 +1515,7 @@ public:
Check if the use of transformation matrix is supported by the current
system.
Currently this function always returns @false for non-MSW platforms and
may return @false for old (Windows 9x/ME) Windows systems. Normally
support for the transformation matrix is always available in any
relatively recent Windows versions.
Currently this function always returns @false for non-MSW platforms.
@since 2.9.2
*/

View file

@ -107,6 +107,60 @@ enum wxStockCursor
wxCURSOR_MAX
};
/**
Flags used by wxControl::Ellipsize function.
*/
enum wxEllipsizeFlags
{
/// No special flags.
wxELLIPSIZE_FLAGS_NONE = 0,
/**
Take mnemonics into account when calculating the text width.
With this flag when calculating the size of the passed string,
mnemonics characters (see wxControl::SetLabel) will be automatically
reduced to a single character. This leads to correct calculations only
if the string passed to Ellipsize() will be used with
wxControl::SetLabel. If you don't want ampersand to be interpreted as
mnemonics (e.g. because you use wxControl::SetLabelText) then don't use
this flag.
*/
wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS = 1,
/**
Expand tabs in spaces when calculating the text width.
This flag tells wxControl::Ellipsize() to calculate the width of tab
characters @c '\\t' as 6 spaces.
*/
wxELLIPSIZE_FLAGS_EXPAND_TABS = 2,
/// The default flags for wxControl::Ellipsize.
wxELLIPSIZE_FLAGS_DEFAULT = wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS|
wxELLIPSIZE_FLAGS_EXPAND_TABS
};
/**
The different ellipsization modes supported by the
wxControl::Ellipsize and wxRendererNative::DrawItemText() functions.
*/
enum wxEllipsizeMode
{
/// Don't ellipsize the text at all. @since 2.9.1
wxELLIPSIZE_NONE,
/// Put the ellipsis at the start of the string, if the string needs ellipsization.
wxELLIPSIZE_START,
/// Put the ellipsis in the middle of the string, if the string needs ellipsization.
wxELLIPSIZE_MIDDLE,
/// Put the ellipsis at the end of the string, if the string needs ellipsization.
wxELLIPSIZE_END
};
/**

View file

@ -485,7 +485,7 @@ public:
/**
Check whether the operating system and/or C run time environment supports
this locale. For example in Windows 2000 and Windows XP, support for many
this locale. For example in Windows, support for many
locales is not installed by default. Returns @true if the locale is
supported.

View file

@ -110,9 +110,9 @@ public:
HKCU, ///< HKEY_CURRENT_USER
HKLM, ///< HKEY_LOCAL_MACHINE
HKUSR, ///< HKEY_USERS
HKPD, ///< HKEY_PERFORMANCE_DATA (Windows NT and 2K only)
HKPD, ///< HKEY_PERFORMANCE_DATA
HKCC, ///< HKEY_CURRENT_CONFIG
HKDD, ///< HKEY_DYN_DATA (Windows 95 and 98 only)
HKDD, ///< HKEY_DYN_DATA (Obsolete: Windows 9x only)
HKMAX
};

View file

@ -63,7 +63,7 @@ wxEventType wxEVT_NOTEBOOK_PAGE_CHANGING;
@endStyleTable
The styles wxNB_LEFT, RIGHT and BOTTOM are not supported under
Microsoft Windows XP when using visual themes.
Microsoft Windows when using visual themes.
@beginEventEmissionTable{wxBookCtrlEvent}
@event{EVT_NOTEBOOK_PAGE_CHANGED(id, func)}
@ -78,7 +78,7 @@ wxEventType wxEVT_NOTEBOOK_PAGE_CHANGING;
@section notebook_bg Page backgrounds
On Windows XP, the default theme paints a gradient on the notebook's pages.
On Windows, the default theme paints a background on the notebook's pages.
If you wish to suppress this theme, for aesthetic or performance reasons,
there are three ways of doing it.
You can use @c wxNB_NOPAGETHEME to disable themed drawing for a particular

View file

@ -29,7 +29,7 @@ enum wxOperatingSystemId
wxOS_MAC = wxOS_MAC_OS|wxOS_MAC_OSX_DARWIN,
wxOS_WINDOWS_9X = 1 << 2, //!< Windows 9x family (95/98/ME)
wxOS_WINDOWS_NT = 1 << 3, //!< Windows NT family (NT/2000/XP/Vista/7)
wxOS_WINDOWS_NT = 1 << 3, //!< Windows NT family (XP/Vista/7/8/10)
wxOS_WINDOWS_MICRO = 1 << 4, //!< MicroWindows
wxOS_WINDOWS_CE = 1 << 5, //!< Windows CE (Windows Mobile)

View file

@ -526,8 +526,8 @@ public:
/**
Invokes the print setup dialog.
@remarks
The setup dialog is obsolete from Windows 95, though retained
@deprecated
The setup dialog is obsolete, though retained
for backward compatibility.
*/
virtual bool Setup(wxWindow* parent);

View file

@ -46,6 +46,9 @@ enum
/** Checkboxes only: flat border. */
wxCONTROL_FLAT = wxCONTROL_SPECIAL,
/** Item selection rect only: cell inside selection. */
wxCONTROL_CELL = wxCONTROL_SPECIAL,
/** Mouse is currently over the control. */
wxCONTROL_CURRENT = 0x00000010,
@ -404,7 +407,8 @@ public:
@c wxCONTROL_FOCUSED may be used to indicate if the control has the focus
(otherwise the selection rectangle is e.g. often grey and not blue).
This may be ignored by the renderer or deduced by the code directly from
the @a win.
the @a win. Additionally @c wxCONTROL_CELL may be used to draw a cell inside
a bigger selection area.
@see DrawItemText()
*/
@ -430,7 +434,8 @@ public:
const wxString& text,
const wxRect& rect,
int align = wxALIGN_LEFT | wxALIGN_TOP,
int flags = 0) = 0;
int flags = 0,
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END) = 0;
/**
Draw a blank push button that looks very similar to wxButton.

View file

@ -28,7 +28,7 @@ enum wxSystemFont
/// dialog box controls, and text.
wxSYS_SYSTEM_FONT,
/// Device-dependent font (Windows NT and later only).
/// Device-dependent font.
wxSYS_DEVICE_DEFAULT_FONT,
/**

View file

@ -52,8 +52,8 @@ enum
@style{wxSP_NOBORDER}
No border (default).
@style{wxSP_NO_XP_THEME}
Under Windows XP, switches off the attempt to draw the splitter
using Windows XP theming, so the borders and sash will take on the
Under Windows, switches off the attempt to draw the splitter
using Windows theming, so the borders and sash will take on the
pre-XP look.
@style{wxSP_PERMIT_UNSPLIT}
Always allow to unsplit, even with the minimum pane size other than zero.

View file

@ -10,8 +10,7 @@
A static bitmap control displays a bitmap. Native implementations on some
platforms are only meant for display of the small icons in the dialog
boxes. In particular, under Windows 9x the size of bitmap is limited
to 64*64 pixels.
boxes.
If you want to display larger images portably, you may use generic
implementation wxGenericStaticBitmap declared in \<wx/generic/statbmpg.h\>.

View file

@ -66,6 +66,64 @@ public:
ResourceCat_Messages
};
/// Possible values for userDir parameter of GetUserDir().
enum Dir
{
/**
Directory containing user documents.
Example return values:
- Unix/Mac: @c ~/Documents
- Windows: @c "C:\Users\username\Documents"
*/
Dir_Documents,
/**
Directory containing files on the users desktop.
Example return values:
- Unix/Mac: @c ~/Desktop
- Windows: @c "C:\Users\username\Desktop"
*/
Dir_Desktop,
/**
Directory for downloaded files
Example return values:
- Unix/Mac: @c ~/Downloads
- Windows: @c "C:\Users\username\Downloads" (Only available on Vista and newer)
*/
Dir_Downloads,
/**
Directory containing music files.
Example return values:
- Unix/Mac: @c ~/Music
- Windows: @c "C:\Users\username\Music"
*/
Dir_Music,
/**
Directory containing picture files.
Example return values:
- Unix/Mac: @c ~/Pictures
- Windows: @c "C:\Users\username\Pictures"
*/
Dir_Pictures,
/**
Directory containing video files.
Example return values:
- Unix: @c ~/Videos
- Windows: @c "C:\Users\username\Videos"
- Mac: @c ~/Movies
*/
Dir_Videos
};
/**
MSW-specific function undoing the effect of IgnoreAppSubDir() calls.
@ -138,17 +196,11 @@ public:
virtual wxString GetDataDir() const;
/**
Return the directory containing the current user's documents.
Example return values:
- Unix: @c ~ (the home directory)
- Windows: @c "C:\Users\username\Documents" or
@c "C:\Documents and Settings\username\My Documents"
- Mac: @c ~/Documents
Same as calling GetUserDir() with Dir_Documents parameter.
@since 2.7.0
@see GetAppDocumentsDir()
@see GetAppDocumentsDir(), GetUserDir()
*/
virtual wxString GetDocumentsDir() const;
@ -259,6 +311,17 @@ public:
*/
virtual wxString GetUserDataDir() const;
/**
Return the path of the specified user data directory.
If the value could not be determined the users home directory is returned.
@note On Unix this supports the xdg user dirs specification.
@since 3.1.0
*/
virtual wxString GetUserDir(Dir userDir) const;
/**
Return the directory for user data files which shouldn't be shared with
the other machines.

View file

@ -1076,7 +1076,7 @@ public:
See @ref thread_deletion for a broader explanation of this routine.
*/
wxThreadError Delete(ExitCode *rc = NULL,
wxThreadWait waitMode = wxTHREAD_WAIT_BLOCK);
wxThreadWait waitMode = wxTHREAD_WAIT_DEFAULT);
/**
Returns the number of system CPUs or -1 if the value is unknown.

View file

@ -1005,8 +1005,7 @@ enum
Under Unix, if the process is the group leader then passing
wxKILL_CHILDREN to wxKill() kills all children as well as pid.
Under MSW, applies only to console applications and is only supported
under NT family (i.e. not under Windows 9x). It corresponds to the
Under MSW, applies only to console applications. It corresponds to the
native @c CREATE_NEW_PROCESS_GROUP and, in particular, ensures that
Ctrl-Break signals will be sent to all children of this process as well
to the process itself. Support for this flag under MSW was added in
@ -1341,7 +1340,7 @@ bool wxShell(const wxString& command = wxEmptyString);
the @a flags.
@note Note that performing the shutdown requires the corresponding access
rights (superuser under Unix, SE_SHUTDOWN privilege under Windows NT)
rights (superuser under Unix, SE_SHUTDOWN privilege under Windows)
and that this function is only implemented under Unix and MSW.
@param flags

View file

@ -137,7 +137,7 @@ enum wxWindowVariant
is the old name for this style. Windows only.
@style{wxBORDER_THEME}
Displays a native border suitable for a control, on the current
platform. On Windows XP or Vista, this will be a themed border; on
platform. On Windows, this will be a themed border; on
most other platforms a sunken border will be used. For more
information for themed borders on Windows, please see Themed
borders on Windows.

View file

@ -186,6 +186,7 @@ bool wxAuiTabContainer::AddPage(wxWindow* page,
wxAuiNotebookPage page_info;
page_info = info;
page_info.window = page;
page_info.hover = false;
m_pages.Add(page_info);
@ -205,6 +206,7 @@ bool wxAuiTabContainer::InsertPage(wxWindow* page,
wxAuiNotebookPage page_info;
page_info = info;
page_info.window = page;
page_info.hover = false;
if (idx >= m_pages.GetCount())
m_pages.Add(page_info);
@ -1233,20 +1235,28 @@ void wxAuiTabCtrl::OnMotion(wxMouseEvent& evt)
}
}
#if wxUSE_TOOLTIPS
wxWindow* wnd = NULL;
if (evt.Moving() && TabHitTest(evt.m_x, evt.m_y, &wnd))
{
SetHoverTab(wnd);
#if wxUSE_TOOLTIPS
wxString tooltip(m_pages[GetIdxFromWindow(wnd)].tooltip);
// If the text changes, set it else, keep old, to avoid
// 'moving tooltip' effect
if (GetToolTipText() != tooltip)
SetToolTip(tooltip);
#endif // wxUSE_TOOLTIPS
}
else
{
SetHoverTab(NULL);
#if wxUSE_TOOLTIPS
UnsetToolTip();
#endif // wxUSE_TOOLTIPS
}
if (!evt.LeftIsDown() || m_clickPt == wxDefaultPosition)
return;
@ -1287,6 +1297,8 @@ void wxAuiTabCtrl::OnLeaveWindow(wxMouseEvent& WXUNUSED(event))
Refresh();
Update();
}
SetHoverTab(NULL);
}
void wxAuiTabCtrl::OnButton(wxAuiNotebookEvent& event)
@ -3450,5 +3462,26 @@ int wxAuiNotebook::DoModifySelection(size_t n, bool events)
return m_curPage;
}
void wxAuiTabCtrl::SetHoverTab(wxWindow* wnd)
{
bool hoverChanged = false;
const size_t page_count = m_pages.GetCount();
for ( size_t i = 0; i < page_count; ++i )
{
wxAuiNotebookPage& page = m_pages.Item(i);
bool oldHover = page.hover;
page.hover = (page.window == wnd);
if ( oldHover != page.hover )
hoverChanged = true;
}
if ( hoverChanged )
{
Refresh();
Update();
}
}
#endif // wxUSE_AUI

501
src/aui/tabartmsw.cpp Normal file
View file

@ -0,0 +1,501 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/aui/tabartmsw.h
// Purpose: wxAuiMSWTabArt declaration
// Author: Tobias Taschner
// Created: 2015-09-26
// Copyright: (c) 2015 wxWidgets development team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/dc.h"
#endif
#include "wx/aui/tabart.h"
#include "wx/aui/auibook.h"
#include "wx/msw/uxtheme.h"
#include "wx/msw/private.h"
#include "wx/renderer.h"
#if wxUSE_AUI
#ifndef CP_DROPDOWNBUTTON
#define TABP_TABITEM 1
#define TABP_TABITEMLEFTEDGE 2
#define TABP_TABITEMRIGHTEDGE 3
#define TABP_TABITEMBOTHEDGE 4
#define TABP_TOPTABITEM 5
#define TABP_TOPTABITEMLEFTEDGE 6
#define TABP_TOPTABITEMRIGHTEDGE 7
#define TABP_TOPTABITEMBOTHEDGE 8
#define TABP_PANE 9
#define TABP_BODY 10
#define TABP_AEROWIZARDBODY 11
#define TIS_NORMAL 1
#define TIS_HOT 2
#define TIS_SELECTED 3
#define TIS_DISABLED 4
#define TIS_FOCUSED 5
#define TTP_CLOSE 5
#define TTCS_NORMAL 1
#define TTCS_HOT 2
#define TTCS_PRESSED 3
#define SPNP_UPHORZ 3
#define SPNP_DOWNHORZ 4
#define CP_DROPDOWNBUTTON1 1
#define WP_CLOSEBUTTON 18
#endif
wxAuiMSWTabArt::wxAuiMSWTabArt()
{
m_closeBtnSize = wxDefaultSize;
m_maxTabHeight = 0;
wxUxThemeEngine* te = wxUxThemeEngine::GetIfActive();
if ( te && te->IsAppThemed() )
{
m_themed = true;
}
else
m_themed = false;
}
wxAuiMSWTabArt::~wxAuiMSWTabArt()
{
}
wxAuiTabArt* wxAuiMSWTabArt::Clone()
{
return new wxAuiMSWTabArt(*this);
}
void wxAuiMSWTabArt::SetSizingInfo(const wxSize& tab_ctrl_size,
size_t tab_count)
{
wxAuiGenericTabArt::SetSizingInfo(tab_ctrl_size, tab_count);
}
void wxAuiMSWTabArt::DrawBorder(wxDC& dc, wxWindow* wnd, const wxRect& rect)
{
if ( !IsThemed() )
{
wxAuiGenericTabArt::DrawBorder(dc, wnd, rect);
return;
}
wxRect drawRect(rect);
drawRect.y += m_maxTabHeight + wnd->FromDIP(1);
drawRect.height -= m_maxTabHeight;
// Mask border not covered by native theme
wxRect topDrawRect(rect);
topDrawRect.height = drawRect.height;
dc.SetPen(wxPen(wnd->GetBackgroundColour(), GetBorderWidth(wnd)));
dc.DrawRectangle(topDrawRect);
RECT r;
wxCopyRectToRECT(drawRect, r);
wxUxThemeHandle hTheme(wnd, L"TAB");
wxUxThemeEngine::Get()->DrawThemeBackground(
hTheme,
GetHdcOf(dc.GetTempHDC()),
TABP_PANE,
0,
&r,
NULL);
}
void wxAuiMSWTabArt::DrawBackground(wxDC& dc,
wxWindow* wnd,
const wxRect& rect)
{
if ( !IsThemed() )
{
wxAuiGenericTabArt::DrawBackground(dc, wnd, rect);
return;
}
int borderHeight = 2;
wxRect drawRect = rect;
drawRect.height -= borderHeight;
// Draw background
dc.SetBrush(wxBrush(wnd->GetBackgroundColour()));
dc.SetPen(*wxTRANSPARENT_PEN);
dc.DrawRectangle(drawRect);
// Draw top border
drawRect.y = drawRect.height;
drawRect.height = borderHeight + 2;
drawRect.Inflate(1, 0);
RECT r;
wxCopyRectToRECT(drawRect, r);
wxUxThemeHandle hTheme(wnd, L"TAB");
wxUxThemeEngine::Get()->DrawThemeBackground(
hTheme,
GetHdcOf(dc.GetTempHDC()),
TABP_PANE,
0,
&r,
NULL);
}
void wxAuiMSWTabArt::DrawTab(wxDC& dc,
wxWindow* wnd,
const wxAuiNotebookPage& page,
const wxRect& in_rect,
int close_button_state,
wxRect* out_tab_rect,
wxRect* out_button_rect,
int* x_extent)
{
if ( !IsThemed() )
{
wxAuiGenericTabArt::DrawTab(dc, wnd, page, in_rect, close_button_state, out_tab_rect, out_button_rect, x_extent);
return;
}
if ( !m_closeBtnSize.IsFullySpecified() )
InitSizes(wnd, dc);
// figure out the size of the tab
wxSize tabSize = GetTabSize(dc,
wnd,
page.caption,
page.bitmap,
page.active,
close_button_state,
x_extent);
wxCoord tabHeight = tabSize.y;
wxCoord tabWidth = tabSize.x;
wxCoord tabX = in_rect.x;
wxCoord tabY = 0;
if (!page.active)
{
tabY += wnd->FromDIP(2);
tabHeight -= wnd->FromDIP(2);
}
else
{
tabX -= wnd->FromDIP(2);
tabWidth += wnd->FromDIP(4);
tabHeight += 2;
}
int clipWidth = tabWidth;
if ( tabX + clipWidth > in_rect.x + in_rect.width )
clipWidth = (in_rect.x + in_rect.width) - tabX;
dc.SetClippingRegion(tabX - wnd->FromDIP(2), tabY, clipWidth + wnd->FromDIP(4), tabHeight);
// draw tab
wxRect tabRect(tabX, tabY, tabWidth, tabHeight);
int tabState;
if ( page.active )
tabState = TIS_SELECTED;
else if ( page.hover )
tabState = TIS_HOT;
else
tabState = TIS_NORMAL;
wxUxThemeEngine* te = wxUxThemeEngine::Get();
wxUxThemeHandle hTabTheme(wnd, L"Tab");
RECT tabR;
wxCopyRectToRECT(tabRect, tabR);
te->DrawThemeBackground(hTabTheme, GetHdcOf(dc.GetTempHDC()), TABP_TABITEM,
tabState,
&tabR, NULL);
wxRect textRect = tabRect;
if ( !page.active )
textRect.Offset(0, wnd->FromDIP(1));
if ( close_button_state != wxAUI_BUTTON_STATE_HIDDEN )
textRect.width -= m_closeBtnSize.x + wnd->FromDIP(3);
dc.SetFont(wnd->GetFont());
dc.DrawLabel(page.caption, page.bitmap, textRect, wxALIGN_CENTRE);
// draw focus rectangle
if ( page.active && (wnd->FindFocus() == wnd) )
{
wxRect focusRect = tabRect;
focusRect.Deflate(wnd->FromDIP(2));
wxRendererNative::Get().DrawFocusRect(wnd, dc, focusRect, 0);
}
// draw close button
if ( close_button_state != wxAUI_BUTTON_STATE_HIDDEN )
{
wxUxThemeHandle hToolTipTheme(wnd, L"TOOLTIP");
int btnState;
if ( close_button_state == wxAUI_BUTTON_STATE_HOVER )
btnState = TTCS_HOT;
else if ( close_button_state == wxAUI_BUTTON_STATE_PRESSED )
btnState = TTCS_PRESSED;
else
btnState = TTCS_NORMAL;
int offsetY = tabY;
if ( wxGetWinVersion() < wxWinVersion_Vista )
offsetY++; // WinXP theme needs a little more padding
wxRect rect(tabX + tabWidth - m_closeBtnSize.x - wnd->FromDIP(4),
offsetY + (tabHeight / 2) - (m_closeBtnSize.y / 2),
m_closeBtnSize.x,
m_closeBtnSize.y);
RECT btnR;
wxCopyRectToRECT(rect, btnR);
te->DrawThemeBackground(hToolTipTheme, GetHdcOf(dc.GetTempHDC()), TTP_CLOSE, btnState, &btnR, NULL);
if ( out_button_rect )
*out_button_rect = rect;
}
*out_tab_rect = wxRect(tabX, tabY, tabWidth, tabHeight);
dc.DestroyClippingRegion();
}
int wxAuiMSWTabArt::GetIndentSize()
{
if ( IsThemed() )
return 3; // This should be 1 but we can't draw into the border from DrawTab
else
return wxAuiGenericTabArt::GetIndentSize();
}
int wxAuiMSWTabArt::GetBorderWidth(wxWindow* wnd)
{
return wxAuiGenericTabArt::GetBorderWidth(wnd);
}
int wxAuiMSWTabArt::GetAdditionalBorderSpace(wxWindow* wnd)
{
if ( IsThemed() )
{
return 4;
}
else
return wxAuiGenericTabArt::GetAdditionalBorderSpace(wnd);
}
wxSize wxAuiMSWTabArt::GetTabSize(wxDC& dc,
wxWindow* wnd,
const wxString& caption,
const wxBitmap& bitmap,
bool active,
int close_button_state,
int* x_extent)
{
if ( !IsThemed() )
return wxAuiGenericTabArt::GetTabSize(dc, wnd, caption, bitmap, active, close_button_state, x_extent);
if ( !m_closeBtnSize.IsFullySpecified() )
InitSizes(wnd, dc);
wxCoord textWidth, textHeight, tmp;
dc.SetFont(wnd->GetFont());
dc.GetTextExtent(caption, &textWidth, &tmp);
dc.GetTextExtent("ABCDEFXj", &tmp, &textHeight);
wxCoord tabWidth = wxMax(m_tabSize.x, textWidth);
wxCoord tabHeight = wxMax(m_tabSize.y, textHeight);
// if the close button is showing, add space for it
if ( close_button_state != wxAUI_BUTTON_STATE_HIDDEN )
{
tabWidth += m_closeBtnSize.x;
tabHeight = wxMax(tabHeight, m_closeBtnSize.y);
}
// if there's a bitmap, add space for it
if ( bitmap.IsOk() )
{
tabWidth += bitmap.GetWidth() + wnd->FromDIP(3); // bitmap padding
tabHeight = wxMax(tabHeight, bitmap.GetHeight() + wnd->FromDIP(2));
}
// add padding
tabWidth += wnd->FromDIP(12);
tabHeight += wnd->FromDIP(3);
if ( m_flags & wxAUI_NB_TAB_FIXED_WIDTH )
{
tabWidth = m_fixedTabWidth;
}
else
{
int minTabWidth = wnd->FromDIP(46);
if (tabWidth < minTabWidth)
tabWidth = minTabWidth;
}
*x_extent = tabWidth;
if (tabHeight > m_maxTabHeight)
m_maxTabHeight = tabHeight;
return wxSize(tabWidth, tabHeight);
}
void wxAuiMSWTabArt::DrawButton(wxDC& dc,
wxWindow* wnd,
const wxRect& in_rect,
int bitmap_id,
int button_state,
int orientation,
wxRect* out_rect)
{
if ( !IsThemed() )
{
wxAuiGenericTabArt::DrawButton(dc, wnd, in_rect, bitmap_id, button_state, orientation, out_rect);
return;
}
wxUxThemeEngine* te = wxUxThemeEngine::Get();
const wchar_t* themeId = NULL;
int part = 0;
switch (bitmap_id)
{
case wxAUI_BUTTON_CLOSE:
themeId = L"Window";
part = WP_CLOSEBUTTON;
break;
case wxAUI_BUTTON_LEFT:
themeId = L"Spin";
part = SPNP_DOWNHORZ;
break;
case wxAUI_BUTTON_RIGHT:
themeId = L"Spin";
part = SPNP_UPHORZ;
break;
case wxAUI_BUTTON_WINDOWLIST:
themeId = L"Combobox";
part = CP_DROPDOWNBUTTON1;
break;
}
wxRect rect = in_rect;
if ( orientation == wxLEFT )
{
rect.SetX(in_rect.x);
rect.SetY(((in_rect.y + in_rect.height) / 2) - (m_closeBtnSize.GetHeight() / 2));
rect.SetWidth(m_closeBtnSize.GetWidth());
rect.SetHeight(m_closeBtnSize.GetHeight());
}
else
{
rect = wxRect(in_rect.x + in_rect.width - m_closeBtnSize.GetWidth(),
((in_rect.y + in_rect.height) / 2) - (m_closeBtnSize.GetHeight() / 2),
m_closeBtnSize.GetWidth(), m_closeBtnSize.GetHeight());
}
if ( bitmap_id == wxAUI_BUTTON_LEFT ||
bitmap_id == wxAUI_BUTTON_RIGHT )
{
rect.y = in_rect.y;
rect.height = in_rect.height - 7;
}
dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetBrush(wxBrush(m_baseColour));
dc.DrawRectangle(rect);
int btnState;
if ( button_state == wxAUI_BUTTON_STATE_DISABLED )
btnState = TTCS_PRESSED + 1;
else if ( button_state == wxAUI_BUTTON_STATE_HOVER )
btnState = TTCS_HOT;
else if ( button_state == wxAUI_BUTTON_STATE_PRESSED )
btnState = TTCS_PRESSED;
else
btnState = TTCS_NORMAL;
wxUxThemeHandle hTheme(wnd, themeId);
wxRect btnRect(rect);
btnRect.width -= wnd->FromDIP(1);
RECT btnR;
wxCopyRectToRECT(btnRect, btnR);
te->DrawThemeBackground(hTheme, GetHdcOf(dc.GetTempHDC()), part, btnState, &btnR, NULL);
if ( out_rect )
*out_rect = rect;
}
int wxAuiMSWTabArt::ShowDropDown(wxWindow* wnd,
const wxAuiNotebookPageArray& pages,
int active_idx)
{
return wxAuiGenericTabArt::ShowDropDown(wnd, pages, active_idx);
}
int wxAuiMSWTabArt::GetBestTabCtrlSize(wxWindow* wnd,
const wxAuiNotebookPageArray& pages,
const wxSize& requiredBmp_size)
{
return wxAuiGenericTabArt::GetBestTabCtrlSize(wnd, pages, requiredBmp_size);
}
void wxAuiMSWTabArt::InitSizes(wxWindow* wnd, wxDC& dc)
{
wxUxThemeEngine* te = wxUxThemeEngine::Get();
SIZE uxSize;
// Borrow close button from tooltip (best fit on various backgrounds)
wxUxThemeHandle hTooltipTheme(wnd, L"Tooltip");
te->GetThemePartSize(hTooltipTheme, GetHdcOf(dc.GetTempHDC()),
TTP_CLOSE, 0, NULL, TS_TRUE, &uxSize);
m_closeBtnSize.Set(uxSize.cx, uxSize.cy);
wxUxThemeHandle hTabTheme(wnd, L"Tab");
te->GetThemePartSize(hTabTheme, GetHdcOf(dc.GetTempHDC()),
TABP_TABITEM, 0, NULL, TS_TRUE, &uxSize);
m_tabSize.Set(uxSize.cx, uxSize.cy);
}
bool wxAuiMSWTabArt::IsThemed() const
{
return
m_themed &&
!(m_flags & wxAUI_NB_BOTTOM); // Native theme does not support bottom tabs
}
#endif // wxUSE_AUI

View file

@ -981,34 +981,20 @@ wxDataViewCustomRendererBase::RenderText(const wxString& text,
rectText.x += xoffset;
rectText.width -= xoffset;
// check if we want to ellipsize the text if it doesn't fit
wxString ellipsizedText;
if ( GetEllipsizeMode() != wxELLIPSIZE_NONE )
{
ellipsizedText = wxControl::Ellipsize
(
text,
*dc,
GetEllipsizeMode(),
rectText.width,
wxELLIPSIZE_FLAGS_NONE
);
}
int flags = 0;
if ( state & wxDATAVIEW_CELL_SELECTED )
flags |= wxCONTROL_SELECTED | wxCONTROL_FOCUSED;
if ( !GetOwner()->GetOwner()->IsEnabled() )
flags |= wxCONTROL_DISABLED;
// get the alignment to use
wxRendererNative::Get().DrawItemText(
GetOwner()->GetOwner(),
*dc,
ellipsizedText.empty() ? text : ellipsizedText,
text,
rectText,
GetEffectiveAlignment(),
flags);
flags,
GetEllipsizeMode());
}
void wxDataViewCustomRendererBase::SetEnabled(bool enabled)

View file

@ -1,3 +0,0 @@
// This file exists so that it can be compiled into an object so the linker
// will have something to chew on so that builds don't break when a platform
// lacks any objects in a particular multilib.

View file

@ -148,11 +148,26 @@ CPP_METHODDEF(void) wx_term_source ( j_decompress_ptr cinfo )
// JPEG error manager:
#ifdef __VISUALC__
// We don't care about the size of this struct, but we still get an
// annoying warning C4324 here:
//
// 'wx_error_mgr' : structure was padded due to __declspec(align())
//
// and suppressing it seems to be the only way to avoid it.
#pragma warning(push)
#pragma warning(disable: 4324)
#endif
struct wx_error_mgr : public jpeg_error_mgr
{
jmp_buf setjmp_buffer; /* for return to caller */
};
#ifdef __VISUALC__
#pragma warning(pop)
#endif
/*
* Here's the routine that will replace the standard error_exit method:
*/

View file

@ -114,11 +114,6 @@ wxString wxStandardPathsBase::GetUserLocalDataDir() const
return GetUserDataDir();
}
wxString wxStandardPathsBase::GetDocumentsDir() const
{
return wxFileName::GetHomeDir();
}
wxString wxStandardPathsBase::GetAppDocumentsDir() const
{
const wxString docsDir = GetDocumentsDir();
@ -133,6 +128,11 @@ wxString wxStandardPathsBase::GetTempDir() const
return wxFileName::GetTempDir();
}
wxString wxStandardPathsBase::GetUserDir(Dir WXUNUSED(userDir)) const
{
return wxFileName::GetHomeDir();
}
/* static */
wxString
wxStandardPathsBase::AppendPathComponent(const wxString& dir,

View file

@ -63,7 +63,11 @@ void wxBusyInfo::Init(const wxBusyInfoFlags& flags)
wxDefaultSize,
wxALIGN_CENTRE);
title->SetFont(title->GetFont().Scaled(2));
#if wxUSE_MARKUP
title->SetLabelMarkup(flags.m_title);
#else
title->SetLabelText(flags.m_title);
#endif
sizer->Add(title, wxSizerFlags().DoubleBorder().Expand());
}

View file

@ -1801,44 +1801,6 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent )
#endif // wxUSE_DRAG_AND_DROP
// Draw focus rect for individual cell. Unlike native focus rect, we render
// this in foreground text color (typically white) to enhance contrast and
// make it visible.
static void DrawSelectedCellFocusRect(wxDC& dc, const wxRect& rect)
{
// (This code is based on wxRendererGeneric::DrawFocusRect and modified.)
// draw the pixels manually because the "dots" in wxPen with wxDOT style
// may be short traits and not really dots
//
// note that to behave in the same manner as DrawRect(), we must exclude
// the bottom and right borders from the rectangle
wxCoord x1 = rect.GetLeft(),
y1 = rect.GetTop(),
x2 = rect.GetRight(),
y2 = rect.GetBottom();
wxDCPenChanger pen(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT));
wxCoord z;
for ( z = x1 + 1; z < x2; z += 2 )
dc.DrawPoint(z, rect.GetTop());
wxCoord shift = z == x2 ? 0 : 1;
for ( z = y1 + shift; z < y2; z += 2 )
dc.DrawPoint(x2, z);
shift = z == y2 ? 0 : 1;
for ( z = x2 - shift; z > x1; z -= 2 )
dc.DrawPoint(z, y2);
shift = z == x1 ? 0 : 1;
for ( z = y2 - shift; z > y1; z -= 2 )
dc.DrawPoint(x1, z);
}
void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
{
wxDataViewModel *model = GetModel();
@ -1994,29 +1956,18 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
if (selected || item == m_currentRow)
{
wxRect rect( x_start, GetLineStart( item ),
wxRect rowRect( x_start, GetLineStart( item ),
x_last - x_start, GetLineHeight( item ) );
// draw selection and whole-item focus:
if ( selected )
{
int flags = wxCONTROL_SELECTED;
if (m_hasFocus)
flags |= wxCONTROL_FOCUSED;
bool renderColumnFocus = false;
wxRendererNative::Get().DrawItemSelectionRect
(
this,
dc,
rect,
flags
);
}
int flags = wxCONTROL_SELECTED;
if ( m_hasFocus )
flags |= wxCONTROL_FOCUSED;
// draw keyboard focus rect if applicable
if ( item == m_currentRow && m_hasFocus )
{
bool renderColumnFocus = false;
if ( m_useCellFocus && m_currentCol && m_currentColSetByKeyboard )
{
@ -2033,54 +1984,76 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
if ( renderColumnFocus )
{
wxRect colRect(rowRect);
for ( unsigned int i = col_start; i < col_last; i++ )
{
wxDataViewColumn *col = GetOwner()->GetColumnAt(i);
if ( col->IsHidden() )
continue;
rect.width = col->GetWidth();
colRect.width = col->GetWidth();
if ( col == m_currentCol )
{
// make the rect more visible by adding a small
// margin around it:
rect.Deflate(1, 1);
// Draw selection rect left of column
{
wxRect clipRect(rowRect);
clipRect.width = colRect.x;
if ( selected )
{
// DrawFocusRect() uses XOR and is all but
// invisible against dark-blue background. Use
// the same color used for selected text.
DrawSelectedCellFocusRect(dc, rect);
wxDCClipper clip(dc, clipRect);
wxRendererNative::Get().DrawItemSelectionRect
(
this,
dc,
rowRect,
flags
);
}
else
// Draw selection rect right of column
{
wxRendererNative::Get().DrawFocusRect
(
this,
dc,
rect,
0
);
wxRect clipRect(rowRect);
clipRect.x = colRect.x + colRect.width;
clipRect.width = rowRect.width - clipRect.x;
wxDCClipper clip(dc, clipRect);
wxRendererNative::Get().DrawItemSelectionRect
(
this,
dc,
rowRect,
flags
);
}
// Draw column selection rect
wxRendererNative::Get().DrawItemSelectionRect
(
this,
dc,
colRect,
flags | wxCONTROL_CURRENT | wxCONTROL_CELL
);
break;
}
rect.x += rect.width;
colRect.x += colRect.width;
}
}
else
{
// render focus rectangle for the whole row
wxRendererNative::Get().DrawFocusRect
(
this,
dc,
rect,
selected ? (int)wxCONTROL_SELECTED : 0
);
}
}
// draw selection and whole-item focus:
if ( selected && !renderColumnFocus )
{
wxRendererNative::Get().DrawItemSelectionRect
(
this,
dc,
rowRect,
flags | wxCONTROL_CURRENT
);
}
}
}

View file

@ -150,7 +150,8 @@ public:
const wxString& text,
const wxRect& rect,
int align = wxALIGN_LEFT | wxALIGN_TOP,
int flags = 0) wxOVERRIDE;
int flags = 0,
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END) wxOVERRIDE;
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win) wxOVERRIDE;
@ -182,6 +183,46 @@ protected:
static wxRendererGeneric* sm_rendererGeneric;
};
// ----------------------------------------------------------------------------
// misc. drawing functions
// ----------------------------------------------------------------------------
// Draw focus rect for individual cell. Unlike native focus rect, we render
// this in foreground text color (typically white) to enhance contrast and
// make it visible.
static void DrawSelectedCellFocusRect(wxDC& dc, const wxRect& rect)
{
// (This code is based on wxRendererGeneric::DrawFocusRect and modified.)
// draw the pixels manually because the "dots" in wxPen with wxDOT style
// may be short traits and not really dots
//
// note that to behave in the same manner as DrawRect(), we must exclude
// the bottom and right borders from the rectangle
wxCoord x1 = rect.GetLeft(),
y1 = rect.GetTop(),
x2 = rect.GetRight(),
y2 = rect.GetBottom();
wxDCPenChanger pen(dc, wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT));
wxCoord z;
for (z = x1 + 1; z < x2; z += 2)
dc.DrawPoint(z, rect.GetTop());
wxCoord shift = z == x2 ? 0 : 1;
for (z = y1 + shift; z < y2; z += 2)
dc.DrawPoint(x2, z);
shift = z == y2 ? 0 : 1;
for (z = x2 - shift; z > x1; z -= 2)
dc.DrawPoint(z, y2);
shift = z == x1 ? 0 : 1;
for (z = y2 - shift; z > y1; z -= 2)
dc.DrawPoint(x1, z);
}
// ============================================================================
// wxRendererGeneric implementation
// ============================================================================
@ -753,17 +794,27 @@ wxRendererGeneric::DrawItemSelectionRect(wxWindow * win,
}
dc.SetBrush(brush);
if ((flags & wxCONTROL_CURRENT) && (flags & wxCONTROL_FOCUSED)
bool drawFocusRect = (flags & wxCONTROL_CURRENT) && (flags & wxCONTROL_FOCUSED)
#if defined( __WXMAC__ ) && !defined(__WXUNIVERSAL__) && wxOSX_USE_CARBON
&& IsControlActive( (ControlRef)win->GetHandle() )
#endif
)
;
if ( drawFocusRect && !(flags & wxCONTROL_CELL) )
dc.SetPen( *wxBLACK_PEN );
else
dc.SetPen( *wxTRANSPARENT_PEN );
dc.DrawRectangle( rect );
if ( drawFocusRect && (flags & wxCONTROL_CELL) )
{
wxRect focusRect(rect);
focusRect.Deflate(1);
DrawSelectedCellFocusRect(dc, focusRect);
}
// it's unused everywhere except in wxOSX/Carbon
wxUnusedVar(win);
}
@ -883,12 +934,13 @@ void wxRendererGeneric::DrawGauge(wxWindow* win,
}
void
wxRendererGeneric::DrawItemText(wxWindow* win,
wxRendererGeneric::DrawItemText(wxWindow* WXUNUSED(win),
wxDC& dc,
const wxString& text,
const wxRect& rect,
int align,
int flags)
int flags,
wxEllipsizeMode ellipsizeMode)
{
// Determine text color
wxColour textColour;
@ -907,17 +959,15 @@ wxRendererGeneric::DrawItemText(wxWindow* win,
{
textColour = wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT);
}
else // enabled but not selected
{
textColour = win->GetForegroundColour();
}
const wxString paintText = wxControl::Ellipsize(text, dc,
wxELLIPSIZE_END,
ellipsizeMode,
rect.GetWidth());
// Draw text
dc.SetTextForeground(textColour);
// Draw text taking care not to change its colour if it had been set by the
// caller for a normal item to allow having items in non-default colours.
if ( textColour.IsOk() )
dc.SetTextForeground(textColour);
dc.SetTextBackground(wxTransparentColour);
dc.DrawLabel(paintText, rect, align);
}

View file

@ -235,7 +235,7 @@ wxTextDataObject::GetAllFormats(wxDataFormat *formats,
bool wxFileDataObject::GetDataHere(void *buf) const
{
char* out = reinterpret_cast<char*>(buf);
char* out = static_cast<char*>(buf);
for (size_t i = 0; i < m_filenames.GetCount(); i++)
{
@ -243,10 +243,11 @@ bool wxFileDataObject::GetDataHere(void *buf) const
if (uri)
{
size_t const len = strlen(uri);
strcpy(out, uri);
memcpy(out, uri, len);
out += len;
*(out++) = '\r';
*(out++) = '\n';
g_free(uri);
}
}
*out = 0;

View file

@ -4458,9 +4458,6 @@ void wxWindowGTK::GTKApplyWidgetStyle(bool forceStyle)
g_object_unref(style);
#endif
}
// Style change may affect GTK+'s size calculation:
InvalidateBestSize();
}
void wxWindowGTK::DoApplyWidgetStyle(GtkRcStyle *style)
@ -4768,6 +4765,7 @@ bool wxWindowGTK::SetFont( const wxFont &font )
// apply style change (forceStyle=true so that new style is applied
// even if the font changed from valid to wxNullFont):
GTKApplyWidgetStyle(true);
InvalidateBestSize();
}
#ifdef __WXGTK3__

View file

@ -377,10 +377,7 @@ bool wxConsoleStderr::DoInit()
if ( !m_dllKernel32.Load(wxT("kernel32.dll")) )
return false;
typedef BOOL (WINAPI *AttachConsole_t)(DWORD dwProcessId);
AttachConsole_t wxDL_INIT_FUNC(pfn, AttachConsole, m_dllKernel32);
if ( !pfnAttachConsole || !pfnAttachConsole(ATTACH_PARENT_PROCESS) )
if ( !::AttachConsole(ATTACH_PARENT_PROCESS) )
return false;
// console attached, set m_hStderr now to ensure that we free it in the
@ -892,37 +889,6 @@ int wxApp::GetComCtl32Version()
return s_verComCtl32;
}
/* static */
int wxApp::GetShell32Version()
{
static int s_verShell32 = -1;
if ( s_verShell32 == -1 )
{
// we're prepared to handle the errors
wxLogNull noLog;
wxDynamicLibrary dllShell32(wxT("shell32.dll"), wxDL_VERBATIM);
if ( dllShell32.IsLoaded() )
{
s_verShell32 = CallDllGetVersion(dllShell32);
if ( !s_verShell32 )
{
// there doesn't seem to be any way to distinguish between 4.00
// and 4.70 (starting from 4.71 we have DllGetVersion()) so
// just assume it is 4.0
s_verShell32 = 400;
}
}
else // failed load the DLL?
{
s_verShell32 = 0;
}
}
return s_verShell32;
}
#else // !wxUSE_DYNLIB_CLASS
/* static */
@ -931,12 +897,6 @@ int wxApp::GetComCtl32Version()
return 0;
}
/* static */
int wxApp::GetShell32Version()
{
return 0;
}
#endif // wxUSE_DYNLIB_CLASS/!wxUSE_DYNLIB_CLASS
#if wxUSE_EXCEPTIONS

View file

@ -54,13 +54,6 @@ bool wxMSWDateControls::CheckInitialization()
// it's enough to give the error only once
s_initResult = false;
if ( wxApp::GetComCtl32Version() < 470 )
{
wxLogError(_("This system doesn't support date controls, please upgrade your version of comctl32.dll"));
return false;
}
#if wxUSE_DYNLIB_CLASS
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(icex);

View file

@ -70,9 +70,7 @@ WXDWORD wxDatePickerCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
{
WXDWORD styleMSW = wxDatePickerCtrlBase::MSWGetStyle(style, exstyle);
// although MSDN doesn't mention it, DTS_UPDOWN doesn't work with
// comctl32.dll 4.72
if ( wxApp::GetComCtl32Version() > 472 && (style & wxDP_SPIN) )
if ( style & wxDP_SPIN )
styleMSW |= DTS_UPDOWN;
//else: drop down by default

View file

@ -267,19 +267,14 @@ int wxDirDialog::ShowSHBrowseForFolder(WXHWND owner)
static const int verComCtl32 = wxApp::GetComCtl32Version();
// we always add the edit box (it doesn't hurt anybody, does it?) if it is
// supported by the system
if ( verComCtl32 >= 471 )
{
bi.ulFlags |= BIF_EDITBOX;
}
// we always add the edit box (it doesn't hurt anybody, does it?)
bi.ulFlags |= BIF_EDITBOX;
// to have the "New Folder" button we must use the "new" dialog style which
// is also the only way to have a resizable dialog
//
// "new" style is only available in the version 5.0+ of comctl32.dll
const bool needNewDir = !HasFlag(wxDD_DIR_MUST_EXIST);
if ( (needNewDir || HasFlag(wxRESIZE_BORDER)) && (verComCtl32 >= 500) )
if ( needNewDir || HasFlag(wxRESIZE_BORDER) )
{
if (needNewDir)
{

View file

@ -70,32 +70,6 @@
static const wxChar displayDllName[] = wxT("user32.dll");
// ----------------------------------------------------------------------------
// typedefs for dynamically loaded Windows functions
// ----------------------------------------------------------------------------
typedef LONG (WINAPI *ChangeDisplaySettingsEx_t)(LPCTSTR lpszDeviceName,
LPDEVMODE lpDevMode,
HWND hwnd,
DWORD dwFlags,
LPVOID lParam);
typedef BOOL (WINAPI *EnumDisplayMonitors_t)(HDC,LPCRECT,MONITORENUMPROC,LPARAM);
typedef HMONITOR (WINAPI *MonitorFromPoint_t)(POINT,DWORD);
typedef HMONITOR (WINAPI *MonitorFromWindow_t)(HWND,DWORD);
typedef BOOL (WINAPI *GetMonitorInfo_t)(HMONITOR,LPMONITORINFO);
// emulation of ChangeDisplaySettingsEx() for Win95
LONG WINAPI ChangeDisplaySettingsExForWin95(LPCTSTR WXUNUSED(lpszDeviceName),
LPDEVMODE lpDevMode,
HWND WXUNUSED(hwnd),
DWORD dwFlags,
LPVOID WXUNUSED(lParam))
{
return ::ChangeDisplaySettings(lpDevMode, dwFlags);
}
// ----------------------------------------------------------------------------
// wxDisplayMSW declaration
// ----------------------------------------------------------------------------
@ -148,12 +122,6 @@ private:
WX_DEFINE_ARRAY(HMONITOR, wxMonitorHandleArray);
// functions dynamically bound by wxDisplayFactoryMSW ctor.
static MonitorFromPoint_t gs_MonitorFromPoint = NULL;
static MonitorFromWindow_t gs_MonitorFromWindow = NULL;
static GetMonitorInfo_t gs_GetMonitorInfo = NULL;
static EnumDisplayMonitors_t gs_EnumDisplayMonitors = NULL;
class wxDisplayFactoryMSW : public wxDisplayFactory
{
public:
@ -236,7 +204,7 @@ wxDisplayFactoryMSW* wxDisplayFactoryMSW::ms_factory = NULL;
bool wxDisplayMSW::GetMonInfo(MONITORINFOEX& monInfo) const
{
if ( !gs_GetMonitorInfo(m_hmon, &monInfo) )
if ( !::GetMonitorInfo(m_hmon, &monInfo) )
{
wxLogLastError(wxT("GetMonitorInfo"));
return false;
@ -390,30 +358,8 @@ bool wxDisplayMSW::ChangeMode(const wxVideoMode& mode)
}
// get pointer to the function dynamically
//
// we're only called from the main thread, so it's ok to use static
// variable
static ChangeDisplaySettingsEx_t pfnChangeDisplaySettingsEx = NULL;
if ( !pfnChangeDisplaySettingsEx )
{
wxDynamicLibrary dllDisplay(displayDllName, wxDL_VERBATIM | wxDL_QUIET);
if ( dllDisplay.IsLoaded() )
{
wxDL_INIT_FUNC_AW(pfn, ChangeDisplaySettingsEx, dllDisplay);
}
//else: huh, no this DLL must always be present, what's going on??
if ( !pfnChangeDisplaySettingsEx )
{
// we must be under Win95 and so there is no multiple monitors
// support anyhow
pfnChangeDisplaySettingsEx = ChangeDisplaySettingsExForWin95;
}
}
// do change the mode
switch ( pfnChangeDisplaySettingsEx
switch ( ::ChangeDisplaySettingsEx
(
GetName().t_str(), // display name
pDevMode, // dev mode or NULL to reset
@ -478,25 +424,6 @@ wxDisplayFactoryMSW::wxDisplayFactoryMSW()
m_hiddenHwnd = NULL;
m_hiddenClass = NULL;
if ( gs_MonitorFromPoint==NULL || gs_MonitorFromWindow==NULL
|| gs_GetMonitorInfo==NULL || gs_EnumDisplayMonitors==NULL )
{
// First initialization, or last initialization failed.
wxDynamicLibrary dllDisplay(displayDllName, wxDL_VERBATIM | wxDL_QUIET);
wxDL_INIT_FUNC(gs_, MonitorFromPoint, dllDisplay);
wxDL_INIT_FUNC(gs_, MonitorFromWindow, dllDisplay);
wxDL_INIT_FUNC_AW(gs_, GetMonitorInfo, dllDisplay);
wxDL_INIT_FUNC(gs_, EnumDisplayMonitors, dllDisplay);
// we can safely let dllDisplay go out of scope, the DLL itself will
// still remain loaded as all programs link to it statically anyhow
}
if ( gs_MonitorFromPoint==NULL || gs_MonitorFromWindow==NULL
|| gs_GetMonitorInfo==NULL || gs_EnumDisplayMonitors==NULL )
return;
DoRefreshMonitors();
// Also create a hidden window to listen for WM_SETTINGCHANGE that we
@ -535,7 +462,7 @@ void wxDisplayFactoryMSW::DoRefreshMonitors()
{
m_displays.Clear();
if ( !gs_EnumDisplayMonitors(NULL, NULL, MultimonEnumProc, (LPARAM)this) )
if ( !::EnumDisplayMonitors(NULL, NULL, MultimonEnumProc, (LPARAM)this) )
{
wxLogLastError(wxT("EnumDisplayMonitors"));
}
@ -586,14 +513,14 @@ int wxDisplayFactoryMSW::GetFromPoint(const wxPoint& pt)
pt2.x = pt.x;
pt2.y = pt.y;
return FindDisplayFromHMONITOR(gs_MonitorFromPoint(pt2,
return FindDisplayFromHMONITOR(::MonitorFromPoint(pt2,
MONITOR_DEFAULTTONULL));
}
int wxDisplayFactoryMSW::GetFromWindow(const wxWindow *window)
{
#ifdef __WXMSW__
return FindDisplayFromHMONITOR(gs_MonitorFromWindow(GetHwndOf(window),
return FindDisplayFromHMONITOR(::MonitorFromWindow(GetHwndOf(window),
MONITOR_DEFAULTTONULL));
#else
const wxSize halfsize = window->GetSize() / 2;

View file

@ -32,40 +32,6 @@
// private classes
// ----------------------------------------------------------------------------
// wrap some functions from version.dll: load them dynamically and provide a
// clean interface
class wxVersionDLL
{
public:
// load version.dll and bind to its functions
wxVersionDLL();
// return the file version as string, e.g. "x.y.z.w"
wxString GetFileVersion(const wxString& filename) const;
private:
typedef DWORD (APIENTRY *GetFileVersionInfoSize_t)(PTSTR, PDWORD);
typedef BOOL (APIENTRY *GetFileVersionInfo_t)(PTSTR, DWORD, DWORD, PVOID);
typedef BOOL (APIENTRY *VerQueryValue_t)(const PVOID, PTSTR, PVOID *, PUINT);
#define DO_FOR_ALL_VER_FUNCS(what) \
what(GetFileVersionInfoSize); \
what(GetFileVersionInfo); \
what(VerQueryValue)
#define DECLARE_VER_FUNCTION(func) func ## _t m_pfn ## func
DO_FOR_ALL_VER_FUNCS(DECLARE_VER_FUNCTION);
#undef DECLARE_VER_FUNCTION
wxDynamicLibrary m_dll;
wxDECLARE_NO_COPY_CLASS(wxVersionDLL);
};
// class used to create wxDynamicLibraryDetails objects
class WXDLLIMPEXP_BASE wxDynamicLibraryDetailsCreator
{
@ -74,87 +40,44 @@ public:
struct EnumModulesProcParams
{
wxDynamicLibraryDetailsArray *dlls;
wxVersionDLL *verDLL;
};
static BOOL CALLBACK
EnumModulesProc(const wxChar* name, DWORD64 base, ULONG size, PVOID data);
};
// ============================================================================
// wxVersionDLL implementation
// ============================================================================
// ----------------------------------------------------------------------------
// loading
// DLL version operations
// ----------------------------------------------------------------------------
wxVersionDLL::wxVersionDLL()
{
// don't give errors if DLL can't be loaded or used, we're prepared to
// handle it
wxLogNull noLog;
if ( m_dll.Load(wxT("version.dll"), wxDL_VERBATIM) )
{
// the functions we load have either 'A' or 'W' suffix depending on
// whether we're in ANSI or Unicode build
#ifdef UNICODE
#define SUFFIX L"W"
#else // ANSI
#define SUFFIX "A"
#endif // UNICODE/ANSI
#define LOAD_VER_FUNCTION(name) \
m_pfn ## name = (name ## _t)m_dll.GetSymbol(wxT(#name SUFFIX)); \
if ( !m_pfn ## name ) \
{ \
m_dll.Unload(); \
return; \
}
DO_FOR_ALL_VER_FUNCS(LOAD_VER_FUNCTION);
#undef LOAD_VER_FUNCTION
}
}
// ----------------------------------------------------------------------------
// wxVersionDLL operations
// ----------------------------------------------------------------------------
wxString wxVersionDLL::GetFileVersion(const wxString& filename) const
static wxString GetFileVersion(const wxString& filename)
{
wxString ver;
if ( m_dll.IsLoaded() )
{
wxChar *pc = const_cast<wxChar *>((const wxChar*) filename.t_str());
wxChar *pc = const_cast<wxChar *>((const wxChar*) filename.t_str());
DWORD dummy;
DWORD sizeVerInfo = m_pfnGetFileVersionInfoSize(pc, &dummy);
if ( sizeVerInfo )
DWORD dummy;
DWORD sizeVerInfo = ::GetFileVersionInfoSize(pc, &dummy);
if ( sizeVerInfo )
{
wxCharBuffer buf(sizeVerInfo);
if ( ::GetFileVersionInfo(pc, 0, sizeVerInfo, buf.data()) )
{
wxCharBuffer buf(sizeVerInfo);
if ( m_pfnGetFileVersionInfo(pc, 0, sizeVerInfo, buf.data()) )
void *pVer;
UINT sizeInfo;
if ( ::VerQueryValue(buf.data(),
const_cast<wxChar *>(wxT("\\")),
&pVer,
&sizeInfo) )
{
void *pVer;
UINT sizeInfo;
if ( m_pfnVerQueryValue(buf.data(),
const_cast<wxChar *>(wxT("\\")),
&pVer,
&sizeInfo) )
{
VS_FIXEDFILEINFO *info = (VS_FIXEDFILEINFO *)pVer;
ver.Printf(wxT("%d.%d.%d.%d"),
HIWORD(info->dwFileVersionMS),
LOWORD(info->dwFileVersionMS),
HIWORD(info->dwFileVersionLS),
LOWORD(info->dwFileVersionLS));
}
VS_FIXEDFILEINFO *info = (VS_FIXEDFILEINFO *)pVer;
ver.Printf(wxT("%d.%d.%d.%d"),
HIWORD(info->dwFileVersionMS),
LOWORD(info->dwFileVersionMS),
HIWORD(info->dwFileVersionLS),
LOWORD(info->dwFileVersionLS));
}
}
}
//else: we failed to load DLL, can't retrieve version info
return ver;
}
@ -191,7 +114,7 @@ wxDynamicLibraryDetailsCreator::EnumModulesProc(const wxChar* name,
if ( !fullname.empty() )
{
details->m_path = fullname;
details->m_version = params->verDLL->GetFileVersion(fullname);
details->m_version = GetFileVersion(fullname);
}
}
@ -258,12 +181,8 @@ wxDynamicLibraryDetailsArray wxDynamicLibrary::ListLoaded()
#if wxUSE_DBGHELP
if ( wxDbgHelpDLL::Init() )
{
// prepare to use functions for version info extraction
wxVersionDLL verDLL;
wxDynamicLibraryDetailsCreator::EnumModulesProcParams params;
params.dlls = &dlls;
params.verDLL = &verDLL;
if ( !wxDbgHelpDLL::CallEnumerateLoadedModules
(

View file

@ -46,6 +46,8 @@
#include "wx/graphics.h"
#include "wx/dc.h"
#include "wx/dcclient.h"
#include "wx/dcmemory.h"
#include "wx/dynlib.h"
#include "wx/image.h"
#include "wx/module.h"
@ -53,6 +55,7 @@
#include "wx/private/graphics.h"
#include "wx/stack.h"
#include "wx/sharedptr.h"
#include "wx/window.h"
// This must be the last header included to only affect the DEFINE_GUID()
// occurrences below but not any GUIDs declared in the standard files included
@ -311,10 +314,10 @@ class wxD2DResourceManager;
class wxD2DManagedObject
{
public:
virtual void Bind(wxD2DResourceManager* manager) = NULL;
virtual void UnBind() = NULL;
virtual bool IsBound() = NULL;
virtual wxD2DResourceManager* GetManager() = NULL;
virtual void Bind(wxD2DResourceManager* manager) = 0;
virtual void UnBind() = 0;
virtual bool IsBound() = 0;
virtual wxD2DResourceManager* GetManager() = 0;
virtual ~wxD2DManagedObject() {};
};
@ -1352,6 +1355,8 @@ public:
{
}
virtual ~wxHatchBitmapSource() {}
HRESULT STDMETHODCALLTYPE GetSize(__RPC__out UINT *width, __RPC__out UINT *height) wxOVERRIDE
{
if (width != NULL) *width = 8;
@ -1372,10 +1377,9 @@ public:
return S_OK;
}
HRESULT STDMETHODCALLTYPE CopyPalette(__RPC__in_opt IWICPalette *palette) wxOVERRIDE
HRESULT STDMETHODCALLTYPE CopyPalette(__RPC__in_opt IWICPalette* WXUNUSED(palette)) wxOVERRIDE
{
palette = NULL;
return S_OK;
return WINCODEC_ERR_PALETTEUNAVAILABLE;
}
HRESULT STDMETHODCALLTYPE CopyPixels(
@ -1449,7 +1453,7 @@ public:
ULONG STDMETHODCALLTYPE Release(void) wxOVERRIDE
{
wxCHECK2_MSG(m_refCount > 0, 0, "Unbalanced number of calls to Release");
wxCHECK_MSG(m_refCount > 0, 0, "Unbalanced number of calls to Release");
ULONG refCount = InterlockedDecrement(&m_refCount);
if (m_refCount == 0)
@ -2794,7 +2798,7 @@ private:
// A ID2D1DrawingStateBlock represents the drawing state of a render target:
// the anti aliasing mode, transform, tags, and text-rendering options.
// The context owns these pointers and is responsible for releasing them.
wxStack<wxCOMPtr<ID2D1DrawingStateBlock>> m_stateStack;
wxStack<wxCOMPtr<ID2D1DrawingStateBlock> > m_stateStack;
ClipMode m_clipMode;
@ -2803,7 +2807,7 @@ private:
// A direct2d layer is a device-dependent resource.
wxCOMPtr<ID2D1Layer> m_clipLayer;
wxStack<wxCOMPtr<ID2D1Layer>> m_layers;
wxStack<wxCOMPtr<ID2D1Layer> > m_layers;
ID2D1RenderTarget* m_cachedRenderTarget;
@ -3698,6 +3702,12 @@ void wxD2DRenderer::GetVersion(int* major, int* minor, int* micro) const
case wxDirect2D::wxD2D_VERSION_1_1:
*minor = 1;
break;
case wxDirect2D::wxD2D_VERSION_NONE:
// This is not supposed to happen, but we handle this value in
// the switch to ensure that we'll get warnings if any new
// values, not handled here, are added to the enum later.
*minor = -1;
break;
}
}

View file

@ -54,6 +54,18 @@
#define NMLVFINDITEM NM_FINDITEM
#endif
// MinGW headers lack casts to WPARAM inside several ListView_XXX() macros, so
// add them to suppress the warnings about implicit conversions/truncation.
// However do not add them for MSVC as it has casts not only to WPARAM but
// actually to int first, and then to WPARAM, and casting to WPARAM here would
// result in warnings when casting 64 bit WPARAM to 32 bit int inside the
// macros in Win64 builds.
#ifdef __MINGW32__
#define NO_ITEM (static_cast<WPARAM>(-1))
#else
#define NO_ITEM (-1)
#endif
// ----------------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------------
@ -277,26 +289,23 @@ bool wxListCtrl::Create(wxWindow *parent,
void wxListCtrl::MSWSetExListStyles()
{
// for comctl32.dll v 4.70+ we want to have some non default extended
// we want to have some non default extended
// styles because it's prettier (and also because wxGTK does it like this)
if ( wxApp::GetComCtl32Version() >= 470 )
{
::SendMessage
(
GetHwnd(), LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
// LVS_EX_LABELTIP shouldn't be used under Windows CE where it's
// not defined in the SDK headers
::SendMessage
(
GetHwnd(), LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
// LVS_EX_LABELTIP shouldn't be used under Windows CE where it's
// not defined in the SDK headers
#ifdef LVS_EX_LABELTIP
LVS_EX_LABELTIP |
LVS_EX_LABELTIP |
#endif
LVS_EX_FULLROWSELECT |
LVS_EX_SUBITEMIMAGES |
// normally this should be governed by a style as it's probably not
// always appropriate, but we don't have any free styles left and
// it seems better to enable it by default than disable
LVS_EX_HEADERDRAGDROP
);
}
LVS_EX_FULLROWSELECT |
LVS_EX_SUBITEMIMAGES |
// normally this should be governed by a style as it's probably not
// always appropriate, but we don't have any free styles left and
// it seems better to enable it by default than disable
LVS_EX_HEADERDRAGDROP
);
}
WXDWORD wxListCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
@ -359,13 +368,6 @@ WXDWORD wxListCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
#if !( defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 1, 0 ) )
if ( style & wxLC_VIRTUAL )
{
int ver = wxApp::GetComCtl32Version();
if ( ver < 470 )
{
wxLogWarning(_("Please install a newer version of comctl32.dll\n(at least version 4.70 is required but you have %d.%02d)\nor this program won't operate correctly."),
ver / 100, ver % 100);
}
wstyle |= LVS_OWNERDATA;
}
#endif // ancient cygwin
@ -1337,10 +1339,7 @@ void wxListCtrl::AssignImageList(wxImageList *imageList, int which)
wxSize wxListCtrl::MSWGetBestViewRect(int x, int y) const
{
// The cast is necessary to suppress a MinGW warning due to a missing cast
// to WPARAM in the definition of ListView_ApproximateViewRect() in its
// own headers (this was the case up to at least MinGW 4.8).
const DWORD rc = ListView_ApproximateViewRect(GetHwnd(), x, y, (WPARAM)-1);
const DWORD rc = ListView_ApproximateViewRect(GetHwnd(), x, y, NO_ITEM);
wxSize size(LOWORD(rc), HIWORD(rc));
@ -1622,7 +1621,7 @@ wxListCtrl::HitTest(const wxPoint& point, int& flags, long *ptrSubItem) const
long item;
#ifdef LVM_SUBITEMHITTEST
if ( ptrSubItem && wxApp::GetComCtl32Version() >= 470 )
if ( ptrSubItem )
{
item = ListView_SubItemHitTest(GetHwnd(), &hitTestInfo);
*ptrSubItem = hitTestInfo.iSubItem;
@ -2738,12 +2737,8 @@ static void HandleItemPaint(LPNMLVCUSTOMDRAW pLVCD, HFONT hfont)
}
// same thing for CDIS_FOCUS (except simpler as there is only one of them)
//
// NB: cast is needed to work around the bug in mingw32 headers which don't
// have it inside ListView_GetNextItem() itself (unlike SDK ones)
if ( ::GetFocus() == hwndList &&
ListView_GetNextItem(
hwndList, static_cast<WPARAM>(-1), LVNI_FOCUSED) == item )
ListView_GetNextItem(hwndList, NO_ITEM, LVNI_FOCUSED) == item )
{
nmcd.uItemState |= CDIS_FOCUS;
}
@ -3280,40 +3275,36 @@ static void wxConvertToMSWListCol(HWND hwndList,
#ifdef NM_CUSTOMDRAW // _WIN32_IE >= 0x0300
if ( item.m_mask & wxLIST_MASK_IMAGE )
{
if ( wxApp::GetComCtl32Version() >= 470 )
lvCol.mask |= LVCF_IMAGE;
// we use LVCFMT_BITMAP_ON_RIGHT because the images on the right
// seem to be generally nicer than on the left and the generic
// version only draws them on the right (we don't have a flag to
// specify the image location anyhow)
//
// we don't use LVCFMT_COL_HAS_IMAGES because it doesn't seem to
// make any difference in my tests -- but maybe we should?
if ( item.m_image != -1 )
{
lvCol.mask |= LVCF_IMAGE;
// we use LVCFMT_BITMAP_ON_RIGHT because the images on the right
// seem to be generally nicer than on the left and the generic
// version only draws them on the right (we don't have a flag to
// specify the image location anyhow)
//
// we don't use LVCFMT_COL_HAS_IMAGES because it doesn't seem to
// make any difference in my tests -- but maybe we should?
if ( item.m_image != -1 )
// as we're going to overwrite the format field, get its
// current value first -- unless we want to overwrite it anyhow
if ( !(lvCol.mask & LVCF_FMT) )
{
// as we're going to overwrite the format field, get its
// current value first -- unless we want to overwrite it anyhow
if ( !(lvCol.mask & LVCF_FMT) )
LV_COLUMN lvColOld;
wxZeroMemory(lvColOld);
lvColOld.mask = LVCF_FMT;
if ( ListView_GetColumn(hwndList, col, &lvColOld) )
{
LV_COLUMN lvColOld;
wxZeroMemory(lvColOld);
lvColOld.mask = LVCF_FMT;
if ( ListView_GetColumn(hwndList, col, &lvColOld) )
{
lvCol.fmt = lvColOld.fmt;
}
lvCol.mask |= LVCF_FMT;
lvCol.fmt = lvColOld.fmt;
}
lvCol.fmt |= LVCFMT_BITMAP_ON_RIGHT | LVCFMT_IMAGE;
lvCol.mask |= LVCF_FMT;
}
lvCol.iImage = item.m_image;
lvCol.fmt |= LVCFMT_BITMAP_ON_RIGHT | LVCFMT_IMAGE;
}
//else: it doesn't support item images anyhow
lvCol.iImage = item.m_image;
}
#endif // _WIN32_IE >= 0x0300
}

View file

@ -580,21 +580,11 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
// boxes are used together with bitmaps and this is not the
// case in wx API
WinStruct<MENUINFO> mi;
// don't call SetMenuInfo() directly, this would prevent
// the app from starting up under Windows 95/NT 4
typedef BOOL (WINAPI *SetMenuInfo_t)(HMENU, MENUINFO *);
wxDynamicLibrary dllUser(wxT("user32"));
wxDYNLIB_FUNCTION(SetMenuInfo_t, SetMenuInfo, dllUser);
if ( pfnSetMenuInfo )
mi.fMask = MIM_STYLE;
mi.dwStyle = MNS_CHECKORBMP;
if ( !::SetMenuInfo(GetHmenu(), &mi) )
{
mi.fMask = MIM_STYLE;
mi.dwStyle = MNS_CHECKORBMP;
if ( !(*pfnSetMenuInfo)(GetHmenu(), &mi) )
{
wxLogLastError(wxT("SetMenuInfo(MNS_NOCHECK)"));
}
wxLogLastError(wxT("SetMenuInfo(MNS_NOCHECK)"));
}
}
}

View file

@ -227,31 +227,13 @@ wxString wxAssocQueryString(ASSOCSTR assoc,
wxString ext,
const wxString& verb = wxString())
{
typedef HRESULT (WINAPI *AssocQueryString_t)(ASSOCF, ASSOCSTR,
LPCTSTR, LPCTSTR, LPTSTR,
DWORD *);
static AssocQueryString_t s_pfnAssocQueryString = (AssocQueryString_t)-1;
static wxDynamicLibrary s_dllShlwapi;
if ( s_pfnAssocQueryString == (AssocQueryString_t)-1 )
{
if ( !s_dllShlwapi.Load(wxT("shlwapi.dll"), wxDL_VERBATIM | wxDL_QUIET) )
s_pfnAssocQueryString = NULL;
else
wxDL_INIT_FUNC_AW(s_pfn, AssocQueryString, s_dllShlwapi);
}
if ( !s_pfnAssocQueryString )
return wxString();
DWORD dwSize = MAX_PATH;
TCHAR bufOut[MAX_PATH] = { 0 };
if ( ext.empty() || ext[0] != '.' )
ext.Prepend('.');
HRESULT hr = s_pfnAssocQueryString
HRESULT hr = ::AssocQueryString
(
wxASSOCF_NOTRUNCATE,// Fail if buffer is too small.
assoc, // The association to retrieve.

View file

@ -452,7 +452,7 @@ bool wxNotificationMessage::Show(int timeout)
{
if ( !m_impl )
{
if ( !ms_alwaysUseGeneric && wxTheApp->GetShell32Version() >= 500 )
if ( !ms_alwaysUseGeneric )
{
if ( timeout == Timeout_Never )
m_impl = new wxManualNotifMsgImpl(GetParent());

View file

@ -26,6 +26,7 @@
#ifndef WX_PRECOMP
#include "wx/string.h"
#include "wx/window.h"
#include "wx/control.h" // for wxControl::Ellipsize()
#include "wx/dc.h"
#include "wx/settings.h"
#endif //WX_PRECOMP
@ -338,7 +339,8 @@ public:
const wxString& text,
const wxRect& rect,
int align = wxALIGN_LEFT | wxALIGN_TOP,
int flags = 0);
int flags = 0,
wxEllipsizeMode ellipsizeMode = wxELLIPSIZE_END);
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
@ -385,6 +387,12 @@ void wxRendererMSWBase::DrawItemSelectionRect(wxWindow *win,
const wxRect& rect,
int flags)
{
if ( flags & wxCONTROL_CELL )
{
m_rendererNative.DrawItemSelectionRect(win, dc, rect, flags);
return;
}
wxBrush brush;
if ( flags & wxCONTROL_SELECTED )
{
@ -615,6 +623,27 @@ int wxRendererMSW::GetHeaderButtonMargin(wxWindow *WXUNUSED(win))
#if wxUSE_UXTHEME
namespace
{
int GetListItemState(int flags)
{
int itemState = (flags & wxCONTROL_CURRENT) ? LISS_HOT : LISS_NORMAL;
if ( flags & wxCONTROL_SELECTED )
{
itemState = (flags & wxCONTROL_CURRENT) ? LISS_HOTSELECTED : LISS_SELECTED;
if ( !(flags & wxCONTROL_FOCUSED) )
itemState = LISS_SELECTEDNOTFOCUS;
}
if ( flags & wxCONTROL_DISABLED )
itemState = LISS_DISABLED;
return itemState;
}
} // anonymous namespace
/* static */
wxRendererNative& wxRendererXP::Get()
{
@ -941,13 +970,7 @@ wxRendererXP::DrawItemSelectionRect(wxWindow *win,
{
wxUxThemeHandle hTheme(win, L"LISTVIEW");
int itemState = LISS_NORMAL;
if ( flags & wxCONTROL_SELECTED )
itemState = LISS_SELECTED;
if ( !(flags & wxCONTROL_FOCUSED) )
itemState = LISS_SELECTEDNOTFOCUS;
if ( flags & wxCONTROL_DISABLED )
itemState |= LISS_DISABLED;
const int itemState = GetListItemState(flags);
wxUxThemeEngine* const te = wxUxThemeEngine::Get();
if ( te->IsThemePartDefined(hTheme, LVP_LISTITEM, itemState) )
@ -970,17 +993,12 @@ void wxRendererXP::DrawItemText(wxWindow* win,
const wxString& text,
const wxRect& rect,
int align,
int flags)
int flags,
wxEllipsizeMode ellipsizeMode)
{
wxUxThemeHandle hTheme(win, L"LISTVIEW");
int itemState = LISS_NORMAL;
if ( flags & wxCONTROL_SELECTED )
itemState = LISS_SELECTED;
if ( !(flags & wxCONTROL_FOCUSED) )
itemState = LISS_SELECTEDNOTFOCUS;
if ( flags & wxCONTROL_DISABLED )
itemState |= LISS_DISABLED;
const int itemState = GetListItemState(flags);
wxUxThemeEngine* te = wxUxThemeEngine::Get();
if ( te->DrawThemeTextEx && // Might be not available if we're under XP
@ -999,11 +1017,14 @@ void wxRendererXP::DrawItemText(wxWindow* win,
textOpts.crText = wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT).GetPixel();
}
DWORD textFlags = DT_NOPREFIX | DT_END_ELLIPSIS;
if ( align & wxALIGN_CENTER )
DWORD textFlags = DT_NOPREFIX;
if ( align & wxALIGN_CENTER_HORIZONTAL )
textFlags |= DT_CENTER;
else if ( align & wxALIGN_RIGHT )
{
textFlags |= DT_RIGHT;
rc.right--; // Alignment is inconsistent with DrawLabel otherwise
}
else
textFlags |= DT_LEFT;
@ -1014,12 +1035,37 @@ void wxRendererXP::DrawItemText(wxWindow* win,
else
textFlags |= DT_TOP;
const wxString* drawText = &text;
wxString ellipsizedText;
switch ( ellipsizeMode )
{
case wxELLIPSIZE_NONE:
// no flag required
break;
case wxELLIPSIZE_START:
case wxELLIPSIZE_MIDDLE:
// no native support for this ellipsize modes, use wxWidgets
// implementation (may not be 100% accurate because per
// definition the theme defines the font but should be close
// enough with current windows themes)
drawText = &ellipsizedText;
ellipsizedText = wxControl::Ellipsize(text, dc, ellipsizeMode,
rect.width,
wxELLIPSIZE_FLAGS_NONE);
break;
case wxELLIPSIZE_END:
textFlags |= DT_END_ELLIPSIS;
break;
}
te->DrawThemeTextEx(hTheme, dc.GetHDC(), LVP_LISTITEM, itemState,
text.wchar_str(), -1, textFlags, &rc, &textOpts);
drawText->wchar_str(), -1, textFlags, &rc, &textOpts);
}
else
{
m_rendererNative.DrawItemText(win, dc, text, rect, align, flags);
m_rendererNative.DrawItemText(win, dc, text, rect, align, flags, ellipsizeMode);
}
}

View file

@ -580,7 +580,7 @@ WXHBRUSH wxSlider::DoMSWControlColor(WXHDC pDC, wxColour colBg, WXHWND hWnd)
// Anything really refreshing the slider would work here, we use a
// dummy WM_ENABLE but using TBM_SETPOS would work too, for example.
::PostMessage(hWnd, WM_ENABLE, (BOOL)IsEnabled(), 0);
::PostMessage(hWnd, WM_ENABLE, ::IsWindowEnabled(hWnd), 0);
}
return hBrush;

View file

@ -168,17 +168,12 @@ int wxSpinButton::GetValue() const
{
int n;
#ifdef UDM_GETPOS32
if ( wxApp::GetComCtl32Version() >= 580 )
{
// use the full 32 bit range if available
n = ::SendMessage(GetHwnd(), UDM_GETPOS32, 0, 0);
}
else
// use the full 32 bit range if available
n = ::SendMessage(GetHwnd(), UDM_GETPOS32, 0, 0);
#else
// we're limited to 16 bit
n = (short)LOWORD(::SendMessage(GetHwnd(), UDM_GETPOS, 0, 0));
#endif // UDM_GETPOS32
{
// we're limited to 16 bit
n = (short)LOWORD(::SendMessage(GetHwnd(), UDM_GETPOS, 0, 0));
}
if (n < m_min) n = m_min;
if (n > m_max) n = m_max;
@ -191,16 +186,11 @@ void wxSpinButton::SetValue(int val)
// wxSpinButtonBase::SetValue(val); -- no, it is pure virtual
#ifdef UDM_SETPOS32
if ( wxApp::GetComCtl32Version() >= 580 )
{
// use the full 32 bit range if available
::SendMessage(GetHwnd(), UDM_SETPOS32, 0, val);
}
else // we're limited to 16 bit
// use the full 32 bit range if available
::SendMessage(GetHwnd(), UDM_SETPOS32, 0, val);
#else
::SendMessage(GetHwnd(), UDM_SETPOS, 0, MAKELONG((short) val, 0));
#endif // UDM_SETPOS32
{
::SendMessage(GetHwnd(), UDM_SETPOS, 0, MAKELONG((short) val, 0));
}
}
void wxSpinButton::NormalizeValue()
@ -215,17 +205,13 @@ void wxSpinButton::SetRange(int minVal, int maxVal)
wxSpinButtonBase::SetRange(minVal, maxVal);
#ifdef UDM_SETRANGE32
if ( wxApp::GetComCtl32Version() >= 471 )
{
// use the full 32 bit range if available
::SendMessage(GetHwnd(), UDM_SETRANGE32, minVal, maxVal);
}
else // we're limited to 16 bit
// use the full 32 bit range if available
::SendMessage(GetHwnd(), UDM_SETRANGE32, minVal, maxVal);
#else
// we're limited to 16 bit
::SendMessage(GetHwnd(), UDM_SETRANGE, 0,
(LPARAM) MAKELONG((short)maxVal, (short)minVal));
#endif // UDM_SETRANGE32
{
::SendMessage(GetHwnd(), UDM_SETRANGE, 0,
(LPARAM) MAKELONG((short)maxVal, (short)minVal));
}
// the current value might be out of the new range, force it to be in it
NormalizeValue();

View file

@ -36,6 +36,7 @@
#include "wx/msw/private.h"
#include "wx/msw/wrapshl.h"
#include <initguid.h>
// ----------------------------------------------------------------------------
// types
@ -43,6 +44,7 @@
typedef HRESULT (WINAPI *SHGetFolderPath_t)(HWND, int, HANDLE, DWORD, LPTSTR);
typedef HRESULT (WINAPI *SHGetSpecialFolderPath_t)(HWND, LPTSTR, int, BOOL);
typedef HRESULT (WINAPI *SHGetKnownFolderPath_t)(const GUID&, DWORD, HANDLE, PWSTR *);
// ----------------------------------------------------------------------------
// constants
@ -86,6 +88,9 @@ typedef HRESULT (WINAPI *SHGetSpecialFolderPath_t)(HWND, LPTSTR, int, BOOL);
namespace
{
DEFINE_GUID(wxFOLDERID_Downloads,
0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b);
struct ShellFunctions
{
ShellFunctions()
@ -97,6 +102,7 @@ struct ShellFunctions
SHGetFolderPath_t pSHGetFolderPath;
SHGetSpecialFolderPath_t pSHGetSpecialFolderPath;
SHGetKnownFolderPath_t pSHGetKnownFolderPath;
bool initialized;
};
@ -146,6 +152,9 @@ void ResolveShellFunctions()
dllShellFunctions.GetSymbol(funcname + UNICODE_SUFFIX);
}
gs_shellFuncs.pSHGetKnownFolderPath = (SHGetKnownFolderPath_t)
dllShellFunctions.GetSymbol("SHGetKnownFolderPath");
// finally we fall back on SHGetSpecialFolderLocation (shell32.dll 4.0),
// but we don't need to test for it -- it is available even under Win95
@ -242,6 +251,28 @@ wxString wxStandardPaths::DoGetDirectory(int csidl)
return dir;
}
wxString wxStandardPaths::DoGetKnownFolder(const GUID& rfid)
{
if (!gs_shellFuncs.initialized)
ResolveShellFunctions();
wxString dir;
if ( gs_shellFuncs.pSHGetKnownFolderPath )
{
PWSTR pDir;
HRESULT hr = gs_shellFuncs.pSHGetKnownFolderPath(rfid, 0, 0, &pDir);
if ( SUCCEEDED(hr) )
{
dir = pDir;
CoTaskMemFree(pDir);
}
}
return dir;
}
wxString wxStandardPaths::GetAppDir() const
{
if ( m_appDir.empty() )
@ -252,9 +283,38 @@ wxString wxStandardPaths::GetAppDir() const
return m_appDir;
}
wxString wxStandardPaths::GetDocumentsDir() const
wxString wxStandardPaths::GetUserDir(Dir userDir) const
{
return DoGetDirectory(CSIDL_PERSONAL);
int csidl;
switch (userDir)
{
case Dir_Desktop:
csidl = CSIDL_DESKTOPDIRECTORY;
break;
case Dir_Downloads:
{
csidl = CSIDL_PERSONAL;
// Downloads folder is only available since Vista
wxString dir = DoGetKnownFolder(wxFOLDERID_Downloads);
if ( !dir.empty() )
return dir;
break;
}
case Dir_Music:
csidl = CSIDL_MYMUSIC;
break;
case Dir_Pictures:
csidl = CSIDL_MYPICTURES;
break;
case Dir_Videos:
csidl = CSIDL_MYVIDEO;
break;
default:
csidl = CSIDL_PERSONAL;
break;
}
return DoGetDirectory(csidl);
}
// ----------------------------------------------------------------------------

View file

@ -45,14 +45,6 @@
#define NIF_INFO 0x00000010
#endif
#ifndef NOTIFYICONDATA_V1_SIZE
#ifdef UNICODE
#define NOTIFYICONDATA_V1_SIZE 0x0098
#else
#define NOTIFYICONDATA_V1_SIZE 0x0058
#endif
#endif
#ifndef NOTIFYICONDATA_V2_SIZE
#ifdef UNICODE
#define NOTIFYICONDATA_V2_SIZE 0x03A8
@ -122,12 +114,8 @@ struct NotifyIconData : public NOTIFYICONDATA
// we could do complicated tests for the exact system version it's
// easier to just use an old size which should be supported everywhere
// from Windows 2000 up and which is all we need as we don't use any
// newer features so far. But if we're running under a really ancient
// system (Win9x), fall back to even smaller size -- then the balloon
// related features won't be available but the rest will still work.
cbSize = wxTheApp->GetShell32Version() >= 500
? NOTIFYICONDATA_V2_SIZE
: NOTIFYICONDATA_V1_SIZE;
// newer features so far.
cbSize = NOTIFYICONDATA_V2_SIZE;
hWnd = (HWND) hwnd;
uCallbackMessage = gs_msgTaskbar;

View file

@ -39,6 +39,9 @@
#include "wx/msw/uxtheme.h"
#endif
#include "wx/msw/wrapwin.h"
#include <Shlwapi.h>
#define GetEditHwnd() ((HWND)(GetEditHWND()))
// ----------------------------------------------------------------------------
@ -775,24 +778,6 @@ void wxTextEntry::GetSelection(long *from, long *to) const
bool wxTextEntry::DoAutoCompleteFileNames(int flags)
{
typedef HRESULT (WINAPI *SHAutoComplete_t)(HWND, DWORD);
static SHAutoComplete_t s_pfnSHAutoComplete = (SHAutoComplete_t)-1;
static wxDynamicLibrary s_dllShlwapi;
if ( s_pfnSHAutoComplete == (SHAutoComplete_t)-1 )
{
if ( !s_dllShlwapi.Load(wxT("shlwapi.dll"), wxDL_VERBATIM | wxDL_QUIET) )
{
s_pfnSHAutoComplete = NULL;
}
else
{
wxDL_INIT_FUNC(s_pfn, SHAutoComplete, s_dllShlwapi);
}
}
if ( !s_pfnSHAutoComplete )
return false;
DWORD dwFlags = 0;
if ( flags & wxFILE )
dwFlags |= SHACF_FILESYS_ONLY;
@ -804,7 +789,7 @@ bool wxTextEntry::DoAutoCompleteFileNames(int flags)
return false;
}
HRESULT hr = (*s_pfnSHAutoComplete)(GetEditHwnd(), dwFlags);
HRESULT hr = ::SHAutoComplete(GetEditHwnd(), dwFlags);
if ( FAILED(hr) )
{
wxLogApiError(wxT("SHAutoComplete()"), hr);

View file

@ -386,8 +386,7 @@ bool wxToolBar::MSWCreateToolbar(const wxPoint& pos, const wxSize& size)
::SendMessage(GetHwnd(), TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
#ifdef TB_SETEXTENDEDSTYLE
if ( wxApp::GetComCtl32Version() >= 471 )
::SendMessage(GetHwnd(), TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS);
::SendMessage(GetHwnd(), TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS);
#endif
return true;
@ -523,10 +522,10 @@ WXDWORD wxToolBar::MSWGetStyle(long style, WXDWORD *exstyle) const
if ( !(style & wxTB_NO_TOOLTIPS) )
msStyle |= TBSTYLE_TOOLTIPS;
if ( style & wxTB_FLAT && wxApp::GetComCtl32Version() > 400 )
if ( style & wxTB_FLAT )
msStyle |= TBSTYLE_FLAT;
if ( style & wxTB_HORZ_LAYOUT && wxApp::GetComCtl32Version() >= 470 )
if ( style & wxTB_HORZ_LAYOUT )
msStyle |= TBSTYLE_LIST;
if ( style & wxTB_NODIVIDER )
@ -607,34 +606,27 @@ void wxToolBar::CreateDisabledImageList()
{
wxDELETE(m_disabledImgList);
// as we can't use disabled image list with older versions of comctl32.dll,
// don't even bother creating it
if ( wxApp::GetComCtl32Version() >= 470 )
// search for the first disabled button img in the toolbar, if any
for ( wxToolBarToolsList::compatibility_iterator
node = m_tools.GetFirst(); node; node = node->GetNext() )
{
// search for the first disabled button img in the toolbar, if any
for ( wxToolBarToolsList::compatibility_iterator
node = m_tools.GetFirst(); node; node = node->GetNext() )
wxToolBarToolBase *tool = node->GetData();
wxBitmap bmpDisabled = tool->GetDisabledBitmap();
if ( bmpDisabled.IsOk() )
{
wxToolBarToolBase *tool = node->GetData();
wxBitmap bmpDisabled = tool->GetDisabledBitmap();
if ( bmpDisabled.IsOk() )
{
const wxSize sizeBitmap = bmpDisabled.GetSize();
m_disabledImgList = new wxImageList
(
sizeBitmap.x,
sizeBitmap.y,
// Don't use mask if we have alpha
// (wxImageList will fall back to
// mask if alpha not supported)
!bmpDisabled.HasAlpha(),
GetToolsCount()
);
break;
}
const wxSize sizeBitmap = bmpDisabled.GetSize();
m_disabledImgList = new wxImageList
(
sizeBitmap.x,
sizeBitmap.y,
// Don't use mask if we have alpha
// (wxImageList will fall back to
// mask if alpha not supported)
!bmpDisabled.HasAlpha(),
GetToolsCount()
);
break;
}
// we don't have any disabled bitmaps
}
}
@ -824,35 +816,30 @@ bool wxToolBar::Realize()
if ( oldToolBarBitmap )
{
#ifdef TB_REPLACEBITMAP
if ( wxApp::GetComCtl32Version() >= 400 )
TBREPLACEBITMAP replaceBitmap;
replaceBitmap.hInstOld = NULL;
replaceBitmap.hInstNew = NULL;
replaceBitmap.nIDOld = (UINT_PTR)oldToolBarBitmap;
replaceBitmap.nIDNew = (UINT_PTR)hBitmap;
replaceBitmap.nButtons = nButtons;
if ( !::SendMessage(GetHwnd(), TB_REPLACEBITMAP,
0, (LPARAM) &replaceBitmap) )
{
TBREPLACEBITMAP replaceBitmap;
replaceBitmap.hInstOld = NULL;
replaceBitmap.hInstNew = NULL;
replaceBitmap.nIDOld = (UINT_PTR)oldToolBarBitmap;
replaceBitmap.nIDNew = (UINT_PTR)hBitmap;
replaceBitmap.nButtons = nButtons;
if ( !::SendMessage(GetHwnd(), TB_REPLACEBITMAP,
0, (LPARAM) &replaceBitmap) )
{
wxFAIL_MSG(wxT("Could not replace the old bitmap"));
}
::DeleteObject(oldToolBarBitmap);
// already done
addBitmap = false;
wxFAIL_MSG(wxT("Could not replace the old bitmap"));
}
else
::DeleteObject(oldToolBarBitmap);
// already done
addBitmap = false;
#else
// we can't replace the old bitmap, so we will add another one
// (awfully inefficient, but what else to do?) and shift the bitmap
// indices accordingly
addBitmap = true;
bitmapId = m_nButtons;
#endif // TB_REPLACEBITMAP
{
// we can't replace the old bitmap, so we will add another one
// (awfully inefficient, but what else to do?) and shift the bitmap
// indices accordingly
addBitmap = true;
bitmapId = m_nButtons;
}
}
if ( addBitmap ) // no old bitmap or we can't replace it
@ -867,22 +854,18 @@ bool wxToolBar::Realize()
}
}
// disable image lists are only supported in comctl32.dll 4.70+
if ( wxApp::GetComCtl32Version() >= 470 )
{
HIMAGELIST hil = m_disabledImgList
? GetHimagelistOf(m_disabledImgList)
: 0;
HIMAGELIST hil = m_disabledImgList
? GetHimagelistOf(m_disabledImgList)
: 0;
// notice that we set the image list even if don't have one right
// now as we could have it before and need to reset it in this case
HIMAGELIST oldImageList = (HIMAGELIST)
::SendMessage(GetHwnd(), TB_SETDISABLEDIMAGELIST, 0, (LPARAM)hil);
// notice that we set the image list even if don't have one right
// now as we could have it before and need to reset it in this case
HIMAGELIST oldImageList = (HIMAGELIST)
::SendMessage(GetHwnd(), TB_SETDISABLEDIMAGELIST, 0, (LPARAM)hil);
// delete previous image list if any
if ( oldImageList )
::DeleteObject(oldImageList);
}
// delete previous image list if any
if ( oldImageList )
::DeleteObject(oldImageList);
}
@ -900,14 +883,6 @@ bool wxToolBar::Realize()
{
wxToolBarTool *tool = static_cast<wxToolBarTool *>(node->GetData());
// don't add separators to the vertical toolbar with old comctl32.dll
// versions as they didn't handle this properly
if ( IsVertical() && tool->IsSeparator() &&
wxApp::GetComCtl32Version() <= 472 )
{
continue;
}
TBBUTTON& button = buttons[i];
wxZeroMemory(button);
@ -1492,21 +1467,9 @@ void wxToolBar::SetRows(int nRows)
// The button size is bigger than the bitmap size
wxSize wxToolBar::GetToolSize() const
{
// TB_GETBUTTONSIZE is supported from version 4.70
#if defined(_WIN32_IE) && (_WIN32_IE >= 0x300 ) \
&& !( defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 1, 0 ) )
if ( wxApp::GetComCtl32Version() >= 470 )
{
DWORD dw = ::SendMessage(GetHwnd(), TB_GETBUTTONSIZE, 0, 0);
DWORD dw = ::SendMessage(GetHwnd(), TB_GETBUTTONSIZE, 0, 0);
return wxSize(LOWORD(dw), HIWORD(dw));
}
else
#endif // comctl32.dll 4.70+
{
// defaults
return wxSize(m_defaultWidth + 8, m_defaultHeight + 7);
}
return wxSize(LOWORD(dw), HIWORD(dw));
}
wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const

View file

@ -130,10 +130,7 @@ public:
// then as the control gets "focus lost" events and dismisses the
// tooltip which then reappears because mouse remains hovering over the
// control, see SF patch 1821229
if ( wxApp::GetComCtl32Version() >= 470 )
{
uFlags |= TTF_TRANSPARENT;
}
uFlags |= TTF_TRANSPARENT;
}
};
@ -539,81 +536,76 @@ void wxToolTip::DoSetTip(WXHWND hWnd)
bool wxToolTip::AdjustMaxWidth()
{
if ( wxApp::GetComCtl32Version() >= 470 )
{
// use TTM_SETMAXTIPWIDTH to make tooltip multiline using the
// extent of its first line as max value
HFONT hfont = (HFONT)
SendTooltipMessage(GetToolTipCtrl(), WM_GETFONT, 0);
// use TTM_SETMAXTIPWIDTH to make tooltip multiline using the
// extent of its first line as max value
HFONT hfont = (HFONT)
SendTooltipMessage(GetToolTipCtrl(), WM_GETFONT, 0);
if ( !hfont )
{
hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
if ( !hfont )
{
hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
if ( !hfont )
{
wxLogLastError(wxT("GetStockObject(DEFAULT_GUI_FONT)"));
}
wxLogLastError(wxT("GetStockObject(DEFAULT_GUI_FONT)"));
}
MemoryHDC hdc;
if ( !hdc )
{
wxLogLastError(wxT("CreateCompatibleDC(NULL)"));
}
if ( !SelectObject(hdc, hfont) )
{
wxLogLastError(wxT("SelectObject(hfont)"));
}
// find the width of the widest line
int maxWidth = 0;
wxStringTokenizer tokenizer(m_text, wxT("\n"));
while ( tokenizer.HasMoreTokens() )
{
const wxString token = tokenizer.GetNextToken();
SIZE sz;
if ( !::GetTextExtentPoint32(hdc, token.t_str(),
token.length(), &sz) )
{
wxLogLastError(wxT("GetTextExtentPoint32"));
}
if ( sz.cx > maxWidth )
maxWidth = sz.cx;
}
// limit size to ms_maxWidth, if set
if ( ms_maxWidth == 0 )
{
// this is more or less arbitrary but seems to work well
static const int DEFAULT_MAX_WIDTH = 400;
ms_maxWidth = wxGetClientDisplayRect().width / 2;
if ( ms_maxWidth > DEFAULT_MAX_WIDTH )
ms_maxWidth = DEFAULT_MAX_WIDTH;
}
if ( ms_maxWidth != -1 && maxWidth > ms_maxWidth )
maxWidth = ms_maxWidth;
// only set a new width if it is bigger than the current setting:
// otherwise adding a tooltip with shorter line(s) than a previous
// one would result in breaking the longer lines unnecessarily as
// all our tooltips share the same maximal width
if ( maxWidth > SendTooltipMessage(GetToolTipCtrl(),
TTM_GETMAXTIPWIDTH, 0) )
{
SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH,
wxUIntToPtr(maxWidth));
}
return true;
}
return false;
MemoryHDC hdc;
if ( !hdc )
{
wxLogLastError(wxT("CreateCompatibleDC(NULL)"));
}
if ( !SelectObject(hdc, hfont) )
{
wxLogLastError(wxT("SelectObject(hfont)"));
}
// find the width of the widest line
int maxWidth = 0;
wxStringTokenizer tokenizer(m_text, wxT("\n"));
while ( tokenizer.HasMoreTokens() )
{
const wxString token = tokenizer.GetNextToken();
SIZE sz;
if ( !::GetTextExtentPoint32(hdc, token.t_str(),
token.length(), &sz) )
{
wxLogLastError(wxT("GetTextExtentPoint32"));
}
if ( sz.cx > maxWidth )
maxWidth = sz.cx;
}
// limit size to ms_maxWidth, if set
if ( ms_maxWidth == 0 )
{
// this is more or less arbitrary but seems to work well
static const int DEFAULT_MAX_WIDTH = 400;
ms_maxWidth = wxGetClientDisplayRect().width / 2;
if ( ms_maxWidth > DEFAULT_MAX_WIDTH )
ms_maxWidth = DEFAULT_MAX_WIDTH;
}
if ( ms_maxWidth != -1 && maxWidth > ms_maxWidth )
maxWidth = ms_maxWidth;
// only set a new width if it is bigger than the current setting:
// otherwise adding a tooltip with shorter line(s) than a previous
// one would result in breaking the longer lines unnecessarily as
// all our tooltips share the same maximal width
if ( maxWidth > SendTooltipMessage(GetToolTipCtrl(),
TTM_GETMAXTIPWIDTH, 0) )
{
SendTooltipMessage(GetToolTipCtrl(), TTM_SETMAXTIPWIDTH,
wxUIntToPtr(maxWidth));
}
return true;
}
void wxToolTip::DoForAllWindows(void (wxToolTip::*func)(WXHWND))

View file

@ -1078,44 +1078,28 @@ bool wxTopLevelWindowMSW::EnableMinimizeButton(bool enable)
void wxTopLevelWindowMSW::RequestUserAttention(int flags)
{
#if defined(FLASHW_STOP) && wxUSE_DYNLIB_CLASS
// available in the headers, check if it is supported by the system
typedef BOOL (WINAPI *FlashWindowEx_t)(FLASHWINFO *pfwi);
static FlashWindowEx_t s_pfnFlashWindowEx = NULL;
if ( !s_pfnFlashWindowEx )
#if defined(FLASHW_STOP)
WinStruct<FLASHWINFO> fwi;
fwi.hwnd = GetHwnd();
fwi.dwFlags = FLASHW_ALL;
if ( flags & wxUSER_ATTENTION_INFO )
{
wxDynamicLibrary dllUser32(wxT("user32.dll"));
s_pfnFlashWindowEx = (FlashWindowEx_t)
dllUser32.GetSymbol(wxT("FlashWindowEx"));
// we can safely unload user32.dll here, it's going to remain loaded as
// long as the program is running anyhow
// just flash a few times
fwi.uCount = 3;
}
else // wxUSER_ATTENTION_ERROR
{
// flash until the user notices it
fwi.dwFlags |= FLASHW_TIMERNOFG;
}
if ( s_pfnFlashWindowEx )
{
WinStruct<FLASHWINFO> fwi;
fwi.hwnd = GetHwnd();
fwi.dwFlags = FLASHW_ALL;
if ( flags & wxUSER_ATTENTION_INFO )
{
// just flash a few times
fwi.uCount = 3;
}
else // wxUSER_ATTENTION_ERROR
{
// flash until the user notices it
fwi.dwFlags |= FLASHW_TIMERNOFG;
}
s_pfnFlashWindowEx(&fwi);
}
else // FlashWindowEx() not available
#endif // FlashWindowEx() defined
::FlashWindowEx(&fwi);
#else
{
wxUnusedVar(flags);
::FlashWindow(GetHwnd(), TRUE);
}
#endif // defined(FLASHW_STOP)
}
wxMenu *wxTopLevelWindowMSW::MSWGetSystemMenu() const
@ -1157,28 +1141,6 @@ wxMenu *wxTopLevelWindowMSW::MSWGetSystemMenu() const
bool wxTopLevelWindowMSW::SetTransparent(wxByte alpha)
{
#if wxUSE_DYNLIB_CLASS
typedef DWORD (WINAPI *PSETLAYEREDWINDOWATTR)(HWND, DWORD, BYTE, DWORD);
static PSETLAYEREDWINDOWATTR
pSetLayeredWindowAttributes = (PSETLAYEREDWINDOWATTR)-1;
if ( pSetLayeredWindowAttributes == (PSETLAYEREDWINDOWATTR)-1 )
{
wxDynamicLibrary dllUser32(wxT("user32.dll"));
// use RawGetSymbol() and not GetSymbol() to avoid error messages under
// Windows 95: there is nothing the user can do about this anyhow
pSetLayeredWindowAttributes = (PSETLAYEREDWINDOWATTR)
dllUser32.RawGetSymbol(wxT("SetLayeredWindowAttributes"));
// it's ok to destroy dllUser32 here, we link statically to user32.dll
// anyhow so it won't be unloaded
}
if ( !pSetLayeredWindowAttributes )
return false;
#endif // wxUSE_DYNLIB_CLASS
LONG exstyle = GetWindowLong(GetHwnd(), GWL_EXSTYLE);
// if setting alpha to fully opaque then turn off the layered style
@ -1189,14 +1151,12 @@ bool wxTopLevelWindowMSW::SetTransparent(wxByte alpha)
return true;
}
#if wxUSE_DYNLIB_CLASS
// Otherwise, set the layered style if needed and set the alpha value
if ((exstyle & WS_EX_LAYERED) == 0 )
SetWindowLong(GetHwnd(), GWL_EXSTYLE, exstyle | WS_EX_LAYERED);
if ( pSetLayeredWindowAttributes(GetHwnd(), 0, (BYTE)alpha, LWA_ALPHA) )
if ( ::SetLayeredWindowAttributes(GetHwnd(), 0, (BYTE)alpha, LWA_ALPHA) )
return true;
#endif // wxUSE_DYNLIB_CLASS
return false;
}

View file

@ -763,8 +763,7 @@ bool wxTreeCtrl::Create(wxWindow *parent,
if ( m_windowStyle & wxTR_FULL_ROW_HIGHLIGHT )
{
if ( wxApp::GetComCtl32Version() >= 471 )
wstyle |= TVS_FULLROWSELECT;
wstyle |= TVS_FULLROWSELECT;
}
#if defined(TVS_INFOTIP)

View file

@ -29,10 +29,11 @@
#include "wx/utils.h"
#endif //WX_PRECOMP
#include "wx/dynlib.h"
#include "wx/msw/private.h" // includes <windows.h>
#include "wx/msw/wrapwin.h"
#include <Shlwapi.h>
// ============================================================================
// implementation
// ============================================================================
@ -264,34 +265,7 @@ void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2)
extern bool wxEnableFileNameAutoComplete(HWND hwnd)
{
#if wxUSE_DYNLIB_CLASS
typedef HRESULT (WINAPI *SHAutoComplete_t)(HWND, DWORD);
static SHAutoComplete_t s_pfnSHAutoComplete = NULL;
static bool s_initialized = false;
if ( !s_initialized )
{
s_initialized = true;
wxLogNull nolog;
wxDynamicLibrary dll(wxT("shlwapi.dll"));
if ( dll.IsLoaded() )
{
s_pfnSHAutoComplete =
(SHAutoComplete_t)dll.GetSymbol(wxT("SHAutoComplete"));
if ( s_pfnSHAutoComplete )
{
// won't be unloaded until the process termination, no big deal
dll.Detach();
}
}
}
if ( !s_pfnSHAutoComplete )
return false;
HRESULT hr = s_pfnSHAutoComplete(hwnd, 0x10 /* SHACF_FILESYS_ONLY */);
HRESULT hr = ::SHAutoComplete(hwnd, 0x10 /* SHACF_FILESYS_ONLY */);
if ( FAILED(hr) )
{
wxLogApiError(wxT("SHAutoComplete"), hr);
@ -299,8 +273,4 @@ extern bool wxEnableFileNameAutoComplete(HWND hwnd)
}
return true;
#else
wxUnusedVar(hwnd);
return false;
#endif // wxUSE_DYNLIB_CLASS/!wxUSE_DYNLIB_CLASS
}

View file

@ -637,24 +637,6 @@ wxWindowMSW::MSWShowWithEffect(bool show,
if ( !wxWindowBase::Show(show) )
return false;
typedef BOOL (WINAPI *AnimateWindow_t)(HWND, DWORD, DWORD);
static AnimateWindow_t s_pfnAnimateWindow = NULL;
static bool s_initDone = false;
if ( !s_initDone )
{
wxDynamicLibrary dllUser32(wxT("user32.dll"), wxDL_VERBATIM | wxDL_QUIET);
wxDL_INIT_FUNC(s_pfn, AnimateWindow, dllUser32);
s_initDone = true;
// notice that it's ok to unload user32.dll here as it won't be really
// unloaded, being still in use because we link to it statically too
}
if ( !s_pfnAnimateWindow )
return Show(show);
// Show() has a side effect of sending a WM_SIZE to the window, which helps
// ensuring that it's laid out correctly, but AnimateWindow() doesn't do
// this so send the event ourselves
@ -719,7 +701,7 @@ wxWindowMSW::MSWShowWithEffect(bool show,
return false;
}
if ( !(*s_pfnAnimateWindow)(GetHwnd(), timeout, dwFlags) )
if ( !::AnimateWindow(GetHwnd(), timeout, dwFlags) )
{
wxLogLastError(wxT("AnimateWindow"));

View file

@ -1 +0,0 @@
// TODO REMOVE

View file

@ -1 +0,0 @@
// todo remove

243
src/osx/cocoa/settings.mm Normal file
View file

@ -0,0 +1,243 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/osx/cocoa/settings.mm
// Purpose: wxSettings
// Author: David Elliott
// Modified by: Tobias Taschner
// Created: 2005/01/11
// Copyright: (c) 2005 David Elliott
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#include "wx/settings.h"
#ifndef WX_PRECOMP
#include "wx/utils.h"
#include "wx/gdicmn.h"
#endif
#include "wx/osx/core/private.h"
#import <AppKit/NSColor.h>
// ----------------------------------------------------------------------------
// wxSystemSettingsNative
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// colours
// ----------------------------------------------------------------------------
wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
{
NSColor* sysColor = nil;
switch( index )
{
case wxSYS_COLOUR_SCROLLBAR:
sysColor = [NSColor scrollBarColor]; // color of slot
break;
case wxSYS_COLOUR_DESKTOP: // No idea how to get desktop background
// fall through, window background is reasonable
case wxSYS_COLOUR_ACTIVECAPTION: // No idea how to get this
// fall through, window background is reasonable
case wxSYS_COLOUR_INACTIVECAPTION: // No idea how to get this
// fall through, window background is reasonable
case wxSYS_COLOUR_MENU:
case wxSYS_COLOUR_MENUBAR:
case wxSYS_COLOUR_WINDOW:
case wxSYS_COLOUR_WINDOWFRAME:
case wxSYS_COLOUR_ACTIVEBORDER:
case wxSYS_COLOUR_INACTIVEBORDER:
case wxSYS_COLOUR_GRADIENTACTIVECAPTION:
case wxSYS_COLOUR_GRADIENTINACTIVECAPTION:
sysColor = [NSColor windowFrameColor];
break;
case wxSYS_COLOUR_BTNFACE:
sysColor = [NSColor controlColor];
break;
case wxSYS_COLOUR_LISTBOX:
sysColor = [NSColor controlBackgroundColor];
break;
case wxSYS_COLOUR_BTNSHADOW:
sysColor = [NSColor controlShadowColor];
break;
case wxSYS_COLOUR_BTNTEXT:
case wxSYS_COLOUR_MENUTEXT:
case wxSYS_COLOUR_WINDOWTEXT:
case wxSYS_COLOUR_CAPTIONTEXT:
case wxSYS_COLOUR_INFOTEXT:
case wxSYS_COLOUR_INACTIVECAPTIONTEXT:
case wxSYS_COLOUR_LISTBOXTEXT:
sysColor = [NSColor controlTextColor];
break;
case wxSYS_COLOUR_HIGHLIGHT:
sysColor = [NSColor selectedControlColor];
break;
case wxSYS_COLOUR_BTNHIGHLIGHT:
sysColor = [NSColor controlHighlightColor];
break;
case wxSYS_COLOUR_GRAYTEXT:
sysColor = [NSColor disabledControlTextColor];
break;
case wxSYS_COLOUR_3DDKSHADOW:
sysColor = [NSColor controlShadowColor];
break;
case wxSYS_COLOUR_3DLIGHT:
sysColor = [NSColor controlHighlightColor];
break;
case wxSYS_COLOUR_HIGHLIGHTTEXT:
case wxSYS_COLOUR_LISTBOXHIGHLIGHTTEXT:
sysColor = [NSColor alternateSelectedControlTextColor];
break;
case wxSYS_COLOUR_INFOBK:
// tooltip (bogus)
sysColor = [NSColor windowBackgroundColor];
break;
case wxSYS_COLOUR_APPWORKSPACE:
// MDI window color (bogus)
sysColor = [NSColor windowBackgroundColor];
break;
case wxSYS_COLOUR_HOTLIGHT:
// OSX doesn't change color on mouse hover
sysColor = [NSColor controlTextColor];
break;
case wxSYS_COLOUR_MENUHILIGHT:
sysColor = [NSColor selectedMenuItemColor];
break;
case wxSYS_COLOUR_MAX:
default:
if(index>=wxSYS_COLOUR_MAX)
{
wxFAIL_MSG(wxT("Invalid system colour index"));
return wxColour();
}
}
if ( sysColor )
{
CGColorRef cgCol = sysColor.CGColor;
// wxColour takes ownership of CF reference
CFRetain(cgCol);
return wxColour(cgCol);
}
else
{
wxFAIL_MSG(wxT("Unimplemented system colour index"));
return wxColour();
}
}
// ----------------------------------------------------------------------------
// fonts
// ----------------------------------------------------------------------------
wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
{
switch (index)
{
case wxSYS_ANSI_VAR_FONT :
case wxSYS_SYSTEM_FONT :
case wxSYS_DEVICE_DEFAULT_FONT :
case wxSYS_DEFAULT_GUI_FONT :
{
return *wxSMALL_FONT ;
} ;
break ;
case wxSYS_OEM_FIXED_FONT :
case wxSYS_ANSI_FIXED_FONT :
case wxSYS_SYSTEM_FIXED_FONT :
default :
{
return *wxNORMAL_FONT ;
} ;
break ;
}
return *wxNORMAL_FONT;
}
// ----------------------------------------------------------------------------
// system metrics/features
// ----------------------------------------------------------------------------
// Get a system metric, e.g. scrollbar size
int wxSystemSettingsNative::GetMetric(wxSystemMetric index, wxWindow *WXUNUSED(win))
{
switch ( index )
{
case wxSYS_MOUSE_BUTTONS:
return 2; // we emulate a two button mouse (ctrl + click = right button )
// TODO case wxSYS_BORDER_X:
// TODO case wxSYS_BORDER_Y:
// TODO case wxSYS_CURSOR_X:
// TODO case wxSYS_CURSOR_Y:
// TODO case wxSYS_DCLICK_X:
// TODO case wxSYS_DCLICK_Y:
// TODO case wxSYS_DRAG_X:
// TODO case wxSYS_DRAG_Y:
// TODO case wxSYS_EDGE_X:
// TODO case wxSYS_EDGE_Y:
case wxSYS_HSCROLL_ARROW_X:
return 16;
case wxSYS_HSCROLL_ARROW_Y:
return 16;
case wxSYS_HTHUMB_X:
return 16;
// TODO case wxSYS_ICON_X:
// TODO case wxSYS_ICON_Y:
// TODO case wxSYS_ICONSPACING_X:
// TODO case wxSYS_ICONSPACING_Y:
// TODO case wxSYS_WINDOWMIN_X:
// TODO case wxSYS_WINDOWMIN_Y:
// TODO case wxSYS_SCREEN_X:
// TODO case wxSYS_SCREEN_Y:
// TODO case wxSYS_FRAMESIZE_X:
// TODO case wxSYS_FRAMESIZE_Y:
// TODO case wxSYS_SMALLICON_X:
// TODO case wxSYS_SMALLICON_Y:
case wxSYS_HSCROLL_Y:
return 16;
case wxSYS_VSCROLL_X:
return 16;
case wxSYS_VSCROLL_ARROW_X:
return 16;
case wxSYS_VSCROLL_ARROW_Y:
return 16;
case wxSYS_VTHUMB_Y:
return 16;
// TODO case wxSYS_CAPTION_Y:
// TODO case wxSYS_MENU_Y:
// TODO case wxSYS_NETWORK_PRESENT:
case wxSYS_PENWINDOWS_PRESENT:
return 0;
// TODO case wxSYS_SHOW_SOUNDS:
case wxSYS_SWAP_BUTTONS:
return 0;
default:
return -1; // unsupported metric
}
return 0;
}
bool wxSystemSettingsNative::HasFeature(wxSystemFeature index)
{
switch (index)
{
case wxSYS_CAN_ICONIZE_FRAME:
case wxSYS_CAN_DRAW_FRAME_DECORATIONS:
return true;
default:
return false;
}
}

View file

@ -204,6 +204,10 @@ wxWidgetImplType* wxWidgetImpl::CreateSearchControl( wxSearchCtrl* wxpeer,
{
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
wxNSSearchField* v = [[wxNSSearchField alloc] initWithFrame:r];
// Make it behave consistently with the single line wxTextCtrl
[[v cell] setScrollable:YES];
[[v cell] setSendsWholeSearchString:YES];
// per wx default cancel is not shown
[[v cell] setCancelButtonCell:nil];

129
src/osx/cocoa/stdpaths.mm Normal file
View file

@ -0,0 +1,129 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/osx/cocoa/stdpaths.mm
// Purpose: wxStandardPaths for Cocoa
// Author: Tobias Taschner
// Created: 2015-09-09
// Copyright: (c) 2015 wxWidgets development team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "wx/wxprec.h"
#if wxUSE_STDPATHS
#include "wx/stdpaths.h"
#include "wx/osx/private.h"
#include "wx/osx/core/cfstring.h"
#import <CoreFoundation/CoreFoundation.h>
// ============================================================================
// implementation
// ============================================================================
static wxString GetFMDirectory(
NSSearchPathDirectory directory,
NSSearchPathDomainMask domainMask)
{
NSURL* url = [[NSFileManager defaultManager] URLForDirectory:directory
inDomain:domainMask
appropriateForURL:nil
create:NO error:nil];
return wxCFStringRef::AsString(url.path);
}
wxStandardPaths::wxStandardPaths()
{
}
wxStandardPaths::~wxStandardPaths()
{
}
wxString wxStandardPaths::GetExecutablePath() const
{
return wxCFStringRef::AsString([NSBundle mainBundle].executablePath);
}
wxString wxStandardPaths::GetConfigDir() const
{
return GetFMDirectory(NSLibraryDirectory, NSLocalDomainMask) + "/Preferences";
}
wxString wxStandardPaths::GetUserConfigDir() const
{
return GetFMDirectory(NSLibraryDirectory, NSUserDomainMask) + "/Preferences";
}
wxString wxStandardPaths::GetDataDir() const
{
return wxCFStringRef::AsString([NSBundle mainBundle].sharedSupportPath);
}
wxString wxStandardPaths::GetLocalDataDir() const
{
return AppendAppInfo(GetFMDirectory(NSApplicationSupportDirectory, NSLocalDomainMask));
}
wxString wxStandardPaths::GetUserDataDir() const
{
return AppendAppInfo(GetFMDirectory(NSApplicationSupportDirectory, NSUserDomainMask));
}
wxString wxStandardPaths::GetPluginsDir() const
{
return wxCFStringRef::AsString([NSBundle mainBundle].builtInPlugInsPath);
}
wxString wxStandardPaths::GetResourcesDir() const
{
return wxCFStringRef::AsString([NSBundle mainBundle].resourcePath);
}
wxString
wxStandardPaths::GetLocalizedResourcesDir(const wxString& lang,
ResourceCat category) const
{
return wxStandardPathsBase::
GetLocalizedResourcesDir(lang, category) + wxT(".lproj");
}
wxString wxStandardPaths::GetUserDir(Dir userDir) const
{
NSSearchPathDirectory dirType;
switch (userDir)
{
case Dir_Desktop:
dirType = NSDesktopDirectory;
break;
case Dir_Downloads:
dirType = NSDownloadsDirectory;
break;
case Dir_Music:
dirType = NSMusicDirectory;
break;
case Dir_Pictures:
dirType = NSPicturesDirectory;
break;
case Dir_Videos:
dirType = NSMoviesDirectory;
break;
default:
dirType = NSDocumentDirectory;
break;
}
return GetFMDirectory(dirType, NSUserDomainMask);
}
#endif // wxUSE_STDPATHS

View file

@ -96,17 +96,62 @@ wxString wxStandardPathsCF::GetFromFunc(wxCFURLRef (*func)(wxCFBundleRef)) const
return ret;
}
wxString wxStandardPathsCF::GetDocumentsDir() const
wxString wxStandardPathsCF::GetUserDir(Dir userDir) const
{
#if defined( __WXMAC__ ) && wxOSX_USE_CARBON
OSType folderType;
switch (userDir)
{
case Dir_Desktop:
folderType = kDesktopFolderType;
break;
case Dir_Downloads:
folderType = kDownloadsFolderType;
break;
case Dir_Music:
folderType = kMusicDocumentsFolderType;
break;
case Dir_Pictures:
folderType = kPictureDocumentsFolderType;
break;
case Dir_Videos:
folderType = kMovieDocumentsFolderType;
break;
default:
folderType = kDocumentsFolderType;
break;
}
return wxMacFindFolderNoSeparator
(
kUserDomain,
kDocumentsFolderType,
folderType,
kCreateFolder
);
#else
return wxFileName::GetHomeDir() + wxT("/Documents");
wxString userDirName;
switch (userDir)
{
case Dir_Desktop:
userDirName = "Desktop";
break;
case Dir_Downloads:
userDirName = "Downloads";
break;
case Dir_Music:
userDirName = "Music";
break;
case Dir_Pictures:
userDirName = "Pictures";
break;
case Dir_Videos:
userDirName = "Movies";
break;
default:
userDirName = "Documents";
break;
}
return wxFileName::GetHomeDir() + "/" + userDirName;
#endif
}

Some files were not shown because too many files have changed in this diff Show more