Merge pull request #3591 from margro/gotham_epg_missingcolor
authorronie <ronie@poedel.net>
Wed, 13 Nov 2013 21:49:46 +0000 (13:49 -0800)
committerronie <ronie@poedel.net>
Wed, 13 Nov 2013 21:49:46 +0000 (13:49 -0800)
[Confluence] fix default EPG background color for genre strings

369 files changed:
Makefile.in
XBMC.xcodeproj/project.pbxproj
addons/skin.confluence/720p/DialogAddonInfo.xml
addons/skin.confluence/720p/DialogAlbumInfo.xml
addons/skin.confluence/720p/DialogOK.xml
addons/skin.confluence/720p/DialogPVRGuideInfo.xml
addons/skin.confluence/720p/DialogPVRRecordingInfo.xml
addons/skin.confluence/720p/DialogSubtitles.xml [new file with mode: 0644]
addons/skin.confluence/720p/DialogVideoInfo.xml
addons/skin.confluence/720p/SkinSettings.xml
addons/skin.confluence/720p/VideoFullScreen.xml
addons/skin.confluence/720p/VideoOSD.xml
addons/skin.confluence/720p/ViewsAddonBrowser.xml
addons/skin.confluence/720p/ViewsLiveTV.xml
addons/skin.confluence/720p/ViewsMusicLibrary.xml
addons/skin.confluence/720p/ViewsPVR.xml
addons/skin.confluence/720p/ViewsVideoLibrary.xml
addons/skin.confluence/720p/includes.xml
addons/skin.confluence/language/English/strings.po
addons/skin.confluence/media/Subtitles/flags/-.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/ar.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/bg.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/bs.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/ca.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/cs.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/da.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/de.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/el.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/en.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/es.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/et.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/fa.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/fi.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/fo.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/fr.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/gl.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/he.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/hi.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/hr.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/hu.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/hy.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/id.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/is.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/it.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/ja.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/kk.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/ko.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/lb.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/lt.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/lv.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/mk.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/ms.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/nl.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/no.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/pb.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/pl.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/pt.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/ro.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/ru.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/sk.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/sl.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/sq.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/sr.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/sv.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/tr.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/uk.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/vi.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/flags/zh.gif [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/icon_close_caption.png [new file with mode: 0644]
addons/skin.confluence/media/Subtitles/icon_sync.png [new file with mode: 0644]
addons/xbmc.json/addon.xml
addons/xbmc.pvr/addon.xml
configure.in
language/English/strings.po
lib/addons/library.xbmc.addon/project/VS2010Express/libXBMC_addon.vcxproj
lib/addons/library.xbmc.codec/project/VS2010Express/libXBMC_codec.vcxproj
lib/addons/library.xbmc.gui/project/VS2010Express/libXBMC_gui.vcxproj
lib/addons/library.xbmc.pvr/project/VS2010Express/libXBMC_pvr.vcxproj
lib/cmyth/Win32/libcmyth.vcxproj
lib/cpluff/libcpluff/win32/cpluff.vcxproj
lib/cximage-6.0/ImageLib.vcxproj
lib/cximage-6.0/jasper/jasper.vcxproj
lib/cximage-6.0/jbig/jbig.vcxproj
lib/cximage-6.0/jpeg/Jpeg.vcxproj
lib/cximage-6.0/mng/mng.vcxproj
lib/cximage-6.0/png/png.vcxproj
lib/cximage-6.0/raw/libdcr.vcxproj
lib/cximage-6.0/tiff/Tiff.vcxproj
lib/cximage-6.0/zlib/zlib.vcxproj
lib/enca/libenca_win32/libenca_win32.vcxproj
lib/freetype/builds/win32/vs2010/freetype.vcxproj
lib/gtest/msvc/gtest.vcxproj
lib/libRTV/libRTV.vcxproj
lib/libXDAAP/libXDAAP_win32/libXDAAP_win32.vcxproj
lib/libexif/libexif.vcxproj
lib/libhdhomerun/hdhomerun/hdhomerun.vcxproj
lib/libhts/Win32/libhts_2010.vcxproj
lib/libmad/msvc++/libmad.vcxproj
lib/libmodplug/libmodplug_2010.vcxproj
lib/libmodplug/libmodplug_2010.vcxproj.filters [new file with mode: 0644]
lib/libsidplay2/libsidplay/win/VC/libsidplay.vcxproj
lib/libsquish/vs7/squish/squish_2010.vcxproj
lib/nosefart/NoseFartXBMC.vcxproj
lib/stsound/StSoundLibrary/StSoundLibrary.vcxproj
lib/vgmstream/win32/win32.vcxproj
lib/xbadpcm/adpcm.vcxproj
project/VS2010Express/UnrarXLib.vcxproj
project/VS2010Express/XBMC for Windows.props [deleted file]
project/VS2010Express/XBMC.core-defaults.props [new file with mode: 0644]
project/VS2010Express/XBMC.defaults.props [new file with mode: 0644]
project/VS2010Express/XBMC.vcxproj
project/VS2010Express/XBMC.vcxproj.filters
project/VS2010Express/XbmcCommons.vcxproj
project/VS2010Express/XbmcThreads.vcxproj
project/VS2010Express/libPlatinum.vcxproj
project/VS2010Express/test-XbmcThreads.vcxproj
project/Win32BuildSetup/buildpvraddons.bat
system/settings/darwin.xml
system/settings/darwin_osx.xml
system/settings/settings.xml
tools/android/packaging/Makefile
tools/depends/target/libsdl/04-fix_external_screen_crash.patch [new file with mode: 0644]
tools/depends/target/libsdl/Makefile
tools/depends/target/python26/Makefile
tools/depends/target/xbmc-pvr-addons/Makefile
xbmc/Application.cpp
xbmc/Application.h
xbmc/ApplicationPlayer.cpp
xbmc/ApplicationPlayer.h
xbmc/GUIInfoManager.cpp
xbmc/GUIInfoManager.h
xbmc/GUIPassword.cpp
xbmc/GUIPassword.h
xbmc/LangInfo.cpp
xbmc/LangInfo.h
xbmc/Util.cpp
xbmc/addons/Addon.cpp
xbmc/addons/AddonDatabase.cpp
xbmc/addons/AddonManager.cpp
xbmc/addons/GUIDialogAddonInfo.cpp
xbmc/addons/GUIDialogAddonInfo.h
xbmc/addons/IAddon.h
xbmc/addons/Repository.cpp
xbmc/addons/Skin.cpp
xbmc/addons/include/xbmc_pvr_dll.h
xbmc/addons/include/xbmc_pvr_types.h
xbmc/android/activity/EventLoop.cpp
xbmc/cores/AudioEngine/AEFactory.cpp
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp
xbmc/cores/AudioEngine/Engines/CoreAudio/CoreAudioAEStream.cpp
xbmc/cores/IPlayer.h
xbmc/cores/VideoRenderers/Makefile.in
xbmc/cores/VideoRenderers/OverlayRenderer.cpp
xbmc/cores/VideoRenderers/OverlayRenderer.h
xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp [new file with mode: 0644]
xbmc/cores/VideoRenderers/OverlayRendererGUI.h [new file with mode: 0644]
xbmc/cores/VideoRenderers/RenderManager.cpp
xbmc/cores/dvdplayer/DVDAudio.cpp
xbmc/cores/dvdplayer/DVDClock.h
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodec.h
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamRTMP.cpp
xbmc/cores/dvdplayer/DVDPerformanceCounter.cpp [deleted file]
xbmc/cores/dvdplayer/DVDPerformanceCounter.h [deleted file]
xbmc/cores/dvdplayer/DVDPlayer.cpp
xbmc/cores/dvdplayer/DVDPlayer.h
xbmc/cores/dvdplayer/DVDPlayerAudio.cpp
xbmc/cores/dvdplayer/DVDPlayerAudio.h
xbmc/cores/dvdplayer/DVDPlayerSubtitle.cpp
xbmc/cores/dvdplayer/DVDPlayerSubtitle.h
xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
xbmc/cores/dvdplayer/Makefile.in
xbmc/cores/omxplayer/OMXPlayer.cpp
xbmc/cores/omxplayer/OMXPlayer.h
xbmc/cores/playercorefactory/PlayerCoreFactory.h
xbmc/dialogs/GUIDialogBoxBase.cpp
xbmc/dialogs/GUIDialogBoxBase.h
xbmc/dialogs/GUIDialogOK.cpp
xbmc/dialogs/GUIDialogOK.h
xbmc/dialogs/GUIDialogYesNo.cpp
xbmc/dialogs/GUIDialogYesNo.h
xbmc/epg/EpgContainer.cpp
xbmc/epg/EpgContainer.h
xbmc/epg/GUIEPGGridContainer.cpp
xbmc/epg/GUIEPGGridContainer.h
xbmc/filesystem/AddonsDirectory.cpp
xbmc/filesystem/AddonsDirectory.h
xbmc/filesystem/CurlFile.cpp
xbmc/filesystem/FavouritesDirectory.cpp
xbmc/filesystem/FavouritesDirectory.h
xbmc/filesystem/File.cpp
xbmc/filesystem/File.h
xbmc/filesystem/SFTPFile.cpp
xbmc/guilib/GUIAudioManager.cpp
xbmc/guilib/GUIAudioManager.h
xbmc/guilib/GUIBaseContainer.cpp
xbmc/guilib/GUIBaseContainer.h
xbmc/guilib/GUIColorManager.cpp
xbmc/guilib/GUIControlFactory.cpp
xbmc/guilib/GUIFontManager.cpp
xbmc/guilib/GUIStaticItem.cpp
xbmc/guilib/GUIStaticItem.h
xbmc/guilib/GraphicContext.cpp
xbmc/guilib/GraphicContext.h
xbmc/guilib/StereoscopicsManager.cpp
xbmc/guilib/StereoscopicsManager.h
xbmc/guilib/WindowIDs.h
xbmc/input/ButtonTranslator.cpp
xbmc/input/MouseStat.cpp
xbmc/input/MouseStat.h
xbmc/input/SDLJoystick.cpp
xbmc/input/SDLJoystick.h
xbmc/input/windows/WINJoystick.cpp
xbmc/input/windows/WINJoystick.h
xbmc/interfaces/Builtins.cpp
xbmc/interfaces/json-rpc/AddonsOperations.cpp
xbmc/interfaces/json-rpc/JSONServiceDescription.cpp
xbmc/interfaces/json-rpc/Makefile
xbmc/interfaces/json-rpc/ServiceDescription.h
xbmc/interfaces/json-rpc/SettingsOperations.cpp [new file with mode: 0644]
xbmc/interfaces/json-rpc/SettingsOperations.h [new file with mode: 0644]
xbmc/interfaces/json-rpc/methods.json
xbmc/interfaces/json-rpc/types.json
xbmc/interfaces/legacy/Control.cpp
xbmc/linux/LinuxTimezone.cpp
xbmc/linux/LinuxTimezone.h
xbmc/listproviders/DirectoryProvider.cpp [new file with mode: 0644]
xbmc/listproviders/DirectoryProvider.h [new file with mode: 0644]
xbmc/listproviders/IListProvider.cpp [new file with mode: 0644]
xbmc/listproviders/IListProvider.h [new file with mode: 0644]
xbmc/listproviders/Makefile [new file with mode: 0644]
xbmc/listproviders/StaticProvider.cpp [new file with mode: 0644]
xbmc/listproviders/StaticProvider.h [new file with mode: 0644]
xbmc/network/Network.h
xbmc/network/NetworkServices.cpp
xbmc/network/NetworkServices.h
xbmc/network/WakeOnAccess.h
xbmc/network/upnp/UPnPSettings.h
xbmc/osx/DarwinUtils.mm
xbmc/osx/XBMCHelper.cpp
xbmc/osx/XBMCHelper.h
xbmc/peripherals/Peripherals.cpp
xbmc/peripherals/Peripherals.h
xbmc/peripherals/bus/win32/PeripheralBusUSB.cpp
xbmc/peripherals/bus/win32/PeripheralBusUSB.h
xbmc/peripherals/devices/Peripheral.cpp
xbmc/peripherals/dialogs/GUIDialogPeripheralSettings.cpp
xbmc/powermanagement/PowerManager.cpp
xbmc/profiles/ProfilesManager.h
xbmc/pvr/PVRGUIInfo.cpp
xbmc/pvr/PVRGUIInfo.h
xbmc/pvr/PVRManager.cpp
xbmc/pvr/PVRManager.h
xbmc/pvr/addons/PVRClient.cpp
xbmc/pvr/addons/PVRClient.h
xbmc/pvr/addons/PVRClients.cpp
xbmc/pvr/addons/PVRClients.h
xbmc/pvr/channels/PVRChannelGroup.cpp
xbmc/pvr/channels/PVRChannelGroup.h
xbmc/pvr/timers/PVRTimerInfoTag.cpp
xbmc/pvr/windows/GUIWindowPVRCommon.cpp
xbmc/pvr/windows/GUIWindowPVRGuide.cpp
xbmc/pvr/windows/GUIWindowPVRTimers.cpp
xbmc/settings/AdvancedSettings.cpp
xbmc/settings/AdvancedSettings.h
xbmc/settings/DisplaySettings.cpp
xbmc/settings/DisplaySettings.h
xbmc/settings/ISetting.cpp [deleted file]
xbmc/settings/ISetting.h [deleted file]
xbmc/settings/ISettingCallback.h [deleted file]
xbmc/settings/ISettingControl.cpp [deleted file]
xbmc/settings/ISettingControl.h [deleted file]
xbmc/settings/ISettingControlCreator.h [deleted file]
xbmc/settings/ISettingCreator.h [deleted file]
xbmc/settings/ISettingsHandler.h [deleted file]
xbmc/settings/ISubSettings.h [deleted file]
xbmc/settings/Makefile
xbmc/settings/MediaSettings.cpp
xbmc/settings/MediaSettings.h
xbmc/settings/MediaSourceSettings.h
xbmc/settings/Setting.cpp [deleted file]
xbmc/settings/Setting.h [deleted file]
xbmc/settings/SettingAddon.cpp
xbmc/settings/SettingAddon.h
xbmc/settings/SettingCategoryAccess.cpp [deleted file]
xbmc/settings/SettingCategoryAccess.h [deleted file]
xbmc/settings/SettingConditions.cpp [deleted file]
xbmc/settings/SettingConditions.h [deleted file]
xbmc/settings/SettingControl.cpp
xbmc/settings/SettingControl.h
xbmc/settings/SettingDefinitions.h [deleted file]
xbmc/settings/SettingDependency.cpp [deleted file]
xbmc/settings/SettingDependency.h [deleted file]
xbmc/settings/SettingPath.cpp
xbmc/settings/SettingPath.h
xbmc/settings/SettingRequirement.cpp [deleted file]
xbmc/settings/SettingRequirement.h [deleted file]
xbmc/settings/SettingSection.cpp [deleted file]
xbmc/settings/SettingSection.h [deleted file]
xbmc/settings/SettingUpdate.cpp [deleted file]
xbmc/settings/SettingUpdate.h [deleted file]
xbmc/settings/Settings.cpp
xbmc/settings/Settings.h
xbmc/settings/SettingsManager.cpp [deleted file]
xbmc/settings/SettingsManager.h [deleted file]
xbmc/settings/SkinSettings.h
xbmc/settings/lib/ISetting.cpp [new file with mode: 0644]
xbmc/settings/lib/ISetting.h [new file with mode: 0644]
xbmc/settings/lib/ISettingCallback.h [new file with mode: 0644]
xbmc/settings/lib/ISettingControl.cpp [new file with mode: 0644]
xbmc/settings/lib/ISettingControl.h [new file with mode: 0644]
xbmc/settings/lib/ISettingControlCreator.h [new file with mode: 0644]
xbmc/settings/lib/ISettingCreator.h [new file with mode: 0644]
xbmc/settings/lib/ISettingsHandler.h [new file with mode: 0644]
xbmc/settings/lib/ISubSettings.h [new file with mode: 0644]
xbmc/settings/lib/Makefile [new file with mode: 0644]
xbmc/settings/lib/Setting.cpp [new file with mode: 0644]
xbmc/settings/lib/Setting.h [new file with mode: 0644]
xbmc/settings/lib/SettingCategoryAccess.cpp [new file with mode: 0644]
xbmc/settings/lib/SettingCategoryAccess.h [new file with mode: 0644]
xbmc/settings/lib/SettingConditions.cpp [new file with mode: 0644]
xbmc/settings/lib/SettingConditions.h [new file with mode: 0644]
xbmc/settings/lib/SettingDefinitions.h [new file with mode: 0644]
xbmc/settings/lib/SettingDependency.cpp [new file with mode: 0644]
xbmc/settings/lib/SettingDependency.h [new file with mode: 0644]
xbmc/settings/lib/SettingRequirement.cpp [new file with mode: 0644]
xbmc/settings/lib/SettingRequirement.h [new file with mode: 0644]
xbmc/settings/lib/SettingSection.cpp [new file with mode: 0644]
xbmc/settings/lib/SettingSection.h [new file with mode: 0644]
xbmc/settings/lib/SettingUpdate.cpp [new file with mode: 0644]
xbmc/settings/lib/SettingUpdate.h [new file with mode: 0644]
xbmc/settings/lib/SettingsManager.cpp [new file with mode: 0644]
xbmc/settings/lib/SettingsManager.h [new file with mode: 0644]
xbmc/settings/windows/GUIControlSettings.cpp
xbmc/settings/windows/GUIControlSettings.h
xbmc/settings/windows/GUIWindowSettingsCategory.cpp
xbmc/settings/windows/GUIWindowSettingsCategory.h
xbmc/test/Makefile
xbmc/test/TestTextureCache.cpp [deleted file]
xbmc/test/TestTextureUtils.cpp [new file with mode: 0644]
xbmc/utils/AMLUtils.cpp
xbmc/utils/AMLUtils.h
xbmc/utils/BitstreamConverter.cpp
xbmc/utils/BitstreamConverter.h
xbmc/utils/CharsetConverter.cpp
xbmc/utils/CharsetConverter.h
xbmc/utils/RssManager.cpp
xbmc/utils/RssManager.h
xbmc/utils/SystemInfo.h
xbmc/utils/URIUtils.cpp
xbmc/utils/Weather.cpp
xbmc/utils/Weather.h
xbmc/utils/test/TestXMLUtils.cpp
xbmc/video/PlayerController.cpp
xbmc/video/dialogs/GUIDialogAudioSubtitleSettings.cpp
xbmc/video/dialogs/GUIDialogSubtitles.cpp [new file with mode: 0644]
xbmc/video/dialogs/GUIDialogSubtitles.h [new file with mode: 0644]
xbmc/video/dialogs/Makefile
xbmc/video/windows/GUIWindowFullScreen.cpp
xbmc/video/windows/GUIWindowFullScreen.h
xbmc/view/ViewStateSettings.h
xbmc/visualizations/DirectXSpectrum/directx_spectrum.vcxproj
xbmc/visualizations/Milkdrop/Plugin.vcxproj
xbmc/visualizations/WaveForm/Waveform.vcxproj
xbmc/windowing/WinSystem.cpp
xbmc/windowing/X11/WinSystemX11.cpp
xbmc/windowing/X11/WinSystemX11.h
xbmc/windowing/egl/EGLNativeTypeAmlogic.cpp
xbmc/windowing/egl/EGLNativeTypeAndroid.cpp

index 76d6396..851da55 100644 (file)
@@ -61,6 +61,7 @@ DIRECTORY_ARCHIVES=$(DVDPLAYER_ARCHIVES) \
                    xbmc/interfaces/interfaces.a \
                    xbmc/interfaces/json-rpc/json-rpc.a \
                    xbmc/linux/linux.a \
+                   xbmc/listproviders/listproviders.a \
                    xbmc/music/dialogs/musicdialogs.a \
                    xbmc/music/infoscanner/musicscanner.a \
                    xbmc/music/karaoke/karaoke.a \
@@ -90,6 +91,7 @@ DIRECTORY_ARCHIVES=$(DVDPLAYER_ARCHIVES) \
                    xbmc/rendering/rendering.a \
                    xbmc/settings/settings.a \
                    xbmc/settings/dialogs/settings_dialogs.a \
+                   xbmc/settings/lib/settings_lib.a \
                    xbmc/settings/windows/settings_windows.a \
                    xbmc/storage/storage.a \
                    xbmc/utils/utils.a \
@@ -522,10 +524,10 @@ else
        $(SILENT_LD) $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -o $@ $(MAINOBJS) -Wl,--start-group $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--end-group -Wl,--no-undefined $(NWAOBJSXBMC) $(LIBS)
 endif
 
-xbmc/main/main.a:
+xbmc/main/main.a: force
        $(MAKE) -C xbmc/main
 
-xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(MAINOBJS) xbmc/main/main.a
+xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(MAINOBJS)
 
 ifeq ($(findstring osx,@ARCH@), osx)
        $(SILENT_LD) $(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(NWAOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic
index 3351241..90f4b16 100644 (file)
                5538433415F3685C00CE061B /* NptAppleAutoreleasePool.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5538433315F3685C00CE061B /* NptAppleAutoreleasePool.mm */; settings = {COMPILER_FLAGS = "-I$SRCROOT/lib/libUPnP/Platinum/Source/Core -I$SRCROOT/lib/libUPnP/Platinum/Source/Platinum -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaConnect -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaRenderer -I$SRCROOT/lib/libUPnP/Platinum/Source/Devices/MediaServer -I$SRCROOT/lib/libUPnP/Platinum/Source/Extras -I$SRCROOT/lib/libUPnP/Neptune/Source/System/Posix -I$SRCROOT/lib/libUPnP/Neptune/Source/Core"; }; };
                5558ED10176396CD00118C35 /* StereoscopicsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5558ED0E176396CD00118C35 /* StereoscopicsManager.cpp */; };
                55611BA31766672F00754072 /* RenderFlags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55611BA21766672F00754072 /* RenderFlags.cpp */; };
+               55D3604E1826CAB900DA66D2 /* OverlayRendererGUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55D3604C1826CAB900DA66D2 /* OverlayRendererGUI.cpp */; };
                7C0B98A4154B79C30065A238 /* AEDeviceInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C0B98A1154B79C30065A238 /* AEDeviceInfo.cpp */; };
+               7C140989183224B8009F9411 /* ISetting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14096F183224B8009F9411 /* ISetting.cpp */; };
+               7C14098A183224B8009F9411 /* ISetting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14096F183224B8009F9411 /* ISetting.cpp */; };
+               7C14098B183224B8009F9411 /* ISetting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14096F183224B8009F9411 /* ISetting.cpp */; };
+               7C14098C183224B8009F9411 /* ISettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140972183224B8009F9411 /* ISettingControl.cpp */; };
+               7C14098D183224B8009F9411 /* ISettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140972183224B8009F9411 /* ISettingControl.cpp */; };
+               7C14098E183224B8009F9411 /* ISettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140972183224B8009F9411 /* ISettingControl.cpp */; };
+               7C14098F183224B8009F9411 /* Setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140978183224B8009F9411 /* Setting.cpp */; };
+               7C140990183224B8009F9411 /* Setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140978183224B8009F9411 /* Setting.cpp */; };
+               7C140991183224B8009F9411 /* Setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140978183224B8009F9411 /* Setting.cpp */; };
+               7C140992183224B8009F9411 /* SettingCategoryAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097A183224B8009F9411 /* SettingCategoryAccess.cpp */; };
+               7C140993183224B8009F9411 /* SettingCategoryAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097A183224B8009F9411 /* SettingCategoryAccess.cpp */; };
+               7C140994183224B8009F9411 /* SettingCategoryAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097A183224B8009F9411 /* SettingCategoryAccess.cpp */; };
+               7C140995183224B8009F9411 /* SettingConditions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097C183224B8009F9411 /* SettingConditions.cpp */; };
+               7C140996183224B8009F9411 /* SettingConditions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097C183224B8009F9411 /* SettingConditions.cpp */; };
+               7C140997183224B8009F9411 /* SettingConditions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097C183224B8009F9411 /* SettingConditions.cpp */; };
+               7C140998183224B8009F9411 /* SettingDependency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097F183224B8009F9411 /* SettingDependency.cpp */; };
+               7C140999183224B8009F9411 /* SettingDependency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097F183224B8009F9411 /* SettingDependency.cpp */; };
+               7C14099A183224B8009F9411 /* SettingDependency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C14097F183224B8009F9411 /* SettingDependency.cpp */; };
+               7C14099B183224B8009F9411 /* SettingRequirement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140981183224B8009F9411 /* SettingRequirement.cpp */; };
+               7C14099C183224B8009F9411 /* SettingRequirement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140981183224B8009F9411 /* SettingRequirement.cpp */; };
+               7C14099D183224B8009F9411 /* SettingRequirement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140981183224B8009F9411 /* SettingRequirement.cpp */; };
+               7C14099E183224B8009F9411 /* SettingSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140983183224B8009F9411 /* SettingSection.cpp */; };
+               7C14099F183224B8009F9411 /* SettingSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140983183224B8009F9411 /* SettingSection.cpp */; };
+               7C1409A0183224B8009F9411 /* SettingSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140983183224B8009F9411 /* SettingSection.cpp */; };
+               7C1409A1183224B8009F9411 /* SettingsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140985183224B8009F9411 /* SettingsManager.cpp */; };
+               7C1409A2183224B8009F9411 /* SettingsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140985183224B8009F9411 /* SettingsManager.cpp */; };
+               7C1409A3183224B8009F9411 /* SettingsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140985183224B8009F9411 /* SettingsManager.cpp */; };
+               7C1409A4183224B8009F9411 /* SettingUpdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140987183224B8009F9411 /* SettingUpdate.cpp */; };
+               7C1409A5183224B8009F9411 /* SettingUpdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140987183224B8009F9411 /* SettingUpdate.cpp */; };
+               7C1409A6183224B8009F9411 /* SettingUpdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C140987183224B8009F9411 /* SettingUpdate.cpp */; };
                7C1A492315A962EE004AF4A4 /* SeekHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1A492115A962EE004AF4A4 /* SeekHandler.cpp */; };
                7C1A85661520522500C63311 /* TextureCacheJob.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1A85631520522500C63311 /* TextureCacheJob.cpp */; };
                7C1D682915A7D2FD00658B65 /* DatabaseManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1D682715A7D2FD00658B65 /* DatabaseManager.cpp */; };
                7C1F6EBB13ECCFA7001726AB /* LibraryDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1F6EB913ECCFA7001726AB /* LibraryDirectory.cpp */; };
+               7C26126C182068660086E04D /* SettingsOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C26126A182068660086E04D /* SettingsOperations.cpp */; };
+               7C26126D182068660086E04D /* SettingsOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C26126A182068660086E04D /* SettingsOperations.cpp */; };
+               7C26126E182068660086E04D /* SettingsOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C26126A182068660086E04D /* SettingsOperations.cpp */; };
                7C2612711825B6340086E04D /* DatabaseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C26126F1825B6340086E04D /* DatabaseQuery.cpp */; };
                7C2612721825B6340086E04D /* DatabaseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C26126F1825B6340086E04D /* DatabaseQuery.cpp */; };
                7C2612731825B6340086E04D /* DatabaseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C26126F1825B6340086E04D /* DatabaseQuery.cpp */; };
-               7C2612671820667C0086E04D /* ISettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C2612631820667C0086E04D /* ISettingControl.cpp */; };
-               7C2612681820667C0086E04D /* ISettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C2612631820667C0086E04D /* ISettingControl.cpp */; };
-               7C2612691820667C0086E04D /* ISettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C2612631820667C0086E04D /* ISettingControl.cpp */; };
                7C2D6AE40F35453E00DD2E85 /* SpecialProtocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C2D6AE20F35453E00DD2E85 /* SpecialProtocol.cpp */; };
                7C4458BD161E203800A905F6 /* Screenshot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4458BB161E203800A905F6 /* Screenshot.cpp */; };
                7C45DBE910F325C400D4BBF3 /* DAVDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C45DBE710F325C400D4BBF3 /* DAVDirectory.cpp */; };
                7C4705AE12EF584C00369E51 /* AddonInstaller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4705AC12EF584C00369E51 /* AddonInstaller.cpp */; };
+               7C4E6F721829AA9700F1068F /* GUIDialogSubtitles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4E6F701829AA9700F1068F /* GUIDialogSubtitles.cpp */; };
+               7C4E6F731829AA9700F1068F /* GUIDialogSubtitles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4E6F701829AA9700F1068F /* GUIDialogSubtitles.cpp */; };
+               7C4E6F741829AA9700F1068F /* GUIDialogSubtitles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C4E6F701829AA9700F1068F /* GUIDialogSubtitles.cpp */; };
                7C5608C70F1754930056433A /* ExternalPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C5608C40F1754930056433A /* ExternalPlayer.cpp */; };
                7C62F24210505BC7002AD2C1 /* Bookmark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C62F24010505BC7002AD2C1 /* Bookmark.cpp */; };
                7C62F45E1057A62D002AD2C1 /* DirectoryNodeSingles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C62F45C1057A62D002AD2C1 /* DirectoryNodeSingles.cpp */; };
                7C779E3F104A57E500F444C4 /* WinSystemOSXGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7C779E2D104A57E500F444C4 /* WinSystemOSXGL.mm */; };
                7C779E54104A58F900F444C4 /* GUIWindowTestPatternGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C779E50104A58F900F444C4 /* GUIWindowTestPatternGL.cpp */; };
                7C7B2B301134F36400713D6D /* mysqldataset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C7B2B2E1134F36400713D6D /* mysqldataset.cpp */; };
+               7C7BCDC517727951004842FB /* IListProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C7BCDBF17727951004842FB /* IListProvider.cpp */; };
+               7C7BCDC717727951004842FB /* StaticProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C7BCDC317727951004842FB /* StaticProvider.cpp */; };
+               7C7BCDC817727951004842FB /* IListProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C7BCDBF17727951004842FB /* IListProvider.cpp */; };
+               7C7BCDCA17727951004842FB /* StaticProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C7BCDC317727951004842FB /* StaticProvider.cpp */; };
+               7C7BCDCB17727951004842FB /* IListProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C7BCDBF17727951004842FB /* IListProvider.cpp */; };
+               7C7BCDCD17727952004842FB /* StaticProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C7BCDC317727951004842FB /* StaticProvider.cpp */; };
                7C7CEAF1165629530059C9EB /* AELimiter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C7CEAEF165629530059C9EB /* AELimiter.cpp */; };
                7C84A59E12FA3C1600CD1714 /* SourcesDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C84A59C12FA3C1600CD1714 /* SourcesDirectory.cpp */; };
                7C87B2CE162CE39600EF897D /* PlayerController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C87B2CC162CE39600EF897D /* PlayerController.cpp */; };
                7C89674613C03B22003631FE /* InfoBool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C89674313C03B22003631FE /* InfoBool.cpp */; };
                7C8A14571154CB2600E5FCFA /* TextureCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C8A14541154CB2600E5FCFA /* TextureCache.cpp */; };
                7C8A187D115B2A8200E5FCFA /* TextureDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C8A187A115B2A8200E5FCFA /* TextureDatabase.cpp */; };
+               7C8FC6EE1829A4580045153D /* DirectoryProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C8FC6EC1829A4580045153D /* DirectoryProvider.cpp */; };
+               7C8FC6EF1829A4580045153D /* DirectoryProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C8FC6EC1829A4580045153D /* DirectoryProvider.cpp */; };
+               7C8FC6F01829A4580045153D /* DirectoryProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C8FC6EC1829A4580045153D /* DirectoryProvider.cpp */; };
                7C920CF9181669FF00DA1477 /* TextureOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C920CF7181669FF00DA1477 /* TextureOperations.cpp */; };
                7C920CFA181669FF00DA1477 /* TextureOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C920CF7181669FF00DA1477 /* TextureOperations.cpp */; };
                7C920CFB181669FF00DA1477 /* TextureOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C920CF7181669FF00DA1477 /* TextureOperations.cpp */; };
                DF28EDA7170E1A11005FA9D2 /* ProfilesManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF28ED9C170E1A11005FA9D2 /* ProfilesManager.cpp */; };
                DF28EDA8170E1A11005FA9D2 /* GUIWindowSettingsProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF28ED9F170E1A11005FA9D2 /* GUIWindowSettingsProfile.cpp */; };
                DF28EE03170E1E51005FA9D2 /* DisplaySettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF28EE01170E1E51005FA9D2 /* DisplaySettings.cpp */; };
-               DF29668017B2B04300DF10F9 /* SettingRequirement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF29667E17B2B04300DF10F9 /* SettingRequirement.cpp */; };
-               DF29668117B2B04300DF10F9 /* SettingRequirement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF29667E17B2B04300DF10F9 /* SettingRequirement.cpp */; };
-               DF29668217B2B04300DF10F9 /* SettingRequirement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF29667E17B2B04300DF10F9 /* SettingRequirement.cpp */; };
                DF3488E713FD958F0026A711 /* GUIAction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF3488E513FD958F0026A711 /* GUIAction.cpp */; };
                DF34892A13FD9C780026A711 /* AirPlayServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF34892813FD9C780026A711 /* AirPlayServer.cpp */; };
                DF34898213FDAAF60026A711 /* HttpParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF34898113FDAAF60026A711 /* HttpParser.cpp */; };
                DF64FE3E16C07AAA00D028FB /* GUIViewState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF64FE3716C07AAA00D028FB /* GUIViewState.cpp */; };
                DF64FE4016C07AAA00D028FB /* ViewDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF64FE3A16C07AAA00D028FB /* ViewDatabase.cpp */; };
                DF673AA51443819600A5A509 /* AddonManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B49FF41152BFA5001AF8A6 /* AddonManager.cpp */; };
+               DF6D1DFE18312525009DB64F /* OverlayRendererGUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55D3604C1826CAB900DA66D2 /* OverlayRendererGUI.cpp */; };
+               DF6D1DFF18312525009DB64F /* OverlayRendererGUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55D3604C1826CAB900DA66D2 /* OverlayRendererGUI.cpp */; };
                DF830D0C15BB260C00602BE6 /* GUIDialogKeyboardGeneric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF830D0A15BB260C00602BE6 /* GUIDialogKeyboardGeneric.cpp */; };
                DF830D1215BB262700602BE6 /* GUIKeyboardFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF830D0F15BB262700602BE6 /* GUIKeyboardFactory.cpp */; };
                DF89901C1709BB2D00B35C21 /* MediaSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF8990161709BB2D00B35C21 /* MediaSettings.cpp */; };
                DFDA3153160E34230047A626 /* DVDOverlayCodec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFDA3152160E34230047A626 /* DVDOverlayCodec.cpp */; };
                DFE4095B17417FDF00473BD9 /* LegacyPathTranslation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4095917417FDF00473BD9 /* LegacyPathTranslation.cpp */; };
                DFECFADF172D9C5100A43CF7 /* GUIControlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFADD172D9C5100A43CF7 /* GUIControlSettings.cpp */; };
-               DFECFB07172D9CAB00A43CF7 /* ISetting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAEE172D9CAB00A43CF7 /* ISetting.cpp */; };
-               DFECFB08172D9CAB00A43CF7 /* Setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF2172D9CAB00A43CF7 /* Setting.cpp */; };
                DFECFB09172D9CAB00A43CF7 /* SettingAddon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF4172D9CAB00A43CF7 /* SettingAddon.cpp */; };
-               DFECFB0A172D9CAB00A43CF7 /* SettingCategoryAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF6172D9CAB00A43CF7 /* SettingCategoryAccess.cpp */; };
-               DFECFB0B172D9CAB00A43CF7 /* SettingConditions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF8172D9CAB00A43CF7 /* SettingConditions.cpp */; };
                DFECFB0C172D9CAB00A43CF7 /* SettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFA172D9CAB00A43CF7 /* SettingControl.cpp */; };
-               DFECFB0D172D9CAB00A43CF7 /* SettingDependency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFC172D9CAB00A43CF7 /* SettingDependency.cpp */; };
                DFECFB0E172D9CAB00A43CF7 /* SettingPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFE172D9CAB00A43CF7 /* SettingPath.cpp */; };
-               DFECFB0F172D9CAB00A43CF7 /* SettingSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB00172D9CAB00A43CF7 /* SettingSection.cpp */; };
-               DFECFB10172D9CAB00A43CF7 /* SettingsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB02172D9CAB00A43CF7 /* SettingsManager.cpp */; };
-               DFECFB11172D9CAB00A43CF7 /* SettingUpdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB03172D9CAB00A43CF7 /* SettingUpdate.cpp */; };
                DFECFB1C172D9D0100A43CF7 /* BooleanLogic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB1A172D9D0100A43CF7 /* BooleanLogic.cpp */; };
                DFECFB4C172D9D6D00A43CF7 /* NetworkServices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB4A172D9D6D00A43CF7 /* NetworkServices.cpp */; };
                DFEF0BAC180ADE6400AEAED1 /* FileItemListModification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFEF0BA9180ADE6400AEAED1 /* FileItemListModification.cpp */; };
                DFF0F19317528350002DA3A4 /* DVDMessageTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E157C0D25F9FA00618676 /* DVDMessageTracker.cpp */; };
                DFF0F19417528350002DA3A4 /* DVDOverlayContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E157E0D25F9FA00618676 /* DVDOverlayContainer.cpp */; };
                DFF0F19517528350002DA3A4 /* DVDOverlayRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15800D25F9FA00618676 /* DVDOverlayRenderer.cpp */; };
-               DFF0F19617528350002DA3A4 /* DVDPerformanceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15820D25F9FA00618676 /* DVDPerformanceCounter.cpp */; };
                DFF0F19717528350002DA3A4 /* DVDPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15840D25F9FA00618676 /* DVDPlayer.cpp */; };
                DFF0F19817528350002DA3A4 /* DVDPlayerAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15860D25F9FA00618676 /* DVDPlayerAudio.cpp */; };
                DFF0F19917528350002DA3A4 /* DVDPlayerSubtitle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15880D25F9FA00618676 /* DVDPlayerSubtitle.cpp */; };
                DFF0F39917528350002DA3A4 /* GUIWindowTestPattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F56352B816E5403400D21BAD /* GUIWindowTestPattern.cpp */; };
                DFF0F39A17528350002DA3A4 /* AdvancedSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C3A612942132009E7A26 /* AdvancedSettings.cpp */; };
                DFF0F39B17528350002DA3A4 /* DisplaySettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF28EE01170E1E51005FA9D2 /* DisplaySettings.cpp */; };
-               DFF0F39C17528350002DA3A4 /* ISetting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAEE172D9CAB00A43CF7 /* ISetting.cpp */; };
                DFF0F39D17528350002DA3A4 /* MediaSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF8990161709BB2D00B35C21 /* MediaSettings.cpp */; };
                DFF0F39E17528350002DA3A4 /* MediaSourceSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF8990181709BB2D00B35C21 /* MediaSourceSettings.cpp */; };
-               DFF0F39F17528350002DA3A4 /* Setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF2172D9CAB00A43CF7 /* Setting.cpp */; };
                DFF0F3A017528350002DA3A4 /* SettingAddon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF4172D9CAB00A43CF7 /* SettingAddon.cpp */; };
-               DFF0F3A117528350002DA3A4 /* SettingCategoryAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF6172D9CAB00A43CF7 /* SettingCategoryAccess.cpp */; };
-               DFF0F3A217528350002DA3A4 /* SettingConditions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF8172D9CAB00A43CF7 /* SettingConditions.cpp */; };
                DFF0F3A317528350002DA3A4 /* SettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFA172D9CAB00A43CF7 /* SettingControl.cpp */; };
-               DFF0F3A417528350002DA3A4 /* SettingDependency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFC172D9CAB00A43CF7 /* SettingDependency.cpp */; };
                DFF0F3A517528350002DA3A4 /* SettingPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFE172D9CAB00A43CF7 /* SettingPath.cpp */; };
                DFF0F3A617528350002DA3A4 /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C38E129420E5009E7A26 /* Settings.cpp */; };
-               DFF0F3A717528350002DA3A4 /* SettingSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB00172D9CAB00A43CF7 /* SettingSection.cpp */; };
-               DFF0F3A817528350002DA3A4 /* SettingsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB02172D9CAB00A43CF7 /* SettingsManager.cpp */; };
-               DFF0F3A917528350002DA3A4 /* SettingUpdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB03172D9CAB00A43CF7 /* SettingUpdate.cpp */; };
                DFF0F3AB17528350002DA3A4 /* SkinSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF89901A1709BB2D00B35C21 /* SkinSettings.cpp */; };
                DFF0F3AC17528350002DA3A4 /* VideoSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E1E010D25F9FD00618676 /* VideoSettings.cpp */; };
                DFF0F3AD17528350002DA3A4 /* DarwinStorageProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F599CD73108E6A7A0010EC2A /* DarwinStorageProvider.cpp */; };
                E38E1FA30D25F9FD00618676 /* DVDMessageTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E157C0D25F9FA00618676 /* DVDMessageTracker.cpp */; };
                E38E1FA40D25F9FD00618676 /* DVDOverlayContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E157E0D25F9FA00618676 /* DVDOverlayContainer.cpp */; };
                E38E1FA50D25F9FD00618676 /* DVDOverlayRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15800D25F9FA00618676 /* DVDOverlayRenderer.cpp */; };
-               E38E1FA60D25F9FD00618676 /* DVDPerformanceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15820D25F9FA00618676 /* DVDPerformanceCounter.cpp */; };
                E38E1FA70D25F9FD00618676 /* DVDPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15840D25F9FA00618676 /* DVDPlayer.cpp */; };
                E38E1FA80D25F9FD00618676 /* DVDPlayerAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15860D25F9FA00618676 /* DVDPlayerAudio.cpp */; };
                E38E1FA90D25F9FD00618676 /* DVDPlayerSubtitle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15880D25F9FA00618676 /* DVDPlayerSubtitle.cpp */; };
                E49911FB174E5D4500741B6D /* DVDMessageTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E157C0D25F9FA00618676 /* DVDMessageTracker.cpp */; };
                E49911FC174E5D4500741B6D /* DVDOverlayContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E157E0D25F9FA00618676 /* DVDOverlayContainer.cpp */; };
                E49911FD174E5D4500741B6D /* DVDOverlayRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15800D25F9FA00618676 /* DVDOverlayRenderer.cpp */; };
-               E49911FE174E5D4500741B6D /* DVDPerformanceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15820D25F9FA00618676 /* DVDPerformanceCounter.cpp */; };
                E49911FF174E5D4500741B6D /* DVDPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15840D25F9FA00618676 /* DVDPlayer.cpp */; };
                E4991200174E5D4500741B6D /* DVDPlayerAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15860D25F9FA00618676 /* DVDPlayerAudio.cpp */; };
                E4991201174E5D4500741B6D /* DVDPlayerSubtitle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E15880D25F9FA00618676 /* DVDPlayerSubtitle.cpp */; };
                E499141D174E603C00741B6D /* GUIWindowTestPattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F56352B816E5403400D21BAD /* GUIWindowTestPattern.cpp */; };
                E499141E174E603C00741B6D /* AdvancedSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C3A612942132009E7A26 /* AdvancedSettings.cpp */; };
                E499141F174E603C00741B6D /* DisplaySettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF28EE01170E1E51005FA9D2 /* DisplaySettings.cpp */; };
-               E4991420174E603C00741B6D /* ISetting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAEE172D9CAB00A43CF7 /* ISetting.cpp */; };
                E4991421174E603C00741B6D /* MediaSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF8990161709BB2D00B35C21 /* MediaSettings.cpp */; };
                E4991422174E603C00741B6D /* MediaSourceSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF8990181709BB2D00B35C21 /* MediaSourceSettings.cpp */; };
-               E4991423174E603C00741B6D /* Setting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF2172D9CAB00A43CF7 /* Setting.cpp */; };
                E4991424174E603C00741B6D /* SettingAddon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF4172D9CAB00A43CF7 /* SettingAddon.cpp */; };
-               E4991425174E603C00741B6D /* SettingCategoryAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF6172D9CAB00A43CF7 /* SettingCategoryAccess.cpp */; };
-               E4991426174E603C00741B6D /* SettingConditions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAF8172D9CAB00A43CF7 /* SettingConditions.cpp */; };
                E4991427174E603C00741B6D /* SettingControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFA172D9CAB00A43CF7 /* SettingControl.cpp */; };
-               E4991428174E603C00741B6D /* SettingDependency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFC172D9CAB00A43CF7 /* SettingDependency.cpp */; };
                E4991429174E603C00741B6D /* SettingPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFAFE172D9CAB00A43CF7 /* SettingPath.cpp */; };
                E499142A174E603C00741B6D /* Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18B7C38E129420E5009E7A26 /* Settings.cpp */; };
-               E499142B174E603C00741B6D /* SettingSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB00172D9CAB00A43CF7 /* SettingSection.cpp */; };
-               E499142C174E603C00741B6D /* SettingsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB02172D9CAB00A43CF7 /* SettingsManager.cpp */; };
-               E499142D174E603C00741B6D /* SettingUpdate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFECFB03172D9CAB00A43CF7 /* SettingUpdate.cpp */; };
                E499142F174E603C00741B6D /* SkinSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF89901A1709BB2D00B35C21 /* SkinSettings.cpp */; };
                E4991430174E603C00741B6D /* VideoSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E1E010D25F9FD00618676 /* VideoSettings.cpp */; };
                E4991431174E604300741B6D /* DarwinStorageProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F599CD73108E6A7A0010EC2A /* DarwinStorageProvider.cpp */; };
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-               0E30286C1759FCC200D93596 /* SettingsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsManager.h; sourceTree = "<group>"; };
                0E3036EA1760F68A00D93596 /* FavouritesDirectory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FavouritesDirectory.cpp; sourceTree = "<group>"; };
                0E3036EB1760F68A00D93596 /* FavouritesDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FavouritesDirectory.h; sourceTree = "<group>"; };
                180F6C7F17CE9A5700127892 /* smc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smc.h; sourceTree = "<group>"; };
                5558ED0F176396CD00118C35 /* StereoscopicsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StereoscopicsManager.h; sourceTree = "<group>"; };
                55611BA21766672F00754072 /* RenderFlags.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderFlags.cpp; sourceTree = "<group>"; };
                55611BA41766679200754072 /* RenderFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderFlags.h; sourceTree = "<group>"; };
+               55D3604C1826CAB900DA66D2 /* OverlayRendererGUI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OverlayRendererGUI.cpp; sourceTree = "<group>"; };
+               55D3604D1826CAB900DA66D2 /* OverlayRendererGUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverlayRendererGUI.h; sourceTree = "<group>"; };
                6E2FACD20E26E92800DF79EA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
                6E97BDBF0DA2B620003A2A89 /* EventClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventClient.h; sourceTree = "<group>"; };
                6E97BDC00DA2B620003A2A89 /* EventPacket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventPacket.h; sourceTree = "<group>"; };
                6E97BDC40DA2B620003A2A89 /* Socket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Socket.h; sourceTree = "<group>"; };
                7C0B98A1154B79C30065A238 /* AEDeviceInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AEDeviceInfo.cpp; sourceTree = "<group>"; };
                7C0B98A2154B79C30065A238 /* AEDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AEDeviceInfo.h; sourceTree = "<group>"; };
+               7C14096F183224B8009F9411 /* ISetting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ISetting.cpp; path = lib/ISetting.cpp; sourceTree = "<group>"; };
+               7C140970183224B8009F9411 /* ISetting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISetting.h; path = lib/ISetting.h; sourceTree = "<group>"; };
+               7C140971183224B8009F9411 /* ISettingCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISettingCallback.h; path = lib/ISettingCallback.h; sourceTree = "<group>"; };
+               7C140972183224B8009F9411 /* ISettingControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ISettingControl.cpp; path = lib/ISettingControl.cpp; sourceTree = "<group>"; };
+               7C140973183224B8009F9411 /* ISettingControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISettingControl.h; path = lib/ISettingControl.h; sourceTree = "<group>"; };
+               7C140974183224B8009F9411 /* ISettingControlCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISettingControlCreator.h; path = lib/ISettingControlCreator.h; sourceTree = "<group>"; };
+               7C140975183224B8009F9411 /* ISettingCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISettingCreator.h; path = lib/ISettingCreator.h; sourceTree = "<group>"; };
+               7C140976183224B8009F9411 /* ISettingsHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISettingsHandler.h; path = lib/ISettingsHandler.h; sourceTree = "<group>"; };
+               7C140977183224B8009F9411 /* ISubSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISubSettings.h; path = lib/ISubSettings.h; sourceTree = "<group>"; };
+               7C140978183224B8009F9411 /* Setting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Setting.cpp; path = lib/Setting.cpp; sourceTree = "<group>"; };
+               7C140979183224B8009F9411 /* Setting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Setting.h; path = lib/Setting.h; sourceTree = "<group>"; };
+               7C14097A183224B8009F9411 /* SettingCategoryAccess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SettingCategoryAccess.cpp; path = lib/SettingCategoryAccess.cpp; sourceTree = "<group>"; };
+               7C14097B183224B8009F9411 /* SettingCategoryAccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingCategoryAccess.h; path = lib/SettingCategoryAccess.h; sourceTree = "<group>"; };
+               7C14097C183224B8009F9411 /* SettingConditions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SettingConditions.cpp; path = lib/SettingConditions.cpp; sourceTree = "<group>"; };
+               7C14097D183224B8009F9411 /* SettingConditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingConditions.h; path = lib/SettingConditions.h; sourceTree = "<group>"; };
+               7C14097E183224B8009F9411 /* SettingDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingDefinitions.h; path = lib/SettingDefinitions.h; sourceTree = "<group>"; };
+               7C14097F183224B8009F9411 /* SettingDependency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SettingDependency.cpp; path = lib/SettingDependency.cpp; sourceTree = "<group>"; };
+               7C140980183224B8009F9411 /* SettingDependency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingDependency.h; path = lib/SettingDependency.h; sourceTree = "<group>"; };
+               7C140981183224B8009F9411 /* SettingRequirement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SettingRequirement.cpp; path = lib/SettingRequirement.cpp; sourceTree = "<group>"; };
+               7C140982183224B8009F9411 /* SettingRequirement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingRequirement.h; path = lib/SettingRequirement.h; sourceTree = "<group>"; };
+               7C140983183224B8009F9411 /* SettingSection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SettingSection.cpp; path = lib/SettingSection.cpp; sourceTree = "<group>"; };
+               7C140984183224B8009F9411 /* SettingSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingSection.h; path = lib/SettingSection.h; sourceTree = "<group>"; };
+               7C140985183224B8009F9411 /* SettingsManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SettingsManager.cpp; path = lib/SettingsManager.cpp; sourceTree = "<group>"; };
+               7C140986183224B8009F9411 /* SettingsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingsManager.h; path = lib/SettingsManager.h; sourceTree = "<group>"; };
+               7C140987183224B8009F9411 /* SettingUpdate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SettingUpdate.cpp; path = lib/SettingUpdate.cpp; sourceTree = "<group>"; };
+               7C140988183224B8009F9411 /* SettingUpdate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SettingUpdate.h; path = lib/SettingUpdate.h; sourceTree = "<group>"; };
                7C1A492115A962EE004AF4A4 /* SeekHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SeekHandler.cpp; sourceTree = "<group>"; };
                7C1A492215A962EE004AF4A4 /* SeekHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SeekHandler.h; sourceTree = "<group>"; };
                7C1A495B15A96918004AF4A4 /* SaveFileStateJob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveFileStateJob.h; sourceTree = "<group>"; };
                7C1D682815A7D2FD00658B65 /* DatabaseManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseManager.h; sourceTree = "<group>"; };
                7C1F6EB913ECCFA7001726AB /* LibraryDirectory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LibraryDirectory.cpp; sourceTree = "<group>"; };
                7C1F6EBA13ECCFA7001726AB /* LibraryDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LibraryDirectory.h; sourceTree = "<group>"; };
+               7C26126A182068660086E04D /* SettingsOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsOperations.cpp; sourceTree = "<group>"; };
+               7C26126B182068660086E04D /* SettingsOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsOperations.h; sourceTree = "<group>"; };
                7C26126F1825B6340086E04D /* DatabaseQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DatabaseQuery.cpp; sourceTree = "<group>"; };
                7C2612701825B6340086E04D /* DatabaseQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseQuery.h; sourceTree = "<group>"; };
-               7C2612631820667C0086E04D /* ISettingControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ISettingControl.cpp; sourceTree = "<group>"; };
-               7C2612641820667C0086E04D /* ISettingControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISettingControl.h; sourceTree = "<group>"; };
-               7C2612651820667C0086E04D /* ISettingControlCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISettingControlCreator.h; sourceTree = "<group>"; };
-               7C2612661820667C0086E04D /* SettingDefinitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingDefinitions.h; sourceTree = "<group>"; };
                7C2D6AE20F35453E00DD2E85 /* SpecialProtocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpecialProtocol.cpp; sourceTree = "<group>"; };
                7C2D6AE30F35453E00DD2E85 /* SpecialProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpecialProtocol.h; sourceTree = "<group>"; };
                7C4458BB161E203800A905F6 /* Screenshot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Screenshot.cpp; sourceTree = "<group>"; };
                7C45DBE810F325C400D4BBF3 /* DAVDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DAVDirectory.h; sourceTree = "<group>"; };
                7C4705AC12EF584C00369E51 /* AddonInstaller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddonInstaller.cpp; sourceTree = "<group>"; };
                7C4705AD12EF584C00369E51 /* AddonInstaller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddonInstaller.h; sourceTree = "<group>"; };
+               7C4E6F701829AA9700F1068F /* GUIDialogSubtitles.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIDialogSubtitles.cpp; sourceTree = "<group>"; };
+               7C4E6F711829AA9700F1068F /* GUIDialogSubtitles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIDialogSubtitles.h; sourceTree = "<group>"; };
                7C5608C40F1754930056433A /* ExternalPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExternalPlayer.cpp; sourceTree = "<group>"; };
                7C5608C50F1754930056433A /* ExternalPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExternalPlayer.h; sourceTree = "<group>"; };
                7C62F24010505BC7002AD2C1 /* Bookmark.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bookmark.cpp; sourceTree = "<group>"; };
                7C779E51104A58F900F444C4 /* GUIWindowTestPatternGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIWindowTestPatternGL.h; sourceTree = "<group>"; };
                7C7B2B2E1134F36400713D6D /* mysqldataset.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mysqldataset.cpp; sourceTree = "<group>"; };
                7C7B2B2F1134F36400713D6D /* mysqldataset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mysqldataset.h; sourceTree = "<group>"; };
+               7C7BCDBF17727951004842FB /* IListProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IListProvider.cpp; path = xbmc/listproviders/IListProvider.cpp; sourceTree = SOURCE_ROOT; };
+               7C7BCDC217727951004842FB /* StaticProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StaticProvider.h; path = xbmc/listproviders/StaticProvider.h; sourceTree = SOURCE_ROOT; };
+               7C7BCDC317727951004842FB /* StaticProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StaticProvider.cpp; path = xbmc/listproviders/StaticProvider.cpp; sourceTree = SOURCE_ROOT; };
+               7C7BCDC417727951004842FB /* IListProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IListProvider.h; path = xbmc/listproviders/IListProvider.h; sourceTree = SOURCE_ROOT; };
                7C7CEAEF165629530059C9EB /* AELimiter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AELimiter.cpp; sourceTree = "<group>"; };
                7C7CEAF0165629530059C9EB /* AELimiter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AELimiter.h; sourceTree = "<group>"; };
                7C84A59C12FA3C1600CD1714 /* SourcesDirectory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SourcesDirectory.cpp; path = xbmc/filesystem/SourcesDirectory.cpp; sourceTree = SOURCE_ROOT; };
                7C8A14551154CB2600E5FCFA /* TextureCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureCache.h; sourceTree = "<group>"; };
                7C8A187A115B2A8200E5FCFA /* TextureDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureDatabase.cpp; sourceTree = "<group>"; };
                7C8A187B115B2A8200E5FCFA /* TextureDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureDatabase.h; sourceTree = "<group>"; };
+               7C8FC6EC1829A4580045153D /* DirectoryProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DirectoryProvider.cpp; path = xbmc/listproviders/DirectoryProvider.cpp; sourceTree = SOURCE_ROOT; };
+               7C8FC6ED1829A4580045153D /* DirectoryProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectoryProvider.h; path = xbmc/listproviders/DirectoryProvider.h; sourceTree = SOURCE_ROOT; };
                7C920CF7181669FF00DA1477 /* TextureOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureOperations.cpp; sourceTree = "<group>"; };
                7C920CF8181669FF00DA1477 /* TextureOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureOperations.h; sourceTree = "<group>"; };
                7C99B6A2133D342100FC2B16 /* CircularCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircularCache.cpp; sourceTree = "<group>"; };
                88ACB01D0DCF409E0083CFDF /* ASAPCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASAPCodec.h; sourceTree = "<group>"; };
                88ACB01E0DCF409E0083CFDF /* DllASAP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DllASAP.h; sourceTree = "<group>"; };
                88ECB6580DE013C4003396A7 /* DiskArbitration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiskArbitration.framework; path = /System/Library/Frameworks/DiskArbitration.framework; sourceTree = "<absolute>"; };
-               8DD76F7E0486A8DE00D96B5E /* XBMC */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = XBMC; sourceTree = BUILT_PRODUCTS_DIR; };
+               8DD76F7E0486A8DE00D96B5E /* XBMC */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = XBMC; sourceTree = BUILT_PRODUCTS_DIR; };
                AE84CB5915A5B8A600A3810E /* TagLibVFSStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TagLibVFSStream.cpp; sourceTree = "<group>"; };
                AE84CB5C15A5B8BA00A3810E /* TagLibVFSStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TagLibVFSStream.h; sourceTree = "<group>"; };
                AE89ACA41621DAB800E17DBC /* DVDDemuxBXA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDDemuxBXA.cpp; sourceTree = "<group>"; };
                DF28EDA0170E1A11005FA9D2 /* GUIWindowSettingsProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIWindowSettingsProfile.h; sourceTree = "<group>"; };
                DF28EE01170E1E51005FA9D2 /* DisplaySettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DisplaySettings.cpp; sourceTree = "<group>"; };
                DF28EE02170E1E51005FA9D2 /* DisplaySettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DisplaySettings.h; sourceTree = "<group>"; };
-               DF29667E17B2B04300DF10F9 /* SettingRequirement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingRequirement.cpp; sourceTree = "<group>"; };
-               DF29667F17B2B04300DF10F9 /* SettingRequirement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingRequirement.h; sourceTree = "<group>"; };
                DF3488E513FD958F0026A711 /* GUIAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIAction.cpp; sourceTree = "<group>"; };
                DF3488E613FD958F0026A711 /* GUIAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIAction.h; sourceTree = "<group>"; };
                DF34892813FD9C780026A711 /* AirPlayServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AirPlayServer.cpp; sourceTree = "<group>"; };
                DF830D0E15BB262700602BE6 /* GUIKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIKeyboard.h; sourceTree = "<group>"; };
                DF830D0F15BB262700602BE6 /* GUIKeyboardFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GUIKeyboardFactory.cpp; sourceTree = "<group>"; };
                DF830D1015BB262700602BE6 /* GUIKeyboardFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GUIKeyboardFactory.h; sourceTree = "<group>"; };
-               DF8990141709BB2D00B35C21 /* ISettingsHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISettingsHandler.h; sourceTree = "<group>"; };
-               DF8990151709BB2D00B35C21 /* ISubSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISubSettings.h; sourceTree = "<group>"; };
                DF8990161709BB2D00B35C21 /* MediaSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaSettings.cpp; sourceTree = "<group>"; };
                DF8990171709BB2D00B35C21 /* MediaSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSettings.h; sourceTree = "<group>"; };
                DF8990181709BB2D00B35C21 /* MediaSourceSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaSourceSettings.cpp; sourceTree = "<group>"; };
                DFE4095A17417FDF00473BD9 /* LegacyPathTranslation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LegacyPathTranslation.h; sourceTree = "<group>"; };
                DFECFADD172D9C5100A43CF7 /* GUIControlSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GUIControlSettings.cpp; path = windows/GUIControlSettings.cpp; sourceTree = "<group>"; };
                DFECFADE172D9C5100A43CF7 /* GUIControlSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GUIControlSettings.h; path = windows/GUIControlSettings.h; sourceTree = "<group>"; };
-               DFECFAEE172D9CAB00A43CF7 /* ISetting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ISetting.cpp; sourceTree = "<group>"; };
-               DFECFAEF172D9CAB00A43CF7 /* ISetting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISetting.h; sourceTree = "<group>"; };
-               DFECFAF0172D9CAB00A43CF7 /* ISettingCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISettingCallback.h; sourceTree = "<group>"; };
-               DFECFAF1172D9CAB00A43CF7 /* ISettingCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISettingCreator.h; sourceTree = "<group>"; };
-               DFECFAF2172D9CAB00A43CF7 /* Setting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Setting.cpp; sourceTree = "<group>"; };
-               DFECFAF3172D9CAB00A43CF7 /* Setting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Setting.h; sourceTree = "<group>"; };
                DFECFAF4172D9CAB00A43CF7 /* SettingAddon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingAddon.cpp; sourceTree = "<group>"; };
                DFECFAF5172D9CAB00A43CF7 /* SettingAddon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingAddon.h; sourceTree = "<group>"; };
-               DFECFAF6172D9CAB00A43CF7 /* SettingCategoryAccess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingCategoryAccess.cpp; sourceTree = "<group>"; };
-               DFECFAF7172D9CAB00A43CF7 /* SettingCategoryAccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingCategoryAccess.h; sourceTree = "<group>"; };
-               DFECFAF8172D9CAB00A43CF7 /* SettingConditions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingConditions.cpp; sourceTree = "<group>"; };
-               DFECFAF9172D9CAB00A43CF7 /* SettingConditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingConditions.h; sourceTree = "<group>"; };
                DFECFAFA172D9CAB00A43CF7 /* SettingControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingControl.cpp; sourceTree = "<group>"; };
                DFECFAFB172D9CAB00A43CF7 /* SettingControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingControl.h; sourceTree = "<group>"; };
-               DFECFAFC172D9CAB00A43CF7 /* SettingDependency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingDependency.cpp; sourceTree = "<group>"; };
-               DFECFAFD172D9CAB00A43CF7 /* SettingDependency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingDependency.h; sourceTree = "<group>"; };
                DFECFAFE172D9CAB00A43CF7 /* SettingPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingPath.cpp; sourceTree = "<group>"; };
                DFECFAFF172D9CAB00A43CF7 /* SettingPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingPath.h; sourceTree = "<group>"; };
-               DFECFB00172D9CAB00A43CF7 /* SettingSection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingSection.cpp; sourceTree = "<group>"; };
-               DFECFB01172D9CAB00A43CF7 /* SettingSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingSection.h; sourceTree = "<group>"; };
-               DFECFB02172D9CAB00A43CF7 /* SettingsManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsManager.cpp; sourceTree = "<group>"; };
-               DFECFB03172D9CAB00A43CF7 /* SettingUpdate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingUpdate.cpp; sourceTree = "<group>"; };
-               DFECFB04172D9CAB00A43CF7 /* SettingUpdate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingUpdate.h; sourceTree = "<group>"; };
                DFECFB1A172D9D0100A43CF7 /* BooleanLogic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BooleanLogic.cpp; sourceTree = "<group>"; };
                DFECFB1B172D9D0100A43CF7 /* BooleanLogic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BooleanLogic.h; sourceTree = "<group>"; };
                DFECFB4A172D9D6D00A43CF7 /* NetworkServices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkServices.cpp; sourceTree = "<group>"; };
                E38E157F0D25F9FA00618676 /* DVDOverlayContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVDOverlayContainer.h; sourceTree = "<group>"; };
                E38E15800D25F9FA00618676 /* DVDOverlayRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDOverlayRenderer.cpp; sourceTree = "<group>"; };
                E38E15810D25F9FA00618676 /* DVDOverlayRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVDOverlayRenderer.h; sourceTree = "<group>"; };
-               E38E15820D25F9FA00618676 /* DVDPerformanceCounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDPerformanceCounter.cpp; sourceTree = "<group>"; };
-               E38E15830D25F9FA00618676 /* DVDPerformanceCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVDPerformanceCounter.h; sourceTree = "<group>"; };
                E38E15840D25F9FA00618676 /* DVDPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDPlayer.cpp; sourceTree = "<group>"; };
                E38E15850D25F9FA00618676 /* DVDPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DVDPlayer.h; sourceTree = "<group>"; };
                E38E15860D25F9FA00618676 /* DVDPlayerAudio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DVDPlayerAudio.cpp; sourceTree = "<group>"; };
                                E38E17AB0D25F9FA00618676 /* GUIDialogFileStacking.h */,
                                886328150E07B37200BB3DAB /* GUIDialogFullScreenInfo.cpp */,
                                886328160E07B37200BB3DAB /* GUIDialogFullScreenInfo.h */,
+                               7C4E6F701829AA9700F1068F /* GUIDialogSubtitles.cpp */,
+                               7C4E6F711829AA9700F1068F /* GUIDialogSubtitles.h */,
                                F5E55B65107412DE006E788A /* GUIDialogTeletext.cpp */,
                                F5E55B64107412DE006E788A /* GUIDialogTeletext.h */,
                                E38E17E00D25F9FA00618676 /* GUIDialogVideoBookmarks.cpp */,
                        name = main;
                        sourceTree = "<group>";
                };
+               7C14096E18322476009F9411 /* lib */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7C14096F183224B8009F9411 /* ISetting.cpp */,
+                               7C140970183224B8009F9411 /* ISetting.h */,
+                               7C140971183224B8009F9411 /* ISettingCallback.h */,
+                               7C140972183224B8009F9411 /* ISettingControl.cpp */,
+                               7C140973183224B8009F9411 /* ISettingControl.h */,
+                               7C140974183224B8009F9411 /* ISettingControlCreator.h */,
+                               7C140975183224B8009F9411 /* ISettingCreator.h */,
+                               7C140976183224B8009F9411 /* ISettingsHandler.h */,
+                               7C140977183224B8009F9411 /* ISubSettings.h */,
+                               7C140978183224B8009F9411 /* Setting.cpp */,
+                               7C140979183224B8009F9411 /* Setting.h */,
+                               7C14097A183224B8009F9411 /* SettingCategoryAccess.cpp */,
+                               7C14097B183224B8009F9411 /* SettingCategoryAccess.h */,
+                               7C14097C183224B8009F9411 /* SettingConditions.cpp */,
+                               7C14097D183224B8009F9411 /* SettingConditions.h */,
+                               7C14097E183224B8009F9411 /* SettingDefinitions.h */,
+                               7C14097F183224B8009F9411 /* SettingDependency.cpp */,
+                               7C140980183224B8009F9411 /* SettingDependency.h */,
+                               7C140981183224B8009F9411 /* SettingRequirement.cpp */,
+                               7C140982183224B8009F9411 /* SettingRequirement.h */,
+                               7C140983183224B8009F9411 /* SettingSection.cpp */,
+                               7C140984183224B8009F9411 /* SettingSection.h */,
+                               7C140985183224B8009F9411 /* SettingsManager.cpp */,
+                               7C140986183224B8009F9411 /* SettingsManager.h */,
+                               7C140987183224B8009F9411 /* SettingUpdate.cpp */,
+                               7C140988183224B8009F9411 /* SettingUpdate.h */,
+                       );
+                       name = lib;
+                       sourceTree = "<group>";
+               };
+               7C430161175C41FE009B82E5 /* listproviders */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7C8FC6EC1829A4580045153D /* DirectoryProvider.cpp */,
+                               7C8FC6ED1829A4580045153D /* DirectoryProvider.h */,
+                               7C7BCDBF17727951004842FB /* IListProvider.cpp */,
+                               7C7BCDC417727951004842FB /* IListProvider.h */,
+                               7C7BCDC317727951004842FB /* StaticProvider.cpp */,
+                               7C7BCDC217727951004842FB /* StaticProvider.h */,
+                       );
+                       name = listproviders;
+                       path = linux;
+                       sourceTree = "<group>";
+               };
                7C5608C30F1754930056433A /* ExternalPlayer */ = {
                        isa = PBXGroup;
                        children = (
                                18B7C8C61294252E009E7A26 /* input */,
                                4367217312D6640E002508E6 /* interfaces */,
                                E38E1D690D25F9FD00618676 /* linux */,
+                               7C430161175C41FE009B82E5 /* listproviders */,
                                552A226615F7E11B0015C0D0 /* main */,
                                18B7C853129423A7009E7A26 /* music */,
                                431376F212D6449100680C15 /* network */,
                                E38E157F0D25F9FA00618676 /* DVDOverlayContainer.h */,
                                E38E15800D25F9FA00618676 /* DVDOverlayRenderer.cpp */,
                                E38E15810D25F9FA00618676 /* DVDOverlayRenderer.h */,
-                               E38E15820D25F9FA00618676 /* DVDPerformanceCounter.cpp */,
-                               E38E15830D25F9FA00618676 /* DVDPerformanceCounter.h */,
                                E38E15840D25F9FA00618676 /* DVDPlayer.cpp */,
                                E38E15850D25F9FA00618676 /* DVDPlayer.h */,
                                E38E15860D25F9FA00618676 /* DVDPlayerAudio.cpp */,
                                F5D8D730102BB3B1004A11AB /* OverlayRenderer.h */,
                                F5D8D72F102BB3B1004A11AB /* OverlayRendererGL.cpp */,
                                F5D8D72E102BB3B1004A11AB /* OverlayRendererGL.h */,
+                               55D3604C1826CAB900DA66D2 /* OverlayRendererGUI.cpp */,
+                               55D3604D1826CAB900DA66D2 /* OverlayRendererGUI.h */,
                                431AE5D7109C1A63007428C3 /* OverlayRendererUtil.cpp */,
                                431AE5D8109C1A63007428C3 /* OverlayRendererUtil.h */,
                                F56579AD13060D1E0085ED7F /* RenderCapture.cpp */,
                E38E1E000D25F9FD00618676 /* settings */ = {
                        isa = PBXGroup;
                        children = (
+                               7C14096E18322476009F9411 /* lib */,
                                F563529F16E53FE900D21BAD /* dialogs */,
                                F56352A016E53FF300D21BAD /* windows */,
                                18B7C3A612942132009E7A26 /* AdvancedSettings.cpp */,
                                18B7C3A712942132009E7A26 /* AdvancedSettings.h */,
                                DF28EE01170E1E51005FA9D2 /* DisplaySettings.cpp */,
                                DF28EE02170E1E51005FA9D2 /* DisplaySettings.h */,
-                               DFECFAEE172D9CAB00A43CF7 /* ISetting.cpp */,
-                               DFECFAEF172D9CAB00A43CF7 /* ISetting.h */,
-                               DFECFAF0172D9CAB00A43CF7 /* ISettingCallback.h */,
-                               7C2612631820667C0086E04D /* ISettingControl.cpp */,
-                               7C2612641820667C0086E04D /* ISettingControl.h */,
-                               7C2612651820667C0086E04D /* ISettingControlCreator.h */,
-                               DFECFAF1172D9CAB00A43CF7 /* ISettingCreator.h */,
-                               DF8990141709BB2D00B35C21 /* ISettingsHandler.h */,
-                               DF8990151709BB2D00B35C21 /* ISubSettings.h */,
                                DF8990161709BB2D00B35C21 /* MediaSettings.cpp */,
                                DF8990171709BB2D00B35C21 /* MediaSettings.h */,
                                DF8990181709BB2D00B35C21 /* MediaSourceSettings.cpp */,
                                DF8990191709BB2D00B35C21 /* MediaSourceSettings.h */,
-                               DFECFAF2172D9CAB00A43CF7 /* Setting.cpp */,
-                               DFECFAF3172D9CAB00A43CF7 /* Setting.h */,
                                DFECFAF4172D9CAB00A43CF7 /* SettingAddon.cpp */,
                                DFECFAF5172D9CAB00A43CF7 /* SettingAddon.h */,
-                               DFECFAF6172D9CAB00A43CF7 /* SettingCategoryAccess.cpp */,
-                               DFECFAF7172D9CAB00A43CF7 /* SettingCategoryAccess.h */,
-                               DFECFAF8172D9CAB00A43CF7 /* SettingConditions.cpp */,
-                               DFECFAF9172D9CAB00A43CF7 /* SettingConditions.h */,
                                DFECFAFA172D9CAB00A43CF7 /* SettingControl.cpp */,
                                DFECFAFB172D9CAB00A43CF7 /* SettingControl.h */,
-                               7C2612661820667C0086E04D /* SettingDefinitions.h */,
-                               DFECFAFC172D9CAB00A43CF7 /* SettingDependency.cpp */,
-                               DFECFAFD172D9CAB00A43CF7 /* SettingDependency.h */,
                                DFECFAFE172D9CAB00A43CF7 /* SettingPath.cpp */,
                                DFECFAFF172D9CAB00A43CF7 /* SettingPath.h */,
-                               DF29667E17B2B04300DF10F9 /* SettingRequirement.cpp */,
-                               DF29667F17B2B04300DF10F9 /* SettingRequirement.h */,
                                18B7C38E129420E5009E7A26 /* Settings.cpp */,
                                18B7C38F129420E5009E7A26 /* Settings.h */,
-                               DFECFB00172D9CAB00A43CF7 /* SettingSection.cpp */,
-                               DFECFB01172D9CAB00A43CF7 /* SettingSection.h */,
-                               DFECFB02172D9CAB00A43CF7 /* SettingsManager.cpp */,
-                               0E30286C1759FCC200D93596 /* SettingsManager.h */,
-                               DFECFB03172D9CAB00A43CF7 /* SettingUpdate.cpp */,
-                               DFECFB04172D9CAB00A43CF7 /* SettingUpdate.h */,
                                DF89901A1709BB2D00B35C21 /* SkinSettings.cpp */,
                                DF89901B1709BB2D00B35C21 /* SkinSettings.h */,
                                E38E1E010D25F9FD00618676 /* VideoSettings.cpp */,
                                DF28DF4C17B8379E0077F41A /* ProfilesOperations.h */,
                                DF00492B162DAEA200A971AD /* PVROperations.cpp */,
                                DF00492C162DAEA200A971AD /* PVROperations.h */,
+                               7C26126A182068660086E04D /* SettingsOperations.cpp */,
+                               7C26126B182068660086E04D /* SettingsOperations.h */,
                                F5AE409613415D9E0004BD79 /* SystemOperations.cpp */,
                                F5AE409713415D9E0004BD79 /* SystemOperations.h */,
                                7C920CF7181669FF00DA1477 /* TextureOperations.cpp */,
                                E38E1FA30D25F9FD00618676 /* DVDMessageTracker.cpp in Sources */,
                                E38E1FA40D25F9FD00618676 /* DVDOverlayContainer.cpp in Sources */,
                                E38E1FA50D25F9FD00618676 /* DVDOverlayRenderer.cpp in Sources */,
-                               E38E1FA60D25F9FD00618676 /* DVDPerformanceCounter.cpp in Sources */,
                                E38E1FA70D25F9FD00618676 /* DVDPlayer.cpp in Sources */,
                                E38E1FA80D25F9FD00618676 /* DVDPlayerAudio.cpp in Sources */,
                                E38E1FA90D25F9FD00618676 /* DVDPlayerSubtitle.cpp in Sources */,
                                43BF09171080C6BA00E25290 /* NptResults.cpp in Sources */,
                                43BF09181080C6BA00E25290 /* NptRingBuffer.cpp in Sources */,
                                43BF09191080C6BA00E25290 /* NptSimpleMessageQueue.cpp in Sources */,
+                               55D3604E1826CAB900DA66D2 /* OverlayRendererGUI.cpp in Sources */,
                                43BF091A1080C6BA00E25290 /* NptSockets.cpp in Sources */,
                                43BF091B1080C6BA00E25290 /* NptStreams.cpp in Sources */,
                                43BF091C1080C6BA00E25290 /* NptStrings.cpp in Sources */,
                                F52CC5F01713AAA200113454 /* DirectoryNodeGrouped.cpp in Sources */,
                                F52CC6AA1713BD2B00113454 /* DirectoryNodeGrouped.cpp in Sources */,
                                DFECFADF172D9C5100A43CF7 /* GUIControlSettings.cpp in Sources */,
-                               DFECFB07172D9CAB00A43CF7 /* ISetting.cpp in Sources */,
-                               DFECFB08172D9CAB00A43CF7 /* Setting.cpp in Sources */,
                                DFECFB09172D9CAB00A43CF7 /* SettingAddon.cpp in Sources */,
-                               DFECFB0A172D9CAB00A43CF7 /* SettingCategoryAccess.cpp in Sources */,
-                               DFECFB0B172D9CAB00A43CF7 /* SettingConditions.cpp in Sources */,
                                DFECFB0C172D9CAB00A43CF7 /* SettingControl.cpp in Sources */,
-                               DFECFB0D172D9CAB00A43CF7 /* SettingDependency.cpp in Sources */,
                                DFECFB0E172D9CAB00A43CF7 /* SettingPath.cpp in Sources */,
-                               DFECFB0F172D9CAB00A43CF7 /* SettingSection.cpp in Sources */,
-                               DFECFB10172D9CAB00A43CF7 /* SettingsManager.cpp in Sources */,
-                               DFECFB11172D9CAB00A43CF7 /* SettingUpdate.cpp in Sources */,
                                DFECFB1C172D9D0100A43CF7 /* BooleanLogic.cpp in Sources */,
                                DFECFB4C172D9D6D00A43CF7 /* NetworkServices.cpp in Sources */,
                                F5DB700217322DBB00D4DF21 /* FavouritesOperations.cpp in Sources */,
                                55611BA31766672F00754072 /* RenderFlags.cpp in Sources */,
                                5558ED10176396CD00118C35 /* StereoscopicsManager.cpp in Sources */,
                                F59EED7E17AD5174005BB7C6 /* ApplicationPlayer.cpp in Sources */,
-                               DF29668017B2B04300DF10F9 /* SettingRequirement.cpp in Sources */,
                                DF28DF4D17B8379E0077F41A /* ProfilesOperations.cpp in Sources */,
                                180F6C8117CE9A5700127892 /* smc.c in Sources */,
                                DFD882F817DD1A5B001516FE /* AddonPythonInvoker.cpp in Sources */,
                                7C920CF9181669FF00DA1477 /* TextureOperations.cpp in Sources */,
                                DFEF0BAC180ADE6400AEAED1 /* FileItemListModification.cpp in Sources */,
                                DFEF0BC1180ADEDA00AEAED1 /* SmartPlaylistFileItemListModifier.cpp in Sources */,
-                               7C2612671820667C0086E04D /* ISettingControl.cpp in Sources */,
                                7CC82C9318284F9F0010DF30 /* CharsetDetection.cpp in Sources */,
+                               7C26126C182068660086E04D /* SettingsOperations.cpp in Sources */,
+                               7C7BCDC517727951004842FB /* IListProvider.cpp in Sources */,
+                               7C7BCDC717727951004842FB /* StaticProvider.cpp in Sources */,
+                               7C8FC6EE1829A4580045153D /* DirectoryProvider.cpp in Sources */,
+                               7C4E6F721829AA9700F1068F /* GUIDialogSubtitles.cpp in Sources */,
+                               7C140989183224B8009F9411 /* ISetting.cpp in Sources */,
+                               7C14098C183224B8009F9411 /* ISettingControl.cpp in Sources */,
+                               7C14098F183224B8009F9411 /* Setting.cpp in Sources */,
+                               7C140992183224B8009F9411 /* SettingCategoryAccess.cpp in Sources */,
+                               7C140995183224B8009F9411 /* SettingConditions.cpp in Sources */,
+                               7C140998183224B8009F9411 /* SettingDependency.cpp in Sources */,
+                               7C14099B183224B8009F9411 /* SettingRequirement.cpp in Sources */,
+                               7C14099E183224B8009F9411 /* SettingSection.cpp in Sources */,
+                               7C1409A1183224B8009F9411 /* SettingsManager.cpp in Sources */,
+                               7C1409A4183224B8009F9411 /* SettingUpdate.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                DFF0F19317528350002DA3A4 /* DVDMessageTracker.cpp in Sources */,
                                DFF0F19417528350002DA3A4 /* DVDOverlayContainer.cpp in Sources */,
                                DFF0F19517528350002DA3A4 /* DVDOverlayRenderer.cpp in Sources */,
-                               DFF0F19617528350002DA3A4 /* DVDPerformanceCounter.cpp in Sources */,
                                DFF0F19717528350002DA3A4 /* DVDPlayer.cpp in Sources */,
                                DFF0F19817528350002DA3A4 /* DVDPlayerAudio.cpp in Sources */,
                                DFF0F19917528350002DA3A4 /* DVDPlayerSubtitle.cpp in Sources */,
                                DFF0F39917528350002DA3A4 /* GUIWindowTestPattern.cpp in Sources */,
                                DFF0F39A17528350002DA3A4 /* AdvancedSettings.cpp in Sources */,
                                DFF0F39B17528350002DA3A4 /* DisplaySettings.cpp in Sources */,
-                               DFF0F39C17528350002DA3A4 /* ISetting.cpp in Sources */,
                                DFF0F39D17528350002DA3A4 /* MediaSettings.cpp in Sources */,
                                DFF0F39E17528350002DA3A4 /* MediaSourceSettings.cpp in Sources */,
-                               DFF0F39F17528350002DA3A4 /* Setting.cpp in Sources */,
                                DFF0F3A017528350002DA3A4 /* SettingAddon.cpp in Sources */,
-                               DFF0F3A117528350002DA3A4 /* SettingCategoryAccess.cpp in Sources */,
-                               DFF0F3A217528350002DA3A4 /* SettingConditions.cpp in Sources */,
                                DFF0F3A317528350002DA3A4 /* SettingControl.cpp in Sources */,
-                               DFF0F3A417528350002DA3A4 /* SettingDependency.cpp in Sources */,
                                DFF0F3A517528350002DA3A4 /* SettingPath.cpp in Sources */,
                                DFF0F3A617528350002DA3A4 /* Settings.cpp in Sources */,
-                               DFF0F3A717528350002DA3A4 /* SettingSection.cpp in Sources */,
-                               DFF0F3A817528350002DA3A4 /* SettingsManager.cpp in Sources */,
-                               DFF0F3A917528350002DA3A4 /* SettingUpdate.cpp in Sources */,
                                DFF0F3AB17528350002DA3A4 /* SkinSettings.cpp in Sources */,
                                DFF0F3AC17528350002DA3A4 /* VideoSettings.cpp in Sources */,
                                DFF0F3AD17528350002DA3A4 /* DarwinStorageProvider.cpp in Sources */,
                                F55BA70C17AB2265002A36D1 /* StereoscopicsManager.cpp in Sources */,
                                F55BA71117AB2293002A36D1 /* RenderFlags.cpp in Sources */,
                                F59EED8017AD5174005BB7C6 /* ApplicationPlayer.cpp in Sources */,
-                               DF29668217B2B04300DF10F9 /* SettingRequirement.cpp in Sources */,
                                DF28DF4F17B8379E0077F41A /* ProfilesOperations.cpp in Sources */,
                                DFD882F617DD1A5B001516FE /* AddonPythonInvoker.cpp in Sources */,
                                DFD882E717DD189E001516FE /* StringValidation.cpp in Sources */,
                                7C920CFB181669FF00DA1477 /* TextureOperations.cpp in Sources */,
                                DFEF0BAE180ADE6400AEAED1 /* FileItemListModification.cpp in Sources */,
                                DFEF0BC3180ADEDA00AEAED1 /* SmartPlaylistFileItemListModifier.cpp in Sources */,
-                               7C2612691820667C0086E04D /* ISettingControl.cpp in Sources */,
                                7CC82C9518284F9F0010DF30 /* CharsetDetection.cpp in Sources */,
+                               DF6D1DFF18312525009DB64F /* OverlayRendererGUI.cpp in Sources */,
+                               7C26126E182068660086E04D /* SettingsOperations.cpp in Sources */,
+                               7C7BCDCB17727951004842FB /* IListProvider.cpp in Sources */,
+                               7C7BCDCD17727952004842FB /* StaticProvider.cpp in Sources */,
+                               7C8FC6F01829A4580045153D /* DirectoryProvider.cpp in Sources */,
+                               7C4E6F741829AA9700F1068F /* GUIDialogSubtitles.cpp in Sources */,
+                               7C14098B183224B8009F9411 /* ISetting.cpp in Sources */,
+                               7C14098E183224B8009F9411 /* ISettingControl.cpp in Sources */,
+                               7C140991183224B8009F9411 /* Setting.cpp in Sources */,
+                               7C140994183224B8009F9411 /* SettingCategoryAccess.cpp in Sources */,
+                               7C140997183224B8009F9411 /* SettingConditions.cpp in Sources */,
+                               7C14099A183224B8009F9411 /* SettingDependency.cpp in Sources */,
+                               7C14099D183224B8009F9411 /* SettingRequirement.cpp in Sources */,
+                               7C1409A0183224B8009F9411 /* SettingSection.cpp in Sources */,
+                               7C1409A3183224B8009F9411 /* SettingsManager.cpp in Sources */,
+                               7C1409A6183224B8009F9411 /* SettingUpdate.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                E49911FB174E5D4500741B6D /* DVDMessageTracker.cpp in Sources */,
                                E49911FC174E5D4500741B6D /* DVDOverlayContainer.cpp in Sources */,
                                E49911FD174E5D4500741B6D /* DVDOverlayRenderer.cpp in Sources */,
-                               E49911FE174E5D4500741B6D /* DVDPerformanceCounter.cpp in Sources */,
                                E49911FF174E5D4500741B6D /* DVDPlayer.cpp in Sources */,
                                E4991200174E5D4500741B6D /* DVDPlayerAudio.cpp in Sources */,
                                E4991201174E5D4500741B6D /* DVDPlayerSubtitle.cpp in Sources */,
                                E499141D174E603C00741B6D /* GUIWindowTestPattern.cpp in Sources */,
                                E499141E174E603C00741B6D /* AdvancedSettings.cpp in Sources */,
                                E499141F174E603C00741B6D /* DisplaySettings.cpp in Sources */,
-                               E4991420174E603C00741B6D /* ISetting.cpp in Sources */,
                                E4991421174E603C00741B6D /* MediaSettings.cpp in Sources */,
                                E4991422174E603C00741B6D /* MediaSourceSettings.cpp in Sources */,
-                               E4991423174E603C00741B6D /* Setting.cpp in Sources */,
                                E4991424174E603C00741B6D /* SettingAddon.cpp in Sources */,
-                               E4991425174E603C00741B6D /* SettingCategoryAccess.cpp in Sources */,
-                               E4991426174E603C00741B6D /* SettingConditions.cpp in Sources */,
                                E4991427174E603C00741B6D /* SettingControl.cpp in Sources */,
-                               E4991428174E603C00741B6D /* SettingDependency.cpp in Sources */,
                                E4991429174E603C00741B6D /* SettingPath.cpp in Sources */,
                                E499142A174E603C00741B6D /* Settings.cpp in Sources */,
-                               E499142B174E603C00741B6D /* SettingSection.cpp in Sources */,
-                               E499142C174E603C00741B6D /* SettingsManager.cpp in Sources */,
-                               E499142D174E603C00741B6D /* SettingUpdate.cpp in Sources */,
                                E499142F174E603C00741B6D /* SkinSettings.cpp in Sources */,
                                E4991430174E603C00741B6D /* VideoSettings.cpp in Sources */,
                                E4991431174E604300741B6D /* DarwinStorageProvider.cpp in Sources */,
                                F55BA70B17AB2264002A36D1 /* StereoscopicsManager.cpp in Sources */,
                                F55BA71017AB2293002A36D1 /* RenderFlags.cpp in Sources */,
                                F59EED7F17AD5174005BB7C6 /* ApplicationPlayer.cpp in Sources */,
-                               DF29668117B2B04300DF10F9 /* SettingRequirement.cpp in Sources */,
                                DF28DF4E17B8379E0077F41A /* ProfilesOperations.cpp in Sources */,
                                DFD882F717DD1A5B001516FE /* AddonPythonInvoker.cpp in Sources */,
                                DFD882E817DD189E001516FE /* StringValidation.cpp in Sources */,
                                7C920CFA181669FF00DA1477 /* TextureOperations.cpp in Sources */,
                                DFEF0BAD180ADE6400AEAED1 /* FileItemListModification.cpp in Sources */,
                                DFEF0BC2180ADEDA00AEAED1 /* SmartPlaylistFileItemListModifier.cpp in Sources */,
-                               7C2612681820667C0086E04D /* ISettingControl.cpp in Sources */,
                                7CC82C9418284F9F0010DF30 /* CharsetDetection.cpp in Sources */,
+                               DF6D1DFE18312525009DB64F /* OverlayRendererGUI.cpp in Sources */,
+                               7C26126D182068660086E04D /* SettingsOperations.cpp in Sources */,
+                               7C7BCDC817727951004842FB /* IListProvider.cpp in Sources */,
+                               7C7BCDCA17727951004842FB /* StaticProvider.cpp in Sources */,
+                               7C8FC6EF1829A4580045153D /* DirectoryProvider.cpp in Sources */,
+                               7C4E6F731829AA9700F1068F /* GUIDialogSubtitles.cpp in Sources */,
+                               7C14098A183224B8009F9411 /* ISetting.cpp in Sources */,
+                               7C14098D183224B8009F9411 /* ISettingControl.cpp in Sources */,
+                               7C140990183224B8009F9411 /* Setting.cpp in Sources */,
+                               7C140993183224B8009F9411 /* SettingCategoryAccess.cpp in Sources */,
+                               7C140996183224B8009F9411 /* SettingConditions.cpp in Sources */,
+                               7C140999183224B8009F9411 /* SettingDependency.cpp in Sources */,
+                               7C14099C183224B8009F9411 /* SettingRequirement.cpp in Sources */,
+                               7C14099F183224B8009F9411 /* SettingSection.cpp in Sources */,
+                               7C1409A2183224B8009F9411 /* SettingsManager.cpp in Sources */,
+                               7C1409A5183224B8009F9411 /* SettingUpdate.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                        HAS_SPC_CODEC,
                                );
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-                               GCC_VERSION = com.apple.compilers.llvmgcc42;
+                               GCC_VERSION = "";
                                GENERATE_PROFILING_CODE = NO;
                                HEADER_SEARCH_PATHS = (
                                        "$(inherited)",
                                );
                                GCC_SYMBOLS_PRIVATE_EXTERN = NO;
                                GCC_UNROLL_LOOPS = YES;
-                               GCC_VERSION = com.apple.compilers.llvmgcc42;
+                               GCC_VERSION = "";
                                HEADER_SEARCH_PATHS = (
                                        "$(inherited)",
                                        $SRCROOT,
index 670c8b2..7bf973a 100644 (file)
                                                <left>10</left>
                                                <top>195</top>
                                                <width>600</width>
-                                               <height>160</height>
-                                               <font>font12</font>
+                                               <height>170</height>
+                                               <font>font13</font>
                                                <align>justify</align>
                                                <textcolor>white</textcolor>
                                                <label>$INFO[ListItem.Property(Addon.Description)]</label>
                                        </control>
                                        <control type="scrollbar" id="60">
                                                <left>610</left>
-                                               <top>190</top>
+                                               <top>195</top>
                                                <width>25</width>
-                                               <height>175</height>
+                                               <height>170</height>
                                                <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
                                                <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
                                                <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
                                                <width>600</width>
                                                <height>40</height>
                                                <font>font12</font>
-                                               <align>justify</align>
+                                               <align>left</align>
                                                <textcolor>white</textcolor>
                                                <label>$INFO[ListItem.Property(Addon.Disclaimer)]</label>
                                                <autoscroll time="2000" delay="3000" repeat="5000">true</autoscroll>
                                        <control type="textbox" id="401">
                                                <description>Description</description>
                                                <left>10</left>
-                                               <top>195</top>
+                                               <top>205</top>
                                                <width>600</width>
-                                               <height>250</height>
-                                               <font>font12</font>
+                                               <height>240</height>
+                                               <font>font13</font>
                                                <align>justify</align>
                                                <textcolor>white</textcolor>
                                                <label>$INFO[ListItem.Property(Addon.Description)]</label>
                                        </control>
                                        <control type="scrollbar" id="61">
                                                <left>610</left>
-                                               <top>190</top>
+                                               <top>205</top>
                                                <width>25</width>
-                                               <height>250</height>
+                                               <height>240</height>
                                                <texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
                                                <texturesliderbar border="0,14,0,14">ScrollBarV_bar.png</texturesliderbar>
                                                <texturesliderbarfocus border="0,14,0,14">ScrollBarV_bar_focus.png</texturesliderbarfocus>
index e9b5640..bbb1ca0 100644 (file)
                                        <left>210</left>
                                        <top>515</top>
                                        <width>1030</width>
-                                       <height>120</height>
-                                       <font>font12</font>
+                                       <height>124</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <pagecontrol>61</pagecontrol>
index 910cc7d..505dc12 100644 (file)
                        <ondown>10</ondown>
                        <visible>system.getbool(input.enablemouse)</visible>
                </control>
-               <control type="label" id="2">
-                       <description>dialog line 1</description>
+               <control type="textbox" id="9">
+                       <description>text</description>
                        <left>30</left>
                        <top>60</top>
                        <width>550</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-               </control>
-               <control type="label" id="3">
-                       <description>dialog line 2</description>
-                       <left>30</left>
-                       <top>85</top>
-                       <width>550</width>
-                       <height>30</height>
+                       <height>80</height>
                        <align>left</align>
-                       <aligny>center</aligny>
-                       <label>-</label>
-                       <font>font13</font>
-               </control>
-               <control type="label" id="4">
-                       <description>dialog line 3</description>
-                       <left>30</left>
-                       <top>110</top>
-                       <width>550</width>
-                       <height>30</height>
-                       <align>left</align>
-                       <aligny>center</aligny>
                        <label>-</label>
                        <font>font13</font>
+                       <autoscroll time="3000" delay="4000" repeat="5000">Skin.HasSetting(AutoScroll)</autoscroll>
                </control>
                <control type="button" id="10">
                        <description>OK button</description>
index 9ff34b3..a2f88c6 100644 (file)
                                        <left>40</left>
                                        <top>275</top>
                                        <width>650</width>
-                                       <height>295</height>
-                                       <font>font12</font>
+                                       <height>285</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <shadowcolor>black</shadowcolor>
index 40100e4..655118e 100644 (file)
                        <top>400</top>
                        <width>650</width>
                        <height>180</height>
-                       <font>font12</font>
+                       <font>font13</font>
                        <align>justify</align>
                        <pagecontrol>60</pagecontrol>
                        <label fallback="161">$INFO[ListItem.Plot]</label>
diff --git a/addons/skin.confluence/720p/DialogSubtitles.xml b/addons/skin.confluence/720p/DialogSubtitles.xml
new file mode 100644 (file)
index 0000000..e0c4da5
--- /dev/null
@@ -0,0 +1,415 @@
+<window type="dialog">
+       <coordinates>
+               <system>1</system>
+               <left>380</left>
+               <top>0</top>
+       </coordinates>
+       <controls>
+               <control type="group" id="250">
+<!--                   <animation effect="slide" start="900,0" end="0,0" time="500" delay="800" tween="quadratic" easing="out">WindowOpen</animation> -->
+                       <animation effect="slide" start="0,0" end="900,0" time="500" tween="quadratic" easing="out">WindowClose</animation> 
+                       <animation type="Conditional" condition="Control.HasFocus(150)" reversible="true">
+                               <effect type="slide" end="-250,0" time="400" />
+                       </animation>
+                       <control type="button" id="8999">
+                               <description>Fake button for mouse control</description>
+                               <left>880</left>
+                               <top>0</top>
+                               <width>20</width>
+                               <height>720</height>
+                               <label>-</label>
+                               <font>-</font>
+                               <texturenofocus>-</texturenofocus>
+                               <texturefocus>-</texturefocus>
+                               <visible>true</visible>
+                       </control>
+                       <control type="image">
+                               <description>media info background image</description>
+                               <left>0</left>
+                               <top>0</top>
+                               <width>1150</width>
+                               <height>720</height>
+                               <colordiffuse>BBFFFFFF</colordiffuse>
+                               <texture border="20,0,0,0" flipx="true">MediaBladeSub.png</texture>
+                       </control>
+                       <control type="button">
+                               <description>Close Window button</description>
+                               <left>20</left>
+                               <top>0</top>
+                               <width>64</width>
+                               <height>32</height>
+                               <label>-</label>
+                               <font>-</font>
+                               <onclick>PreviousMenu</onclick>
+                               <texturefocus>DialogCloseButton-focus.png</texturefocus>
+                               <texturenofocus>DialogCloseButton.png</texturenofocus>
+                               <onleft>101</onleft>
+                               <onright>101</onright>
+                               <onup>101</onup>
+                               <ondown>101</ondown>
+                               <visible>system.getbool(input.enablemouse)</visible>
+                       </control>
+                       <control type="group">
+                               <control type="label" id="100">
+                                       <description>header label</description>
+                                       <right>880</right>
+                                       <top>80</top>
+                                       <width>550</width>
+                                       <height>30</height>
+                                       <font>font30_title</font>
+                                       <align>right</align>
+                                       <aligny>center</aligny>
+                                       <textcolor>FFFFFFFF</textcolor>
+                                       <shadowcolor>FF000000</shadowcolor>
+                               </control>
+                               <control type="label">
+                                       <description>Video label</description>
+                                       <right>880</right>
+                                       <top>110</top>
+                                       <width>550</width>
+                                       <height>30</height>
+                                       <font>font13_title</font>
+                                       <label>$INFO[Player.Filename]</label>
+                                       <align>right</align>
+                                       <aligny>center</aligny>
+                                       <textcolor>grey</textcolor>
+                                       <shadowcolor>FF000000</shadowcolor>
+                               </control>
+                               <control type="image">
+                                       <left>30</left>
+                                       <top>140</top>
+                                       <width>820</width>
+                                       <height>4</height>
+                                       <texture>separator.png</texture>
+                               </control>
+                               <control type="image" id="110">
+                                       <description>Service Logo</description>
+                                       <left>0</left>
+                                       <top>80</top>
+                                       <width>250</width>
+                                       <height>40</height>
+                                       <aspectratio>keep</aspectratio>
+                               </control>
+                               <control type="label" id="140">
+                                       <description>textarea</description>
+                                       <left>50</left>
+                                       <top>140</top>
+                                       <width>780</width>
+                                       <height>40</height>
+                                       <font>font13</font>
+                                       <textcolor>FFFFFFFF</textcolor>
+                                       <align>center</align>
+                                       <aligny>center</aligny>
+                                       <wrapmultiline>true</wrapmultiline>
+                               </control>
+                               <control type="image">
+                                       <left>30</left>
+                                       <top>176</top>
+                                       <width>820</width>
+                                       <height>4</height>
+                                       <texture>separator.png</texture>
+                               </control>
+                       </control>
+                       <!-- ** Required ** Do not change <id>or<type>-->
+                       <control type="group">
+                               <control type="list" id="120">
+                                       <left>50</left>
+                                       <top>206</top>
+                                       <width>800</width>
+                                       <height>434</height>
+                                       <onleft>121</onleft>
+                                       <onright>150</onright>
+                                       <onup>120</onup>
+                                       <ondown>120</ondown>
+                                       <viewtype label="535">list</viewtype>
+                                       <pagecontrol>121</pagecontrol>
+                                       <scrolltime>200</scrolltime>
+                                       <itemlayout width="800" height="36">
+                                               <control type="image">
+                                                       <left>0</left>
+                                                       <top>0</top>
+                                                       <width>780</width>
+                                                       <height>38</height>
+                                                       <texture>MenuItemNF.png</texture>
+                                               </control>
+                                               <control type="image">
+                                                       <left>5</left>
+                                                       <top>11</top>
+                                                       <width>26</width>
+                                                       <height>17</height>
+                                                       <texture>Subtitles/flags/$INFO[ListItem.Thumb].gif</texture>
+                                               </control>
+                                               <control type="label">
+                                                       <left>40</left>
+                                                       <top>0</top>
+                                                       <width>90</width>
+                                                       <height>38</height>
+                                                       <font>font18</font>
+                                                       <aligny>center</aligny>
+                                                       <textcolor>FFFFFFFF</textcolor>
+                                                       <selectedcolor>FF0084FF</selectedcolor>
+                                                       <align>left</align>
+                                                       <info>ListItem.Label</info>
+                                               </control>
+                                               <control type="image">
+                                                       <left>135</left>
+                                                       <top>13</top>
+                                                       <width>20</width>
+                                                       <height>12</height>
+                                                       <texture>Subtitles/icon_close_caption.png</texture>
+                                                       <visible>ListItem.property(hearing_imp)</visible>
+                                               </control>
+                                               <control type="image">
+                                                       <left>160</left>
+                                                       <top>13</top>
+                                                       <width>40</width>
+                                                       <height>12</height>
+                                                       <texture>Subtitles/icon_sync.png</texture>
+                                                       <visible>ListItem.property(sync)</visible>
+                                               </control>
+                                               <control type="label">
+                                                       <left>205</left>
+                                                       <top>0</top>
+                                                       <width>495</width>
+                                                       <height>38</height>
+                                                       <font>font18</font>
+                                                       <aligny>center</aligny>
+                                                       <textcolor>FFFFFFFF</textcolor>
+                                                       <selectedcolor>FF0084FF</selectedcolor>
+                                                       <align>left</align>
+                                                       <info>ListItem.Label2</info>
+                                               </control>
+                                               <control type="image">
+                                                       <left>710</left>
+                                                       <top>11</top>
+                                                       <width>90</width>
+                                                       <height>17</height>
+                                                       <texture>LeftRating/rating$INFO[ListItem.ActualIcon].png</texture>
+                                               </control>
+                                       </itemlayout>
+                                       <focusedlayout width="800" height="36">
+                                               <control type="image">
+                                                       <left>0</left>
+                                                       <top>0</top>
+                                                       <width>780</width>
+                                                       <height>38</height>
+                                                       <texture>MenuItemNF.png</texture>
+                                               </control>
+                                               <control type="image">
+                                                       <left>0</left>
+                                                       <top>0</top>
+                                                       <width>780</width>
+                                                       <height>38</height>
+                                                       <texture>MenuItemFO.png</texture>
+                                                       <visible>Control.HasFocus(120)</visible>
+                                               </control>
+                                               <control type="image">
+                                                       <left>5</left>
+                                                       <top>11</top>
+                                                       <width>26</width>
+                                                       <height>17</height>
+                                                       <texture>Subtitles/flags/$INFO[ListItem.Thumb].gif</texture>
+                                               </control>
+                                               <control type="label">
+                                                       <left>40</left>
+                                                       <top>0</top>
+                                                       <width>90</width>
+                                                       <height>38</height>
+                                                       <font>font18</font>
+                                                       <aligny>center</aligny>
+                                                       <textcolor>FFFFFFFF</textcolor>
+                                                       <selectedcolor>FF0084FF</selectedcolor>
+                                                       <align>left</align>
+                                                       <info>ListItem.Label</info>
+                                               </control>
+                                               <control type="image">
+                                                       <left>135</left>
+                                                       <top>13</top>
+                                                       <width>20</width>
+                                                       <height>12</height>
+                                                       <texture>Subtitles/icon_close_caption.png</texture>
+                                                       <visible>ListItem.property(hearing_imp)</visible>
+                                               </control>
+                                               <control type="image">
+                                                       <left>160</left>
+                                                       <top>13</top>
+                                                       <width>40</width>
+                                                       <height>12</height>
+                                                       <texture>Subtitles/icon_sync.png</texture>
+                                                       <visible>ListItem.property(sync)</visible>
+                                               </control>
+                                               <control type="label">
+                                                       <left>205</left>
+                                                       <top>0</top>
+                                                       <width>495</width>
+                                                       <height>38</height>
+                                                       <font>font18</font>
+                                                       <aligny>center</aligny>
+                                                       <textcolor>FFFFFFFF</textcolor>
+                                                       <selectedcolor>FF0084FF</selectedcolor>
+                                                       <align>left</align>
+                                                       <info>ListItem.Label2</info>
+                                               </control>
+                                               <control type="image">
+                                                       <left>710</left>
+                                                       <top>11</top>
+                                                       <width>90</width>
+                                                       <height>17</height>
+                                                       <texture>LeftRating/rating$INFO[ListItem.ActualIcon].png</texture>
+                                               </control>
+                                       </focusedlayout>
+                               </control>
+                               <control type="spincontrol" id="121">
+                                       <description>Next page button</description>
+                                       <left>808</left>
+                                       <top>664</top>
+                                       <width>20</width>
+                                       <height>20</height>
+                                       <font>font13</font>
+                                       <align>right</align>
+                                       <aligny>center</aligny>
+                                       <subtype>page</subtype>
+                                       <textcolor>FFFFFFFF</textcolor>
+                                       <onleft>120</onleft>
+                                       <onright>120</onright>
+                                       <ondown>120</ondown>
+                                       <onup>120</onup>
+                                       <textoffsetx>10</textoffsetx>
+                                       <textureup>scroll-up.png</textureup>
+                                       <texturedown>scroll-down.png</texturedown>
+                                       <textureupfocus>scroll-up-focus.png</textureupfocus>
+                                       <texturedownfocus>scroll-down-focus.png</texturedownfocus>
+                                       <showonepage>false</showonepage>
+                                       <visible>Control.IsVisible(120)</visible>
+                               </control>
+                               <control type="group" id="130">
+                                       <control type="grouplist">
+                                               <left>20</left>
+                                               <top>660</top>
+                                               <width>305</width>
+                                               <height>40</height>
+                                               <align>right</align>
+                                               <orientation>horizontal</orientation>
+                                               <itemgap>5</itemgap>
+                                               <control type="image">
+                                                       <width>40</width>
+                                                       <height>40</height>
+                                                       <texture>DefaultIconInfo.png</texture>
+                                               </control>
+                                               <control type="label">
+                                                       <description>notification</description>
+                                                       <width min="10" max="260">auto</width>
+                                                       <height>40</height>
+                                                       <font>font13</font>
+                                                       <textcolor>FFFFFFFF</textcolor>
+                                                       <label>31413</label>
+                                                       <aligny>center</aligny>
+                                                       <wrapmultiline>true</wrapmultiline>
+                                               </control>
+                                       </control>
+                               </control>
+                               <control type="image">
+                                       <left>866</left>
+                                       <top>348</top>
+                                       <width>24</width>
+                                       <height>24</height>
+                                       <texture>scroll-right-focus.png</texture>
+                               </control>
+                       </control>
+                       <control type="group">
+                               <control type="image">
+                                       <description>separator</description>
+                                       <left>542</left>
+                                       <top>360</top>
+                                       <width>720</width>
+                                       <height>4</height>
+                                       <texture>separator.png</texture>
+                                       <animation effect="rotate" start="0" end="90" center="auto" time="0" condition="true">Conditional</animation>           
+                               </control>
+                               <control type="label">
+                                       <left>905</left>
+                                       <top>150</top>
+                                       <width>240</width>
+                                       <height>26</height>
+                                       <label>[B]$LOCALIZE[24018][/B]</label>
+                                       <font>font13</font>
+                                       <align>center</align>
+                                       <aligny>top</aligny>
+                                       <textcolor>FFEB9E17</textcolor>
+                                       <shadowcolor>FF000000</shadowcolor>
+                                       <wrapmultiline>true</wrapmultiline>
+                               </control>
+                               <control type="image">
+                                       <description>separator</description>
+                                       <left>900</left>
+                                       <top>176</top>
+                                       <width>240</width>
+                                       <height>4</height>
+                                       <texture>separator.png</texture>
+                               </control>
+                               <control type="list" id="150">
+                                       <left>900</left>
+                                       <top>206</top>
+                                       <width>250</width>
+                                       <height>434</height>
+                                       <onleft>120</onleft>
+                                       <onright>120</onright>
+                                       <onup>150</onup>
+                                       <ondown>150</ondown>
+                                       <viewtype label="535">list</viewtype>
+                                       <scrolltime>200</scrolltime>
+                                       <itemlayout width="400" height="36">
+                                               <control type="image">
+                                                       <left>0</left>
+                                                       <top>0</top>
+                                                       <width>230</width>
+                                                       <height>38</height>
+                                                       <texture>MenuItemNF.png</texture>
+                                               </control>
+                                               <control type="label">
+                                                       <left>40</left>
+                                                       <top>0</top>
+                                                       <width>230</width>
+                                                       <height>38</height>
+                                                       <font>font18</font>
+                                                       <aligny>center</aligny>
+                                                       <textcolor>FFFFFFFF</textcolor>
+                                                       <selectedcolor>FF0084FF</selectedcolor>
+                                                       <align>left</align>
+                                                       <info>ListItem.Label</info>
+                                               </control>
+                                       </itemlayout>
+                                       <focusedlayout width="400" height="36">
+                                               <control type="image">
+                                                       <left>0</left>
+                                                       <top>0</top>
+                                                       <width>230</width>
+                                                       <height>38</height>
+                                                       <texture>MenuItemNF.png</texture>
+                                               </control>
+                                               <control type="image">
+                                                       <left>10</left>
+                                                       <top>0</top>
+                                                       <width>230</width>
+                                                       <height>38</height>
+                                                       <texture>MenuItemFO.png</texture>
+                                                       <visible>Control.HasFocus(150)</visible>
+                                               </control>
+                                               <control type="label">
+                                                       <left>40</left>
+                                                       <top>0</top>
+                                                       <width>230</width>
+                                                       <height>38</height>
+                                                       <font>font18</font>
+                                                       <aligny>center</aligny>
+                                                       <textcolor>FFFFFFFF</textcolor>
+                                                       <selectedcolor>FF0084FF</selectedcolor>
+                                                       <align>left</align>
+                                                       <info>ListItem.Label</info>
+                                               </control>
+                                       </focusedlayout>
+                               </control>
+                       </control>
+               </control>
+       </controls>
+</window>
index cc0bcf5..2f19e82 100644 (file)
                                <control type="textbox" id="400">
                                        <description>Description Value for Movies</description>
                                        <left>210</left>
-                                       <top>515</top>
+                                       <top>525</top>
                                        <width>1030</width>
                                        <height>120</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <pagecontrol>61</pagecontrol>
index 21769fb..c847930 100644 (file)
                                                        <enable>!IsEmpty(Skin.String(LyricScript_Path))</enable>
                                                        <onclick>Addon.OpenSettings($INFO[Skin.String(LyricScript_Path)])</onclick>
                                                </control> 
-                                               <control type="label" id="457">
-                                                       <width>750</width>
-                                                       <height>45</height>
-                                                       <font>font13_title</font>
-                                                       <label>31141</label>
-                                                       <textcolor>blue</textcolor>
-                                                       <shadowcolor>black</shadowcolor>
-                                                       <align>left</align>
-                                                       <aligny>center</aligny>
-                                               </control>
-                                               <control type="button" id="458">
-                                                       <width>750</width>
-                                                       <height>40</height>
-                                                       <font>font13</font>
-                                                       <label>$LOCALIZE[31133]</label>
-                                                       <label2>[COLOR=selected]$INFO[system.addontitle(Skin.String(SubtitleScript_Path))][/COLOR]</label2>
-                                                       <textcolor>grey2</textcolor>
-                                                       <focusedcolor>white</focusedcolor>
-                                                       <texturefocus>MenuItemFO.png</texturefocus>
-                                                       <texturenofocus>MenuItemNF.png</texturenofocus>
-                                                       <onclick>Skin.SetAddon(SubtitleScript_Path,xbmc.python.subtitles)</onclick>
-                                               </control>
-                                               <control type="button" id="459">
-                                                       <width>750</width>
-                                                       <height>40</height>
-                                                       <font>font13</font>
-                                                       <label>- $LOCALIZE[24020]</label>
-                                                       <textcolor>grey2</textcolor>
-                                                       <focusedcolor>white</focusedcolor>
-                                                       <texturefocus>MenuItemFO.png</texturefocus>
-                                                       <texturenofocus>MenuItemNF.png</texturenofocus>
-                                                       <enable>!IsEmpty(Skin.String(SubtitleScript_Path))</enable>
-                                                       <onclick>Addon.OpenSettings($INFO[Skin.String(SubtitleScript_Path)])</onclick>
-                                               </control> 
 
                                                <control type="label" id="410">
                                                        <width>750</width>
index 7ffc77c..a6397fe 100644 (file)
                                <description>BER value</description>
                                <left>220</left>
                                <top>165</top>
-                               <width>1000</width>
+                               <width>165</width>
                                <height>25</height>
                                <label>$INFO[PVR.ActStreamBER]</label>
                                <align>left</align>
                        </control>
                        <control type="label">
                                <description>UNC</description>
-                               <left>430</left>
+                               <left>390</left>
                                <top>165</top>
                                <width>165</width>
                                <height>25</height>
                        </control>
                        <control type="label">
                                <description>UNC value</description>
-                               <left>600</left>
+                               <left>560</left>
                                <top>165</top>
-                               <width>1000</width>
+                               <width>165</width>
                                <height>25</height>
                                <label>$INFO[PVR.ActStreamUNC]</label>
                                <align>left</align>
                                <textcolor>white</textcolor>
                        </control>
                        <control type="label">
+                               <description>Service</description>
+                               <left>730</left>
+                               <top>165</top>
+                               <width>165</width>
+                               <height>25</height>
+                               <label>$LOCALIZE[19099]:</label>
+                               <align>left</align>
+                               <aligny>center</aligny>
+                               <font>font12</font>
+                               <textcolor>grey2</textcolor>
+                       </control>
+                       <control type="label">
+                               <description>Service value</description>
+                               <left>900</left>
+                               <top>165</top>
+                               <width>330</width>
+                               <height>25</height>
+                               <label>$INFO[PVR.ActStreamServiceName]</label>
+                               <align>left</align>
+                               <aligny>center</aligny>
+                               <font>font12</font>
+                               <textcolor>white</textcolor>
+                       </control>
+                       <control type="label">
                                <description>Encryption</description>
                                <left>50</left>
                                <top>190</top>
                                <description>Encryption value</description>
                                <left>220</left>
                                <top>190</top>
-                               <width>1000</width>
+                               <width>165</width>
                                <height>25</height>
                                <label>$INFO[PVR.ActStreamEncryptionName]</label>
                                <align>left</align>
                                <font>font12</font>
                                <textcolor>white</textcolor>
                        </control>
+                       <control type="label">
+                               <description>Provider</description>
+                               <left>390</left>
+                               <top>190</top>
+                               <width>165</width>
+                               <height>25</height>
+                               <label>$LOCALIZE[19101]:</label>
+                               <align>left</align>
+                               <aligny>center</aligny>
+                               <font>font12</font>
+                               <textcolor>grey2</textcolor>
+                       </control>
+                       <control type="label">
+                               <description>Provider value</description>
+                               <left>560</left>
+                               <top>190</top>
+                               <width>165</width>
+                               <height>25</height>
+                               <label>$INFO[PVR.ActStreamProviderName]</label>
+                               <align>left</align>
+                               <aligny>center</aligny>
+                               <font>font12</font>
+                               <textcolor>white</textcolor>
+                       </control>
+                       <control type="label">
+                               <description>Mux</description>
+                               <left>730</left>
+                               <top>190</top>
+                               <width>165</width>
+                               <height>25</height>
+                               <label>$LOCALIZE[19100]:</label>
+                               <align>left</align>
+                               <aligny>center</aligny>
+                               <font>font12</font>
+                               <textcolor>grey2</textcolor>
+                       </control>
+                       <control type="label">
+                               <description>Mux value</description>
+                               <left>900</left>
+                               <top>190</top>
+                               <width>330</width>
+                               <height>25</height>
+                               <label>$INFO[PVR.ActStreamMux]</label>
+                               <align>left</align>
+                               <aligny>center</aligny>
+                               <font>font12</font>
+                               <textcolor>white</textcolor>
+                       </control>
                </control>
        </controls>
 </window>
index cbc5c1c..e0c94d8 100644 (file)
                                <alttexturefocus border="25,5,25,5">SubMenuBack-MiddleFO.png</alttexturefocus>
                                <alttexturenofocus border="25,5,25,5">SubMenuBack-MiddleNF.png</alttexturenofocus>
                                <onclick>Close</onclick>
-                               <onclick>XBMC.RunScript($INFO[Skin.String(SubtitleScript_Path)])</onclick>
-                               <altclick>Skin.SetAddon(SubtitleScript_Path,xbmc.python.subtitles)</altclick>
-                               <altclick>Close</altclick>
-                               <altclick>XBMC.RunScript($INFO[Skin.String(SubtitleScript_Path)])</altclick>
-                               <usealttexture>IsEmpty(Skin.String(SubtitleScript_Path))</usealttexture>
-                               <pulseonselect>false</pulseonselect>
+                               <onclick>Dialog.Close(VideoOSD)</onclick>
+                               <onclick>ActivateWindow(SubtitleSearch)</onclick>
                        </control>
                        <control type="button" id="402">
                                <height>40</height>
index 51e4436..427bda8 100644 (file)
                                        <control type="textbox">
                                                <description>Description</description>
                                                <left>10</left>
-                                               <top>100</top>
+                                               <top>95</top>
                                                <width>490</width>
-                                               <height>180</height>
-                                               <font>font12</font>
+                                               <height>192</height>
+                                               <font>font13</font>
                                                <align>justify</align>
                                                <textcolor>white</textcolor>
                                                <label>$INFO[ListItem.Property(Addon.Description)]</label>
                                                <top>110</top>
                                                <width>290</width>
                                                <height>400</height>
-                                               <font>font12</font>
+                                               <font>font13</font>
                                                <align>justify</align>
                                                <textcolor>white</textcolor>
                                                <label>$INFO[ListItem.Property(Addon.Description)]</label>
index 02d63a8..ee50edc 100644 (file)
                                        <top>330</top>
                                        <width>290</width>
                                        <height>220</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
index 338bced..9a374f3 100644 (file)
                                        <left>0</left>
                                        <top>150</top>
                                        <width>850</width>
-                                       <height>140</height>
-                                       <font>font12</font>
+                                       <height>146</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <pagecontrol>-</pagecontrol>
                                        <textcolor>white</textcolor>
                                        <control type="textbox">
                                                <description>Description Value for Artist</description>
                                                <left>10</left>
-                                               <top>65</top>
+                                               <top>70</top>
                                                <width>490</width>
-                                               <height>190</height>
-                                               <font>font12</font>
+                                               <height>192</height>
+                                               <font>font13</font>
                                                <align>justify</align>
                                                <textcolor>white</textcolor>
                                                <label>$INFO[ListItem.Property(Artist_Description)]</label>
                                        <top>270</top>
                                        <width>290</width>
                                        <height>300</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <pagecontrol>-</pagecontrol>
                                        <textcolor>white</textcolor>
index ab867f5..871b160 100644 (file)
                                <control type="textbox">
                                        <description>Plot Value for TVShow</description>
                                        <left>0</left>
-                                       <top>43</top>
+                                       <top>50</top>
                                        <width>690</width>
-                                       <height>80</height>
-                                       <font>font12</font>
+                                       <height>74</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <shadowcolor>black</shadowcolor>
                                <control type="textbox">
                                        <description>Plot Value for TVShow</description>
                                        <left>0</left>
-                                       <top>43</top>
+                                       <top>50</top>
                                        <width>690</width>
-                                       <height>80</height>
-                                       <font>font12</font>
+                                       <height>74</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <shadowcolor>black</shadowcolor>
                                        <top>270</top>
                                        <width>290</width>
                                        <height>280</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[Container(13).ListItem.Plot]</label>
index dc95c5c..d4811ec 100644 (file)
                                        <left>0</left>
                                        <top>30</top>
                                        <width>850</width>
-                                       <height>120</height>
-                                       <font>font12</font>
+                                       <height>100</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
                                        <left>10</left>
                                        <top>210</top>
                                        <width>510</width>
-                                       <height>180</height>
-                                       <font>font12</font>
+                                       <height>190</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
                                        <left>10</left>
                                        <top>245</top>
                                        <width>510</width>
-                                       <height>25</height>
+                                       <height>30</height>
                                        <label>$INFO[ListItem.Season,[COLOR=blue] $LOCALIZE[20373] :[/COLOR] ] $INFO[ListItem.episode,[COLOR=blue] $LOCALIZE[20359] :[/COLOR] ] $INFO[ListItem.premiered,[COLOR=blue] $LOCALIZE[31322] :[/COLOR] ]</label>
                                        <align>center</align>
-                                       <aligny>top</aligny>
+                                       <aligny>center</aligny>
                                        <font>font12</font>
                                        <textcolor>white</textcolor>
                                        <shadowcolor>black</shadowcolor>
                                        <top>280</top>
                                        <width>510</width>
                                        <height>120</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
                                        <top>0</top>
                                        <width>250</width>
                                        <height>355</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[Container.ShowPlot]</label>
                                        <top>0</top>
                                        <width>250</width>
                                        <height>355</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
                                        <top>395</top>
                                        <width>490</width>
                                        <height>170</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
                                        <top>395</top>
                                        <width>490</width>
                                        <height>170</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
                                <control type="textbox">
                                        <description>Description Value for Video</description>
                                        <left>10</left>
-                                       <top>425</top>
+                                       <top>430</top>
                                        <width>540</width>
-                                       <height>105</height>
-                                       <font>font12</font>
+                                       <height>100</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
                                <control type="textbox">
                                        <description>Description Value for Video</description>
                                        <left>10</left>
-                                       <top>425</top>
+                                       <top>430</top>
                                        <width>540</width>
                                        <height>145</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
                                <control type="textbox">
                                        <description>Description Value for Video</description>
                                        <left>10</left>
-                                       <top>425</top>
+                                       <top>430</top>
                                        <width>540</width>
                                        <height>145</height>
-                                       <font>font12</font>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[Container.ShowPlot]</label>
                                <control type="textbox">
                                        <description>Description Value for Video</description>
                                        <left>10</left>
-                                       <top>425</top>
+                                       <top>430</top>
                                        <width>400</width>
-                                       <height>105</height>
-                                       <font>font12</font>
+                                       <height>100</height>
+                                       <font>font13</font>
                                        <align>justify</align>
                                        <textcolor>white</textcolor>
                                        <label>$INFO[ListItem.Plot]</label>
index 09e377c..038c55e 100644 (file)
@@ -30,8 +30,8 @@
                <value condition="IsEmpty(ListItem.Art(poster))">$INFO[ListItem.Icon]</value>
        </variable>
        <variable name="PlayList">
-               <value condition="Player.HasVideo">ActivateWindow(videoplaylist)</value>
-               <value condition="Player.HasAudio">ActivateWindow(musicplaylist)</value>
+               <value condition="Window.IsActive(videolibrary) + !StringCompare(Playlist.Length(video),0)">ActivateWindow(videoplaylist)</value>
+               <value condition="[Window.IsActive(musiclibrary) | Window.IsActive(musicfiles)] + !StringCompare(Playlist.Length(music),0)">ActivateWindow(musicplaylist)</value>
        </variable>
 
        <include name="BehindDialogFadeOut">
                        <include>ButtonCommonValues</include>
                        <label>13350</label>
                        <onclick>$VAR[PlayList]</onclick>
-                       <visible>Player.HasMedia</visible>
-                       <visible>!VideoPlayer.Content(LiveTV)</visible>
+                       <visible>[Window.IsActive(videolibrary) + !StringCompare(Playlist.Length(video),0)] | [[Window.IsActive(musiclibrary) | Window.IsActive(musicfiles)] + !StringCompare(Playlist.Length(music),0)]</visible>
                        <visible>!Window.IsVisible(MusicPlaylist) + !Window.IsVisible(VideoPlaylist)</visible>
                </control>
        </include>
index 62983b5..68b4180 100644 (file)
@@ -282,9 +282,7 @@ msgctxt "#31132"
 msgid "Lyrics Add-on"
 msgstr ""
 
-msgctxt "#31133"
-msgid "Subtitle Add-on"
-msgstr ""
+#empty string with id 31133
 
 msgctxt "#31134"
 msgid "Home Page Videos Sub-menu"
@@ -555,7 +553,11 @@ msgctxt "#31412"
 msgid "This tab signifies that there is a menu off to the side of this window that contains extra options for this section.  To access the menu, navigate to the left with your remote control or keyboard or place your mouse pointer over the tab. [CR][CR]Click \"Ok\" to close this dialogue. It will not appear again."
 msgstr ""
 
-#empty strings from id 31413 to 31420
+msgctxt "#31413"
+msgid "Local subtitle available"
+msgstr ""
+
+#empty strings from id 31414 to 31420
 
 msgctxt "#31421"
 msgid "Select your XBMC user Profile[CR]to login and continue"
diff --git a/addons/skin.confluence/media/Subtitles/flags/-.gif b/addons/skin.confluence/media/Subtitles/flags/-.gif
new file mode 100644 (file)
index 0000000..a14bb5a
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/-.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ar.gif b/addons/skin.confluence/media/Subtitles/flags/ar.gif
new file mode 100644 (file)
index 0000000..55463de
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/ar.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/bg.gif b/addons/skin.confluence/media/Subtitles/flags/bg.gif
new file mode 100644 (file)
index 0000000..a620896
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/bg.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/bs.gif b/addons/skin.confluence/media/Subtitles/flags/bs.gif
new file mode 100644 (file)
index 0000000..2969ce8
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/bs.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ca.gif b/addons/skin.confluence/media/Subtitles/flags/ca.gif
new file mode 100644 (file)
index 0000000..8d4124b
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/ca.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/cs.gif b/addons/skin.confluence/media/Subtitles/flags/cs.gif
new file mode 100644 (file)
index 0000000..334c528
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/cs.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/da.gif b/addons/skin.confluence/media/Subtitles/flags/da.gif
new file mode 100644 (file)
index 0000000..1d20035
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/da.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/de.gif b/addons/skin.confluence/media/Subtitles/flags/de.gif
new file mode 100644 (file)
index 0000000..4a7cff4
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/de.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/el.gif b/addons/skin.confluence/media/Subtitles/flags/el.gif
new file mode 100644 (file)
index 0000000..b20ce21
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/el.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/en.gif b/addons/skin.confluence/media/Subtitles/flags/en.gif
new file mode 100644 (file)
index 0000000..b44b08f
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/en.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/es.gif b/addons/skin.confluence/media/Subtitles/flags/es.gif
new file mode 100644 (file)
index 0000000..83c3019
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/es.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/et.gif b/addons/skin.confluence/media/Subtitles/flags/et.gif
new file mode 100644 (file)
index 0000000..95c3e98
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/et.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fa.gif b/addons/skin.confluence/media/Subtitles/flags/fa.gif
new file mode 100644 (file)
index 0000000..f1e66af
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/fa.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fi.gif b/addons/skin.confluence/media/Subtitles/flags/fi.gif
new file mode 100644 (file)
index 0000000..e3d9574
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/fi.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fo.gif b/addons/skin.confluence/media/Subtitles/flags/fo.gif
new file mode 100644 (file)
index 0000000..3301bc2
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/fo.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/fr.gif b/addons/skin.confluence/media/Subtitles/flags/fr.gif
new file mode 100644 (file)
index 0000000..75a2345
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/fr.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/gl.gif b/addons/skin.confluence/media/Subtitles/flags/gl.gif
new file mode 100644 (file)
index 0000000..686983f
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/gl.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/he.gif b/addons/skin.confluence/media/Subtitles/flags/he.gif
new file mode 100644 (file)
index 0000000..c6dc6b5
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/he.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hi.gif b/addons/skin.confluence/media/Subtitles/flags/hi.gif
new file mode 100644 (file)
index 0000000..a1c16ee
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/hi.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hr.gif b/addons/skin.confluence/media/Subtitles/flags/hr.gif
new file mode 100644 (file)
index 0000000..b4cc470
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/hr.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hu.gif b/addons/skin.confluence/media/Subtitles/flags/hu.gif
new file mode 100644 (file)
index 0000000..78a5724
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/hu.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/hy.gif b/addons/skin.confluence/media/Subtitles/flags/hy.gif
new file mode 100644 (file)
index 0000000..1ba4423
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/hy.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/id.gif b/addons/skin.confluence/media/Subtitles/flags/id.gif
new file mode 100644 (file)
index 0000000..8b288fa
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/id.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/is.gif b/addons/skin.confluence/media/Subtitles/flags/is.gif
new file mode 100644 (file)
index 0000000..23e9c6f
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/is.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/it.gif b/addons/skin.confluence/media/Subtitles/flags/it.gif
new file mode 100644 (file)
index 0000000..a6c5173
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/it.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ja.gif b/addons/skin.confluence/media/Subtitles/flags/ja.gif
new file mode 100644 (file)
index 0000000..b645bc8
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/ja.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/kk.gif b/addons/skin.confluence/media/Subtitles/flags/kk.gif
new file mode 100644 (file)
index 0000000..8ff39eb
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/kk.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ko.gif b/addons/skin.confluence/media/Subtitles/flags/ko.gif
new file mode 100644 (file)
index 0000000..fb33719
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/ko.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lb.gif b/addons/skin.confluence/media/Subtitles/flags/lb.gif
new file mode 100644 (file)
index 0000000..fe9916c
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/lb.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lt.gif b/addons/skin.confluence/media/Subtitles/flags/lt.gif
new file mode 100644 (file)
index 0000000..b92b0a6
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/lt.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/lv.gif b/addons/skin.confluence/media/Subtitles/flags/lv.gif
new file mode 100644 (file)
index 0000000..9fd8286
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/lv.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/mk.gif b/addons/skin.confluence/media/Subtitles/flags/mk.gif
new file mode 100644 (file)
index 0000000..a8320ba
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/mk.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ms.gif b/addons/skin.confluence/media/Subtitles/flags/ms.gif
new file mode 100644 (file)
index 0000000..02cf19d
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/ms.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/nl.gif b/addons/skin.confluence/media/Subtitles/flags/nl.gif
new file mode 100644 (file)
index 0000000..1469462
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/nl.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/no.gif b/addons/skin.confluence/media/Subtitles/flags/no.gif
new file mode 100644 (file)
index 0000000..dbd2cbe
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/no.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pb.gif b/addons/skin.confluence/media/Subtitles/flags/pb.gif
new file mode 100644 (file)
index 0000000..361fe5e
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/pb.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pl.gif b/addons/skin.confluence/media/Subtitles/flags/pl.gif
new file mode 100644 (file)
index 0000000..08397c1
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/pl.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/pt.gif b/addons/skin.confluence/media/Subtitles/flags/pt.gif
new file mode 100644 (file)
index 0000000..5704a0c
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/pt.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ro.gif b/addons/skin.confluence/media/Subtitles/flags/ro.gif
new file mode 100644 (file)
index 0000000..5fdc82c
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/ro.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/ru.gif b/addons/skin.confluence/media/Subtitles/flags/ru.gif
new file mode 100644 (file)
index 0000000..81c864f
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/ru.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sk.gif b/addons/skin.confluence/media/Subtitles/flags/sk.gif
new file mode 100644 (file)
index 0000000..ea8da1e
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/sk.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sl.gif b/addons/skin.confluence/media/Subtitles/flags/sl.gif
new file mode 100644 (file)
index 0000000..7401d6d
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/sl.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sq.gif b/addons/skin.confluence/media/Subtitles/flags/sq.gif
new file mode 100644 (file)
index 0000000..96be1ad
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/sq.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sr.gif b/addons/skin.confluence/media/Subtitles/flags/sr.gif
new file mode 100644 (file)
index 0000000..930f88d
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/sr.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/sv.gif b/addons/skin.confluence/media/Subtitles/flags/sv.gif
new file mode 100644 (file)
index 0000000..4096b9a
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/sv.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/tr.gif b/addons/skin.confluence/media/Subtitles/flags/tr.gif
new file mode 100644 (file)
index 0000000..7c4926e
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/tr.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/uk.gif b/addons/skin.confluence/media/Subtitles/flags/uk.gif
new file mode 100644 (file)
index 0000000..093ada8
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/uk.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/vi.gif b/addons/skin.confluence/media/Subtitles/flags/vi.gif
new file mode 100644 (file)
index 0000000..a48c113
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/vi.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/flags/zh.gif b/addons/skin.confluence/media/Subtitles/flags/zh.gif
new file mode 100644 (file)
index 0000000..d1c350b
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/flags/zh.gif differ
diff --git a/addons/skin.confluence/media/Subtitles/icon_close_caption.png b/addons/skin.confluence/media/Subtitles/icon_close_caption.png
new file mode 100644 (file)
index 0000000..e7f2539
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/icon_close_caption.png differ
diff --git a/addons/skin.confluence/media/Subtitles/icon_sync.png b/addons/skin.confluence/media/Subtitles/icon_sync.png
new file mode 100644 (file)
index 0000000..f02ef85
Binary files /dev/null and b/addons/skin.confluence/media/Subtitles/icon_sync.png differ
index 6886782..a1088af 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.json" version="6.12.0" provider-name="Team XBMC">
+<addon id="xbmc.json" version="6.13.0" provider-name="Team XBMC">
   <backwards-compatibility abi="6.0.0"/>
   <requires>
     <import addon="xbmc.core" version="0.1.0"/>
index e36d930..f54eac9 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.pvr" version="1.8.1" provider-name="Team XBMC">
+<addon id="xbmc.pvr" version="1.9.0" provider-name="Team XBMC">
   <requires>
     <import addon="xbmc.core" version="0.1.0"/>
   </requires>
index 8af09f9..3af405d 100644 (file)
@@ -2556,7 +2556,7 @@ OUTPUT_FILES="Makefile \
     xbmc/main/Makefile \
     project/cmake/xbmc-config.cmake"
 
-if $use_wayland = "yes"; then
+if test "$use_wayland" = "yes"; then
 OUTPUT_FILES="$OUTPUT_FILES xbmc/windowing/tests/wayland/Makefile"
 fi
 
index 5096061..cc9001f 100755 (executable)
@@ -5097,7 +5097,7 @@ msgstr ""
 
 #: xbmc\settings\DisplaySettings.cpp
 msgctxt "#13111"
-msgid "Would you like to keep this resolution?"
+msgid "Would you like to keep this change?"
 msgstr ""
 
 #: unknown
@@ -5151,7 +5151,11 @@ msgctxt "#13122"
 msgid "VDPAU Studio level colour conversion"
 msgstr ""
 
-#empty strings from id 13123 to 13129
+msgctxt "#13123"
+msgid "Keep skin?"
+msgstr ""
+
+#empty strings from id 13124 to 13129
 
 #: system/settings/settings.xml
 msgctxt "#13130"
@@ -5991,7 +5995,11 @@ msgctxt "#13439"
 msgid "Allow hardware acceleration (MediaCodec)"
 msgstr ""
 
-#empty strings from id 13440 to 13499
+msgctxt "#13440"
+msgid "Frame Multi Threaded Decoding (less reliable)"
+msgstr ""
+
+#empty strings from id 13441 to 13499
 
 #: system/settings/settings.xml
 msgctxt "#13500"
@@ -6945,7 +6953,7 @@ msgid "Edit title"
 msgstr ""
 
 msgctxt "#16106"
-msgid "Manage ..."
+msgid "Manage..."
 msgstr ""
 
 msgctxt "#16107"
@@ -7558,7 +7566,20 @@ msgctxt "#19098"
 msgid "Warning"
 msgstr ""
 
-#empty strings from id 19099 to 19101
+#: xbmc/pvr/PVRGUIInfo.cpp
+msgctxt "#19099"
+msgid "Service"
+msgstr ""
+
+#: xbmc/pvr/PVRGUIInfo.cpp
+msgctxt "#19100"
+msgid "Mux"
+msgstr ""
+
+#: xbmc/pvr/PVRGUIInfo.cpp
+msgctxt "#19101"
+msgid "Provider"
+msgstr ""
 
 msgctxt "#19102"
 msgid "Please switch to another channel."
@@ -10955,7 +10976,24 @@ msgctxt "#21469"
 msgid "%s to %s"
 msgstr ""
 
-#empty strings from id 21470 to 21799
+#empty strings from id 21470 to 21599
+
+#: xbmc/cores/dvdplayer/DVDPlayer.cpp
+msgctxt "#21600"
+msgid "Prefer external subtitles"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#21601"
+msgid "Prefer external subtitles to internal ones"
+msgstr ""
+
+#: xbmc/Util.cpp
+msgctxt "#21602"
+msgid "(External)"
+msgstr ""
+
+#empty strings from id 21603 to 21799
 
 msgctxt "#21800"
 msgid "File name"
@@ -11734,8 +11772,8 @@ msgctxt "#24043"
 msgid "Available Updates"
 msgstr ""
 
-#: xbmc/addons/addoninstaller.cpp
-#: xbmc/addons/Repository.cpp
+#: xbmc/addons/AddonInstaller.cpp
+#: xbmc/addons/AddonsDatabase.cpp
 msgctxt "#24044"
 msgid "Dependencies not met. Please contact Add-on author."
 msgstr ""
@@ -11760,7 +11798,10 @@ msgctxt "#24048"
 msgid "Rollback"
 msgstr ""
 
-#empty string with id 24049
+#: xbmc/addons/AddonsDirectory.cpp
+msgctxt "#24049"
+msgid "Incompatible"
+msgstr ""
 
 #: unknown
 msgctxt "#24050"
@@ -11888,7 +11929,12 @@ msgctxt "#24090"
 msgid "Lock Add-on manager"
 msgstr ""
 
-#empty strings from id 24091 to 24093
+#: xbmc\addons\GUIDialogAddonInfo.cpp
+msgctxt "#24091"
+msgid "This Add-on cannot be disabled"
+msgstr ""
+
+#empty strings from id 24092 to 24093
 
 #: xbmc/addons/guidialogaddoninfo.cpp
 msgctxt "#24094"
@@ -11940,7 +11986,67 @@ msgctxt "#24103"
 msgid "Skin is missing some files"
 msgstr ""
 
-#empty strings from id 24104 to 24999
+#: xbmc/addons/Repository.cpp
+msgctxt "#24104"
+msgid "Add-on is incompatible due to unmet dependencies."
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#24105"
+msgid "Pause when searching for subtitles"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#24106"
+msgid "If not saved to movie folder subtitles will be downloaded to custom subtitle folder"
+msgstr ""
+
+#: xbmc/dialogs/GUIDialogSubtitles.cpp 
+msgctxt "#24107"
+msgid "Searching for subtitles ..."
+msgstr ""
+
+#: xbmc/dialogs/GUIDialogSubtitles.cpp
+msgctxt "#24108"
+msgid "%d subtitles found"
+msgstr ""
+
+#: xbmc/dialogs/GUIDialogSubtitles.cpp
+msgctxt "#24109"
+msgid "No subtitles found"
+msgstr ""
+
+#: xbmc/dialogs/GUIDialogSubtitles.cpp
+msgctxt "#24110"
+msgid "Downloading subtitles ..."
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#24111"
+msgid "Languages to download subtitles for"
+msgstr ""
+
+#: system/settings/settings.xml
+msgctxt "#24112"
+msgid "Set languages to use when searching for subtitles. Not all subtitle services will use all languages."
+msgstr ""
+
+#: xbmc/dialogs/GUIDialogSubtitles.cpp
+msgctxt "#24113"
+msgid "Failed to download subtitle"
+msgstr ""
+
+#: xbmc/dialogs/GUIDialogSubtitles.cpp
+msgctxt "#24114"
+msgid "No subtitle services installed"
+msgstr ""
+
+#: system/settings/settings.xml 
+msgctxt "#24115"
+msgid "Save subtitles to movie folder"
+msgstr ""
+
+#empty strings from id 24116 to 24999
 
 msgctxt "#25000"
 msgid "Notifications"
@@ -14537,7 +14643,12 @@ msgctxt "#36422"
 msgid "Enable hardware video decode using AMLogic decoder"
 msgstr ""
 
-#empty strings from id 36423 to 36499
+#: system/settings/settings.xml
+msgctxt "#36423"
+msgid "Use ffmpeg frame multiple thread decoding when hardware decoding not working or disabled. (less reliable than default single thread mode)"
+msgstr ""
+
+#empty strings from id 36424 to 36499
 #end reservation
 
 #: system/settings/settings.xml
index 38acd26..41120be 100644 (file)
@@ -15,6 +15,7 @@
     <RootNamespace>XBMC_VDR</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
@@ -24,7 +25,6 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
@@ -35,6 +35,9 @@
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
+  </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\..\..\..\xbmc\addons\include;..\..\..\..\..\xbmc\addons;..\..\..\..\..\xbmc\cores\dvdplayer\DVDDemuxers;..\..\..\..\..\xbmc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WIN32;_DEBUG;_WINDOWS;VDR_EXPORTS;_WIN32PC;_WINSOCKAPI_;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
+      <PreprocessorDefinitions>VDR_EXPORTS;_WIN32PC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>..\..\..\..\..\addons\library.xbmc.addon\$(ProjectName).dll</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..\..\..\..\..\xbmc\addons\include;..\..\..\..\..\xbmc\addons;..\..\..\..\..\xbmc\cores\dvdplayer\DVDDemuxers;..\..\..\..\..\xbmc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;WIN32;NDEBUG;_WINDOWS;HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>..\..\..\..\..\addons\library.xbmc.addon\$(ProjectName).dll</OutputFile>
index 05b16af..67f6c38 100644 (file)
@@ -15,6 +15,7 @@
     <RootNamespace>XBMC_VDR</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
@@ -24,7 +25,6 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
@@ -35,6 +35,9 @@
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
+  </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\..\..\..\xbmc;..\..\..\..\..\xbmc\addons\include;..\..\..\..\..\xbmc\cores\dvdplayer\DVDDemuxers;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WIN32;_DEBUG;_WINDOWS;VDR_EXPORTS;_WIN32PC;_WINSOCKAPI_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
+      <PreprocessorDefinitions>VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Link>
       <OutputFile>..\..\..\..\..\addons\library.xbmc.codec\$(ProjectName).dll</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..\..\..\..\..\xbmc;..\..\..\..\..\xbmc\addons\include;..\..\..\..\..\xbmc\cores\dvdplayer\DVDDemuxers;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;WIN32;NDEBUG;_WINDOWS;HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Link>
       <OutputFile>../../../../../addons/library.xbmc.codec/$(ProjectName).dll</OutputFile>
index 65ab1d6..fa88231 100644 (file)
@@ -15,6 +15,7 @@
     <RootNamespace>XBMC_VDR</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
@@ -24,7 +25,6 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
@@ -35,6 +35,9 @@
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
+  </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\..\..\..\xbmc;..\..\..\..\..\xbmc\addons\include;..\..\..\..\..\xbmc\cores\dvdplayer\DVDDemuxers;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WIN32;_DEBUG;_WINDOWS;VDR_EXPORTS;_WIN32PC;_WINSOCKAPI_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
+      <PreprocessorDefinitions>VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>..\..\..\..\..\addons\library.xbmc.gui\$(ProjectName).dll</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..\..\..\..\..\xbmc;..\..\..\..\..\xbmc\addons\include;..\..\..\..\..\xbmc\cores\dvdplayer\DVDDemuxers;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;WIN32;NDEBUG;_WINDOWS;HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>../../../../../addons/library.xbmc.gui/$(ProjectName).dll</OutputFile>
index c669f08..b5da9b9 100644 (file)
@@ -15,6 +15,7 @@
     <RootNamespace>XBMC_VDR</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
@@ -24,7 +25,6 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
@@ -35,6 +35,9 @@
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
+  </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\..\..\..\xbmc;..\..\..\..\..\xbmc\addons\include;..\..\..\..\..\xbmc\cores\dvdplayer\DVDDemuxers;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WIN32;_DEBUG;_WINDOWS;VDR_EXPORTS;_WIN32PC;_WINSOCKAPI_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
+      <PreprocessorDefinitions>VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>..\..\..\..\..\addons\library.xbmc.pvr\$(ProjectName).dll</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..\..\..\..\..\xbmc;..\..\..\..\..\xbmc\addons\include;..\..\..\..\..\xbmc\cores\dvdplayer\DVDDemuxers;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;WIN32;NDEBUG;_WINDOWS;HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>HAS_SDL_OPENGL;HAS_SDL;_USRDLL;XBMC_VDR_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>..\..\..\..\..\addons\library.xbmc.pvr\$(ProjectName).dll</OutputFile>
index 48d3049..683d40f 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>libcmyth</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..;../include;include;../librefmem;../libcmyth;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;DEBUG;_LIB;inline=__inline; _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;inline=__inline;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>ws2_32.lib;mysqlclient.lib;%(AdditionalDependencies)</AdditionalDependencies>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..;../include;include;../librefmem;../libcmyth;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;inline=__inline; _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;inline=__inline;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>ws2_32.lib;mysqlclient.lib;%(AdditionalDependencies)</AdditionalDependencies>
index eb6cb2a..ffc1b58 100644 (file)
@@ -15,6 +15,7 @@
     <RootNamespace>cpluff</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Build</CustomBuildAfterTargets>
     <CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Build</CustomBuildAfterTargets>
   </PropertyGroup>
     <ClCompile>
       <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;CP_C_API=CP_EXPORT;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_USRDLL;CP_C_API=CP_EXPORT;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>libexpat.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <CustomBuildStep>
       <Command>copy /B /Y "$(TargetPath)" "$(SolutionDir)..\..\system\$(TargetFileName)"</Command>
       <Optimization>Full</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;CP_C_API=CP_EXPORT;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PreprocessorDefinitions>_USRDLL;CP_C_API=CP_EXPORT;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
     </ClCompile>
     <Link>
       <AdditionalDependencies>libexpat.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <CustomBuildStep>
       <Command>copy /B /Y "$(TargetPath)" "$(SolutionDir)..\..\system\$(TargetFileName)"</Command>
index c51448b..a818a90 100644 (file)
@@ -14,6 +14,7 @@
     <ProjectName>ImageLib_dll</ProjectName>
     <ProjectGuid>{3B424C94-2005-44CC-BFB1-4B6C89090732}</ProjectGuid>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">ImageLib</TargetName>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ImageLib</TargetName>
     <CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Build</CustomBuildAfterTargets>
       </HeaderFileName>
     </Midl>
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>zlib;zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_USRDLL;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Async</ExceptionHandling>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\CxImageCrtDll.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(Configuration)\vs2010\ImageLib.pdb</ProgramDatabaseFile>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(Configuration)\vs2010\cximagecrtd.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>
       </HeaderFileName>
     </Midl>
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>zlib;zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_USRDLL;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <ExceptionHandling>Async</ExceptionHandling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <BufferSecurityCheck>false</BufferSecurityCheck>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\CxImageCrtDll.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
       <ProgramDatabaseFile>$(Configuration)\vs2010\cximagecrt.pdb</ProgramDatabaseFile>
       <OptimizeReferences>true</OptimizeReferences>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(Configuration)\vs2010\cximagecrt.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
       <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
     </Link>
     <PostBuildEvent>
index 6289429..40b989c 100644 (file)
     <ProjectName>ImageLib_jasper</ProjectName>
     <ProjectGuid>{3843C3D4-E5A6-4030-87EC-E7EE57242106}</ProjectGuid>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>.\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\jasper.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
       <WarningLevel>Level2</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>.\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_LIB;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\jasper.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
       <WarningLevel>Level2</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="bmp\bmp_cod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="bmp\bmp_dec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="bmp\bmp_enc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_cm.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_debug.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_getopt.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_icc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_iccdata.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_image.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_init.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_malloc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_seq.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_stream.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_string.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_tvp.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="base\jas_version.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jp2\jp2_cod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jp2\jp2_dec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jp2\jp2_enc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_bs.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_cs.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_dec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_enc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_math.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_mct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_mqcod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_mqdec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_mqenc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_qmfb.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_t1cod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_t1dec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_t1enc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_t2cod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_t2dec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_t2enc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_tagtree.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_tsfb.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpc\jpc_util.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpg\jpg_dummy.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jpg\jpg_val.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="mif\mif_cod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pgx\pgx_cod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pgx\pgx_dec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pgx\pgx_enc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pnm\pnm_cod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pnm\pnm_dec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pnm\pnm_enc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="ras\ras_cod.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="ras\ras_dec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="ras\ras_enc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="bmp\bmp_cod.c" />
+    <ClCompile Include="bmp\bmp_dec.c" />
+    <ClCompile Include="bmp\bmp_enc.c" />
+    <ClCompile Include="base\jas_cm.c" />
+    <ClCompile Include="base\jas_debug.c" />
+    <ClCompile Include="base\jas_getopt.c" />
+    <ClCompile Include="base\jas_icc.c" />
+    <ClCompile Include="base\jas_iccdata.c" />
+    <ClCompile Include="base\jas_image.c" />
+    <ClCompile Include="base\jas_init.c" />
+    <ClCompile Include="base\jas_malloc.c" />
+    <ClCompile Include="base\jas_seq.c" />
+    <ClCompile Include="base\jas_stream.c" />
+    <ClCompile Include="base\jas_string.c" />
+    <ClCompile Include="base\jas_tvp.c" />
+    <ClCompile Include="base\jas_version.c" />
+    <ClCompile Include="jp2\jp2_cod.c" />
+    <ClCompile Include="jp2\jp2_dec.c" />
+    <ClCompile Include="jp2\jp2_enc.c" />
+    <ClCompile Include="jpc\jpc_bs.c" />
+    <ClCompile Include="jpc\jpc_cs.c" />
+    <ClCompile Include="jpc\jpc_dec.c" />
+    <ClCompile Include="jpc\jpc_enc.c" />
+    <ClCompile Include="jpc\jpc_math.c" />
+    <ClCompile Include="jpc\jpc_mct.c" />
+    <ClCompile Include="jpc\jpc_mqcod.c" />
+    <ClCompile Include="jpc\jpc_mqdec.c" />
+    <ClCompile Include="jpc\jpc_mqenc.c" />
+    <ClCompile Include="jpc\jpc_qmfb.c" />
+    <ClCompile Include="jpc\jpc_t1cod.c" />
+    <ClCompile Include="jpc\jpc_t1dec.c" />
+    <ClCompile Include="jpc\jpc_t1enc.c" />
+    <ClCompile Include="jpc\jpc_t2cod.c" />
+    <ClCompile Include="jpc\jpc_t2dec.c" />
+    <ClCompile Include="jpc\jpc_t2enc.c" />
+    <ClCompile Include="jpc\jpc_tagtree.c" />
+    <ClCompile Include="jpc\jpc_tsfb.c" />
+    <ClCompile Include="jpc\jpc_util.c" />
+    <ClCompile Include="jpg\jpg_dummy.c" />
+    <ClCompile Include="jpg\jpg_val.c" />
+    <ClCompile Include="mif\mif_cod.c" />
+    <ClCompile Include="pgx\pgx_cod.c" />
+    <ClCompile Include="pgx\pgx_dec.c" />
+    <ClCompile Include="pgx\pgx_enc.c" />
+    <ClCompile Include="pnm\pnm_cod.c" />
+    <ClCompile Include="pnm\pnm_dec.c" />
+    <ClCompile Include="pnm\pnm_enc.c" />
+    <ClCompile Include="ras\ras_cod.c" />
+    <ClCompile Include="ras\ras_dec.c" />
+    <ClCompile Include="ras\ras_enc.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="bmp\bmp_cod.h" />
index 0945360..8f068ae 100644 (file)
     <ProjectName>ImageLib_jbig</ProjectName>
     <ProjectGuid>{88E7E431-3752-4D58-BCD2-A7E6A1B74247}</ProjectGuid>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\jbig.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\jbig.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="jbig.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="jbig_tab.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="jbig.c" />
+    <ClCompile Include="jbig_tab.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="jbig.h" />
index b61b52b..dc2583c 100644 (file)
     <ProjectGuid>{145287C8-24EA-42FE-8D7D-C13D5E4B054C}</ProjectGuid>
     <Keyword>MFCProj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\jpeg.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\jpeg.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <Culture>0x0809</Culture>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="Jcapimin.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcapistd.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jccoefct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jccolor.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcdctmgr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jchuff.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcinit.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcmainct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcmarker.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcmaster.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcomapi.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcparam.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcphuff.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcprepct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jcsample.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jctrans.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdapimin.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdapistd.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdatadst.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdatasrc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdcoefct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdcolor.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jddctmgr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdhuff.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdinput.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdmainct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdmarker.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdmaster.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdmerge.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdphuff.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdpostct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdsample.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jdtrans.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jerror.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jfdctflt.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jfdctfst.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jfdctint.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jidctflt.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jidctfst.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jidctint.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jidctred.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jmemmgr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jmemnobs.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jquant1.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jquant2.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Jutils.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="Jcapimin.c" />
+    <ClCompile Include="Jcapistd.c" />
+    <ClCompile Include="Jccoefct.c" />
+    <ClCompile Include="Jccolor.c" />
+    <ClCompile Include="Jcdctmgr.c" />
+    <ClCompile Include="Jchuff.c" />
+    <ClCompile Include="Jcinit.c" />
+    <ClCompile Include="Jcmainct.c" />
+    <ClCompile Include="Jcmarker.c" />
+    <ClCompile Include="Jcmaster.c" />
+    <ClCompile Include="Jcomapi.c" />
+    <ClCompile Include="Jcparam.c" />
+    <ClCompile Include="Jcphuff.c" />
+    <ClCompile Include="Jcprepct.c" />
+    <ClCompile Include="Jcsample.c" />
+    <ClCompile Include="Jctrans.c" />
+    <ClCompile Include="Jdapimin.c" />
+    <ClCompile Include="Jdapistd.c" />
+    <ClCompile Include="Jdatadst.c" />
+    <ClCompile Include="Jdatasrc.c" />
+    <ClCompile Include="Jdcoefct.c" />
+    <ClCompile Include="Jdcolor.c" />
+    <ClCompile Include="Jddctmgr.c" />
+    <ClCompile Include="Jdhuff.c" />
+    <ClCompile Include="Jdinput.c" />
+    <ClCompile Include="Jdmainct.c" />
+    <ClCompile Include="Jdmarker.c" />
+    <ClCompile Include="Jdmaster.c" />
+    <ClCompile Include="Jdmerge.c" />
+    <ClCompile Include="Jdphuff.c" />
+    <ClCompile Include="Jdpostct.c" />
+    <ClCompile Include="Jdsample.c" />
+    <ClCompile Include="Jdtrans.c" />
+    <ClCompile Include="Jerror.c" />
+    <ClCompile Include="Jfdctflt.c" />
+    <ClCompile Include="Jfdctfst.c" />
+    <ClCompile Include="Jfdctint.c" />
+    <ClCompile Include="Jidctflt.c" />
+    <ClCompile Include="Jidctfst.c" />
+    <ClCompile Include="Jidctint.c" />
+    <ClCompile Include="Jidctred.c" />
+    <ClCompile Include="Jmemmgr.c" />
+    <ClCompile Include="Jmemnobs.c" />
+    <ClCompile Include="Jquant1.c" />
+    <ClCompile Include="Jquant2.c" />
+    <ClCompile Include="Jutils.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Jchuff.h" />
index 4b68c3b..40d64d4 100644 (file)
     <ProjectGuid>{783701E9-4A65-4505-97B0-39E580AA680D}</ProjectGuid>
     <Keyword>MFCProj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\mng.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>..\zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\mng.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="libmng_callback_xs.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_chunk_descr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_chunk_io.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_chunk_prc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_chunk_xs.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_cms.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_display.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_dither.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_error.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_filter.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_hlapi.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_jpeg.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_object_prc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_pixels.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_prop_xs.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_read.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_trace.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_write.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="libmng_zlib.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;MNG_SUPPORT_DISPLAY;MNG_SUPPORT_READ;MNG_SUPPORT_WRITE;MNG_ACCESS_CHUNKS;MNG_STORE_CHUNKS;_CRT_SECURE_NO_DEPRECATE;MNG_ERROR_TELLTALE</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="libmng_callback_xs.c" />
+    <ClCompile Include="libmng_chunk_descr.c" />
+    <ClCompile Include="libmng_chunk_io.c" />
+    <ClCompile Include="libmng_chunk_prc.c" />
+    <ClCompile Include="libmng_chunk_xs.c" />
+    <ClCompile Include="libmng_cms.c" />
+    <ClCompile Include="libmng_display.c" />
+    <ClCompile Include="libmng_dither.c" />
+    <ClCompile Include="libmng_error.c" />
+    <ClCompile Include="libmng_filter.c" />
+    <ClCompile Include="libmng_hlapi.c" />
+    <ClCompile Include="libmng_jpeg.c" />
+    <ClCompile Include="libmng_object_prc.c" />
+    <ClCompile Include="libmng_pixels.c" />
+    <ClCompile Include="libmng_prop_xs.c" />
+    <ClCompile Include="libmng_read.c" />
+    <ClCompile Include="libmng_trace.c" />
+    <ClCompile Include="libmng_write.c" />
+    <ClCompile Include="libmng_zlib.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="libmng_chunk_descr.h" />
index 74eafec..4e43758 100644 (file)
     <ProjectGuid>{44BF83C4-F73A-4093-A29A-11B9016318C4}</ProjectGuid>
     <Keyword>MFCProj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\zlib;..\zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\png.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>..\zlib;..\zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\png.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <Culture>0x0809</Culture>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="png.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngerror.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngget.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngmem.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngpread.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngread.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngrio.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngrtran.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngrutil.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngset.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngtrans.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngvcrd.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngwio.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngwrite.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngwtran.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="pngwutil.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="png.c" />
+    <ClCompile Include="pngerror.c" />
+    <ClCompile Include="pngget.c" />
+    <ClCompile Include="pngmem.c" />
+    <ClCompile Include="pngpread.c" />
+    <ClCompile Include="pngread.c" />
+    <ClCompile Include="pngrio.c" />
+    <ClCompile Include="pngrtran.c" />
+    <ClCompile Include="pngrutil.c" />
+    <ClCompile Include="pngset.c" />
+    <ClCompile Include="pngtrans.c" />
+    <ClCompile Include="pngvcrd.c" />
+    <ClCompile Include="pngwio.c" />
+    <ClCompile Include="pngwrite.c" />
+    <ClCompile Include="pngwtran.c" />
+    <ClCompile Include="pngwutil.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="png.h" />
index 7230567..aa3d927 100644 (file)
     <ProjectName>ImageLib_libdcr</ProjectName>
     <ProjectGuid>{8E5F7DBE-2E8B-4FD2-BFFE-1960CE7EDC09}</ProjectGuid>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\libdcr.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\libdcr.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="libdcr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="libdcr.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="libdcr.h" />
index 9e7195b..23663f9 100644 (file)
     <ProjectGuid>{8735F1ED-317D-4F7A-A512-B2BF9DAEA25A}</ProjectGuid>
     <Keyword>MFCProj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\zlib;..\zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\Tiff.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
       <CompileAs>Default</CompileAs>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>..\zlib;..\zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\Tiff.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
       <CompileAs>Default</CompileAs>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="fax3sm_winnt.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_aux.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_close.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_codec.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_compress.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_dir.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_dirinfo.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_dirread.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_dirwrite.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_dumpmode.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_error.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_fax3.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_flush.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_getimage.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_jpeg.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_luv.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_lzw.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_next.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_ojpeg.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_open.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_packbits.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_pixarlog.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_predict.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_print.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_read.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_strip.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_swab.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_thunder.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_tile.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_version.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_warning.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_write.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="tif_zip.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="fax3sm_winnt.c" />
+    <ClCompile Include="tif_aux.c" />
+    <ClCompile Include="tif_close.c" />
+    <ClCompile Include="tif_codec.c" />
+    <ClCompile Include="tif_compress.c" />
+    <ClCompile Include="tif_dir.c" />
+    <ClCompile Include="tif_dirinfo.c" />
+    <ClCompile Include="tif_dirread.c" />
+    <ClCompile Include="tif_dirwrite.c" />
+    <ClCompile Include="tif_dumpmode.c" />
+    <ClCompile Include="tif_error.c" />
+    <ClCompile Include="tif_fax3.c" />
+    <ClCompile Include="tif_flush.c" />
+    <ClCompile Include="tif_getimage.c" />
+    <ClCompile Include="tif_jpeg.c" />
+    <ClCompile Include="tif_luv.c" />
+    <ClCompile Include="tif_lzw.c" />
+    <ClCompile Include="tif_next.c" />
+    <ClCompile Include="tif_ojpeg.c" />
+    <ClCompile Include="tif_open.c" />
+    <ClCompile Include="tif_packbits.c" />
+    <ClCompile Include="tif_pixarlog.c" />
+    <ClCompile Include="tif_predict.c" />
+    <ClCompile Include="tif_print.c" />
+    <ClCompile Include="tif_read.c" />
+    <ClCompile Include="tif_strip.c" />
+    <ClCompile Include="tif_swab.c" />
+    <ClCompile Include="tif_thunder.c" />
+    <ClCompile Include="tif_tile.c" />
+    <ClCompile Include="tif_version.c" />
+    <ClCompile Include="tif_warning.c" />
+    <ClCompile Include="tif_write.c" />
+    <ClCompile Include="tif_zip.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="t4.h" />
index 2cf8236..988089b 100644 (file)
     <RootNamespace>ImageLib_zlib</RootNamespace>
     <Keyword>MFCProj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\zlib.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>..\zlib\win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\zlib.pch</PrecompiledHeaderOutputFile>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <Culture>0x0809</Culture>
     </ResourceCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="adler32.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="compress.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="crc32.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="deflate.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="gzio.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="infback.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="inffast.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="inflate.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="inftrees.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="trees.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="uncompr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="zutil.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="adler32.c" />
+    <ClCompile Include="compress.c" />
+    <ClCompile Include="crc32.c" />
+    <ClCompile Include="deflate.c" />
+    <ClCompile Include="gzio.c" />
+    <ClCompile Include="infback.c" />
+    <ClCompile Include="inffast.c" />
+    <ClCompile Include="inflate.c" />
+    <ClCompile Include="inftrees.c" />
+    <ClCompile Include="trees.c" />
+    <ClCompile Include="uncompr.c" />
+    <ClCompile Include="zutil.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="crc32.h" />
index c37e53c..2885329 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>libenca_win32</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
       <AdditionalIncludeDirectories>.\;..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <PreprocessorDefinitions>_LIB;HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
index 5237988..3629f19 100644 (file)
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
index 1ce9eb7..c2a2711 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?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">
@@ -14,6 +14,7 @@
     <ProjectGuid>{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}</ProjectGuid>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
@@ -34,6 +35,9 @@
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
+  </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_HAS_ITERATOR_DEBUGGING=0;NOMINMAX;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;NOMINMAX;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
     </ClCompile>
     <Lib>
       <OutputFile>$(TargetPath)</OutputFile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_HAS_ITERATOR_DEBUGGING=0;NOMINMAX;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;NOMINMAX;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Lib>
       <OutputFile>$(TargetPath)</OutputFile>
@@ -84,4 +79,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>
\ No newline at end of file
index 1e69337..c13b8f7 100644 (file)
@@ -14,6 +14,7 @@
     <ProjectGuid>{DD4818AE-7E35-40B7-A6A0-0FF83AA1C916}</ProjectGuid>
     <Keyword>XboxProj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_DEBUG;_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <SmallerTypeCheck>true</SmallerTypeCheck>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
+      <SmallerTypeCheck>true</SmallerTypeCheck>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <PreprocessorDefinitions>NDEBUG;_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>false</StringPooling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
index 29102da..e95352c 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>libXDAAP</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetFileName)</OutputFile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <BufferSecurityCheck>false</BufferSecurityCheck>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetFileName)</OutputFile>
index 09204bc..3eaae7c 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>libexif_dll</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release (DLL)|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (DLL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DLL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug (DLL)|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug (DLL)|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug (DLL)|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release (DLL)|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release (DLL)|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release (DLL)|Win32'">false</LinkIncremental>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Release (DLL)|Win32'">libexif</TargetName>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug (DLL)|Win32'">libexif</TargetName>
     <CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Release (DLL)|Win32'">Build</CustomBuildAfterTargets>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DLL)|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_DLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
       <ImportLibrary>$(TargetName).lib</ImportLibrary>
     </Link>
     <CustomBuildStep>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release (DLL)|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_DLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_DLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
-      <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>
index 9fe835c..9a9e26a 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>hdhomerun</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(ProjectName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(ProjectName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(ProjectName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_USRDLL;DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
       <CompileAs>CompileAsCpp</CompileAs>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <ExceptionHandling>Sync</ExceptionHandling>
     </ClCompile>
     <Link>
       <AdditionalDependencies>ws2_32.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
       <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <CustomBuildStep>
       <Command>copy /B /Y "$(TargetPath)" "$(SolutionDir)..\..\system\$(TargetFileName)"</Command>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_USRDLL;DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <CompileAs>CompileAsCpp</CompileAs>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
     </ClCompile>
     <Link>
       <AdditionalDependencies>ws2_32.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
       <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <CustomBuildStep>
       <Command>copy /B /Y "$(TargetPath)" "$(SolutionDir)..\..\system\$(TargetFileName)"</Command>
index d53006c..9efa555 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>libhts</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Lib>
       <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
       <AdditionalIncludeDirectories>$(ProjectDir)include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>
       </ExceptionHandling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Lib>
       <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
index 21bf917..ab43872 100644 (file)
@@ -15,6 +15,7 @@
     <ProjectGuid>{AF6C8945-5DDC-4F62-A48C-86B11B7ED996}</ProjectGuid>
     <RootNamespace>libmad_dll</RootNamespace>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FPM_DEFAULT;_LIB;HAVE_CONFIG_H;ASO_ZEROCHECK;WIN32;_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>FPM_DEFAULT;_LIB;HAVE_CONFIG_H;ASO_ZEROCHECK;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\libmad.pch</PrecompiledHeaderOutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <MinimalRebuild>true</MinimalRebuild>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FPM_INTEL;_LIB;HAVE_CONFIG_H;ASO_ZEROCHECK;WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>FPM_INTEL;_LIB;HAVE_CONFIG_H;ASO_ZEROCHECK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeaderOutputFile>$(Configuration)\vs2010\libmad.pch</PrecompiledHeaderOutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(TargetName).lib</ImportLibrary>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
     </Link>
     <PostBuildEvent>
       <Command>
     </CustomBuildStep>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="..\bit.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\decoder.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\fixed.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\frame.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\huffman.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\layer12.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\layer3.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\stream.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\synth.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\timer.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\version.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="..\bit.c" />
+    <ClCompile Include="..\decoder.c" />
+    <ClCompile Include="..\fixed.c" />
+    <ClCompile Include="..\frame.c" />
+    <ClCompile Include="..\huffman.c" />
+    <ClCompile Include="..\layer12.c" />
+    <ClCompile Include="..\layer3.c" />
+    <ClCompile Include="..\stream.c" />
+    <ClCompile Include="..\synth.c" />
+    <ClCompile Include="..\timer.c" />
+    <ClCompile Include="..\version.c" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\bit.h" />
index 2b164fa..8e83c4e 100644 (file)
@@ -15,6 +15,7 @@
     <RootNamespace>libmodplug_2008</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)\libmodplug;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;MSC_VER;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <AdditionalIncludeDirectories>$(ProjectDir)\src;$(ProjectDir)\src\libmodplug;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;MSC_VER=_MSC_VER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeTypeInfo>false</RuntimeTypeInfo>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)\libmodplug;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;MSC_VER;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <AdditionalIncludeDirectories>$(ProjectDir)\src;$(ProjectDir)\src\libmodplug;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;MSC_VER=_MSC_VER;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeTypeInfo>false</RuntimeTypeInfo>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
     </ClCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <ModuleDefinitionFile>libmodplug.def</ModuleDefinitionFile>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\system\players\paplayer\$(TargetFileName)"</Command>
     <ClCompile Include="src\sndmix.cpp" />
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="src\libmodplug\it_defs.h" />
+    <ClInclude Include="src\libmodplug\sndfile.h" />
+    <ClInclude Include="src\libmodplug\stdafx.h" />
     <ClInclude Include="src\load_pat.h" />
     <ClInclude Include="src\modplug.h" />
     <ClInclude Include="src\tables.h" />
diff --git a/lib/libmodplug/libmodplug_2010.vcxproj.filters b/lib/libmodplug/libmodplug_2010.vcxproj.filters
new file mode 100644 (file)
index 0000000..7d77de2
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="src\fastmix.cpp" />
+    <ClCompile Include="src\load_669.cpp" />
+    <ClCompile Include="src\load_abc.cpp" />
+    <ClCompile Include="src\load_amf.cpp" />
+    <ClCompile Include="src\load_ams.cpp" />
+    <ClCompile Include="src\load_dbm.cpp" />
+    <ClCompile Include="src\load_dmf.cpp" />
+    <ClCompile Include="src\load_dsm.cpp" />
+    <ClCompile Include="src\load_far.cpp" />
+    <ClCompile Include="src\load_it.cpp" />
+    <ClCompile Include="src\load_j2b.cpp" />
+    <ClCompile Include="src\load_mdl.cpp" />
+    <ClCompile Include="src\load_med.cpp" />
+    <ClCompile Include="src\load_mid.cpp" />
+    <ClCompile Include="src\load_mod.cpp" />
+    <ClCompile Include="src\load_mt2.cpp" />
+    <ClCompile Include="src\load_mtm.cpp" />
+    <ClCompile Include="src\load_okt.cpp" />
+    <ClCompile Include="src\load_pat.cpp" />
+    <ClCompile Include="src\load_psm.cpp" />
+    <ClCompile Include="src\load_ptm.cpp" />
+    <ClCompile Include="src\load_s3m.cpp" />
+    <ClCompile Include="src\load_stm.cpp" />
+    <ClCompile Include="src\load_ult.cpp" />
+    <ClCompile Include="src\load_umx.cpp" />
+    <ClCompile Include="src\load_wav.cpp" />
+    <ClCompile Include="src\load_xm.cpp" />
+    <ClCompile Include="src\mmcmp.cpp" />
+    <ClCompile Include="src\modplug.cpp" />
+    <ClCompile Include="src\snd_dsp.cpp" />
+    <ClCompile Include="src\snd_flt.cpp" />
+    <ClCompile Include="src\snd_fx.cpp" />
+    <ClCompile Include="src\sndfile.cpp" />
+    <ClCompile Include="src\sndmix.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\load_pat.h" />
+    <ClInclude Include="src\modplug.h" />
+    <ClInclude Include="src\tables.h" />
+    <ClInclude Include="src\libmodplug\it_defs.h">
+      <Filter>Headers</Filter>
+    </ClInclude>
+    <ClInclude Include="src\libmodplug\sndfile.h">
+      <Filter>Headers</Filter>
+    </ClInclude>
+    <ClInclude Include="src\libmodplug\stdafx.h">
+      <Filter>Headers</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="libmodplug.def" />
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="Headers">
+      <UniqueIdentifier>{5de0bc09-eb6a-4d23-98ec-4856dbb232a7}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
index 5e53ca4..1f021ae 100644 (file)
     <ProjectGuid>{FB3AB83A-C37A-4636-87FD-827F8506A8FC}</ProjectGuid>
     <RootNamespace>libsidplay</RootNamespace>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>NotSet</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
       </HeaderFileName>
     </Midl>
     <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>../../../builders/resid-builder/include/sidplay/builders;../../include;../../include/sidplay;../../../resid;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>DLL_EXPORT;HAVE_MSWINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <ExceptionHandling>Sync</ExceptionHandling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <PrecompiledHeaderOutputFile>$(OutDir)libsidplay.pch</PrecompiledHeaderOutputFile>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
       <DisableSpecificWarnings>4231;4355;4910;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
     </ClCompile>
     <ResourceCompile>
     </ResourceCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
       <ProgramDatabaseFile>.\Release/libsidplay2.pdb</ProgramDatabaseFile>
-      <SubSystem>NotSet</SubSystem>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
-      <NoEntryPoint>false</NoEntryPoint>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)libsidplay2.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>
       </HeaderFileName>
     </Midl>
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>../../../builders/resid-builder/include/sidplay/builders;../../include;../../include/sidplay;../../../resid;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>DLL_EXPORT;HAVE_MSWINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <PrecompiledHeaderOutputFile>$(OutDir)libsidplay.pch</PrecompiledHeaderOutputFile>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4231;4355;4910;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <MinimalRebuild>true</MinimalRebuild>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <ExceptionHandling>Sync</ExceptionHandling>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ResourceCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>.\Debug/libsidplay2.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)libsidplay2.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>
     <ClInclude Include="..\..\include\sidplay\sidusage.h" />
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="..\..\src\mos6510\mos6510.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\mos6526\mos6526.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\mos656x\mos656x.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\sid6526\sid6526.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\sidtune\IconInfo.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\sidtune\InfoFile.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\sidtune\MUS.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="..\..\src\mos6510\mos6510.cpp" />
+    <ClCompile Include="..\..\src\mos6526\mos6526.cpp" />
+    <ClCompile Include="..\..\src\mos656x\mos656x.cpp" />
+    <ClCompile Include="..\..\src\sid6526\sid6526.cpp" />
+    <ClCompile Include="..\..\src\sidtune\IconInfo.cpp" />
+    <ClCompile Include="..\..\src\sidtune\InfoFile.cpp" />
+    <ClCompile Include="..\..\src\sidtune\MUS.cpp" />
     <ClCompile Include="..\..\src\sidtune\p00.cpp" />
-    <ClCompile Include="..\..\src\sidtune\PP20.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\sidtune\PRG.CPP">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\sidtune\PSID.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\sidtune\SidTune.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\sidtune\SidTuneTools.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\xsid\xsid.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\config.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="..\..\src\sidtune\PP20.cpp" />
+    <ClCompile Include="..\..\src\sidtune\PRG.CPP" />
+    <ClCompile Include="..\..\src\sidtune\PSID.cpp" />
+    <ClCompile Include="..\..\src\sidtune\SidTune.cpp" />
+    <ClCompile Include="..\..\src\sidtune\SidTuneTools.cpp" />
+    <ClCompile Include="..\..\src\xsid\xsid.cpp" />
+    <ClCompile Include="..\..\src\config.cpp" />
     <ClCompile Include="..\..\..\resid\envelope.cc" />
-    <ClCompile Include="..\..\src\event.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="..\..\src\event.cpp" />
     <ClCompile Include="..\..\..\resid\extfilt.cc" />
     <ClCompile Include="..\..\..\resid\filter.cc" />
-    <ClCompile Include="..\..\src\mixer.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\player.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="..\..\src\mixer.cpp" />
+    <ClCompile Include="..\..\src\player.cpp" />
     <ClCompile Include="..\..\..\resid\pot.cc" />
-    <ClCompile Include="..\..\src\psiddrv.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\reloc65.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="..\..\src\psiddrv.cpp" />
+    <ClCompile Include="..\..\src\reloc65.c" />
     <ClCompile Include="..\..\..\builders\resid-builder\src\resid-builder.cpp" />
     <ClCompile Include="..\..\..\builders\resid-builder\src\resid.cpp" />
     <ClCompile Include="..\..\..\resid\sid.cc" />
-    <ClCompile Include="..\..\src\sidplay2.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;_WINDOWS;DLL_EXPORT;HAVE_MSWINDOWS</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="..\..\src\sidplay2.cpp" />
     <ClCompile Include="..\..\..\resid\version.cc" />
     <ClCompile Include="..\..\..\resid\voice.cc" />
     <ClCompile Include="..\..\..\resid\wave.cc" />
index 56cd4c7..dfcecbc 100644 (file)
@@ -15,6 +15,7 @@
     <ProjectGuid>{6A8518C3-D81A-4428-BD7F-C37933088AC1}</ProjectGuid>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;SQUISH_USE_SSE=2;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <PreprocessorDefinitions>_LIB;SQUISH_USE_SSE=2;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>Level4</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
       <AdditionalIncludeDirectories>..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;SQUISH_USE_SSE=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <PreprocessorDefinitions>_LIB;SQUISH_USE_SSE=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>Level4</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <Optimization>Full</Optimization>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
index fb2b90d..6514456 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>NoseFartXBMC</RootNamespace>
     <Keyword>ManagedCProj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <PreprocessorDefinitions>WIN32;_DEBUG;LITTLE_ENDIAN;NSF_PLAYER;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <DisableLanguageExtensions>false</DisableLanguageExtensions>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>LITTLE_ENDIAN;NSF_PLAYER;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AssemblyDebug>true</AssemblyDebug>
       <ProgramDatabaseFile>$(TargetName).pdb</ProgramDatabaseFile>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>WIN32;NDEBUG;LITTLE_ENDIAN;NSF_PLAYER;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>false</MinimalRebuild>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>LITTLE_ENDIAN;NSF_PLAYER;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </ClCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(TargetName).pdb</ProgramDatabaseFile>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
index 3ea8222..14c5d12 100644 (file)
@@ -15,6 +15,7 @@
     <ProjectGuid>{D9885434-4B9D-41FB-B5FC-5E89D41AEFF0}</ProjectGuid>
     <RootNamespace>libStSoundLibrary_dll</RootNamespace>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>
       </AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4018;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <Optimization>MaxSpeed</Optimization>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>
       </AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeader>
       </PrecompiledHeader>
       <AssemblerListingLocation>$(Configuration)\vs2010\</AssemblerListingLocation>
       <ObjectFileName>$(Configuration)\vs2010\</ObjectFileName>
       <ProgramDataBaseFileName>$(Configuration)\vs2010\</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
       <DisableSpecificWarnings>4018;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     </CustomBuildStep>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="Depacker.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="digidrum.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="Depacker.cpp" />
+    <ClCompile Include="digidrum.cpp" />
     <ClCompile Include="XBMCYM.cpp" />
-    <ClCompile Include="Ym2149Ex.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="Ymload.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="YmMusic.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="YmUserInterface.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="LZH\LZHXLIB.C">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
+    <ClCompile Include="Ym2149Ex.cpp" />
+    <ClCompile Include="Ymload.cpp" />
+    <ClCompile Include="YmMusic.cpp" />
+    <ClCompile Include="YmUserInterface.cpp" />
+    <ClCompile Include="LZH\LZHXLIB.C" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="LZH\LZH.H" />
index e7fca4d..9ac576e 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>libvgmstream_dll</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\ext_includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;WIN32_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PreprocessorDefinitions>_USRDLL;WIN32_EXPORTS;_CRT_SECURE_NO_WARNINGS;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4267;4018;4244;4312;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)\$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
       <IgnoreSpecificDefaultLibraries>
       </IgnoreSpecificDefaultLibraries>
     </Link>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..\ext_includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN32_EXPORTS;_CRT_SECURE_NO_WARNINGS;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PreprocessorDefinitions>_USRDLL;WIN32_EXPORTS;_CRT_SECURE_NO_WARNINGS;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4267;4018;4244;4312;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
     </ClCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)\$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
     </Link>
     <PostBuildEvent>
       <Command>
index 960c2d5..2ebf6f5 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>libadpcm_dll</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4244;4267;4311;4312;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <ResourceCompile>
       <ResourceOutputFileName>
     </ResourceCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>adpcm.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4244;4267;4311;4312;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <Optimization>Full</Optimization>
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <WholeProgramOptimization>true</WholeProgramOptimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
     </ClCompile>
     <ResourceCompile>
       <ResourceOutputFileName>
     </ResourceCompile>
     <Link>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <ProfileGuidedDatabase>
       </ProfileGuidedDatabase>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(TargetName).lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
     </Link>
     <PostBuildEvent>
       <Command>
index 2c83d0a..0c9e452 100644 (file)
@@ -23,6 +23,7 @@
     <RootNamespace>UnrarXLib</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">
     <ClCompile>
       <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Full</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
       <AdditionalIncludeDirectories>..\..\xbmc;..\..\xbmc\win32\;</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;NOMINMAX;NDEBUG;WIN32;_LIB;_XBMC;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>NOMINMAX;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>rar.hpp</PrecompiledHeaderFile>
       <PrecompiledHeaderOutputFile>$(OutDir)$(ProjectName).pch</PrecompiledHeaderOutputFile>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
       <DisableSpecificWarnings>4800;4018;4146;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
     </ClCompile>
     <Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\xbmc;..\..\xbmc\win32\;</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;NOMINMAX;WIN32;_DEBUG;_LIB;_XBMC;_USE_32BIT_TIME_T;HAS_DX;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <MinimalRebuild>false</MinimalRebuild>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>NOMINMAX;_LIB;_USE_32BIT_TIME_T;HAS_DX;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>rar.hpp</PrecompiledHeaderFile>
       <PrecompiledHeaderOutputFile>$(OutDir)$(ProjectName).pch</PrecompiledHeaderOutputFile>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4800;4018;4146;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
     </ClCompile>
     <Lib>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">
     <ClCompile>
       <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Full</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
       <AdditionalIncludeDirectories>..\..\xbmc;..\..\xbmc\win32\;</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;NOMINMAX;NDEBUG;WIN32;_LIB;_XBMC;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>NOMINMAX;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>rar.hpp</PrecompiledHeaderFile>
       <PrecompiledHeaderOutputFile>$(OutDir)$(ProjectName).pch</PrecompiledHeaderOutputFile>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
       <DisableSpecificWarnings>4800;4018;4146;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(ProjectName).lib</OutputFile>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\xbmc;..\..\xbmc\win32\;</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;NOMINMAX;WIN32;_DEBUG;_LIB;_XBMC;_USE_32BIT_TIME_T;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <MinimalRebuild>false</MinimalRebuild>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>NOMINMAX;_LIB;_USE_32BIT_TIME_T;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>rar.hpp</PrecompiledHeaderFile>
       <PrecompiledHeaderOutputFile>$(OutDir)$(ProjectName).pch</PrecompiledHeaderOutputFile>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4800;4018;4146;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
     </ClCompile>
     <Lib>
diff --git a/project/VS2010Express/XBMC for Windows.props b/project/VS2010Express/XBMC for Windows.props
deleted file mode 100644 (file)
index 0a9eae4..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ImportGroup Label="PropertySheets" />
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <IncludePath>$(SolutionDir)\..\BuildDependencies\include;$(SolutionDir)\..\BuildDependencies\include\python;$(IncludePath)</IncludePath>
-  </PropertyGroup>
-  <PropertyGroup>
-    <LibraryPath>$(SolutionDir)\..\BuildDependencies\lib;$(LibraryPath)</LibraryPath>
-    <ExecutablePath>$(SolutionDir)\..\..\tools\win32buildtools;$(ExecutablePath)</ExecutablePath>
-  </PropertyGroup>
-  <ItemDefinitionGroup />
-  <ItemGroup />
-</Project>
diff --git a/project/VS2010Express/XBMC.core-defaults.props b/project/VS2010Express/XBMC.core-defaults.props
new file mode 100644 (file)
index 0000000..4b49fb0
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ImportGroup Label="PropertySheets" />
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Label="Configuration">
+    <UseOfMfc>false</UseOfMfc>
+    <UseOfAtl>false</UseOfAtl>
+    <PlatformToolset>v100</PlatformToolset>
+  </PropertyGroup>
+</Project>
diff --git a/project/VS2010Express/XBMC.defaults.props b/project/VS2010Express/XBMC.defaults.props
new file mode 100644 (file)
index 0000000..b0c8bd9
--- /dev/null
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ImportGroup Label="PropertySheets" />
+  <PropertyGroup Label="UserMacros" />
+
+  <!-- Common configuration settings -->
+  <PropertyGroup>
+    <IncludePath>$(SolutionDir)\..\BuildDependencies\include;$(SolutionDir)\..\BuildDependencies\include\python;$(IncludePath)</IncludePath>
+    <LibraryPath>$(SolutionDir)\..\BuildDependencies\lib;$(LibraryPath)</LibraryPath>
+    <ExecutablePath>$(SolutionDir)\..\..\tools\win32buildtools;$(ExecutablePath)</ExecutablePath>
+    <LocalDebuggerEnvironment>XBMC_HOME=$(SolutionDir)..\..&#xD;&#xA;PATH=$(SolutionDir)..\Win32BuildSetup\dependencies;%PATH%</LocalDebuggerEnvironment>
+  </PropertyGroup>
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <MinimalRebuild>false</MinimalRebuild>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <WarningLevel>Level3</WarningLevel>
+      <ShowIncludes>false</ShowIncludes>
+      <BrowseInformation>false</BrowseInformation>
+      <ErrorReporting>Queue</ErrorReporting>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <LargeAddressAware>true</LargeAddressAware>
+      <TargetMachine>MachineX86</TargetMachine>
+      <LinkErrorReporting>QueueForNextLogin</LinkErrorReporting>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <!-- "Debug" specific settings -->
+  <PropertyGroup Condition="'$(UseDebugLibraries)'=='true'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(UseDebugLibraries)'=='true'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <OmitFramePointers>false</OmitFramePointers>
+      <PreprocessorDefinitions>_DEBUG;TARGET_WINDOWS;_WINDOWS;WIN32;_XBMC;_WIN32_WINNT=0x0600;NTDDI_VERSION=0x06000000;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary Condition="'$(ConfigurationType)'=='Application'">MultiThreadedDebug</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(ConfigurationType)'=='StaticLibrary'">MultiThreadedDebug</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(ConfigurationType)'=='DynamicLibrary'">MultiThreadedDebugDLL</RuntimeLibrary>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+
+  <!-- "Release" specific settings -->
+  <PropertyGroup Condition="'$(UseDebugLibraries)'!='true'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(UseDebugLibraries)'!='true'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <OmitFramePointers>true</OmitFramePointers>
+      <PreprocessorDefinitions>NDEBUG;TARGET_WINDOWS;_WINDOWS;WIN32;_XBMC;_WIN32_WINNT=0x0600;NTDDI_VERSION=0x06000000;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary Condition="'$(ConfigurationType)'=='Application'">MultiThreaded</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(ConfigurationType)'=='StaticLibrary'">MultiThreaded</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(ConfigurationType)'=='DynamicLibrary'">MultiThreadedDLL</RuntimeLibrary>
+      <BufferSecurityCheck>false</BufferSecurityCheck>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+    </ClCompile>
+    <Link>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+    </Link>
+    <Lib Condition="'$(ConfigurationType)'=='StaticLibrary'">
+      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemGroup />
+</Project>
index 9383203..a763009 100644 (file)
@@ -31,6 +31,7 @@
     <RootNamespace>XBMC_PC</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
-  <PropertyGroup>
-    <LocalDebuggerEnvironment>XBMC_HOME=$(SolutionDir)..\..&#xD;&#xA;PATH=$(SolutionDir)..\Win32BuildSetup\dependencies;%PATH%</LocalDebuggerEnvironment>
-  </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">XBMC\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">XBMC\$(Configuration)\objs\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">false</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">XBMC\$(Configuration)\</OutDir>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'">XBMC\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">XBMC\$(Configuration)\objs\</IntDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'">XBMC\$(Configuration)\objs\</IntDir>
-    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">false</IgnoreImportLibrary>
-    <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'">false</IgnoreImportLibrary>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</LinkIncremental>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">XBMC\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">XBMC\$(Configuration)\objs\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">false</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">XBMC\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">XBMC\$(Configuration)\objs\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">true</LinkIncremental>
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'">$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">
     <ClCompile>
       <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
       <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\ffmpeg;..\..\lib\ffmpeg\include-xbmc-win32;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WINDOWS;_MSVC;WIN32;NDEBUG;_WIN32_WINNT=0x0600;NTDDI_VERSION=0x06000000;NOMINMAX;_USE_32BIT_TIME_T;HAS_GL;__STDC_CONSTANT_MACROS;XMD_H;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>false</StringPooling>
-      <MinimalRebuild>false</MinimalRebuild>
+      <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_GL;__STDC_CONSTANT_MACROS;XMD_H;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Async</ExceptionHandling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <FunctionLevelLinking>false</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
-      <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>
       </DebugInformationFormat>
       <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <ForcedIncludeFiles>pch.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
-      <ShowIncludes>false</ShowIncludes>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <ObjectFileName>$(IntDir)\a\a\%(RelativeDir)</ObjectFileName>
     </ClCompile>
     <Link>
-      <AdditionalOptions>/MACHINE:I386 /IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions>/IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
       <AdditionalDependencies>DInput8.lib;DSound.lib;winmm.lib;Mpr.lib;Iphlpapi.lib;PowrProf.lib;setupapi.lib;dwmapi.lib;yajl.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)XBMC.exe</OutputFile>
       <IgnoreSpecificDefaultLibraries>libc;msvcrt;libci;msvcprt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
       <DelayLoadDLLs>dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)XBMC.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <LargeAddressAware>true</LargeAddressAware>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>true</DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
     </Link>
     <Manifest>
       <AdditionalManifestFiles>VC90.CRT.x86.manifest;win81.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\ffmpeg;..\..\lib\ffmpeg\include-xbmc-win32;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WINDOWS;_MSVC;WIN32;_DEBUG;_WIN32_WINNT=0x0600;NTDDI_VERSION=0x06000000;NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>false</MinimalRebuild>
+      <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Async</ExceptionHandling>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
       <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <ForcedIncludeFiles>pch.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
-      <ShowIncludes>false</ShowIncludes>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
       <ObjectFileName>$(IntDir)\a\a\%(RelativeDir)</ObjectFileName>
     </ClCompile>
     <Link>
-      <AdditionalOptions>/MACHINE:I386 /IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions>/IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
       <AdditionalDependencies>D3dx9.lib;DInput8.lib;DSound.lib;winmm.lib;Mpr.lib;Iphlpapi.lib;PowrProf.lib;setupapi.lib;dwmapi.lib;yajl.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)XBMC.exe</OutputFile>
       <IgnoreSpecificDefaultLibraries>libc;msvcrt;libcmt;msvcrtd;msvcprtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
       <ModuleDefinitionFile>
       </ModuleDefinitionFile>
       <DelayLoadDLLs>dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)XBMC.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <LargeAddressAware>true</LargeAddressAware>
       <EntryPointSymbol>
       </EntryPointSymbol>
       <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>true</DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <Manifest>
       <AdditionalManifestFiles>VC90.CRT.x86.manifest;win81.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Testsuite|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\ffmpeg;..\..\lib\ffmpeg\include-xbmc-win32;..\..\lib\liblame\include;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\lib\gtest\include;..\..\xbmc\cores\AudioEngine\;..\..\xbmc\cores\AudioEngine\Utils\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WINDOWS;_MSVC;WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0600;NTDDI_VERSION=0x06000000;NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>false</MinimalRebuild>
+      <PreprocessorDefinitions>_CONSOLE;NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;D3D_DEBUG_INFO;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Async</ExceptionHandling>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
       <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <ForcedIncludeFiles>pch.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
-      <ShowIncludes>false</ShowIncludes>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <ObjectFileName>$(IntDir)\a\a\%(RelativeDir)</ObjectFileName>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
-      <AdditionalOptions>/MACHINE:I386 /IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions>/IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
       <AdditionalDependencies>D3dx9.lib;DInput8.lib;DSound.lib;winmm.lib;ws2_32.lib;Mpr.lib;Iphlpapi.lib;PowrProf.lib;setupapi.lib;dwmapi.lib;strmiids.lib;dxguid.lib;mfuuid.lib;comctl32.lib;yajl.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)xbmc-test.exe</OutputFile>
       <AdditionalLibraryDirectories>
       <ModuleDefinitionFile>
       </ModuleDefinitionFile>
       <DelayLoadDLLs>dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)XBMC.pdb</ProgramDatabaseFile>
       <SubSystem>Console</SubSystem>
-      <LargeAddressAware>true</LargeAddressAware>
       <EntryPointSymbol>
       </EntryPointSymbol>
       <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>true</DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <Manifest>
       <AdditionalManifestFiles>VC90.CRT.x86.manifest;win81.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">
     <ClCompile>
       <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Full</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <OmitFramePointers>true</OmitFramePointers>
       <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\ffmpeg;..\..\lib\ffmpeg\include-xbmc-win32;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WINDOWS;_MSVC;WIN32;NDEBUG;_WIN32_WINNT=0x0600;NTDDI_VERSION=0x06000000;NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;__STDC_CONSTANT_MACROS;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>false</StringPooling>
-      <MinimalRebuild>false</MinimalRebuild>
+      <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_DX;__STDC_CONSTANT_MACROS;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Async</ExceptionHandling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <ForcedIncludeFiles>pch.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
-      <ShowIncludes>false</ShowIncludes>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <ObjectFileName>$(IntDir)\a\a\%(RelativeDir)</ObjectFileName>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
     </ClCompile>
     <Link>
-      <AdditionalOptions>/MACHINE:I386 /IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions>/IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
       <AdditionalDependencies>D3dx9.lib;DInput8.lib;DSound.lib;winmm.lib;Mpr.lib;Iphlpapi.lib;PowrProf.lib;setupapi.lib;dwmapi.lib;yajl.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)XBMC.exe</OutputFile>
       <IgnoreSpecificDefaultLibraries>libc;msvcrt;libci;msvcprt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
       <DelayLoadDLLs>dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)XBMC.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <LargeAddressAware>true</LargeAddressAware>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
       <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>true</DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <Manifest>
       <AdditionalManifestFiles>VC90.CRT.x86.manifest;win81.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\ffmpeg;..\..\lib\ffmpeg\include-xbmc-win32;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;_WINDOWS;_MSVC;WIN32;_DEBUG;_WIN32_WINNT=0x0600;NTDDI_VERSION=0x06000000;NOMINMAX;_USE_32BIT_TIME_T;HAS_GL;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>false</MinimalRebuild>
+      <PreprocessorDefinitions>NOMINMAX;_USE_32BIT_TIME_T;HAS_GL;__STDC_CONSTANT_MACROS;_SECURE_SCL=0;TAGLIB_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <ExceptionHandling>Async</ExceptionHandling>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
       <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <ForcedIncludeFiles>pch.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
-      <ShowIncludes>false</ShowIncludes>
-      <MultiProcessorCompilation>true</MultiProcessorCompilation>
       <ObjectFileName>$(IntDir)\a\a\%(RelativeDir)</ObjectFileName>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
-      <AdditionalOptions>/MACHINE:I386 /IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalOptions>/IGNORE:4089 /ignore:4254 %(AdditionalOptions)</AdditionalOptions>
       <AdditionalDependencies>DInput8.lib;DSound.lib;winmm.lib;Mpr.lib;Iphlpapi.lib;PowrProf.lib;setupapi.lib;dwmapi.lib;yajl.lib;dxguid.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)XBMC.exe</OutputFile>
       <IgnoreSpecificDefaultLibraries>libc;msvcrt;libcmt;msvcrtd;msvcprtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
       <ModuleDefinitionFile>
       </ModuleDefinitionFile>
       <DelayLoadDLLs>dnssd.dll;dwmapi.dll;libmicrohttpd-5.dll;ssh.dll;sqlite3.dll;libsamplerate-0.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)XBMC.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <LargeAddressAware>true</LargeAddressAware>
       <EntryPointSymbol>
       </EntryPointSymbol>
       <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>true</DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <Manifest>
       <AdditionalManifestFiles>VC90.CRT.x86.manifest;win81.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..\..\;..\..\xbmc\;..\..\xbmc\cores\dvdplayer;..\..\xbmc\win32;..\..\lib;..\..\lib\ffmpeg;..\..\lib\ffmpeg\include-xbmc-win32;..\..\lib\liblame\include;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32;..\..\lib\win32\pcre;..\..\lib\win32;..\..\xbmc\cores\AudioEngine\;..\..\addons\library.xbmc.gui;..\..\addons\library.xbmc.addon;..\..\addons\library.xbmc.pvr;..\..\addons\library.xbmc.codec;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDInputStreams\DVDInputStreamBluray.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDInputStreams\DVDInputStreamPVRManager.cpp" />
     <ClCompile Include="..\..\xbmc\cores\paplayer\PCMCodec.cpp" />
+    <ClCompile Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererGUI.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\RenderCapture.cpp" />
     <ClCompile Include="..\..\xbmc\cores\VideoRenderers\VideoShaders\WinVideoFilter.cpp" />
     <ClCompile Include="..\..\xbmc\CueDocument.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\PlaylistOperations.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\ProfilesOperations.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\PVROperations.cpp" />
+    <ClCompile Include="..\..\xbmc\interfaces\json-rpc\SettingsOperations.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\SystemOperations.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\VideoLibrary.cpp" />
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\XBMCOperations.cpp" />
     </ClCompile>
     <ClCompile Include="..\..\xbmc\interfaces\python\XBPython.cpp" />
     <ClCompile Include="..\..\xbmc\LangInfo.cpp" />
+    <ClCompile Include="..\..\xbmc\listproviders\IListProvider.cpp" />
+    <ClCompile Include="..\..\xbmc\listproviders\DirectoryProvider.cpp" />
+    <ClCompile Include="..\..\xbmc\listproviders\StaticProvider.cpp" />
     <ClCompile Include="..\..\xbmc\MediaSource.cpp" />
     <ClCompile Include="..\..\xbmc\music\Album.cpp" />
     <ClCompile Include="..\..\xbmc\music\Artist.cpp" />
     <ClCompile Include="..\..\xbmc\settings\dialogs\GUIDialogContentSettings.cpp" />
     <ClCompile Include="..\..\xbmc\settings\dialogs\GUIDialogSettings.cpp" />
     <ClCompile Include="..\..\xbmc\settings\DisplaySettings.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\ISetting.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\ISettingControl.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\ISetting.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\ISettingControl.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\Setting.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingCategoryAccess.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingConditions.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingDependency.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingRequirement.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingSection.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingsManager.cpp" />
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingUpdate.cpp" />
     <ClCompile Include="..\..\xbmc\settings\MediaSettings.cpp" />
     <ClCompile Include="..\..\xbmc\settings\MediaSourceSettings.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\Setting.cpp" />
     <ClCompile Include="..\..\xbmc\settings\SettingAddon.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\SettingCategoryAccess.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\SettingConditions.cpp" />
     <ClCompile Include="..\..\xbmc\settings\SettingControl.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\SettingDependency.cpp" />
     <ClCompile Include="..\..\xbmc\settings\SettingPath.cpp" />
     <ClCompile Include="..\..\xbmc\settings\Settings.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\SettingSection.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\SettingsManager.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\SettingUpdate.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\SettingRequirement.cpp" />
     <ClCompile Include="..\..\xbmc\settings\SkinSettings.cpp" />
     <ClCompile Include="..\..\xbmc\settings\VideoSettings.cpp" />
     <ClCompile Include="..\..\xbmc\settings\windows\GUIControlSettings.cpp" />
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">true</ExcludedFromBuild>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\test\TestTextureCache.cpp">
+    <ClCompile Include="..\..\xbmc\test\TestTextureUtils.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">true</ExcludedFromBuild>
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDDemuxers\DVDDemuxBXA.h" />
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDDemuxers\DVDDemuxCDDA.h" />
     <ClInclude Include="..\..\xbmc\cores\paplayer\PCMCodec.h" />
+    <ClInclude Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererGUI.h" />
     <ClInclude Include="..\..\xbmc\dialogs\GUIDialogKeyboardGeneric.h" />
     <ClInclude Include="..\..\xbmc\DbUrl.h" />
     <ClInclude Include="..\..\xbmc\dialogs\GUIDialogMediaFilter.h" />
     <ClInclude Include="..\..\xbmc\interfaces\json-rpc\FavouritesOperations.h" />
     <ClInclude Include="..\..\xbmc\interfaces\json-rpc\ProfilesOperations.h" />
     <ClInclude Include="..\..\xbmc\interfaces\json-rpc\PVROperations.h" />
+    <ClInclude Include="..\..\xbmc\interfaces\json-rpc\SettingsOperations.h" />
     <ClInclude Include="..\..\xbmc\interfaces\legacy\Addon.h" />
     <ClInclude Include="..\..\xbmc\interfaces\legacy\AddonCallback.h" />
     <ClInclude Include="..\..\xbmc\interfaces\legacy\AddonClass.h" />
     <ClInclude Include="..\..\xbmc\settings\dialogs\GUIDialogContentSettings.h" />
     <ClInclude Include="..\..\xbmc\settings\dialogs\GUIDialogSettings.h" />
     <ClInclude Include="..\..\xbmc\settings\DisplaySettings.h" />
-    <ClInclude Include="..\..\xbmc\settings\ISetting.h" />
-    <ClInclude Include="..\..\xbmc\settings\ISettingCallback.h" />
-    <ClInclude Include="..\..\xbmc\settings\ISettingControl.h" />
-    <ClInclude Include="..\..\xbmc\settings\ISettingControlCreator.h" />
-    <ClInclude Include="..\..\xbmc\settings\ISettingCreator.h" />
-    <ClInclude Include="..\..\xbmc\settings\ISettingsHandler.h" />
-    <ClInclude Include="..\..\xbmc\settings\ISubSettings.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\ISetting.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingCallback.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingControl.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingControlCreator.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingCreator.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingsHandler.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\ISubSettings.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\Setting.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingCategoryAccess.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingConditions.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingDefinitions.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingDependency.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingRequirement.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingSection.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingsManager.h" />
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingUpdate.h" />
     <ClInclude Include="..\..\xbmc\settings\MediaSettings.h" />
     <ClInclude Include="..\..\xbmc\settings\MediaSourceSettings.h" />
-    <ClInclude Include="..\..\xbmc\settings\Setting.h" />
     <ClInclude Include="..\..\xbmc\settings\SettingAddon.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingCategoryAccess.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingConditions.h" />
     <ClInclude Include="..\..\xbmc\settings\SettingControl.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingDefinitions.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingDependency.h" />
     <ClInclude Include="..\..\xbmc\settings\SettingPath.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingSection.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingsManager.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingUpdate.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingRequirement.h" />
     <ClInclude Include="..\..\xbmc\settings\SkinSettings.h" />
     <ClInclude Include="..\..\xbmc\settings\windows\GUIControlSettings.h" />
     <ClInclude Include="..\..\xbmc\settings\windows\GUIWindowSettings.h" />
     <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogAudioSubtitleSettings.cpp" />
     <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogFileStacking.cpp" />
     <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogFullScreenInfo.cpp" />
+    <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogSubtitles.cpp" />
     <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogTeletext.cpp" />
     <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogVideoBookmarks.cpp" />
     <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogVideoInfo.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDMessageTracker.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDOverlayContainer.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDOverlayRenderer.cpp" />
-    <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDPerformanceCounter.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDPlayer.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDPlayerAudio.cpp" />
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDPlayerSubtitle.cpp" />
     <ClInclude Include="..\..\xbmc\interfaces\json-rpc\TextureOperations.h" />
     <ClInclude Include="..\..\xbmc\IProgressCallback.h" />
     <ClInclude Include="..\..\xbmc\LangInfo.h" />
+    <ClInclude Include="..\..\xbmc\listproviders\IListProvider.h" />
+    <ClInclude Include="..\..\xbmc\listproviders\DirectoryProvider.h" />
+    <ClInclude Include="..\..\xbmc\listproviders\StaticProvider.h" />
     <ClInclude Include="..\..\xbmc\MediaSource.h" />
     <ClInclude Include="..\..\xbmc\music\Album.h" />
     <ClInclude Include="..\..\xbmc\music\Artist.h" />
     <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogAudioSubtitleSettings.h" />
     <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogFileStacking.h" />
     <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogFullScreenInfo.h" />
+    <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogSubtitles.h" />
     <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogTeletext.h" />
     <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogVideoBookmarks.h" />
     <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogVideoInfo.h" />
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDMessageTracker.h" />
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDOverlayContainer.h" />
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDOverlayRenderer.h" />
-    <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDPerformanceCounter.h" />
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDPlayer.h" />
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDPlayerAudio.h" />
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDPlayerSubtitle.h" />
index 9c50c08..6fd0457 100644 (file)
     <Filter Include="cores\AudioEngine\Engines\ActiveAE">
       <UniqueIdentifier>{27f2c647-7b5f-4c49-b2e7-22bf360e58ab}</UniqueIdentifier>
     </Filter>
+    <Filter Include="listproviders">
+      <UniqueIdentifier>{1dfaf73b-2e8d-49d2-87c1-07b1ac203ba0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="settings\lib">
+      <UniqueIdentifier>{4de9ae04-448d-4ebe-bde5-5ec2a61270c0}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\xbmc\win32\pch.cpp">
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDOverlayRenderer.cpp">
       <Filter>cores\dvdplayer</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDPerformanceCounter.cpp">
-      <Filter>cores\dvdplayer</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\xbmc\cores\dvdplayer\DVDPlayer.cpp">
       <Filter>cores\dvdplayer</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogFullScreenInfo.cpp">
       <Filter>video\dialogs</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogSubtitles.cpp">
+      <Filter>video\dialogs</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\xbmc\video\dialogs\GUIDialogTeletext.cpp">
       <Filter>video\dialogs</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\test\TestFileItem.cpp">
       <Filter>test</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\test\TestTextureCache.cpp">
+    <ClCompile Include="..\..\xbmc\test\TestTextureUtils.cpp">
       <Filter>test</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\PVROperations.cpp">
     <ClCompile Include="..\..\xbmc\settings\windows\GUIControlSettings.cpp">
       <Filter>settings\windows</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\settings\ISetting.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\xbmc\settings\Setting.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\xbmc\settings\SettingCategoryAccess.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\xbmc\settings\SettingConditions.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\xbmc\settings\SettingControl.cpp">
       <Filter>settings</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\settings\SettingDependency.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\xbmc\network\NetworkServices.cpp">
       <Filter>network</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\utils\BooleanLogic.cpp">
       <Filter>utils</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\settings\SettingUpdate.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\xbmc\settings\SettingsManager.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\xbmc\settings\SettingAddon.cpp">
       <Filter>settings</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\settings\SettingPath.cpp">
       <Filter>settings</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\xbmc\settings\SettingSection.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\xbmc\interfaces\json-rpc\FavouritesOperations.cpp">
       <Filter>interfaces\json-rpc</Filter>
     </ClCompile>
       <Filter>utils</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\ApplicationPlayer.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\SettingRequirement.cpp">
-      <Filter>settings</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\xbmc\interfaces\python\AddonPythonInvoker.cpp">
       <Filter>interfaces\python</Filter>
     </ClCompile>
       <Filter>playlists</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\FileItemListModification.cpp" />
-    <ClCompile Include="..\..\xbmc\settings\ISettingControl.cpp">
-      <Filter>settings</Filter>
+    <ClCompile Include="..\..\xbmc\settings\lib\ISettingControl.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\ISetting.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\Setting.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingCategoryAccess.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingConditions.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingDependency.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingRequirement.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingSection.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingsManager.cpp">
+      <Filter>settings\lib</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\settings\lib\SettingUpdate.cpp">
+      <Filter>settings\lib</Filter>
     </ClCompile>
     <ClCompile Include="..\..\xbmc\utils\CharsetDetection.cpp">
       <Filter>utils</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererGUI.cpp">
+      <Filter>cores\VideoRenderers</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\interfaces\json-rpc\SettingsOperations.cpp">
+      <Filter>interfaces\json-rpc</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\listproviders\IListProvider.cpp">
+      <Filter>listproviders</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\listproviders\DirectoryProvider.cpp">
+      <Filter>listproviders</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\xbmc\listproviders\StaticProvider.cpp">
+      <Filter>listproviders</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\xbmc\win32\pch.h">
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDOverlayRenderer.h">
       <Filter>cores\dvdplayer</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDPerformanceCounter.h">
-      <Filter>cores\dvdplayer</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\cores\dvdplayer\DVDPlayer.h">
       <Filter>cores\dvdplayer</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogFullScreenInfo.h">
       <Filter>video\dialogs</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogSubtitles.h">
+      <Filter>video\dialogs</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\xbmc\video\dialogs\GUIDialogTeletext.h">
       <Filter>video\dialogs</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\utils\RssManager.h">
       <Filter>utils</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\ISettingsHandler.h">
-      <Filter>settings</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\ISubSettings.h">
-      <Filter>settings</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\settings\SkinSettings.h">
       <Filter>settings</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\settings\windows\GUIControlSettings.h">
       <Filter>settings\windows</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\ISetting.h">
-      <Filter>settings</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\ISettingCallback.h">
-      <Filter>settings</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\Setting.h">
-      <Filter>settings</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\SettingCategoryAccess.h">
-      <Filter>settings</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\SettingConditions.h">
-      <Filter>settings</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\settings\SettingControl.h">
       <Filter>settings</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\SettingDependency.h">
-      <Filter>settings</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\network\NetworkServices.h">
       <Filter>network</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\utils\IXmlDeserializable.h">
       <Filter>utils</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\SettingUpdate.h">
-      <Filter>settings</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\SettingsManager.h">
-      <Filter>settings</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\ISettingCreator.h">
-      <Filter>settings</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\settings\SettingAddon.h">
       <Filter>settings</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\settings\SettingPath.h">
       <Filter>settings</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\SettingSection.h">
-      <Filter>settings</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\interfaces\json-rpc\FavouritesOperations.h">
       <Filter>interfaces\json-rpc</Filter>
     </ClInclude>
       <Filter>utils</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\ApplicationPlayer.h" />
-    <ClInclude Include="..\..\xbmc\settings\SettingRequirement.h">
-      <Filter>settings</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\xbmc\interfaces\python\AddonPythonInvoker.h">
       <Filter>interfaces\python</Filter>
     </ClInclude>
       <Filter>playlists</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\FileItemListModification.h" />
-    <ClInclude Include="..\..\xbmc\settings\ISettingControl.h">
-      <Filter>settings</Filter>
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingControl.h">
+      <Filter>settings\lib</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\ISettingControlCreator.h">
-      <Filter>settings</Filter>
+    <ClInclude Include="..\..\xbmc\settings\lib\ISetting.h">
+      <Filter>settings\lib</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\xbmc\settings\SettingDefinitions.h">
-      <Filter>settings</Filter>
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingCallback.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingCreator.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingsHandler.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\ISubSettings.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\Setting.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingCategoryAccess.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingConditions.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingDependency.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingRequirement.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingSection.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingsManager.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingUpdate.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\SettingDefinitions.h">
+      <Filter>settings\lib</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\settings\lib\ISettingControlCreator.h">
+      <Filter>settings\lib</Filter>
     </ClInclude>
     <ClInclude Include="..\..\xbmc\utils\CharsetDetection.h">
       <Filter>utils</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\xbmc\cores\VideoRenderers\OverlayRendererGUI.h">
+      <Filter>cores\VideoRenderers</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\interfaces\json-rpc\SettingsOperations.h">
+      <Filter>interfaces\json-rpc</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\listproviders\IListProvider.h">
+      <Filter>listproviders</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\listproviders\DirectoryProvider.h">
+      <Filter>listproviders</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\xbmc\listproviders\StaticProvider.h">
+      <Filter>listproviders</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="..\..\xbmc\win32\XBMC_PC.rc">
index b79462d..18af62a 100644 (file)
     <RootNamespace>XbmcCommons</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\xbmc;..\..\xbmc\win32</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;NOMINMAX;WIN32;_DEBUG;_LIB;_XBMC;_USE_32BIT_TIME_T;HAS_DX;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <MinimalRebuild>false</MinimalRebuild>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <PreprocessorDefinitions>NOMINMAX;_LIB;_USE_32BIT_TIME_T;HAS_DX;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <DisableSpecificWarnings>4800;4018;4146;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
     </ClCompile>
     <Lib />
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Full</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
       <AdditionalIncludeDirectories>..\..\xbmc;..\..\xbmc\win32</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;NOMINMAX;NDEBUG;WIN32;_LIB;_XBMC;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>NOMINMAX;_LIB;_USE_32BIT_TIME_T;HAS_DX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderFile>commons.hpp</PrecompiledHeaderFile>
-      <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>
       </DebugInformationFormat>
       <DisableSpecificWarnings>4800;4018;4146;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
     </ClCompile>
     <Lib />
-    <Lib>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
-    </Lib>
+    <Lib />
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
index d4e4026..8ce0f50 100644 (file)
     <RootNamespace>XbmcCommons</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\xbmc;..\..\xbmc\win32</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;NOMINMAX;WIN32;_DEBUG;_LIB;_XBMC;_USE_32BIT_TIME_T;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <MinimalRebuild>false</MinimalRebuild>
-      <BasicRuntimeChecks>Default</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <PreprocessorDefinitions>NOMINMAX;_LIB;_XBMC;_USE_32BIT_TIME_T;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <DisableSpecificWarnings>4800;4018;4146;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <ExceptionHandling>Async</ExceptionHandling>
     </ClCompile>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>Full</Optimization>
-      <OmitFramePointers>true</OmitFramePointers>
       <AdditionalIncludeDirectories>..\..\xbmc;..\..\xbmc\win32</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>TARGET_WINDOWS;NOMINMAX;WIN32;NDEBUG;_LIB;_XBMC;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>NOMINMAX;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeaderFile>commons.hpp</PrecompiledHeaderFile>
-      <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>
       </DebugInformationFormat>
       <DisableSpecificWarnings>4800;4018;4146;4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <ExceptionHandling>Async</ExceptionHandling>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
-      <WholeProgramOptimization>true</WholeProgramOptimization>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)$(ProjectName).lib</OutputFile>
-      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
     </Lib>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
index 0511a5d..77fbbf9 100644 (file)
@@ -15,6 +15,7 @@
     <RootNamespace>libPlatinum</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>StaticLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
       <AdditionalIncludeDirectories>..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;NPT_CONFIG_ENABLE_LOGGING;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;NPT_CONFIG_ENABLE_LOGGING;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)libPlatinumd.lib</OutputFile>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <AdditionalIncludeDirectories>..\..\lib\libUPnP\Platinum\Source\Platinum;..\..\lib\libUPnP\Platinum\Source\Core;..\..\lib\libUPnP\Platinum\Source\Extras;..\..\lib\libUPnP\Platinum\Source\Devices\MediaServer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaRenderer;..\..\lib\libUPnP\Platinum\Source\Devices\MediaConnect;..\..\lib\libUPnP\Neptune\Source\Core;..\..\lib\libUPnP\Neptune\Source\System\Win32</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;NPT_CONFIG_ENABLE_LOGGING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PreprocessorDefinitions>_LIB;NPT_CONFIG_ENABLE_LOGGING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Lib>
       <OutputFile>$(OutDir)libPlatinum.lib</OutputFile>
index d9c47d0..b52d51d 100644 (file)
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
index 6709cf2..1626848 100644 (file)
@@ -9,7 +9,7 @@ SET DEPS_DIR=..\BuildDependencies
 SET TMP_DIR=%DEPS_DIR%\tmp
 
 SET LIBNAME=xbmc-pvr-addons
-SET VERSION=18597fd733003e3a7edfedc284b36428c4b97647
+SET VERSION=54a6b9dfbf7b0f51902f9d4c69d83baa8e47d97a
 SET SOURCE=%LIBNAME%
 SET GIT_URL=git://github.com/opdenkamp/%LIBNAME%.git
 SET SOURCE_DIR=%TMP_DIR%\%SOURCE%
index 180f0ee..b31d017 100644 (file)
@@ -40,6 +40,7 @@
           <dependencies>
             <dependency type="enable" setting="input.appleremotemode" operator="!is">0</dependency> <!-- APPLE_REMOTE_DISABLED -->
           </dependencies>
+          <control type="toggle" />
         </setting>
         <setting id="input.appleremotesequencetime" type="integer" label="13603" help="36418">
           <level>1</level>
             <maximum>1000</maximum>
           </constraints>
           <dependencies>
-            <dependency type="enable" id="input.appleremotemode">2</dependency> <!-- APPLE_REMOTE_UNIVERSAL -->
+            <dependency type="enable" setting="input.appleremotemode" operator="is">2</dependency> <!-- APPLE_REMOTE_UNIVERSAL -->
           </dependencies>
           <control type="spinner" format="string">
             <formatlabel>14046</formatlabel>
           </control>
         </setting>
       </group>
+      <group id="2">
+        <setting id="input.enablesystemkeys" type="boolean" label="35103" help="37019">
+          <visible>false</visible>
+          <default>yes</default>
+          <control type="toggle" />
+        </setting>
+      </group>
     </category>
   </section>
 </settings>
index 528378d..aa1b414 100644 (file)
@@ -15,6 +15,7 @@
         <setting id="videoplayer.usevda" type="boolean" label="13429" help="36160">
           <level>2</level>
           <default>true</default>
+          <control type="toggle" />
         </setting>
       </group>
     </category>
index 3556adb..57f5921 100644 (file)
           <default>true</default>
           <control type="toggle" />
         </setting>
+        <setting id="videoplayer.useframemtdec" type="boolean" label="13440" help="36423">
+          <level>2</level>
+          <default>false</default>
+          <control type="toggle" />
+        </setting>
         <setting id="videoplayer.adjustrefreshrate" type="integer" label="170" help="36164">
           <level>2</level>
           <default>0</default> <!-- ADJUST_REFRESHRATE_OFF -->
         </setting>
       </group>
       <group id="2">
+        <setting id="subtitles.savetomoviefolder" type="boolean" label="24115" help="24106">
+          <level>1</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="subtitles.pauseonsearch" type="boolean" label="24105" help="">
+          <level>1</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
+        <setting id="subtitles.languages" type="list[string]" label="24111" help="24112">
+          <level>1</level>
+          <default>English</default>
+          <constraints>
+            <options>languages</options>
+            <delimiter>,</delimiter>
+            <minimum>1</minimum>
+            <maximum>3</maximum>
+          </constraints>
+          <control type="list" format="string">
+            <multiselect>true</multiselect>
+          </control>
+        </setting>
         <setting id="subtitles.custompath" type="path" label="21366" help="36191">
           <level>1</level>
           <default></default>
           </constraints>
           <control type="spinner" format="string" />
         </setting>
+        <setting id="subtitles.preferexternal" type="boolean" label="21600" help="21601">
+          <level>1</level>
+          <default>true</default>
+          <control type="toggle" />
+        </setting>
       </group>
     </category>
     <category id="dvds" label="14087" help="36193">
index 7e7d480..74a2efa 100644 (file)
@@ -5,7 +5,7 @@ OBJS = libcurl.so \
   libafpclient.so  \
   libplist.so libshairplay.so \
   libxbogg.so libxbvorbis.so libxbvorbisfile.so libxbFLAC.so libxbmpeg2.so \
-  libxbmpeg2convert.so libnfs.so libass.so
+  libxbmpeg2convert.so libnfs.so libass.so libbluray.so
 
 PLATFORM_OBJS =
 EXCLUDED_ADDONS = screensaver.rsxs.euphoria visualization.dxspectrum visualization.milkdrop visualization.projectm
diff --git a/tools/depends/target/libsdl/04-fix_external_screen_crash.patch b/tools/depends/target/libsdl/04-fix_external_screen_crash.patch
new file mode 100644 (file)
index 0000000..b474e3a
--- /dev/null
@@ -0,0 +1,11 @@
+--- src/video/quartz/SDL_QuartzWindow.m.orig   2013-10-31 04:29:45.000000000 -0700
++++ src/video/quartz/SDL_QuartzWindow.m        2013-10-31 04:30:05.000000000 -0700
+@@ -87,7 +87,7 @@
+      SDL_VideoDevice *this = (SDL_VideoDevice*)current_video;
+
+     /* make sure pixels are fully opaque */
+-    if (! ( SDL_VideoSurface->flags & SDL_OPENGL ) )
++    if ( SDL_VideoSurface && ! ( SDL_VideoSurface->flags & SDL_OPENGL ) )
+         QZ_SetPortAlphaOpaque ();
+
+     /* save current visible SDL surface */
index 0a57105..ff0879c 100644 (file)
@@ -26,6 +26,7 @@ $(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
        cd $(PLATFORM); patch -p0 < ../01-SDL_SetWidthHeight.patch
        cd $(PLATFORM); patch -p0 < ../02-OSX_interpretKeyEvents.patch
        cd $(PLATFORM); patch -p0 < ../03-mavericks-compile.patch
+       cd $(PLATFORM); patch -p0 < ../04-fix_external_screen_crash.patch
        cd $(PLATFORM); $(CONFIGURE)
 
 $(LIBDYLIB): $(PLATFORM)
index b2f1b25..56fbb8c 100644 (file)
@@ -38,7 +38,12 @@ endif
        cp modules.setup $(PLATFORM)/Modules/Setup.dist
 
 #Add -liconv as needed, and add the _scproxy module for darwin
+#  disable locale altogether for Android
+ifeq ($(OS),android)
+       cd $(PLATFORM); sed -ie 's|_locale _localemodule.c   -lintl|#_locale _localemodule.c   -lintl|' Modules/Setup.dist
+else
        cd $(PLATFORM); sed -ie 's|_locale _localemodule.c   -lintl|_locale _localemodule.c   -lintl $(LINK_ICONV) |' Modules/Setup.dist
+endif
 ifeq ($(OS),osx)
        echo "_scproxy \$$(srcdir)/Mac/Modules/_scproxy.c -framework SystemConfiguration -framework CoreFoundation" >> $(PLATFORM)/Modules/Setup.dist
 endif
index b7678c4..cb98fed 100644 (file)
@@ -2,7 +2,7 @@ include ../../Makefile.include
 #DEPS= ../../Makefile.include Makefile
 
 LIBNAME=xbmc-pvr-addons
-VERSION=18597fd733003e3a7edfedc284b36428c4b97647
+VERSION=54a6b9dfbf7b0f51902f9d4c69d83baa8e47d97a
 GIT_DIR=$(TARBALLS_LOCATION)/$(LIBNAME).git
 BASE_URL=git://github.com/opdenkamp/$(LIBNAME).git
 DYLIB=$(PLATFORM)/addons/pvr.demo/.libs/libpvrdemo-addon.so
index d5022e6..ebcea40 100644 (file)
 #include "dialogs/GUIDialogCache.h"
 #include "dialogs/GUIDialogPlayEject.h"
 #include "dialogs/GUIDialogMediaFilter.h"
+#include "video/dialogs/GUIDialogSubtitles.h"
 #include "utils/XMLUtils.h"
 #include "addons/AddonInstaller.h"
 
@@ -401,6 +402,7 @@ CApplication::CApplication(void)
   m_bPlaybackStarting = false;
   m_ePlayState = PLAY_STATE_NONE;
   m_skinReloading = false;
+  m_skinReverting = false;
   m_loggingIn = false;
 
 #ifdef HAS_GLX
@@ -1345,6 +1347,7 @@ bool CApplication::Initialize()
     g_windowManager.Add(new CGUIDialogPeripheralSettings);
     
     g_windowManager.Add(new CGUIDialogMediaFilter);
+    g_windowManager.Add(new CGUIDialogSubtitles);
 
     g_windowManager.Add(new CGUIWindowMusicPlayList);
     g_windowManager.Add(new CGUIWindowMusicSongs);
@@ -1579,7 +1582,12 @@ void CApplication::OnSettingChanged(const CSetting *setting)
     if (settingId == "lookandfeel.skin" && CSettings::Get().GetString("lookandfeel.skintheme") != "SKINDEFAULT")
       CSettings::Get().SetString("lookandfeel.skintheme", "SKINDEFAULT");
     else
-      CApplicationMessenger::Get().ExecBuiltIn("ReloadSkin");
+    {
+      std::string builtin("ReloadSkin");
+      if (settingId == "lookandfeel.skin" && !m_skinReverting)
+        builtin += "(confirm)";
+      CApplicationMessenger::Get().ExecBuiltIn(builtin);
+    }
   }
   else if (settingId == "lookandfeel.skintheme")
   {
@@ -1602,6 +1610,9 @@ void CApplication::OnSettingChanged(const CSetting *setting)
     g_windowManager.SendMessage(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_WINDOW_RESIZE);
   else if (StringUtils::StartsWithNoCase(settingId, "audiooutput."))
   {
+    // AE is master of audio settings and needs to be informed first
+    CAEFactory::OnSettingsChange(settingId);
+
     if (settingId == "audiooutput.guisoundmode")
     {
       CAEFactory::SetSoundMode(((CSettingInt*)setting)->GetValue());
@@ -1611,10 +1622,7 @@ void CApplication::OnSettingChanged(const CSetting *setting)
     else if (settingId == "audiooutput.passthrough")
     {
       CApplicationMessenger::Get().MediaRestart(false);
-      return;
     }
-
-    CAEFactory::OnSettingsChange(settingId);
   }
   else if (StringUtils::EqualsNoCase(settingId, "musicplayer.replaygaintype"))
     m_replayGainSettings.iType = ((CSettingInt*)setting)->GetValue();
@@ -1738,9 +1746,11 @@ bool CApplication::OnSettingsSaving() const
   return true;
 }
 
-void CApplication::ReloadSkin()
+void CApplication::ReloadSkin(bool confirm/*=false*/)
 {
   m_skinReloading = false;
+  std::string oldSkin = g_SkinInfo ? g_SkinInfo->ID() : "";
+
   CGUIMessage msg(GUI_MSG_LOAD_SKIN, -1, g_windowManager.GetActiveWindow());
   g_windowManager.SendMessage(msg);
   
@@ -1762,6 +1772,21 @@ void CApplication::ReloadSkin()
       pWindow->OnMessage(msg3);
     }
   }
+
+  if (!m_skinReverting && confirm)
+  {
+    bool cancelled;
+    if (!CGUIDialogYesNo::ShowAndGetInput(13123, 13111, -1, -1, -1, -1, cancelled, 10000))
+    {
+      m_skinReverting = true;
+      if (oldSkin.empty())
+        CSettings::Get().GetSetting("lookandfeel.skin")->Reset();
+      else
+        CSettings::Get().SetString("lookandfeel.skin", oldSkin);
+    }
+  }
+
+  m_skinReverting = false;
 }
 
 bool CApplication::Load(const TiXmlNode *settings)
@@ -2077,6 +2102,7 @@ bool CApplication::RenderNoPresent()
   // dont show GUI when playing full screen video
   if (g_graphicsContext.IsFullScreenVideo())
   {
+    g_graphicsContext.SetRenderingResolution(g_graphicsContext.GetVideoResolution(), false);
     g_renderManager.Render(true, 0, 255);
 
     // close window overlays
@@ -3294,6 +3320,7 @@ bool CApplication::Cleanup()
     g_windowManager.Delete(WINDOW_DIALOG_ACCESS_POINTS);
     g_windowManager.Delete(WINDOW_DIALOG_SLIDER);
     g_windowManager.Delete(WINDOW_DIALOG_MEDIA_FILTER);
+    g_windowManager.Delete(WINDOW_DIALOG_SUBTITLES);
 
     /* Delete PVR related windows and dialogs */
     g_windowManager.Delete(WINDOW_PVR);
index f90446c..a0e20b4 100644 (file)
@@ -49,9 +49,9 @@ class CPlayerController;
 #include "cores/IPlayerCallback.h"
 #include "cores/playercorefactory/PlayerCoreFactory.h"
 #include "PlayListPlayer.h"
-#include "settings/ISettingsHandler.h"
-#include "settings/ISettingCallback.h"
-#include "settings/ISubSettings.h"
+#include "settings/lib/ISettingsHandler.h"
+#include "settings/lib/ISettingCallback.h"
+#include "settings/lib/ISubSettings.h"
 #if !defined(TARGET_WINDOWS) && defined(HAS_DVD_DRIVE)
 #include "storage/DetectDVDType.h"
 #endif
@@ -153,7 +153,7 @@ public:
   void RestartApp();
   void UnloadSkin(bool forReload = false);
   bool LoadUserWindows();
-  void ReloadSkin();
+  void ReloadSkin(bool confirm = false);
   const CStdString& CurrentFile();
   CFileItem& CurrentFileItem();
   virtual bool OnMessage(CGUIMessage& message);
@@ -367,6 +367,7 @@ protected:
   void LoadSkin(const boost::shared_ptr<ADDON::CSkinInfo>& skin);
 
   bool m_skinReloading; // if true we disallow LoadSkin until ReloadSkin is called
+  bool m_skinReverting;
 
   bool m_loggingIn;
 
index c67f69e..b3a770e 100644 (file)
@@ -619,12 +619,6 @@ void CApplicationPlayer::GetGeneralInfo( CStdString& strVideoInfo)
     player->GetGeneralInfo(strVideoInfo);
 }
 
-bool CApplicationPlayer::GetCurrentSubtitle(CStdString& strSubtitle)
-{
-  boost::shared_ptr<IPlayer> player = GetInternal();
-  return (player && player->GetCurrentSubtitle(strSubtitle));
-}
-
 int  CApplicationPlayer::SeekChapter(int iChapter)
 {
   boost::shared_ptr<IPlayer> player = GetInternal();
index ef94f08..a44c0a9 100644 (file)
@@ -92,7 +92,6 @@ public:
   void  GetChapterName(CStdString& strChapterName);
   void  GetDeinterlaceMethods(std::vector<int> &deinterlaceMethods);
   void  GetDeinterlaceModes(std::vector<int> &deinterlaceModes);
-  bool  GetCurrentSubtitle(CStdString& strSubtitle);
   void  GetGeneralInfo( CStdString& strVideoInfo);
   float GetPercentage() const;
   int   GetPictureHeight();
index a9cfb87..d69c231 100644 (file)
@@ -665,7 +665,10 @@ const infomap pvr[] =            {{ "isrecording",              PVR_IS_RECORDING
                                   { "actstreamprogrsignal",     PVR_ACTUAL_STREAM_SIG_PROGR },
                                   { "actstreamprogrsnr",        PVR_ACTUAL_STREAM_SNR_PROGR },
                                   { "actstreamisencrypted",     PVR_ACTUAL_STREAM_ENCRYPTED },
-                                  { "actstreamencryptionname",  PVR_ACTUAL_STREAM_CRYPTION }};
+                                  { "actstreamencryptionname",  PVR_ACTUAL_STREAM_CRYPTION },
+                                  { "actstreamservicename",     PVR_ACTUAL_STREAM_SERVICE },
+                                  { "actstreammux",             PVR_ACTUAL_STREAM_MUX },
+                                  { "actstreamprovidername",    PVR_ACTUAL_STREAM_PROVIDER }};
 
 const infomap slideshow[] =      {{ "ispaused",         SLIDESHOW_ISPAUSED },
                                   { "isactive",         SLIDESHOW_ISACTIVE },
@@ -1173,10 +1176,30 @@ int CGUIInfoManager::TranslateSingleString(const CStdString &strCondition)
     }
     else if (cat.name == "playlist")
     {
+      int ret = -1;
       for (size_t i = 0; i < sizeof(playlist) / sizeof(infomap); i++)
       {
         if (prop.name == playlist[i].str)
-          return playlist[i].val;
+        {
+          ret = playlist[i].val;
+          break;
+        }
+      }
+      if (ret >= 0)
+      {
+        if (prop.num_params() <= 0)
+          return ret;
+        else
+        {
+          int playlistid = PLAYLIST_NONE;
+          if (prop.param().Equals("video"))
+            playlistid = PLAYLIST_VIDEO;
+          else if (prop.param().Equals("music"))
+            playlistid = PLAYLIST_MUSIC;
+
+          if (playlistid > PLAYLIST_NONE)
+            return AddMultiInfo(GUIInfo(ret, playlistid));
+        }
       }
     }
     else if (cat.name == "pvr")
@@ -1355,6 +1378,9 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow, CStdString *fa
   case PVR_ACTUAL_STREAM_AUDIO_BR:
   case PVR_ACTUAL_STREAM_DOLBY_BR:
   case PVR_ACTUAL_STREAM_CRYPTION:
+  case PVR_ACTUAL_STREAM_SERVICE:
+  case PVR_ACTUAL_STREAM_MUX:
+  case PVR_ACTUAL_STREAM_PROVIDER:
     g_PVRManager.TranslateCharInfo(info, strLabel);
     break;
   case WEATHER_CONDITIONS:
@@ -2993,6 +3019,30 @@ bool CGUIInfoManager::GetMultiInfoBool(const GUIInfo &info, int contextWindow, c
           bReturn = (index >= 0 && index < g_playlistPlayer.GetPlaylist(PLAYLIST_MUSIC).size());
         }
         break;
+
+      case PLAYLIST_ISRANDOM:
+        {
+          int playlistid = info.GetData1();
+          if (playlistid > PLAYLIST_NONE)
+            bReturn = g_playlistPlayer.IsShuffled(playlistid);
+        }
+        break;
+
+      case PLAYLIST_ISREPEAT:
+        {
+          int playlistid = info.GetData1();
+          if (playlistid > PLAYLIST_NONE)
+            bReturn = g_playlistPlayer.GetRepeat(playlistid) == PLAYLIST::REPEAT_ALL;
+        }
+        break;
+
+      case PLAYLIST_ISREPEATONE:
+        {
+          int playlistid = info.GetData1();
+          if (playlistid > PLAYLIST_NONE)
+            bReturn = g_playlistPlayer.GetRepeat(playlistid) == PLAYLIST::REPEAT_ONE;
+        }
+        break;
     }
   }
   return (info.m_info < 0) ? !bReturn : bReturn;
@@ -3232,6 +3282,15 @@ CStdString CGUIInfoManager::GetMultiInfoLabel(const GUIInfo &info, int contextWi
     if (addon && info.m_info == SYSTEM_ADDON_VERSION)
       return addon->Version().c_str();
   }
+  else if (info.m_info == PLAYLIST_LENGTH ||
+           info.m_info == PLAYLIST_POSITION ||
+           info.m_info == PLAYLIST_RANDOM ||
+           info.m_info == PLAYLIST_REPEAT)
+  {
+    int playlistid = info.GetData1();
+    if (playlistid > PLAYLIST_NONE)
+      return GetPlaylistLabel(info.m_info, playlistid);
+  }
 
   return StringUtils::EmptyString;
 }
@@ -3467,10 +3526,12 @@ const CStdString CGUIInfoManager::GetMusicPlaylistInfo(const GUIInfo& info)
   return GetMusicTagLabel(info.m_info, playlistItem.get());
 }
 
-CStdString CGUIInfoManager::GetPlaylistLabel(int item) const
+CStdString CGUIInfoManager::GetPlaylistLabel(int item, int playlistid /* = PLAYLIST_NONE */) const
 {
-  if (!g_application.m_pPlayer->IsPlaying()) return "";
-  int iPlaylist = g_playlistPlayer.GetCurrentPlaylist();
+  if (playlistid <= PLAYLIST_NONE && !g_application.m_pPlayer->IsPlaying())
+    return "";
+
+  int iPlaylist = playlistid == PLAYLIST_NONE ? g_playlistPlayer.GetCurrentPlaylist() : playlistid;
   switch (item)
   {
   case PLAYLIST_LENGTH:
index e33435b..8a9d629 100644 (file)
@@ -477,7 +477,10 @@ namespace INFO
 #define PVR_ACTUAL_STREAM_AUDIO_BR  (PVR_STRINGS_START + 31)
 #define PVR_ACTUAL_STREAM_DOLBY_BR  (PVR_STRINGS_START + 32)
 #define PVR_ACTUAL_STREAM_CRYPTION  (PVR_STRINGS_START + 33)
-#define PVR_STRINGS_END             PVR_ACTUAL_STREAM_CRYPTION
+#define PVR_ACTUAL_STREAM_SERVICE   (PVR_STRINGS_START + 34)
+#define PVR_ACTUAL_STREAM_MUX       (PVR_STRINGS_START + 35)
+#define PVR_ACTUAL_STREAM_PROVIDER  (PVR_STRINGS_START + 36)
+#define PVR_STRINGS_END             PVR_ACTUAL_STREAM_PROVIDER
 
 #define WINDOW_PROPERTY             9993
 #define WINDOW_IS_TOPMOST           9994
@@ -777,7 +780,7 @@ public:
   CStdString GetMusicLabel(int item);
   CStdString GetMusicTagLabel(int info, const CFileItem *item);
   CStdString GetVideoLabel(int item);
-  CStdString GetPlaylistLabel(int item) const;
+  CStdString GetPlaylistLabel(int item, int playlistid = -1 /* PLAYLIST_NONE */) const;
   CStdString GetMusicPartyModeLabel(int item);
   const CStdString GetMusicPlaylistInfo(const GUIInfo& info);
   CStdString GetPictureLabel(int item);
index 58d15b0..568a352 100644 (file)
@@ -30,7 +30,6 @@
 #include "profiles/dialogs/GUIDialogProfileSettings.h"
 #include "Util.h"
 #include "settings/MediaSourceSettings.h"
-#include "settings/Setting.h"
 #include "settings/Settings.h"
 #include "guilib/GUIWindowManager.h"
 #include "FileItem.h"
index d676761..a090a82 100644 (file)
@@ -23,9 +23,9 @@
 #include <map>
 #include <vector>
 
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "utils/StdString.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 
 class CFileItem;
 class CMediaSource;
index f283c28..5e2f2aa 100644 (file)
@@ -27,7 +27,7 @@
 #include "guilib/LocalizeStrings.h"
 #include "pvr/PVRManager.h"
 #include "settings/AdvancedSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "utils/CharsetConverter.h"
 #include "utils/log.h"
index 63ce8ca..b432da7 100644 (file)
@@ -19,7 +19,7 @@
  *
  */
 
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "utils/StdString.h"
 
 #include <map>
index e85b549..aae254e 100644 (file)
@@ -2143,6 +2143,7 @@ void CUtil::GetExternalStreamDetailsFromFilename(const CStdString& strVideo, con
   // trim any non-alphanumeric char in the begining
   std::string::iterator result = std::find_if(toParse.begin(), toParse.end(), ::isalnum);
 
+  std::string name;
   if (result != toParse.end()) // if we have anything to parse
   {
     std::string inputString(result, toParse.end());
@@ -2150,7 +2151,6 @@ void CUtil::GetExternalStreamDetailsFromFilename(const CStdString& strVideo, con
     std::vector<std::string> tokens;
     StringUtils::Tokenize(inputString, tokens, delimiters);
 
-    std::string name;
     for (std::vector<std::string>::iterator it = tokens.begin(); it != tokens.end(); ++it)
     {
       if (info.language.empty())
@@ -2186,9 +2186,11 @@ void CUtil::GetExternalStreamDetailsFromFilename(const CStdString& strVideo, con
       }
       name += " " + (*it);
     }
-    StringUtils::Trim(name);
-    info.name = StringUtils::RemoveDuplicatedSpacesAndTabs(name);
   }
+  name += " ";
+  name += g_localizeStrings.Get(21602); // External
+  StringUtils::Trim(name);
+  info.name = StringUtils::RemoveDuplicatedSpacesAndTabs(name);
   if (info.flag == 0x1111)
     info.flag = CDemuxStream::FLAG_NONE;
 
index 4e56671..059d17e 100644 (file)
@@ -74,10 +74,10 @@ static const TypeMapping types[] =
    {"xbmc.python.pluginsource",          ADDON_PLUGIN,              24005, "" },
    {"xbmc.python.script",                ADDON_SCRIPT,              24009, "" },
    {"xbmc.python.weather",               ADDON_SCRIPT_WEATHER,      24027, "DefaultAddonWeather.png" },
-   {"xbmc.python.subtitles",             ADDON_SCRIPT_SUBTITLES,    24012, "DefaultAddonSubtitles.png" },
    {"xbmc.python.lyrics",                ADDON_SCRIPT_LYRICS,       24013, "DefaultAddonLyrics.png" },
    {"xbmc.python.library",               ADDON_SCRIPT_LIBRARY,      24014, "" },
    {"xbmc.python.module",                ADDON_SCRIPT_MODULE,           0, "" },
+   {"xbmc.subtitle.module",              ADDON_SUBTITLE_MODULE,     24012, "DefaultAddonSubtitles.png" },
    {"xbmc.gui.skin",                     ADDON_SKIN,                  166, "DefaultAddonSkin.png" },
    {"xbmc.gui.webinterface",             ADDON_WEB_INTERFACE,         199, "DefaultAddonWebSkin.png" },
    {"xbmc.addon.repository",             ADDON_REPOSITORY,          24011, "DefaultAddonRepository.png" },
@@ -355,7 +355,7 @@ void CAddon::BuildLibName(const cp_extension_t *extension)
     case ADDON_SCRIPT_LIBRARY:
     case ADDON_SCRIPT_LYRICS:
     case ADDON_SCRIPT_WEATHER:
-    case ADDON_SCRIPT_SUBTITLES:
+    case ADDON_SUBTITLE_MODULE:        
     case ADDON_PLUGIN:
     case ADDON_SERVICE:
       ext = ADDON_PYTHON_EXT;
@@ -378,8 +378,8 @@ void CAddon::BuildLibName(const cp_extension_t *extension)
       case ADDON_SCRIPT_LIBRARY:
       case ADDON_SCRIPT_LYRICS:
       case ADDON_SCRIPT_WEATHER:
-      case ADDON_SCRIPT_SUBTITLES:
       case ADDON_SCRIPT_MODULE:
+      case ADDON_SUBTITLE_MODULE:
       case ADDON_SCRAPER_ALBUMS:
       case ADDON_SCRAPER_ARTISTS:
       case ADDON_SCRAPER_MOVIES:
index bcd2946..99fe693 100644 (file)
@@ -550,7 +550,10 @@ void CAddonDatabase::SetPropertiesFromAddon(const AddonPtr& addon,
   starrating.Format("rating%d.png", addon->Stars());
   pItem->SetProperty("Addon.StarRating",starrating);
   pItem->SetProperty("Addon.Path", addon->Path());
-  pItem->SetProperty("Addon.Broken", addon->Props().broken);
+  if (addon->Props().broken == "DEPSNOTMET")
+    pItem->SetProperty("Addon.Broken", g_localizeStrings.Get(24044));
+  else
+    pItem->SetProperty("Addon.Broken", addon->Props().broken);
   std::map<CStdString,CStdString>::iterator it = 
                     addon->Props().extrainfo.find("language");
   if (it != addon->Props().extrainfo.end())
index cf0a202..dc8c597 100644 (file)
@@ -85,8 +85,8 @@ AddonPtr CAddonMgr::Factory(const cp_extension_t *props)
       return AddonPtr(new CPluginSource(props));
     case ADDON_SCRIPT_LIBRARY:
     case ADDON_SCRIPT_LYRICS:
-    case ADDON_SCRIPT_SUBTITLES:
     case ADDON_SCRIPT_MODULE:
+    case ADDON_SUBTITLE_MODULE:
     case ADDON_WEB_INTERFACE:
       return AddonPtr(new CAddon(props));
     case ADDON_SCRIPT_WEATHER:
@@ -631,8 +631,8 @@ AddonPtr CAddonMgr::AddonFromProps(AddonProps& addonProps)
     case ADDON_SCRIPT_LIBRARY:
     case ADDON_SCRIPT_LYRICS:
     case ADDON_SCRIPT_WEATHER:
-    case ADDON_SCRIPT_SUBTITLES:
     case ADDON_SCRIPT_MODULE:
+    case ADDON_SUBTITLE_MODULE:
     case ADDON_WEB_INTERFACE:
       return AddonPtr(new CAddon(addonProps));
     case ADDON_SERVICE:
index a17d23b..f30ca70 100644 (file)
@@ -87,7 +87,7 @@ bool CGUIDialogAddonInfo::OnMessage(CGUIMessage& message)
           OnInstall();
           return true;
         }
-        else if (CGUIDialogYesNo::ShowAndGetInput(24037, 750, 0, 0))
+        else
         {
           OnUninstall();
           return true;
@@ -181,30 +181,44 @@ void CGUIDialogAddonInfo::OnInstall()
   Close();
 }
 
-void CGUIDialogAddonInfo::OnUninstall()
+bool CGUIDialogAddonInfo::PromptIfDependency(int heading, int line2)
 {
-  if (!m_localAddon.get())
-    return;
+  if (!m_localAddon)
+    return false;
 
-  // ensure the addon is not a dependency of other installed addons
   VECADDONS addons;
-  CStdStringArray deps;
+  vector<string> deps;
   CAddonMgr::Get().GetAllAddons(addons);
-  for (VECADDONS::iterator it  = addons.begin();
-                           it != addons.end();++it)
+  for (VECADDONS::const_iterator it  = addons.begin();
+       it != addons.end();++it)
   {
-    if ((*it)->GetDeps().find(m_localAddon->ID()) != (*it)->GetDeps().end())
+    ADDONDEPS::const_iterator i = (*it)->GetDeps().find(m_localAddon->ID());
+    if (i != (*it)->GetDeps().end() && !i->second.second) // non-optional dependency
       deps.push_back((*it)->Name());
   }
 
-  if (!CAddonInstaller::Get().CheckDependencies(m_localAddon) && deps.size())
+  if (!deps.empty())
   {
-    CStdString strLine0, strLine1;
-    StringUtils::JoinString(deps, ", ", strLine1);
-    strLine0.Format(g_localizeStrings.Get(24046), m_localAddon->Name().c_str());
-    CGUIDialogOK::ShowAndGetInput(24037, strLine0, strLine1, 24047);
-    return;
+    string line0 = StringUtils::Format(g_localizeStrings.Get(24046), m_localAddon->Name().c_str());
+    string line1 = StringUtils::Join(deps, ", ");
+    CGUIDialogOK::ShowAndGetInput(heading, line0, line1, line2);
+    return true;
   }
+  return false;
+}
+
+void CGUIDialogAddonInfo::OnUninstall()
+{
+  if (!m_localAddon.get())
+    return;
+
+  // ensure the addon is not a dependency of other installed addons
+  if (PromptIfDependency(24037, 24047))
+    return;
+
+  // prompt user to be sure
+  if (CGUIDialogYesNo::ShowAndGetInput(24037, 750, 0, 0))
+    return;
 
   // ensure the addon isn't disabled in our database
   CAddonMgr::Get().DisableAddon(m_localAddon->ID(), false);
@@ -220,6 +234,9 @@ void CGUIDialogAddonInfo::OnEnable(bool enable)
   if (!m_localAddon.get())
     return;
 
+  if (!enable && PromptIfDependency(24075, 24091))
+    return;
+
   CAddonMgr::Get().DisableAddon(m_localAddon->ID(), !enable);
   SetItem(m_item);
   UpdateControls();
index c5dab50..a46eb72 100644 (file)
@@ -59,6 +59,13 @@ protected:
   void OnChangeLog();
   void OnRollback();
 
+  /*! \brief check if the add-on is a dependency of others, and if so prompt the user.
+   \param heading the label for the heading of the prompt dialog
+   \param line2 the action that could not be completed.
+   \return true if prompted, false otherwise.
+   */
+  bool PromptIfDependency(int heading, int line2);
+
   CFileItemPtr m_item;
   ADDON::AddonPtr m_addon;
   ADDON::AddonPtr m_localAddon;
index 1ac7ef9..d7f941f 100644 (file)
@@ -38,7 +38,7 @@ namespace ADDON
     ADDON_PVRDLL,
     ADDON_SCRIPT,
     ADDON_SCRIPT_WEATHER,
-    ADDON_SCRIPT_SUBTITLES,
+    ADDON_SUBTITLE_MODULE,
     ADDON_SCRIPT_LYRICS,
     ADDON_SCRAPER_ALBUMS,
     ADDON_SCRAPER_ARTISTS,
index f13e3ea..eb18f5b 100644 (file)
@@ -237,7 +237,7 @@ bool CRepositoryUpdateJob::DoWork()
       break;
 
     if (!CAddonInstaller::Get().CheckDependencies(addons[i]))
-      addons[i]->Props().broken = g_localizeStrings.Get(24044);
+      addons[i]->Props().broken = "DEPSNOTMET";
 
     // invalidate the art associated with this item
     if (!addons[i]->Props().fanart.empty())
@@ -273,8 +273,11 @@ bool CRepositoryUpdateJob::DoWork()
     {
       if (database.IsAddonBroken(addons[i]->ID()).IsEmpty())
       {
+        std::string line = g_localizeStrings.Get(24096);
+        if (addons[i]->Props().broken == "DEPSNOTMET")
+          line = g_localizeStrings.Get(24104);
         if (addon && CGUIDialogYesNo::ShowAndGetInput(addons[i]->Name(),
-                                             g_localizeStrings.Get(24096),
+                                             line,
                                              g_localizeStrings.Get(24097),
                                              ""))
           CAddonMgr::Get().DisableAddon(addons[i]->ID());
index 6e85a95..e177eda 100644 (file)
@@ -25,8 +25,8 @@
 #include "filesystem/File.h"
 #include "filesystem/SpecialProtocol.h"
 #include "guilib/WindowIDs.h"
-#include "settings/Setting.h"
 #include "settings/Settings.h"
+#include "settings/lib/Setting.h"
 #include "utils/URIUtils.h"
 #include "utils/log.h"
 #include "utils/StringUtils.h"
index 39f52a0..50012b0 100644 (file)
@@ -576,6 +576,25 @@ extern "C"
   void SetSpeed(int speed);
 
   /*!
+   *  Get actual playing time from addon. With timeshift enabled this is
+   *  different to live.
+   *  @return time as UTC
+   */
+  time_t GetPlayingTime();
+
+  /*!
+   *  Get time of oldest packet in timeshift buffer
+   *  @return time as UTC
+   */
+  time_t GetBufferTimeStart();
+
+  /*!
+   *  Get time of latest packet in timeshift buffer
+   *  @return time as UTC
+   */
+  time_t GetBufferTimeEnd();
+
+  /*!
    * Called by XBMC to assign the function pointers of this add-on to pClient.
    * @param pClient The struct to assign the function pointers to.
    */
@@ -651,6 +670,10 @@ extern "C"
     pClient->DemuxAbort                     = DemuxAbort;
     pClient->DemuxFlush                     = DemuxFlush;
     pClient->DemuxRead                      = DemuxRead;
+
+    pClient->GetPlayingTime                 = GetPlayingTime;
+    pClient->GetBufferTimeStart             = GetBufferTimeStart;
+    pClient->GetBufferTimeEnd               = GetBufferTimeEnd;
   };
 };
 
index 36ef0aa..94e1a59 100644 (file)
@@ -75,10 +75,10 @@ struct DemuxPacket;
 #define PVR_STREAM_MAX_STREAMS 20
 
 /* current PVR API version */
-#define XBMC_PVR_API_VERSION "1.8.1"
+#define XBMC_PVR_API_VERSION "1.9.0"
 
 /* min. PVR API version */
-#define XBMC_PVR_MIN_API_VERSION "1.8.0"
+#define XBMC_PVR_MIN_API_VERSION "1.9.0"
 
 #ifdef __cplusplus
 extern "C" {
@@ -194,6 +194,9 @@ extern "C" {
   {
     char   strAdapterName[PVR_ADDON_NAME_STRING_LENGTH];   /*!< @brief (optional) name of the adapter that's being used */
     char   strAdapterStatus[PVR_ADDON_NAME_STRING_LENGTH]; /*!< @brief (optional) status of the adapter that's being used */
+    char   strServiceName[PVR_ADDON_NAME_STRING_LENGTH];   /*!< @brief (optional) name of the current service */
+    char   strProviderName[PVR_ADDON_NAME_STRING_LENGTH];  /*!< @brief (optional) name of the current service's provider */
+    char   strMuxName[PVR_ADDON_NAME_STRING_LENGTH];       /*!< @brief (optional) name of the current mux */
     int    iSNR;                                           /*!< @brief (optional) signal/noise ratio */
     int    iSignal;                                        /*!< @brief (optional) signal strength */
     long   iBER;                                           /*!< @brief (optional) bit error rate */
@@ -392,6 +395,9 @@ extern "C" {
     bool         (__cdecl* CanSeekStream)(void);
     bool         (__cdecl* SeekTime)(int, bool, double*);
     void         (__cdecl* SetSpeed)(int);
+    time_t       (__cdecl* GetPlayingTime)(void);
+    time_t       (__cdecl* GetBufferTimeStart)(void);
+    time_t       (__cdecl* GetBufferTimeEnd)(void);
   } PVRClient;
 
 #ifdef __cplusplus
index 155b82e..7c19a73 100644 (file)
@@ -146,8 +146,7 @@ int32_t CEventLoop::processInput(AInputEvent* event)
         if (m_inputHandler->onJoyStickKeyEvent(event))
           return true;
       }
-      if (source & AINPUT_SOURCE_CLASS_BUTTON)
-        rtn = m_inputHandler->onKeyboardEvent(event);
+      rtn = m_inputHandler->onKeyboardEvent(event);
       break;
     case AINPUT_EVENT_TYPE_MOTION:
       switch(source)
index 18288bc..c03b439 100644 (file)
@@ -24,7 +24,7 @@
 
 #if defined(TARGET_DARWIN)
   #include "Engines/CoreAudio/CoreAudioAE.h"
-  #include "settings/SettingsManager.h"
+  #include "settings/lib/SettingsManager.h"
 #else
   #include "Engines/ActiveAE/ActiveAE.h"
 #endif
@@ -38,7 +38,7 @@
 #endif
 
 #include "guilib/LocalizeStrings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "utils/StringUtils.h"
 
@@ -407,11 +407,7 @@ void CAEFactory::SettingOptionsAudioDevicesFillerGeneral(const CSetting *setting
       if (sink == sinkList.begin())
         firstDevice = sink->second;
 
-#if defined(TARGET_DARWIN)
-      list.push_back(std::make_pair(sink->first, sink->first));
-#else
       list.push_back(std::make_pair(sink->first, sink->second));
-#endif
 
       if (StringUtils::EqualsNoCase(current, sink->second))
         foundValue = true;
index fa2328f..20fd56e 100644 (file)
@@ -1300,13 +1300,10 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett
     // consider user channel layout for those cases
     // 1. input stream is multichannel
     // 2. stereo upmix is selected
-    // 3. already playing > 2 channels and "audiophile" is not set
-    //    this is the case if e.g. a stream changes config from 5.1 to 2.0
-    //    which would cause a short audio drop-out if we changed the sink
+    // 3. fixed mode
     if ((format.m_channelLayout.Count() > 2) ||
          settings.stereoupmix ||
-         (settings.config == AE_CONFIG_FIXED) ||
-         (m_stats.GetWaterLevel() > 0 && m_internalFormat.m_channelLayout.Count() > 2 && (settings.config != AE_CONFIG_MATCH)))
+         (settings.config == AE_CONFIG_FIXED))
     {
       CAEChannelInfo stdLayout;
       switch (settings.channels)
@@ -1325,10 +1322,16 @@ void CActiveAE::ApplySettingsToFormat(AEAudioFormat &format, AudioSettings &sett
         case 10: stdLayout = AE_CH_LAYOUT_7_1; break;
       }
 
-      if (m_settings.config == AE_CONFIG_MATCH)
-        format.m_channelLayout.ResolveChannels(stdLayout);
-      else
+      if (m_settings.config == AE_CONFIG_FIXED)
         format.m_channelLayout = stdLayout;
+      else
+        format.m_channelLayout.ResolveChannels(stdLayout);;
+    }
+    // don't change from multi to stereo in AUTO mode
+    else if ((settings.config == AE_CONFIG_AUTO) &&
+              m_stats.GetWaterLevel() > 0 && m_internalFormat.m_channelLayout.Count() > 2)
+    {
+      format.m_channelLayout = m_internalFormat.m_channelLayout;
     }
 
     if (m_sink.GetDeviceType(m_settings.device) == AE_DEVTYPE_IEC958)
@@ -1994,7 +1997,7 @@ void CActiveAE::LoadSettings()
   m_settings.channels = CSettings::Get().GetInt("audiooutput.channels");
   m_settings.samplerate = CSettings::Get().GetInt("audiooutput.samplerate");
 
-  m_settings.stereoupmix = CSettings::Get().GetBool("audiooutput.stereoupmix");
+  m_settings.stereoupmix = (m_settings.channels > AE_CH_LAYOUT_2_0) ? CSettings::Get().GetBool("audiooutput.stereoupmix") : false;
   m_settings.normalizelevels = CSettings::Get().GetBool("audiooutput.normalizelevels");
 
   m_settings.passthrough = m_settings.config == AE_CONFIG_FIXED ? false : CSettings::Get().GetBool("audiooutput.passthrough");
index 400ff91..d606d83 100644 (file)
@@ -380,6 +380,9 @@ unsigned int CCoreAudioAEStream::AddData(void *data, unsigned int size)
   unsigned int addsize  = size;
   unsigned int channelsInBuffer = m_chLayoutCountStream;
 
+  if (m_flushRequested && m_paused)
+    InternalFlush();
+
   if (!m_valid || size == 0 || data == NULL || !m_Buffer || m_flushRequested)
     return 0;
 
index 6a6b7c8..13fa3be 100644 (file)
@@ -209,7 +209,6 @@ public:
   virtual void DoAudioWork(){};
   virtual bool OnAction(const CAction &action) { return false; };
 
-  virtual bool GetCurrentSubtitle(CStdString& strSubtitle) { strSubtitle = ""; return false; }
   //returns a state that is needed for resuming from a specific time
   virtual CStdString GetPlayerState() { return ""; };
   virtual bool SetPlayerState(CStdString state) { return false;};
index 4803029..d964285 100644 (file)
@@ -1,6 +1,7 @@
 SRCS  = BaseRenderer.cpp
 SRCS += OverlayRenderer.cpp
 SRCS += OverlayRendererUtil.cpp
+SRCS += OverlayRendererGUI.cpp
 SRCS += RenderCapture.cpp
 SRCS += RenderManager.cpp
 SRCS += RenderFlags.cpp
index ce9584d..62f1e86 100644 (file)
 #include "settings/DisplaySettings.h"
 #include "threads/SingleLock.h"
 #include "utils/MathUtils.h"
+#include "OverlayRendererGUI.h"
 #if defined(HAS_GL) || defined(HAS_GLES)
 #include "OverlayRendererGL.h"
 #elif defined(HAS_DX)
 #include "OverlayRendererDX.h"
 #endif
 
-
 using namespace OVERLAY;
 
 
@@ -332,6 +332,9 @@ COverlay* CRenderer::Convert(CDVDOverlay* o, double pts)
     r = new COverlayImageDX((CDVDOverlaySpu*)o);
 #endif
 
+  if(!r && o->IsOverlayType(DVDOVERLAY_TYPE_TEXT))
+    r = new COverlayText((CDVDOverlayText*)o);
+
   if(r)
     o->m_overlay = r->Acquire();
   return r;
index f8278bb..7be2c4c 100644 (file)
@@ -65,6 +65,7 @@ namespace OVERLAY {
 
     enum EPosition
     { POSITION_ABSOLUTE
+    , POSITION_ABSOLUTE_SCREEN
     , POSITION_RELATIVE
     } m_pos;
 
diff --git a/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp b/xbmc/cores/VideoRenderers/OverlayRendererGUI.cpp
new file mode 100644 (file)
index 0000000..8567a2d
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ *  Copyright (C) 2005-2013 Team XBMC
+ *  http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "system.h"
+
+#include "OverlayRendererGUI.h"
+#include "settings/Settings.h"
+
+#include "filesystem/File.h"
+#include "Util.h"
+#include "utils/URIUtils.h"
+#include "utils/StringUtils.h"
+#include "utils/log.h"
+#include "guilib/GUITextLayout.h"
+#include "guilib/GUIFontManager.h"
+#include "guilib/GUIFont.h"
+#include "cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayText.h"
+#include "cores/VideoRenderers/RenderManager.h"
+
+using namespace OVERLAY;
+
+static color_t color[8] = { 0xFFFFFF00
+                          , 0xFFFFFFFF
+                          , 0xFF0099FF
+                          , 0xFF00FF00
+                          , 0xFFCCFF00
+                          , 0xFF00FFFF
+                          , 0xFFE5E5E5
+                          , 0xFFC0C0C0 };
+
+static CGUITextLayout* GetFontLayout()
+{
+  if (CUtil::IsUsingTTFSubtitles())
+  { std::string font_file = CSettings::Get().GetString("subtitles.font");
+    std::string font_path = URIUtils::AddFileToFolder("special://home/media/Fonts/", font_file);
+    if (!XFILE::CFile::Exists(font_path))
+      font_path = URIUtils::AddFileToFolder("special://xbmc/media/Fonts/", font_file);
+
+    // We scale based on PAL4x3 - this at least ensures all sizing is constant across resolutions.
+    RESOLUTION_INFO pal(720, 576, 0);
+    CGUIFont *subtitle_font = g_fontManager.LoadTTF("__subtitle__"
+                                                    , font_path
+                                                    , color[CSettings::Get().GetInt("subtitles.color")]
+                                                    , 0
+                                                    , CSettings::Get().GetInt("subtitles.height")
+                                                    , CSettings::Get().GetInt("subtitles.style")
+                                                    , false, 1.0f, 1.0f, &pal, true);
+    CGUIFont *border_font   = g_fontManager.LoadTTF("__subtitleborder__"
+                                                    , font_path
+                                                    , 0xFF000000
+                                                    , 0
+                                                    , CSettings::Get().GetInt("subtitles.height")
+                                                    , CSettings::Get().GetInt("subtitles.style")
+                                                    , true, 1.0f, 1.0f, &pal, true);
+    if (!subtitle_font || !border_font)
+      CLog::Log(LOGERROR, "CGUIWindowFullScreen::OnMessage(WINDOW_INIT) - Unable to load subtitle font");
+    else
+      return new CGUITextLayout(subtitle_font, true, 0, border_font);
+  }
+
+  return NULL;
+}
+
+COverlayText::COverlayText(CDVDOverlayText * src)
+{
+  CDVDOverlayText::CElement* e = src->m_pHead;
+  while (e)
+  {
+    if (e->IsElementType(CDVDOverlayText::ELEMENT_TYPE_TEXT))
+    {
+      CDVDOverlayText::CElementText* t = (CDVDOverlayText::CElementText*)e;
+      m_text += t->m_text;
+      m_text += "\n";
+    }
+    e = e->pNext;
+  }
+
+  // Avoid additional line breaks
+  while(StringUtils::EndsWith(m_text, "\n"))
+    m_text = StringUtils::Left(m_text, m_text.length() - 1);
+
+  // Remove HTML-like tags from the subtitles until
+  StringUtils::Replace(m_text, "\\r", "");
+  StringUtils::Replace(m_text, "\r", "");
+  StringUtils::Replace(m_text, "\\n", "[CR]");
+  StringUtils::Replace(m_text, "\n", "[CR]");
+  StringUtils::Replace(m_text, "<br>", "[CR]");
+  StringUtils::Replace(m_text, "\\N", "[CR]");
+  StringUtils::Replace(m_text, "<i>", "[I]");
+  StringUtils::Replace(m_text, "</i>", "[/I]");
+  StringUtils::Replace(m_text, "<b>", "[B]");
+  StringUtils::Replace(m_text, "</b>", "[/B]");
+  StringUtils::Replace(m_text, "<u>", "");
+  StringUtils::Replace(m_text, "<p>", "");
+  StringUtils::Replace(m_text, "<P>", "");
+  StringUtils::Replace(m_text, "&nbsp;", "");
+  StringUtils::Replace(m_text, "</u>", "");
+  StringUtils::Replace(m_text, "</i", "[/I]"); // handle tags which aren't closed properly (happens).
+  StringUtils::Replace(m_text, "</b", "[/B]");
+  StringUtils::Replace(m_text, "</u", "");
+
+  m_layout = GetFontLayout();
+
+  m_subalign = CSettings::Get().GetInt("subtitles.align");
+  if (m_subalign == SUBTITLE_ALIGN_MANUAL)
+  {
+    m_align  = ALIGN_SUBTITLE;
+    m_pos    = POSITION_RELATIVE;
+    m_x      = 0.0f;
+    m_y      = 0.0f;
+  }
+  else
+  {
+    m_align  = ALIGN_VIDEO;
+    m_pos    = POSITION_RELATIVE;
+    m_x      = 0.5f;
+    if(m_subalign == SUBTITLE_ALIGN_TOP_INSIDE
+    || m_subalign == SUBTITLE_ALIGN_TOP_OUTSIDE)
+      m_y    = 0.0f;
+    else
+      m_y    = 1.0f;
+  }
+  m_width  = 0;
+  m_height = 0;
+}
+
+COverlayText::~COverlayText()
+{
+  delete m_layout;
+}
+
+void COverlayText::Render(OVERLAY::SRenderState &state)
+{
+  if(m_layout == NULL)
+    return;
+
+  /* until we can get gfx scaling correct in windowed mode, we must disable this */
+  if(!g_graphicsContext.IsFullScreenVideo())
+    return;
+
+  CRect rs, rd;
+  g_renderManager.GetVideoRect(rs, rd);
+  RESOLUTION_INFO res = g_graphicsContext.GetResInfo();
+
+  float width_max = (float) res.Overscan.right - res.Overscan.left;
+  float y, width, height;
+  m_layout->Update(m_text, width_max * 0.9f, false, true); // true to force LTR reading order (most Hebrew subs are this format)
+  m_layout->GetTextExtent(width, height);
+
+  if (m_subalign == SUBTITLE_ALIGN_MANUAL
+  ||  m_subalign == SUBTITLE_ALIGN_TOP_OUTSIDE
+  ||  m_subalign == SUBTITLE_ALIGN_BOTTOM_INSIDE)
+    y = state.y - height;
+  else
+    y = state.y;
+
+  // clamp inside screen
+  y = std::max(y, (float) res.Overscan.top);
+  y = std::min(y, res.Overscan.bottom - height);
+
+  m_layout->RenderOutline(state.x, y, 0, 0xFF000000, XBFONT_CENTER_X, width_max);
+}
diff --git a/xbmc/cores/VideoRenderers/OverlayRendererGUI.h b/xbmc/cores/VideoRenderers/OverlayRendererGUI.h
new file mode 100644 (file)
index 0000000..9099ea6
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ *  Copyright (C) 2005-2013 Team XBMC
+ *  http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include "OverlayRenderer.h"
+#include <string>
+
+enum SubtitleAlign
+{
+  SUBTITLE_ALIGN_MANUAL         = 0,
+  SUBTITLE_ALIGN_BOTTOM_INSIDE,
+  SUBTITLE_ALIGN_BOTTOM_OUTSIDE,
+  SUBTITLE_ALIGN_TOP_INSIDE,
+  SUBTITLE_ALIGN_TOP_OUTSIDE
+};
+
+class CGUITextLayout;
+class CDVDOverlayText;
+
+namespace OVERLAY {
+
+class COverlayText
+: public COverlay
+{
+public:
+  COverlayText() {}
+  COverlayText(CDVDOverlayText* src);
+  virtual ~COverlayText();
+  virtual void Render(SRenderState& state);
+
+  CGUITextLayout* m_layout;
+  std::string     m_text;
+  int             m_subalign;
+};
+
+}
\ No newline at end of file
index 249222a..0bc2068 100644 (file)
@@ -36,6 +36,7 @@
 #include "settings/AdvancedSettings.h"
 #include "settings/MediaSettings.h"
 #include "settings/Settings.h"
+#include "guilib/GUIFontManager.h"
 
 #if defined(HAS_GL)
   #include "LinuxRendererGL.h"
@@ -165,14 +166,6 @@ void CXBMCRenderManager::WaitPresentTime(double presenttime)
     return;
   }
 
-  bool ismaster = CDVDClock::IsMasterClock();
-
-  //the videoreferenceclock updates its clock on every vertical blank
-  //we want every frame's presenttime to end up in the middle of two vblanks
-  //if CDVDPlayerAudio is the master clock, we add a correction to the presenttime
-  if (ismaster)
-    presenttime += m_presentcorr * frametime;
-
   double clock     = CDVDClock::WaitAbsoluteClock(presenttime * DVD_TIME_BASE) / DVD_TIME_BASE;
   double target    = 0.5;
   double error     = ( clock - presenttime ) / frametime - target;
@@ -202,20 +195,11 @@ void CXBMCRenderManager::WaitPresentTime(double presenttime)
   avgerror /= ERRORBUFFSIZE;
 
 
-  //if CDVDPlayerAudio is not the master clock, we change the clock speed slightly
+  //we change the clock speed slightly
   //to make every frame's presenttime end up in the middle of two vblanks
-  if (!ismaster)
-  {
-    //integral correction, clamp to -0.5:0.5 range
-    m_presentcorr = std::max(std::min(m_presentcorr + avgerror * 0.01, 0.1), -0.1);
-    g_VideoReferenceClock.SetFineAdjust(1.0 - avgerror * 0.01 - m_presentcorr * 0.01);
-  }
-  else
-  {
-    //integral correction, wrap to -0.5:0.5 range
-    m_presentcorr = wrap(m_presentcorr + avgerror * 0.01, target - 1.0, target);
-    g_VideoReferenceClock.SetFineAdjust(1.0);
-  }
+  //integral correction, clamp to -0.5:0.5 range
+  m_presentcorr = std::max(std::min(m_presentcorr + avgerror * 0.01, 0.1), -0.1);
+  g_VideoReferenceClock.SetFineAdjust(1.0 - avgerror * 0.01 - m_presentcorr * 0.01);
 
   //printf("%f %f % 2.0f%% % f % f\n", presenttime, clock, m_presentcorr * 100, error, error_org);
 }
@@ -454,6 +438,8 @@ void CXBMCRenderManager::UnInit()
   m_bIsStarted = false;
 
   m_overlays.Flush();
+  g_fontManager.Unload("__subtitle__");
+  g_fontManager.Unload("__subtitleborder__");
 
   // free renderer resources.
   // TODO: we may also want to release the renderer here.
index 3d3d3f7..b53d187 100644 (file)
@@ -23,7 +23,7 @@
 #include "DVDAudio.h"
 #include "DVDClock.h"
 #include "DVDCodecs/DVDCodecs.h"
-#include "DVDPlayerAudio.h"
+#include "DVDCodecs/Audio/DVDAudioCodec.h"
 #include "cores/AudioEngine/AEFactory.h"
 #include "cores/AudioEngine/Interfaces/AEStream.h"
 #include "settings/MediaSettings.h"
index 4df0c58..a7bdecc 100644 (file)
@@ -61,11 +61,6 @@ public:
   static double GetFrequency() { return (double)m_systemFrequency ; }
   static double WaitAbsoluteClock(double target);
 
-  //when m_ismasterclock is true, CDVDPlayerAudio synchronizes the clock to the audio stream
-  //when it's false, CDVDPlayerAudio synchronizes the audio stream to the clock
-  //the rendermanager needs to know about that because it can synchronize the videoreferenceclock to the video timestamps
-  static void SetMasterClock(bool ismasterclock) { m_ismasterclock = ismasterclock; }
-  static bool IsMasterClock()                    { return m_ismasterclock;          }
   static CDVDClock* GetMasterClock();
 protected:
   static void   CheckSystemClock();
index 9298f9e..08839ee 100644 (file)
@@ -22,6 +22,9 @@
 
 #include "system.h"
 #include "cores/AudioEngine/Utils/AEAudioFormat.h"
+#include "cores/AudioEngine/Utils/AEUtil.h"
+#include "DVDClock.h"
+
 
 #if (defined HAVE_CONFIG_H) && (!defined TARGET_WINDOWS)
   #include "config.h"
@@ -35,6 +38,23 @@ class CDVDStreamInfo;
 class CDVDCodecOption;
 class CDVDCodecOptions;
 
+typedef struct stDVDAudioFrame
+{
+  uint8_t*          data;
+  double            pts;
+  double            duration;
+  unsigned int      size;
+
+  int               channel_count;
+  int               encoded_channel_count;
+  CAEChannelInfo    channel_layout;
+  enum AEDataFormat data_format;
+  int               bits_per_sample;
+  int               sample_rate;
+  int               encoded_sample_rate;
+  bool              passthrough;
+} DVDAudioFrame;
+
 class CDVDAudioCodec
 {
 public:
@@ -59,12 +79,37 @@ public:
   virtual int Decode(uint8_t* pData, int iSize) = 0;
 
   /*
-   * returns nr of bytes used or -1 on error
+   * returns nr of bytes in decode buffer
    * the data is valid until the next Decode call
    */
   virtual int GetData(uint8_t** dst) = 0;
 
   /*
+   * the data is valid until the next Decode call
+   */
+  virtual void GetData(DVDAudioFrame &frame)
+  {
+    frame.size                  = GetData(&frame.data);
+    if(frame.size == 0u)
+      return;
+    frame.channel_layout        = GetChannelMap();
+    frame.channel_count         = GetChannels();
+    frame.encoded_channel_count = GetEncodedChannels();
+    frame.data_format           = GetDataFormat();
+    frame.bits_per_sample       = CAEUtil::DataFormatToBits(frame.data_format);
+    frame.sample_rate           = GetSampleRate();
+    frame.encoded_sample_rate   = GetEncodedSampleRate();
+    frame.passthrough           = NeedPassthrough();
+    frame.pts                   = DVD_NOPTS_VALUE;
+    // compute duration.
+    int n = (frame.channel_count * frame.bits_per_sample * frame.sample_rate)>>3;
+    if (n)
+      frame.duration = ((double)frame.size * DVD_TIME_BASE) / n;
+    else
+      frame.duration = 0.0;
+  }
+
+  /*
    * resets the decoder
    */
   virtual void Reset() = 0;
index 143675a..3b316ae 100644 (file)
@@ -253,6 +253,11 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
     CLog::Log(LOGDEBUG,"CDVDVideoCodecFFmpeg::Open() Keep default threading for Hi10p: %d",
                         m_pCodecContext->thread_type);
   }
+  else if (CSettings::Get().GetBool("videoplayer.useframemtdec"))
+  {
+    CLog::Log(LOGDEBUG,"CDVDVideoCodecFFmpeg::Open() Keep default threading %d by videoplayer.useframemtdec",
+                        m_pCodecContext->thread_type);
+  }
   else
     m_pCodecContext->thread_type = FF_THREAD_SLICE;
 
index fe659b9..b02792a 100644 (file)
@@ -226,6 +226,9 @@ bool CDVDInputStreamRTMP::Pause(double dTime)
   CSingleLock lock(m_RTMPSection);
 
   m_bPaused = !m_bPaused;
+
+  CLog::Log(LOGNOTICE, "RTMP Pause %s requested", m_bPaused ? "TRUE" : "FALSE");
+
   m_libRTMP.Pause(m_rtmp, m_bPaused);
 
   return true;
diff --git a/xbmc/cores/dvdplayer/DVDPerformanceCounter.cpp b/xbmc/cores/dvdplayer/DVDPerformanceCounter.cpp
deleted file mode 100644 (file)
index af1ff00..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- *      Copyright (C) 2005-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "DVDPerformanceCounter.h"
-#include "DVDMessageQueue.h"
-#include "utils/TimeUtils.h"
-
-#include "dvd_config.h"
-
-#ifdef DVDDEBUG_WITH_PERFORMANCE_COUNTER
-#include <xbdm.h>
-#endif
-
-HRESULT __stdcall DVDPerformanceCounterAudioQueue(PLARGE_INTEGER numerator, PLARGE_INTEGER demoninator)
-{
-  numerator->QuadPart = 0LL;
-  //g_dvdPerformanceCounter.Lock();
-  if (g_dvdPerformanceCounter.m_pAudioQueue)
-  {
-    int iSize     = g_dvdPerformanceCounter.m_pAudioQueue->GetDataSize();
-    int iMaxSize  = g_dvdPerformanceCounter.m_pAudioQueue->GetMaxDataSize();
-    if (iMaxSize > 0)
-    {
-      int iPercent  = (iSize * 100) / iMaxSize;
-      if (iPercent > 100) iPercent = 100;
-      numerator->QuadPart = iPercent;
-    }
-  }
-  //g_dvdPerformanceCounter.Unlock();
-  return S_OK;
-}
-
-HRESULT __stdcall DVDPerformanceCounterVideoQueue(PLARGE_INTEGER numerator, PLARGE_INTEGER demoninator)
-{
-  numerator->QuadPart = 0LL;
-  //g_dvdPerformanceCounter.Lock();
-  if (g_dvdPerformanceCounter.m_pVideoQueue)
-  {
-    int iSize     = g_dvdPerformanceCounter.m_pVideoQueue->GetDataSize();
-    int iMaxSize  = g_dvdPerformanceCounter.m_pVideoQueue->GetMaxDataSize();
-    if (iMaxSize > 0)
-    {
-      int iPercent  = (iSize * 100) / iMaxSize;
-      if (iPercent > 100) iPercent = 100;
-      numerator->QuadPart = iPercent;
-    }
-  }
-  //g_dvdPerformanceCounter.Unlock();
-  return S_OK;
-}
-
-inline int64_t get_thread_cpu_usage(ProcessPerformance* p)
-{
-  if (p->thread)
-  {
-    ULARGE_INTEGER old_time_thread;
-    ULARGE_INTEGER old_time_system;
-
-    old_time_thread.QuadPart = p->timer_thread.QuadPart;
-    old_time_system.QuadPart = p->timer_system.QuadPart;
-
-    p->timer_thread.QuadPart = p->thread->GetAbsoluteUsage();
-    p->timer_system.QuadPart = CurrentHostCounter();
-
-    int64_t threadTime = (p->timer_thread.QuadPart - old_time_thread.QuadPart);
-    int64_t systemTime = (p->timer_system.QuadPart - old_time_system.QuadPart);
-
-    if (systemTime > 0 && threadTime > 0) return ((threadTime * 100) / systemTime);
-  }
-  return 0LL;
-}
-
-HRESULT __stdcall DVDPerformanceCounterVideoDecodePerformance(PLARGE_INTEGER numerator, PLARGE_INTEGER demoninator)
-{
-  //g_dvdPerformanceCounter.Lock();
-  numerator->QuadPart = get_thread_cpu_usage(&g_dvdPerformanceCounter.m_videoDecodePerformance);
-  //g_dvdPerformanceCounter.Unlock();
-  return S_OK;
-}
-
-HRESULT __stdcall DVDPerformanceCounterAudioDecodePerformance(PLARGE_INTEGER numerator, PLARGE_INTEGER demoninator)
-{
-  //g_dvdPerformanceCounter.Lock();
-  numerator->QuadPart = get_thread_cpu_usage(&g_dvdPerformanceCounter.m_audioDecodePerformance);
-  //g_dvdPerformanceCounter.Unlock();
-  return S_OK;
-}
-
-HRESULT __stdcall DVDPerformanceCounterMainPerformance(PLARGE_INTEGER numerator, PLARGE_INTEGER demoninator)
-{
-  //g_dvdPerformanceCounter.Lock();
-  numerator->QuadPart = get_thread_cpu_usage(&g_dvdPerformanceCounter.m_mainPerformance);
-  //g_dvdPerformanceCounter.Unlock();
-  return S_OK;
-}
-
-CDVDPerformanceCounter g_dvdPerformanceCounter;
-
-CDVDPerformanceCounter::CDVDPerformanceCounter()
-{
-  m_pAudioQueue = NULL;
-  m_pVideoQueue = NULL;
-
-  memset(&m_videoDecodePerformance, 0, sizeof(m_videoDecodePerformance)); // video decoding
-  memset(&m_audioDecodePerformance, 0, sizeof(m_audioDecodePerformance)); // audio decoding + output to audio device
-  memset(&m_mainPerformance,        0, sizeof(m_mainPerformance));        // reading files, demuxing, decoding of subtitles + menu overlays
-
-  Initialize();
-}
-
-CDVDPerformanceCounter::~CDVDPerformanceCounter()
-{
-  DeInitialize();
-}
-
-bool CDVDPerformanceCounter::Initialize()
-{
-  CSingleLock lock(m_critSection);
-
-#ifdef DVDDEBUG_WITH_PERFORMANCE_COUNTER
-
-  DmRegisterPerformanceCounter("DVDAudioQueue",               DMCOUNT_SYNC, DVDPerformanceCounterAudioQueue);
-  DmRegisterPerformanceCounter("DVDVideoQueue",               DMCOUNT_SYNC, DVDPerformanceCounterVideoQueue);
-  DmRegisterPerformanceCounter("DVDVideoDecodePerformance",   DMCOUNT_SYNC, DVDPerformanceCounterVideoDecodePerformance);
-  DmRegisterPerformanceCounter("DVDAudioDecodePerformance",   DMCOUNT_SYNC, DVDPerformanceCounterAudioDecodePerformance);
-  DmRegisterPerformanceCounter("DVDMainPerformance",          DMCOUNT_SYNC, DVDPerformanceCounterMainPerformance);
-
-#endif
-
-  return true;
-}
-
-void CDVDPerformanceCounter::DeInitialize()
-{
-
-}
-
diff --git a/xbmc/cores/dvdplayer/DVDPerformanceCounter.h b/xbmc/cores/dvdplayer/DVDPerformanceCounter.h
deleted file mode 100644 (file)
index b57d9e6..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#pragma once
-
-/*
- *      Copyright (C) 2005-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#define FILETIME_TO_ULARGE_INTEGER(ularge, filetime) { ularge.u.HighPart = filetime.dwHighDateTime; ularge.u.LowPart = filetime.dwLowDateTime; }
-
-#include "system.h"
-#include "threads/Thread.h"
-#include "threads/SingleLock.h"
-
-class CDVDMessageQueue;
-
-typedef struct stProcessPerformance
-{
-  ULARGE_INTEGER  timer_thread;
-  ULARGE_INTEGER  timer_system;
-  CThread*        thread;
-} ProcessPerformance;
-
-class CDVDPerformanceCounter
-{
-public:
-  CDVDPerformanceCounter();
-  ~CDVDPerformanceCounter();
-
-  bool Initialize();
-  static void DeInitialize();
-
-  void EnableAudioQueue(CDVDMessageQueue* pQueue)     { CSingleLock lock(m_critSection); m_pAudioQueue = pQueue; }
-  void DisableAudioQueue()                            { CSingleLock lock(m_critSection); m_pAudioQueue = NULL;  }
-
-  void EnableVideoQueue(CDVDMessageQueue* pQueue)     { CSingleLock lock(m_critSection); m_pVideoQueue = pQueue;  }
-  void DisableVideoQueue()                            { CSingleLock lock(m_critSection); m_pVideoQueue = NULL;  }
-
-  void EnableVideoDecodePerformance(CThread *thread)  { CSingleLock lock(m_critSection); m_videoDecodePerformance.thread = thread;  }
-  void DisableVideoDecodePerformance()                { CSingleLock lock(m_critSection); m_videoDecodePerformance.thread = NULL;  }
-
-  void EnableAudioDecodePerformance(CThread *thread)  { CSingleLock lock(m_critSection); m_audioDecodePerformance.thread = thread;  }
-  void DisableAudioDecodePerformance()                { CSingleLock lock(m_critSection); m_audioDecodePerformance.thread = NULL;  }
-
-  void EnableMainPerformance(CThread *thread)         { CSingleLock lock(m_critSection); m_mainPerformance.thread = thread;  }
-  void DisableMainPerformance()                       { CSingleLock lock(m_critSection); m_mainPerformance.thread = NULL;  }
-
-  CDVDMessageQueue*         m_pAudioQueue;
-  CDVDMessageQueue*         m_pVideoQueue;
-
-  ProcessPerformance        m_videoDecodePerformance;
-  ProcessPerformance        m_audioDecodePerformance;
-  ProcessPerformance        m_mainPerformance;
-
-private:
-  CCriticalSection m_critSection;
-};
-
-extern CDVDPerformanceCounter g_dvdPerformanceCounter;
-
index c2bbc82..7b742ea 100644 (file)
@@ -49,7 +49,6 @@
 #include "guilib/StereoscopicsManager.h"
 #include "Application.h"
 #include "ApplicationMessenger.h"
-#include "DVDPerformanceCounter.h"
 #include "filesystem/File.h"
 #include "pictures/Picture.h"
 #include "DllSwScale.h"
@@ -137,6 +136,59 @@ std::vector<SelectionStream> CSelectionStreams::Get(StreamType type)
       return (lh) > (rh); \
   } while(0)
 
+class PredicateSubtitleFilter
+{
+private:
+  std::string audiolang;
+  bool original;
+  bool preferexternal;
+public:
+  /** \brief The class' operator() decides if the given (subtitle) SelectionStream is relevant wrt.
+  *          preferred subtitle language and audio language. If the subtitle is relevant <B>false</B> false is returned.
+  *
+  *          A subtitle is relevant if
+  *          - it was previously selected, or
+  *          - it's an external sub and "prefer external subs was selected", or
+  *          - it's a forced sub and "original stream's language" was selected, or
+  *          - it's a forced sub and its language matches the audio's language, or
+  *          - it's a default sub, or
+  *          - its language matches the preferred subtitle's language (unequal to "original stream's language")
+  */
+  PredicateSubtitleFilter(std::string& lang)
+    : audiolang(lang),
+      original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")),
+      preferexternal(CSettings::Get().GetBool("subtitles.preferexternal"))
+  {
+  };
+  
+  bool operator()(const SelectionStream& ss) const
+  {
+    if (ss.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream)
+      return false;
+
+    if (preferexternal)
+    {
+      if(ss.source == STREAM_SOURCE_DEMUX_SUB || ss.source == STREAM_SOURCE_TEXT)
+        return false;
+    }
+
+    if ((ss.flags & CDemuxStream::FLAG_FORCED) && (original || g_LangCodeExpander.CompareLangCodes(ss.language, audiolang)))
+      return false;
+
+    if ((ss.flags & CDemuxStream::FLAG_DEFAULT))
+      return false;
+
+    if(!original)
+    {
+      std::string subtitle_language = g_langInfo.GetSubtitleLanguage();
+      if (g_LangCodeExpander.CompareLangCodes(subtitle_language, ss.language))
+        return false;
+    }
+
+    return true;
+  }
+};
+
 static bool PredicateAudioPriority(const SelectionStream& lh, const SelectionStream& rh)
 {
   PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream
@@ -160,41 +212,82 @@ static bool PredicateAudioPriority(const SelectionStream& lh, const SelectionStr
   return false;
 }
 
-static bool PredicateSubtitlePriority(const SelectionStream& lh, const SelectionStream& rh)
+/** \brief The class' operator() decides if the given (subtitle) SelectionStream lh is 'better than' the given (subtitle) SelectionStream rh.
+*          If lh is 'better than' rh the return value is true, false otherwise.
+*
+*          A subtitle lh is 'better than' a subtitle rh (in evaluation order) if
+*          - lh was previously selected, or
+*          - lh is an external sub and "prefer external subs was selected" and rh not, or
+*          - lh is a forced sub and ("original stream's language" was selected or subtitles are off) and rh not, or
+*          - lh is an external sub and its language matches the preferred subtitle's language (unequal to "original stream's language") and rh not, or
+*          - lh is an external sub and rh not, or
+*          - lh is language matches the preferred subtitle's language (unequal to "original stream's language") and rh not, or
+*          - lh is a default sub and rh not
+*/
+class PredicateSubtitlePriority
 {
-  if(!CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn)
+private:
+  std::string audiolang;
+  bool original;
+  bool preferextsubs;
+  bool subson;
+public:
+  PredicateSubtitlePriority(std::string& lang)
+    : audiolang(lang),
+      original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")),
+      preferextsubs(CSettings::Get().GetBool("subtitles.preferexternal")),
+      subson(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn)
   {
-    PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_FORCED
-                   , rh.flags & CDemuxStream::FLAG_FORCED);
-  }
-
-  PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream
-                 , rh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream);
+  };
 
-  CStdString subtitle_language = g_langInfo.GetSubtitleLanguage();
-  if(!StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original"))
+  bool operator()(const SelectionStream& lh, const SelectionStream& rh) const
   {
-    PREDICATE_RETURN((lh.source == STREAM_SOURCE_DEMUX_SUB || lh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language)
-                   , (rh.source == STREAM_SOURCE_DEMUX_SUB || rh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language));
-  }
+    PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream
+                   , rh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream);
 
-  PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB
-                 , rh.source == STREAM_SOURCE_DEMUX_SUB);
+    if (preferextsubs)
+    {
+      PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB
+                     , rh.source == STREAM_SOURCE_DEMUX_SUB);
 
-  PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT
-                 , rh.source == STREAM_SOURCE_TEXT);
+      PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT
+                     , rh.source == STREAM_SOURCE_TEXT);
+    }
 
-  if(!StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original"))
-  {
-    PREDICATE_RETURN(g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language)
-                   , g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language));
-  }
+    if(!subson || original)
+    {
+      PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_FORCED && g_LangCodeExpander.CompareLangCodes(lh.language, audiolang)
+                     , rh.flags & CDemuxStream::FLAG_FORCED && g_LangCodeExpander.CompareLangCodes(rh.language, audiolang));
 
-  PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_DEFAULT
-                 , rh.flags & CDemuxStream::FLAG_DEFAULT);
+      PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_FORCED
+                     , rh.flags & CDemuxStream::FLAG_FORCED);
+    }
 
-  return false;
-}
+    CStdString subtitle_language = g_langInfo.GetSubtitleLanguage();
+    if(!original)
+    {
+      PREDICATE_RETURN((lh.source == STREAM_SOURCE_DEMUX_SUB || lh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language)
+                     , (rh.source == STREAM_SOURCE_DEMUX_SUB || rh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language));
+    }
+
+    PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB
+                   , rh.source == STREAM_SOURCE_DEMUX_SUB);
+
+    PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT
+                   , rh.source == STREAM_SOURCE_TEXT);
+
+    if(!original)
+    {
+      PREDICATE_RETURN(g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language)
+                     , g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language));
+    }
+
+    PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_DEFAULT
+                   , rh.flags & CDemuxStream::FLAG_DEFAULT);
+
+    return false;
+  }
+};
 
 static bool PredicateVideoPriority(const SelectionStream& lh, const SelectionStream& rh)
 {
@@ -406,7 +499,8 @@ CDVDPlayer::CDVDPlayer(IPlayerCallback& callback)
       m_dvdPlayerAudio(&m_clock, m_messenger),
       m_dvdPlayerSubtitle(&m_overlayContainer),
       m_dvdPlayerTeletext(),
-      m_ready(true)
+      m_ready(true),
+      m_DemuxerPausePending(false)
 {
   m_pDemuxer = NULL;
   m_pSubtitleDemuxer = NULL;
@@ -547,7 +641,6 @@ void CDVDPlayer::OnStartup()
 
   m_messenger.Init();
 
-  g_dvdPerformanceCounter.EnableMainPerformance(this);
   CUtil::ClearTempFonts();
 }
 
@@ -730,7 +823,11 @@ void CDVDPlayer::OpenDefaultStreams(bool reset)
   m_dvdPlayerVideo.EnableSubtitle(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn);
 
   // open subtitle stream
-  streams = m_SelectionStreams.Get(STREAM_SUBTITLE, PredicateSubtitlePriority);
+  SelectionStream as = m_SelectionStreams.Get(STREAM_AUDIO, GetAudioStream());
+  PredicateSubtitleFilter psf(as.language);
+  streams = m_SelectionStreams.RemoveIf(STREAM_SUBTITLE, psf);
+  PredicateSubtitlePriority psp(as.language);
+  std::stable_sort(streams.begin(), streams.end(), psp);
   valid   = false;
   for(SelectionStreams::iterator it = streams.begin(); it != streams.end() && !valid; ++it)
   {
@@ -742,7 +839,10 @@ void CDVDPlayer::OpenDefaultStreams(bool reset)
     }
   }
   if(!valid)
+  {
     CloseSubtitleStream(true);
+    SetSubtitleVisible(false);
+  }
 
   // open teletext stream
   streams = m_SelectionStreams.Get(STREAM_TELETEXT);
@@ -1089,6 +1189,9 @@ void CDVDPlayer::Process()
     // update application with our state
     UpdateApplication(1000);
 
+    // make sure we run subtitle process here
+    m_dvdPlayerSubtitle.Process(m_clock.GetClock() + m_State.time_offset - m_dvdPlayerVideo.GetSubtitleDelay());
+
     if (CheckDelayedChannelEntry())
       continue;
 
@@ -1096,6 +1199,12 @@ void CDVDPlayer::Process()
     if ((!m_dvdPlayerAudio.AcceptsData() && m_CurrentAudio.id >= 0) ||
         (!m_dvdPlayerVideo.AcceptsData() && m_CurrentVideo.id >= 0))
     {
+      if(m_pDemuxer && m_DemuxerPausePending)
+      {
+        m_DemuxerPausePending = false;
+        m_pDemuxer->SetSpeed(DVD_PLAYSPEED_PAUSE);
+      }
+
       Sleep(10);
       continue;
     }
@@ -1928,8 +2037,6 @@ void CDVDPlayer::SendPlayerMessage(CDVDMsg* pMsg, unsigned int target)
 
 void CDVDPlayer::OnExit()
 {
-  g_dvdPerformanceCounter.DisableMainPerformance();
-
   try
   {
     CLog::Log(LOGNOTICE, "CDVDPlayer::OnExit()");
@@ -2124,6 +2231,7 @@ void CDVDPlayer::HandleMessages()
           {
             CloseAudioStream(false);
             OpenAudioStream(st.id, st.source);
+            AdaptForcedSubtitles();
             m_messenger.Put(new CDVDMsgPlayerSeek(GetTime(), true, true, true, true, true));
           }
         }
@@ -2226,10 +2334,14 @@ void CDVDPlayer::HandleMessages()
         m_dvdPlayerAudio.SetSpeed(speed);
         m_dvdPlayerVideo.SetSpeed(speed);
 
-        // TODO - we really shouldn't pause demuxer
-        //        until our buffers are somewhat filled
+        // We can't pause demuxer until our buffers are full. Doing so will result in continued
+        // calls to Read() which may then block indefinitely (CDVDInputStreamRTMP for example).
         if(m_pDemuxer)
-          m_pDemuxer->SetSpeed(speed);
+        {
+          m_DemuxerPausePending = (speed == DVD_PLAYSPEED_PAUSE);
+          if (!m_DemuxerPausePending)
+            m_pDemuxer->SetSpeed(speed);
+        }
       }
       else if (pMsg->IsType(CDVDMsg::PLAYER_CHANNEL_SELECT_NUMBER) && m_messenger.GetPacketCount(CDVDMsg::PLAYER_CHANNEL_SELECT_NUMBER) == 0)
       {
@@ -3061,6 +3173,35 @@ bool CDVDPlayer::OpenSubtitleStream(int iStream, int source)
   return true;
 }
 
+bool CDVDPlayer::AdaptForcedSubtitles()
+{
+  bool valid = false;
+  SelectionStream ss = m_SelectionStreams.Get(STREAM_SUBTITLE, GetSubtitle());
+  if (ss.flags & CDemuxStream::FLAG_FORCED || !GetSubtitleVisible())
+  {
+    SelectionStream as = m_SelectionStreams.Get(STREAM_AUDIO, GetAudioStream());
+    SelectionStreams streams = m_SelectionStreams.Get(STREAM_SUBTITLE);
+
+    for(SelectionStreams::iterator it = streams.begin(); it != streams.end() && !valid; ++it)
+    {
+      if (it->flags & CDemuxStream::FLAG_FORCED && g_LangCodeExpander.CompareLangCodes(it->language, as.language))
+      {
+        if(OpenSubtitleStream(it->id, it->source))
+        {
+          valid = true;
+          SetSubtitleVisible(true);
+        }
+      }
+    }
+    if(!valid)
+    {
+      CloseSubtitleStream(true);
+      SetSubtitleVisible(false);
+    }
+  }
+  return valid;
+}
+
 bool CDVDPlayer::OpenTeletextStream(int iStream, int source)
 {
   if (!m_pDemuxer)
@@ -3727,24 +3868,6 @@ bool CDVDPlayer::HasMenu()
     return false;
 }
 
-bool CDVDPlayer::GetCurrentSubtitle(CStdString& strSubtitle)
-{
-  double pts = m_clock.GetClock() + m_State.time_offset;
-
-  if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD) && m_CurrentSubtitle.source != STREAM_SOURCE_TEXT && m_CurrentSubtitle.source != STREAM_SOURCE_DEMUX_SUB)
-    return false;
-
-  m_dvdPlayerSubtitle.GetCurrentSubtitle(strSubtitle, pts - m_dvdPlayerVideo.GetSubtitleDelay());
-
-  // In case we stalled, don't output any subs
-  if ((m_dvdPlayerVideo.IsStalled() && HasVideo()) || (m_dvdPlayerAudio.IsStalled() && HasAudio()))
-    strSubtitle = m_lastSub;
-  else
-    m_lastSub = strSubtitle;
-
-  return !strSubtitle.IsEmpty();
-}
-
 CStdString CDVDPlayer::GetPlayerState()
 {
   CSingleLock lock(m_StateSection);
@@ -3840,7 +3963,7 @@ void CDVDPlayer::GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info)
 
   if (index == GetAudioStream())
     info.bitrate = m_dvdPlayerAudio.GetAudioBitrate();
-  else
+  else if (m_pDemuxer)
   {
     CDemuxStreamAudio* stream = m_pDemuxer->GetStreamFromAudioId(index);
     if (stream)
index 1f4b2e8..97a6d85 100644 (file)
@@ -154,6 +154,14 @@ public:
     return streams;
   }
 
+  template<typename Filter>
+  SelectionStreams RemoveIf(StreamType type, Filter filter)
+  {
+    SelectionStreams streams = Get(type);
+    streams.erase(std::remove_if(streams.begin(), streams.end(), filter), streams.end());
+    return streams;
+  }
+
   void             Clear   (StreamType type, StreamSource source);
   int              Source  (StreamSource source, std::string filename);
 
@@ -237,8 +245,6 @@ public:
   virtual bool GetStreamDetails(CStreamDetails &details);
   virtual void GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info);
 
-  virtual bool GetCurrentSubtitle(CStdString& strSubtitle);
-
   virtual CStdString GetPlayerState();
   virtual bool SetPlayerState(CStdString state);
 
@@ -276,6 +282,12 @@ protected:
   bool OpenAudioStream(int iStream, int source, bool reset = true);
   bool OpenVideoStream(int iStream, int source, bool reset = true);
   bool OpenSubtitleStream(int iStream, int source);
+
+  /** \brief Switches forced subtitles to forced subtitles matching the language of the current audio track.
+  *          If these are not available, subtitles are disabled.
+  *   \return true if the subtitles were changed, false otherwise.
+  */
+  bool AdaptForcedSubtitles();
   bool OpenTeletextStream(int iStream, int source);
   bool CloseAudioStream(bool bWaitForBuffers);
   bool CloseVideoStream(bool bWaitForBuffers);
@@ -493,4 +505,6 @@ protected:
 
   bool m_HasVideo;
   bool m_HasAudio;
+
+  bool m_DemuxerPausePending;
 };
index 0fb9dcf..f6df01f 100644 (file)
@@ -24,7 +24,6 @@
 #include "DVDCodecs/Audio/DVDAudioCodec.h"
 #include "DVDCodecs/DVDCodecs.h"
 #include "DVDCodecs/DVDFactoryCodec.h"
-#include "DVDPerformanceCounter.h"
 #include "settings/Settings.h"
 #include "video/VideoReferenceClock.h"
 #include "utils/log.h"
@@ -35,6 +34,7 @@
 
 #include <sstream>
 #include <iomanip>
+#include <math.h>
 
 /* for sync-based resampling */
 #define PROPORTIONAL 20.0
@@ -107,37 +107,28 @@ CDVDPlayerAudio::CDVDPlayerAudio(CDVDClock* pClock, CDVDMessageQueue& parent)
   m_pClock = pClock;
   m_pAudioCodec = NULL;
   m_audioClock = 0;
-  m_droptime = 0;
   m_speed = DVD_PLAYSPEED_NORMAL;
   m_stalled = true;
   m_started = false;
   m_silence = false;
-  m_duration = 0.0;
   m_resampleratio = 1.0;
   m_synctype = SYNC_DISCON;
   m_setsynctype = SYNC_DISCON;
   m_prevsynctype = -1;
   m_error = 0;
-  m_errorbuff = 0;
-  m_errorcount = 0;
+  m_errors.Flush();
   m_syncclock = true;
   m_integral = 0;
-  m_skipdupcount = 0;
   m_prevskipped = false;
   m_maxspeedadjust = 0.0;
 
-  m_errortime = 0;
-  m_freq = CurrentHostFrequency();
-
   m_messageQueue.SetMaxDataSize(6 * 1024 * 1024);
   m_messageQueue.SetMaxTimeSize(8.0);
-  g_dvdPerformanceCounter.EnableAudioQueue(&m_messageQueue);
 }
 
 CDVDPlayerAudio::~CDVDPlayerAudio()
 {
   StopThread();
-  g_dvdPerformanceCounter.DisableAudioQueue();
 
   // close the stream, and don't wait for the audio to be finished
   // CloseStream(true);
@@ -187,7 +178,6 @@ void CDVDPlayerAudio::OpenStream( CDVDStreamInfo &hints, CDVDAudioCodec* codec )
   if (hints.samplerate != m_streaminfo.samplerate)
     SwitchCodecIfNeeded();
 
-  m_droptime = 0;
   m_audioClock = 0;
   m_stalled = m_messageQueue.GetPacketCount(CDVDMsg::DEMUXER_PACKET) == 0;
   m_started = false;
@@ -199,13 +189,10 @@ void CDVDPlayerAudio::OpenStream( CDVDStreamInfo &hints, CDVDAudioCodec* codec )
   m_prevsynctype = -1;
 
   m_error = 0;
-  m_errorbuff = 0;
-  m_errorcount = 0;
+  m_errors.Flush();
   m_integral = 0;
-  m_skipdupcount = 0;
   m_prevskipped = false;
   m_syncclock = true;
-  m_errortime = CurrentHostCounter();
   m_silence = false;
 
   m_maxspeedadjust = CSettings::Get().GetNumber("videoplayer.maxspeedadjust");
@@ -254,7 +241,7 @@ void CDVDPlayerAudio::CloseStream(bool bWaitForBuffers)
 }
 
 // decode one audio frame and returns its uncompressed size
-int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
+int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe)
 {
   int result = 0;
 
@@ -276,44 +263,28 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
         m_audioClock = dts;
 
       int len = m_pAudioCodec->Decode(m_decode.data, m_decode.size);
-      m_audioStats.AddSampleBytes(m_decode.size);
-      if (len < 0)
+      if (len < 0 || len > m_decode.size)
       {
         /* if error, we skip the packet */
-        CLog::Log(LOGERROR, "CDVDPlayerAudio::DecodeFrame - Decode Error. Skipping audio packet");
+        CLog::Log(LOGERROR, "CDVDPlayerAudio::DecodeFrame - Decode Error. Skipping audio packet (%d)", len);
         m_decode.Release();
         m_pAudioCodec->Reset();
         return DECODE_FLAG_ERROR;
       }
 
-      // fix for fucked up decoders
-      if( len > m_decode.size )
-      {
-        CLog::Log(LOGERROR, "CDVDPlayerAudio:DecodeFrame - Codec tried to consume more data than available. Potential memory corruption");
-        m_decode.Release();
-        m_pAudioCodec->Reset();
-        return DECODE_FLAG_ERROR;
-      }
+      m_audioStats.AddSampleBytes(len);
 
       m_decode.data += len;
       m_decode.size -= len;
 
-
       // get decoded data and the size of it
-      audioframe.size = m_pAudioCodec->GetData(&audioframe.data);
-      audioframe.pts  = m_audioClock;
+      m_pAudioCodec->GetData(audioframe);
 
       if (audioframe.size == 0)
         continue;
 
-      audioframe.channel_layout        = m_pAudioCodec->GetChannelMap();
-      audioframe.channel_count         = m_pAudioCodec->GetChannels();
-      audioframe.encoded_channel_count = m_pAudioCodec->GetEncodedChannels();
-      audioframe.data_format           = m_pAudioCodec->GetDataFormat();
-      audioframe.bits_per_sample       = CAEUtil::DataFormatToBits(audioframe.data_format);
-      audioframe.sample_rate           = m_pAudioCodec->GetSampleRate();
-      audioframe.encoded_sample_rate   = m_pAudioCodec->GetEncodedSampleRate();
-      audioframe.passthrough           = m_pAudioCodec->NeedPassthrough();
+      if (audioframe.pts == DVD_NOPTS_VALUE)
+        audioframe.pts = m_audioClock;
 
       if (m_streaminfo.samplerate != audioframe.encoded_sample_rate)
       {
@@ -330,28 +301,11 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
         }
       }
 
-      // compute duration.
-      int n = (audioframe.channel_count * audioframe.bits_per_sample * audioframe.sample_rate)>>3;
-      if (n > 0)
-      {
-        // safety check, if channels == 0, n will result in 0, and that will result in a nice devide exception
-        audioframe.duration = ((double)audioframe.size * DVD_TIME_BASE) / n;
-
-        // increase audioclock to after the packet
-        m_audioClock += audioframe.duration;
-      }
-
-      if(audioframe.duration > 0)
-        m_duration = audioframe.duration;
+      // increase audioclock to after the packet
+      m_audioClock += audioframe.duration;
 
       // if demux source want's us to not display this, continue
       if(m_decode.msg->GetPacketDrop())
-        continue;
-
-      //If we are asked to drop this packet, return a size of zero. then it won't be played
-      //we currently still decode the audio.. this is needed since we still need to know it's
-      //duration to make sure clock is updated correctly.
-      if( bDropPacket )
         result |= DECODE_FLAG_DROP;
 
       return result;
@@ -362,15 +316,17 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
     if (m_messageQueue.ReceivedAbortRequest()) return DECODE_FLAG_ABORT;
 
     CDVDMsg* pMsg;
-    int priority = (m_speed == DVD_PLAYSPEED_PAUSE && m_started) ? 1 : 0;
-
-    int timeout;
-    if(m_duration > 0)
-      timeout = (int)(1000 * (m_duration / DVD_TIME_BASE + m_dvdAudio.GetCacheTime()));
-    else
-      timeout = 1000;
+    int timeout  = (int)(1000 * m_dvdAudio.GetCacheTime()) + 100;
 
     // read next packet and return -1 on error
+    int priority = 1;
+    //Do we want a new audio frame?
+    if (m_started == false                /* when not started */
+    ||  m_speed   == DVD_PLAYSPEED_NORMAL /* when playing normally */
+    ||  m_speed   <  DVD_PLAYSPEED_PAUSE  /* when rewinding */
+    || (m_speed   >  DVD_PLAYSPEED_NORMAL && m_audioClock < m_pClock->GetClock())) /* when behind clock in ff */
+      priority = 0;
+
     MsgQueueReturnCode ret = m_messageQueue.Get(&pMsg, timeout, priority);
 
     if (ret == MSGQ_TIMEOUT)
@@ -394,6 +350,9 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
     else if (pMsg->IsType(CDVDMsg::GENERAL_RESYNC))
     { //player asked us to set internal clock
       CDVDMsgGeneralResync* pMsgGeneralResync = (CDVDMsgGeneralResync*)pMsg;
+      CLog::Log(LOGDEBUG, "CDVDPlayerAudio - CDVDMsg::GENERAL_RESYNC(%f, %d)"
+                        , pMsgGeneralResync->m_timestamp
+                        , pMsgGeneralResync->m_clock);
 
       if (pMsgGeneralResync->m_timestamp != DVD_NOPTS_VALUE)
         m_audioClock = pMsgGeneralResync->m_timestamp;
@@ -401,12 +360,7 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
       m_ptsInput.Flush();
       m_dvdAudio.SetPlayingPts(m_audioClock);
       if (pMsgGeneralResync->m_clock)
-      {
-        CLog::Log(LOGDEBUG, "CDVDPlayerAudio - CDVDMsg::GENERAL_RESYNC(%f, 1)", m_audioClock);
         m_pClock->Discontinuity(m_dvdAudio.GetPlayingPts());
-      }
-      else
-        CLog::Log(LOGDEBUG, "CDVDPlayerAudio - CDVDMsg::GENERAL_RESYNC(%f, 0)", m_audioClock);
     }
     else if (pMsg->IsType(CDVDMsg::GENERAL_RESET))
     {
@@ -466,27 +420,26 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket)
     }
     else if (pMsg->IsType(CDVDMsg::PLAYER_SETSPEED))
     {
-      m_speed = static_cast<CDVDMsgInt*>(pMsg)->m_value;
+      double speed = static_cast<CDVDMsgInt*>(pMsg)->m_value;
 
-      if (m_speed == DVD_PLAYSPEED_NORMAL)
+      if (speed == DVD_PLAYSPEED_NORMAL)
       {
         m_dvdAudio.Resume();
       }
       else
       {
         m_syncclock = true;
-        if (m_speed != DVD_PLAYSPEED_PAUSE)
+        if (speed != DVD_PLAYSPEED_PAUSE)
           m_dvdAudio.Flush();
         m_dvdAudio.Pause();
       }
+      m_speed = speed;
     }
     else if (pMsg->IsType(CDVDMsg::AUDIO_SILENCE))
     {
       m_silence = static_cast<CDVDMsgBool*>(pMsg)->m_value;
-      if (m_silence)
-        CLog::Log(LOGDEBUG, "CDVDPlayerAudio - CDVDMsg::AUDIO_SILENCE(%f, 1)", m_audioClock);
-      else
-        CLog::Log(LOGDEBUG, "CDVDPlayerAudio - CDVDMsg::AUDIO_SILENCE(%f, 0)", m_audioClock);
+      CLog::Log(LOGDEBUG, "CDVDPlayerAudio - CDVDMsg::AUDIO_SILENCE(%f, %d)"
+                        , m_audioClock, m_silence);
     }
     else if (pMsg->IsType(CDVDMsg::GENERAL_STREAMCHANGE))
     {
@@ -504,8 +457,6 @@ void CDVDPlayerAudio::OnStartup()
 {
   m_decode.Release();
 
-  g_dvdPerformanceCounter.EnableAudioDecodePerformance(this);
-
 #ifdef TARGET_WINDOWS
   CoInitializeEx(NULL, COINIT_MULTITHREADED);
 #endif
@@ -540,9 +491,14 @@ void CDVDPlayerAudio::Process()
 
   while (!m_bStop)
   {
-    //Don't let anybody mess with our global variables
-    int result = DecodeFrame(audioframe, m_speed > DVD_PLAYSPEED_NORMAL || m_speed < 0 ||
-                         CAEFactory::IsSuspended()); // blocks if no audio is available, but leaves critical section before doing so
+    int result = DecodeFrame(audioframe);
+
+    //Drop when not playing normally
+    if(m_speed   != DVD_PLAYSPEED_NORMAL
+    && m_started == true)
+    {
+      result |= DECODE_FLAG_DROP;
+    }
 
     UpdatePlayerInfo();
 
@@ -554,14 +510,12 @@ void CDVDPlayerAudio::Process()
 
     if( result & DECODE_FLAG_TIMEOUT )
     {
-      bool transitioningToStalled = !m_stalled;
-      m_stalled = true;
-
       // Flush as the audio output may keep looping if we don't
-      if(m_speed == DVD_PLAYSPEED_NORMAL && transitioningToStalled)
+      if(m_speed == DVD_PLAYSPEED_NORMAL && !m_stalled)
       {
         m_dvdAudio.Drain();
         m_dvdAudio.Flush();
+        m_stalled = true;
       }
 
       continue;
@@ -573,11 +527,6 @@ void CDVDPlayerAudio::Process()
       break;
     }
 
-#ifdef PROFILE /* during profiling we just drop all packets, after having decoded */
-    m_pClock->Discontinuity(audioframe.pts);
-    continue;
-#endif
-
     if( audioframe.size == 0 )
       continue;
 
@@ -604,24 +553,13 @@ void CDVDPlayerAudio::Process()
     if (m_silence)
       memset(audioframe.data, 0, audioframe.size);
 
-    if( result & DECODE_FLAG_DROP )
+    if(result & DECODE_FLAG_DROP)
     {
-      //frame should be dropped. Don't let audio move ahead of the current time thou
-      //we need to be able to start playing at any time
-      //when playing backwords, we try to keep as small buffers as possible
-
-      if(m_droptime == 0.0)
-        m_droptime = m_pClock->GetAbsoluteClock();
-      if(m_speed > 0)
-        m_droptime += audioframe.duration * DVD_PLAYSPEED_NORMAL / m_speed;
-      while( !m_bStop && m_droptime > m_pClock->GetAbsoluteClock() ) Sleep(1);
-
-      m_stalled = false;
+      // keep output times in sync
+     m_dvdAudio.SetPlayingPts(m_audioClock);
     }
     else
     {
-      m_droptime = 0.0;
-
       SetSyncType(audioframe.passthrough);
 
       // add any packets play
@@ -674,56 +612,30 @@ void CDVDPlayerAudio::SetSyncType(bool passthrough)
     CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: synctype set to %i: %s", m_synctype, synctypes[synctype]);
     m_prevsynctype = m_synctype;
   }
-
-  CDVDClock::SetMasterClock(false);
 }
 
 void CDVDPlayerAudio::HandleSyncError(double duration)
 {
   double clock = m_pClock->GetClock();
   double error = m_dvdAudio.GetPlayingPts() - clock;
-  int64_t now;
 
   if( fabs(error) > DVD_MSEC_TO_TIME(100) || m_syncclock )
   {
     m_pClock->Discontinuity(clock+error);
-    if(m_speed == DVD_PLAYSPEED_NORMAL)
-      CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: Discontinuity1 - was:%f, should be:%f, error:%f", clock, clock+error, error);
+    CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: Discontinuity1 - was:%f, should be:%f, error:%f", clock, clock+error, error);
 
-    m_errorbuff = 0;
-    m_errorcount = 0;
-    m_skipdupcount = 0;
+    m_errors.Flush();
     m_error = 0;
     m_syncclock = false;
-    m_errortime = CurrentHostCounter();
 
     return;
   }
 
-  if (m_speed != DVD_PLAYSPEED_NORMAL)
-  {
-    m_errorbuff = 0;
-    m_errorcount = 0;
-    m_integral = 0;
-    m_skipdupcount = 0;
-    m_error = 0;
-    m_errortime = CurrentHostCounter();
-    return;
-  }
-
-  m_errorbuff += error;
-  m_errorcount++;
+  m_errors.Add(error);
 
   //check if measured error for 2 seconds
-  now = CurrentHostCounter();
-  if ((now - m_errortime) >= m_freq * 2)
+  if (m_errors.Get(m_error))
   {
-    m_errortime = now;
-    m_error = m_errorbuff / m_errorcount;
-
-    m_errorbuff = 0;
-    m_errorcount = 0;
-
     if (m_synctype == SYNC_DISCON)
     {
       double limit, error;
@@ -748,25 +660,9 @@ void CDVDPlayerAudio::HandleSyncError(double duration)
       if (fabs(error) > limit - 0.001)
       {
         m_pClock->Discontinuity(clock+error);
-        if(m_speed == DVD_PLAYSPEED_NORMAL)
-          CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: Discontinuity2 - was:%f, should be:%f, error:%f", clock, clock+error, error);
+        CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: Discontinuity2 - was:%f, should be:%f, error:%f", clock, clock+error, error);
       }
     }
-    else if (m_synctype == SYNC_SKIPDUP && m_skipdupcount == 0 && fabs(m_error) > DVD_MSEC_TO_TIME(10))
-    {
-      //check how many packets to skip/duplicate
-      m_skipdupcount = (int)(m_error / duration);
-      //if less than one frame off, see if it's more than two thirds of a frame, so we can get better in sync
-      if (m_skipdupcount == 0 && fabs(m_error) > duration / 3 * 2)
-        m_skipdupcount = (int)(m_error / (duration / 3 * 2));
-
-      if (m_skipdupcount > 0)
-        CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: Duplicating %i packet(s) of %.2f ms duration",
-                  m_skipdupcount, duration / DVD_TIME_BASE * 1000.0);
-      else if (m_skipdupcount < 0)
-        CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: Skipping %i packet(s) of %.2f ms duration ",
-                  m_skipdupcount * -1,  duration / DVD_TIME_BASE * 1000.0);
-    }
     else if (m_synctype == SYNC_RESAMPLE)
     {
       //reset the integral on big errors, failsafe
@@ -774,6 +670,19 @@ void CDVDPlayerAudio::HandleSyncError(double duration)
         m_integral = 0;
       else if (fabs(m_error) > DVD_MSEC_TO_TIME(5))
         m_integral += m_error / DVD_TIME_BASE / INTEGRAL;
+
+      double proportional = 0.0;
+
+      //on big errors use more proportional
+      if (fabs(m_error / DVD_TIME_BASE) > 0.0)
+      {
+        double proportionaldiv = PROPORTIONAL * (PROPREF / fabs(m_error / DVD_TIME_BASE));
+        if (proportionaldiv < PROPDIVMIN) proportionaldiv = PROPDIVMIN;
+        else if (proportionaldiv > PROPDIVMAX) proportionaldiv = PROPDIVMAX;
+
+        proportional = m_error / DVD_TIME_BASE / proportionaldiv;
+      }
+      m_resampleratio = 1.0 / g_VideoReferenceClock.GetSpeed() + proportional + m_integral;
     }
   }
 }
@@ -786,41 +695,30 @@ bool CDVDPlayerAudio::OutputPacket(DVDAudioFrame &audioframe)
   }
   else if (m_synctype == SYNC_SKIPDUP)
   {
-    if (m_skipdupcount < 0)
+    double limit = std::max(DVD_MSEC_TO_TIME(10), audioframe.duration * 2.0 / 3.0);
+    if (m_error < -limit)
     {
       m_prevskipped = !m_prevskipped;
-      if (!m_prevskipped)
-      {
+      if (m_prevskipped)
         m_dvdAudio.AddPackets(audioframe);
-        m_skipdupcount++;
+      else
+      {
+        CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: Dropping packet of %d ms", DVD_TIME_TO_MSEC(audioframe.duration));
+        m_error += audioframe.duration;
       }
     }
-    else if (m_skipdupcount > 0)
+    else if(m_error > limit)
     {
+      CLog::Log(LOGDEBUG, "CDVDPlayerAudio:: Duplicating packet of %d ms", DVD_TIME_TO_MSEC(audioframe.duration));
       m_dvdAudio.AddPackets(audioframe);
       m_dvdAudio.AddPackets(audioframe);
-      m_skipdupcount--;
+      m_error -= audioframe.duration;
     }
-    else if (m_skipdupcount == 0)
-    {
+    else
       m_dvdAudio.AddPackets(audioframe);
-    }
   }
   else if (m_synctype == SYNC_RESAMPLE)
   {
-    double proportional = 0.0;
-
-    //on big errors use more proportional
-    if (fabs(m_error / DVD_TIME_BASE) > 0.0)
-    {
-      double proportionaldiv = PROPORTIONAL * (PROPREF / fabs(m_error / DVD_TIME_BASE));
-      if (proportionaldiv < PROPDIVMIN) proportionaldiv = PROPDIVMIN;
-      else if (proportionaldiv > PROPDIVMAX) proportionaldiv = PROPDIVMAX;
-
-      proportional = m_error / DVD_TIME_BASE / proportionaldiv;
-    }
-
-    m_resampleratio = 1.0 / g_VideoReferenceClock.GetSpeed() + proportional + m_integral;
     m_dvdAudio.SetResampleRatio(m_resampleratio);
     m_dvdAudio.AddPackets(audioframe);
   }
@@ -830,8 +728,6 @@ bool CDVDPlayerAudio::OutputPacket(DVDAudioFrame &audioframe)
 
 void CDVDPlayerAudio::OnExit()
 {
-  g_dvdPerformanceCounter.DisableAudioDecodePerformance();
-
 #ifdef TARGET_WINDOWS
   CoUninitialize();
 #endif
index 2fccc2d..4b48514 100644 (file)
@@ -44,23 +44,6 @@ class CDVDAudioCodec;
 #define DECODE_FLAG_ABORT   8
 #define DECODE_FLAG_TIMEOUT 16
 
-typedef struct stDVDAudioFrame
-{
-  uint8_t* data;
-  double pts;
-  double duration;
-  unsigned int size;
-
-  int               channel_count;
-  int               encoded_channel_count;
-  CAEChannelInfo    channel_layout;
-  enum AEDataFormat data_format;
-  int               bits_per_sample;
-  int               sample_rate;
-  int               encoded_sample_rate;
-  bool              passthrough;
-} DVDAudioFrame;
-
 class CPTSInputQueue
 {
 private:
@@ -73,6 +56,51 @@ public:
   void   Flush();
 };
 
+class CDVDErrorAverage
+{
+public:
+  CDVDErrorAverage()
+  {
+    Flush();
+  }
+  void    Add(double error)
+  {
+    m_buffer += error;
+    m_count++;
+  }
+
+  void    Flush()
+  {
+    m_buffer = 0.0f;
+    m_count  = 0;
+    m_timer.Set(2000);
+  }
+
+  double  Get()
+  {
+    if(m_count)
+      return m_buffer / m_count;
+    else
+      return 0.0;
+  }
+
+  bool    Get(double& error)
+  {
+    if(m_timer.IsTimePast())
+    {
+      error = Get();
+      Flush();
+      return true;
+    }
+    else
+      return false;
+  }
+
+  double               m_buffer; //place to store average errors
+  int                  m_count;  //number of errors stored
+  XbmcThreads::EndTime m_timer;
+};
+
 class CDVDPlayerAudio : public CThread
 {
 public:
@@ -124,7 +152,7 @@ protected:
   virtual void OnExit();
   virtual void Process();
 
-  int DecodeFrame(DVDAudioFrame &audioframe, bool bDropPacket);
+  int DecodeFrame(DVDAudioFrame &audioframe);
 
   void UpdatePlayerInfo();
 
@@ -179,10 +207,8 @@ protected:
   BitstreamStats m_audioStats;
 
   int     m_speed;
-  double  m_droptime;
   bool    m_stalled;
   bool    m_started;
-  double  m_duration; // last packets duration
   bool    m_silence;
 
   bool OutputPacket(DVDAudioFrame &audioframe);
@@ -194,17 +220,12 @@ protected:
 
   double m_error;    //last average error
 
-  int64_t m_errortime; //timestamp of last time we measured
-  int64_t m_freq;
-
   void   SetSyncType(bool passthrough);
   void   HandleSyncError(double duration);
-  double m_errorbuff; //place to store average errors
-  int    m_errorcount;//number of errors stored
+  CDVDErrorAverage m_errors;
   bool   m_syncclock;
 
   double m_integral; //integral correction for resampler
-  int    m_skipdupcount; //counter for skip/duplicate synctype
   bool   m_prevskipped;
   double m_maxspeedadjust;
   double m_resampleratio; //resample ratio when using SYNC_RESAMPLE, used for the codec info
index feae147..18625a0 100644 (file)
@@ -234,37 +234,3 @@ bool CDVDPlayerSubtitle::AcceptsData()
   return m_pOverlayContainer->GetSize() < 5;
 }
 
-void CDVDPlayerSubtitle::GetCurrentSubtitle(CStdString& strSubtitle, double pts)
-{
-  strSubtitle = "";
-
-  Process(pts); // TODO: move to separate thread?
-
-  CSingleLock lock(*m_pOverlayContainer);
-  VecOverlays* pOverlays = m_pOverlayContainer->GetOverlays();
-  if (pOverlays)
-  {
-    for(vector<CDVDOverlay*>::iterator it = pOverlays->begin();it != pOverlays->end();++it)
-    {
-      CDVDOverlay* pOverlay = *it;
-
-      if (pOverlay->IsOverlayType(DVDOVERLAY_TYPE_TEXT)
-      && (pOverlay->iPTSStartTime <= pts)
-      && (pOverlay->iPTSStopTime >= pts || pOverlay->iPTSStopTime == 0LL))
-      {
-        CDVDOverlayText::CElement* e = ((CDVDOverlayText*)pOverlay)->m_pHead;
-        while (e)
-        {
-          if (e->IsElementType(CDVDOverlayText::ELEMENT_TYPE_TEXT))
-          {
-            CDVDOverlayText::CElementText* t = (CDVDOverlayText::CElementText*)e;
-            strSubtitle += t->m_text;
-            strSubtitle += "\n";
-          }
-          e = e->pNext;
-        }
-      }
-    }
-  }
-  strSubtitle.TrimRight('\n');
-}
index 6c12475..2b9cc2b 100644 (file)
@@ -41,7 +41,6 @@ public:
   void Process(double pts);
   void Flush();
   void FindSubtitles(const char* strFilename);
-  void GetCurrentSubtitle(CStdString& strSubtitle, double pts);
   int GetSubtitleCount();
 
   void UpdateOverlayInfo(CDVDInputStreamNavigator* pStream, int iAction) { m_pOverlayContainer->UpdateOverlayInfo(pStream, &m_dvdspus, iAction); }
index 2321d2c..2d7d0f1 100644 (file)
@@ -35,7 +35,6 @@
 #include "DVDDemuxers/DVDDemux.h"
 #include "DVDDemuxers/DVDDemuxUtils.h"
 #include "DVDOverlayRenderer.h"
-#include "DVDPerformanceCounter.h"
 #include "DVDCodecs/DVDCodecs.h"
 #include "DVDCodecs/Overlay/DVDOverlayCodecCC.h"
 #include "DVDCodecs/Overlay/DVDOverlaySSA.h"
@@ -147,7 +146,6 @@ CDVDPlayerVideo::CDVDPlayerVideo( CDVDClock* pClock
   m_iNrOfPicturesNotToSkip = 0;
   m_messageQueue.SetMaxDataSize(40 * 1024 * 1024);
   m_messageQueue.SetMaxTimeSize(8.0);
-  g_dvdPerformanceCounter.EnableVideoQueue(&m_messageQueue);
 
   m_iCurrentPts = DVD_NOPTS_VALUE;
   m_iDroppedFrames = 0;
@@ -166,7 +164,6 @@ CDVDPlayerVideo::CDVDPlayerVideo( CDVDClock* pClock
 CDVDPlayerVideo::~CDVDPlayerVideo()
 {
   StopThread();
-  g_dvdPerformanceCounter.DisableVideoQueue();
   g_VideoReferenceClock.StopThread();
 }
 
@@ -303,7 +300,6 @@ void CDVDPlayerVideo::OnStartup()
   m_iCurrentPts = DVD_NOPTS_VALUE;
   m_FlipTimeStamp = m_pClock->GetAbsoluteClock();
 
-  g_dvdPerformanceCounter.EnableVideoDecodePerformance(this);
 }
 
 void CDVDPlayerVideo::Process()
@@ -761,8 +757,6 @@ void CDVDPlayerVideo::Process()
 
 void CDVDPlayerVideo::OnExit()
 {
-  g_dvdPerformanceCounter.DisableVideoDecodePerformance();
-
   if (m_pOverlayCodecCC)
   {
     m_pOverlayCodecCC->Dispose();
index 6572157..564ab4b 100644 (file)
@@ -9,7 +9,6 @@ SRCS += DVDMessageQueue.cpp
 SRCS += DVDMessageTracker.cpp
 SRCS += DVDOverlayContainer.cpp
 SRCS += DVDOverlayRenderer.cpp
-SRCS += DVDPerformanceCounter.cpp
 SRCS += DVDPlayer.cpp
 SRCS += DVDPlayerAudio.cpp
 SRCS += DVDPlayerSubtitle.cpp
index 94dd7c4..b265f03 100644 (file)
@@ -84,7 +84,6 @@
 #include "guilib/StereoscopicsManager.h"
 #include "Application.h"
 #include "ApplicationMessenger.h"
-#include "DVDPerformanceCounter.h"
 #include "filesystem/File.h"
 #include "pictures/Picture.h"
 #include "DllSwScale.h"
@@ -177,6 +176,59 @@ std::vector<OMXSelectionStream> COMXSelectionStreams::Get(StreamType type)
       return (lh) > (rh); \
   } while(0)
 
+class PredicateSubtitleFilter
+{
+private:
+  std::string audiolang;
+  bool original;
+  bool preferexternal;
+public:
+  /** \brief The class' operator() decides if the given (subtitle) SelectionStream is relevant wrt.
+  *          preferred subtitle language and audio language. If the subtitle is relevant <B>false</B> false is returned.
+  *
+  *          A subtitle is relevant if
+  *          - it was previously selected, or
+  *          - it's an external sub and "prefer external subs was selected", or
+  *          - it's a forced sub and "original stream's language" was selected, or
+  *          - it's a forced sub and its language matches the audio's language, or
+  *          - it's a default sub, or
+  *          - its language matches the preferred subtitle's language (unequal to "original stream's language")
+  */
+  PredicateSubtitleFilter(std::string& lang)
+    : audiolang(lang),
+      original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")),
+      preferexternal(CSettings::Get().GetBool("subtitles.preferexternal"))
+  {
+  };
+  
+  bool operator()(const OMXSelectionStream& ss) const
+  {
+    if (ss.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream)
+      return false;
+
+    if (preferexternal)
+    {
+      if(ss.source == STREAM_SOURCE_DEMUX_SUB || ss.source == STREAM_SOURCE_TEXT)
+        return false;
+    }
+
+    if ((ss.flags & CDemuxStream::FLAG_FORCED) && (original || g_LangCodeExpander.CompareLangCodes(ss.language, audiolang)))
+      return false;
+
+    if ((ss.flags & CDemuxStream::FLAG_DEFAULT))
+      return false;
+
+    if(!original)
+    {
+      std::string subtitle_language = g_langInfo.GetSubtitleLanguage();
+      if (g_LangCodeExpander.CompareLangCodes(subtitle_language, ss.language))
+        return false;
+    }
+
+    return true;
+  }
+};
+
 static bool PredicateAudioPriority(const OMXSelectionStream& lh, const OMXSelectionStream& rh)
 {
   PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_AudioStream
@@ -200,41 +252,82 @@ static bool PredicateAudioPriority(const OMXSelectionStream& lh, const OMXSelect
   return false;
 }
 
-static bool PredicateSubtitlePriority(const OMXSelectionStream& lh, const OMXSelectionStream& rh)
-{
-  if(!CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn)
+/** \brief The class' operator() decides if the given (subtitle) SelectionStream lh is 'better than' the given (subtitle) SelectionStream rh.
+*          If lh is 'better than' rh the return value is true, false otherwise.
+*
+*          A subtitle lh is 'better than' a subtitle rh (in evaluation order) if
+*          - lh was previously selected, or
+*          - lh is an external sub and "prefer external subs was selected" and rh not, or
+*          - lh is a forced sub and ("original stream's language" was selected or subtitles are off) and rh not, or
+*          - lh is an external sub and its language matches the preferred subtitle's language (unequal to "original stream's language") and rh not, or
+*          - lh is an external sub and rh not, or
+*          - lh is language matches the preferred subtitle's language (unequal to "original stream's language") and rh not, or
+*          - lh is a default sub and rh not
+*/
+class PredicateSubtitlePriority
+{
+private:
+  std::string audiolang;
+  bool original;
+  bool preferextsubs;
+  bool subson;
+public:
+  PredicateSubtitlePriority(std::string& lang)
+    : audiolang(lang),
+      original(StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original")),
+      preferextsubs(CSettings::Get().GetBool("subtitles.preferexternal")),
+      subson(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn)
   {
-    PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_FORCED
-                   , rh.flags & CDemuxStream::FLAG_FORCED);
-  }
-
-  PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream
-                 , rh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream);
+  };
 
-  CStdString subtitle_language = g_langInfo.GetSubtitleLanguage();
-  if(!StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original"))
+  bool operator()(const OMXSelectionStream& lh, const OMXSelectionStream& rh) const
   {
-    PREDICATE_RETURN((lh.source == STREAM_SOURCE_DEMUX_SUB || lh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language)
-                   , (rh.source == STREAM_SOURCE_DEMUX_SUB || rh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language));
-  }
+    PREDICATE_RETURN(lh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream
+                   , rh.type_index == CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream);
 
-  PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB
-                 , rh.source == STREAM_SOURCE_DEMUX_SUB);
+    if (preferextsubs)
+    {
+      PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB
+                     , rh.source == STREAM_SOURCE_DEMUX_SUB);
 
-  PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT
-                 , rh.source == STREAM_SOURCE_TEXT);
+      PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT
+                     , rh.source == STREAM_SOURCE_TEXT);
+    }
 
-  if(!StringUtils::EqualsNoCase(CSettings::Get().GetString("locale.subtitlelanguage"), "original"))
-  {
-    PREDICATE_RETURN(g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language)
-                   , g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language));
-  }
+    if(!subson || original)
+    {
+      PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_FORCED && g_LangCodeExpander.CompareLangCodes(lh.language, audiolang)
+                     , rh.flags & CDemuxStream::FLAG_FORCED && g_LangCodeExpander.CompareLangCodes(rh.language, audiolang));
 
-  PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_DEFAULT
-                 , rh.flags & CDemuxStream::FLAG_DEFAULT);
+      PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_FORCED
+                     , rh.flags & CDemuxStream::FLAG_FORCED);
+    }
 
-  return false;
-}
+    CStdString subtitle_language = g_langInfo.GetSubtitleLanguage();
+    if(!original)
+    {
+      PREDICATE_RETURN((lh.source == STREAM_SOURCE_DEMUX_SUB || lh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language)
+                     , (rh.source == STREAM_SOURCE_DEMUX_SUB || rh.source == STREAM_SOURCE_TEXT) && g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language));
+    }
+
+    PREDICATE_RETURN(lh.source == STREAM_SOURCE_DEMUX_SUB
+                   , rh.source == STREAM_SOURCE_DEMUX_SUB);
+
+    PREDICATE_RETURN(lh.source == STREAM_SOURCE_TEXT
+                   , rh.source == STREAM_SOURCE_TEXT);
+
+    if(!original)
+    {
+      PREDICATE_RETURN(g_LangCodeExpander.CompareLangCodes(subtitle_language, lh.language)
+                     , g_LangCodeExpander.CompareLangCodes(subtitle_language, rh.language));
+    }
+
+    PREDICATE_RETURN(lh.flags & CDemuxStream::FLAG_DEFAULT
+                   , rh.flags & CDemuxStream::FLAG_DEFAULT);
+
+    return false;
+  }
+};
 
 static bool PredicateVideoPriority(const OMXSelectionStream& lh, const OMXSelectionStream& rh)
 {
@@ -781,7 +874,11 @@ void COMXPlayer::OpenDefaultStreams(bool reset)
   m_omxPlayerVideo.EnableSubtitle(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn);
 
   // open subtitle stream
-  streams = m_SelectionStreams.Get(STREAM_SUBTITLE, PredicateSubtitlePriority);
+  OMXSelectionStream as = m_SelectionStreams.Get(STREAM_AUDIO, GetAudioStream());
+  PredicateSubtitleFilter psf(as.language);
+  streams = m_SelectionStreams.RemoveIf(STREAM_SUBTITLE, psf);
+  PredicateSubtitlePriority psp(as.language);
+  std::stable_sort(streams.begin(), streams.end(), psp);
   valid   = false;
   for(OMXSelectionStreams::iterator it = streams.begin(); it != streams.end() && !valid; ++it)
   {
@@ -793,7 +890,10 @@ void COMXPlayer::OpenDefaultStreams(bool reset)
     }
   }
   if(!valid)
+  {
     CloseSubtitleStream(true);
+    SetSubtitleVisible(false);
+  }
 
   // open teletext stream
   streams = m_SelectionStreams.Get(STREAM_TELETEXT);
@@ -1274,6 +1374,9 @@ void COMXPlayer::Process()
     // update application with our state
     UpdateApplication(1000);
 
+    // make sure we run subtitle process here
+    m_dvdPlayerSubtitle.Process(m_clock.GetClock() - m_omxPlayerVideo.GetSubtitleDelay());
+
     // OMX emergency exit
     if(HasAudio() && m_omxPlayerAudio.BadState())
     {
@@ -2356,6 +2459,7 @@ void COMXPlayer::HandleMessages()
           {
             CloseAudioStream(false);
             OpenAudioStream(st.id, st.source);
+            AdaptForcedSubtitles();
             m_messenger.Put(new CDVDMsgPlayerSeek(GetTime(), true, true, true, true, true));
           }
         }
@@ -3125,7 +3229,6 @@ bool COMXPlayer::OpenAudioStream(int iStream, int source, bool reset)
   m_CurrentAudio.hint = hint;
   m_CurrentAudio.stream = (void*)pStream;
   m_CurrentAudio.started = false;
-  m_clock.SetMasterClock(false);
   m_HasAudio = true;
 
   /* we are potentially going to be waiting on this */
@@ -3326,6 +3429,35 @@ bool COMXPlayer::OpenSubtitleStream(int iStream, int source)
   return true;
 }
 
+bool COMXPlayer::AdaptForcedSubtitles()
+{
+  bool valid = false;
+  OMXSelectionStream ss = m_SelectionStreams.Get(STREAM_SUBTITLE, GetSubtitle());
+  if (ss.flags & CDemuxStream::FLAG_FORCED || !GetSubtitleVisible())
+  {
+    OMXSelectionStream as = m_SelectionStreams.Get(STREAM_SUBTITLE, GetAudioStream());
+    OMXSelectionStreams streams = m_SelectionStreams.Get(STREAM_SUBTITLE);
+
+    for(OMXSelectionStreams::iterator it = streams.begin(); it != streams.end() && !valid; ++it)
+    {
+      if (it->flags & CDemuxStream::FLAG_FORCED && g_LangCodeExpander.CompareLangCodes(it->language, as.language))
+      {
+        if(OpenSubtitleStream(it->id, it->source))
+        {
+          valid = true;
+          SetSubtitleVisible(true);
+        }
+      }
+    }
+    if(!valid)
+    {
+      CloseSubtitleStream(true);
+      SetSubtitleVisible(false);
+    }
+  }
+  return valid;
+}
+
 bool COMXPlayer::OpenTeletextStream(int iStream, int source)
 {
   if (!m_pDemuxer)
@@ -4001,24 +4133,6 @@ bool COMXPlayer::HasMenu()
     return false;
 }
 
-bool COMXPlayer::GetCurrentSubtitle(CStdString& strSubtitle)
-{
-  double pts = m_clock.GetClock() + m_State.time_offset;
-
-  if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD) && m_CurrentSubtitle.source != STREAM_SOURCE_TEXT && m_CurrentSubtitle.source != STREAM_SOURCE_DEMUX_SUB)
-    return false;
-
-  m_dvdPlayerSubtitle.GetCurrentSubtitle(strSubtitle, pts - m_omxPlayerVideo.GetSubtitleDelay());
-
-  // In case we stalled, don't output any subs
-  if ((m_omxPlayerVideo.IsStalled() && HasVideo()) || (m_omxPlayerAudio.IsStalled() && HasAudio()))
-    strSubtitle = m_lastSub;
-  else
-    m_lastSub = strSubtitle;
-
-  return !strSubtitle.IsEmpty();
-}
-
 CStdString COMXPlayer::GetPlayerState()
 {
   CSingleLock lock(m_StateSection);
@@ -4114,7 +4228,7 @@ void COMXPlayer::GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info)
 
   if (index == GetAudioStream())
     info.bitrate = m_omxPlayerAudio.GetAudioBitrate();
-  else
+  else if (m_pDemuxer)
   {
     CDemuxStreamAudio* stream = m_pDemuxer->GetStreamFromAudioId(index);
     if (stream)
index 123faad..a4c3160 100644 (file)
@@ -148,6 +148,14 @@ public:
     return streams;
   }
 
+  template<typename Filter>
+  OMXSelectionStreams RemoveIf(StreamType type, Filter filter)
+  {
+    OMXSelectionStreams streams = Get(type);
+    streams.erase(std::remove_if(streams.begin(), streams.end(), filter), streams.end());
+    return streams;
+  }
+
   void             Clear   (StreamType type, StreamSource source);
   int              Source  (StreamSource source, std::string filename);
 
@@ -235,8 +243,6 @@ public:
   virtual bool GetStreamDetails(CStreamDetails &details);
   virtual void GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info);
 
-  virtual bool GetCurrentSubtitle(CStdString& strSubtitle);
-
   virtual CStdString GetPlayerState();
   virtual bool SetPlayerState(CStdString state);
   
@@ -281,6 +287,12 @@ protected:
   bool OpenAudioStream(int iStream, int source, bool reset = true);
   bool OpenVideoStream(int iStream, int source, bool reset = true);
   bool OpenSubtitleStream(int iStream, int source);
+
+  /** \brief Switches forced subtitles to forced subtitles matching the language of the current audio track.
+  *          If these are not available, subtitles are disabled.
+  *   \return true if the subtitles were changed, false otherwise.
+  */
+  bool AdaptForcedSubtitles();
   bool OpenTeletextStream(int iStream, int source);
   bool CloseAudioStream(bool bWaitForBuffers);
   bool CloseVideoStream(bool bWaitForBuffers);
index 2649c7f..3c17dd3 100644 (file)
@@ -24,7 +24,7 @@
 
 #include "system.h"
 #include "cores/IPlayerCallback.h"
-#include "settings/ISettingsHandler.h"
+#include "settings/lib/ISettingsHandler.h"
 #include "threads/CriticalSection.h"
 #include "utils/StdString.h"
 
index 078a00b..cd9aa48 100644 (file)
 
 #include "Application.h"
 #include "GUIDialogBoxBase.h"
-#include "guilib/GUIWindowManager.h"
 #include "guilib/LocalizeStrings.h"
+#include "threads/SingleLock.h"
+#include "utils/StringUtils.h"
 
 using namespace std;
 
 #define CONTROL_HEADING 1
 #define CONTROL_LINES_START 2
+#define CONTROL_TEXTBOX     9
 #define CONTROL_CHOICES_START 10
 
 CGUIDialogBoxBase::CGUIDialogBoxBase(int id, const CStdString &xmlFile)
@@ -34,6 +36,7 @@ CGUIDialogBoxBase::CGUIDialogBoxBase(int id, const CStdString &xmlFile)
 {
   m_bConfirmed = false;
   m_loadType = KEEP_IN_MEMORY;
+  m_hasTextbox = false;
 }
 
 CGUIDialogBoxBase::~CGUIDialogBoxBase(void)
@@ -62,19 +65,40 @@ bool CGUIDialogBoxBase::IsConfirmed() const
 
 void CGUIDialogBoxBase::SetHeading(const CVariant& heading)
 {
-  m_strHeading = GetLocalized(heading);
-  if (IsActive())
-    SET_CONTROL_LABEL_THREAD_SAFE(1, m_strHeading);
+  std::string label = GetLocalized(heading);
+  CSingleLock lock(m_section);
+  if (label != m_strHeading)
+  {
+    m_strHeading = label;
+    SetInvalid();
+  }
 }
 
-void CGUIDialogBoxBase::SetLine(int iLine, const CVariant& line)
+void CGUIDialogBoxBase::SetLine(unsigned int iLine, const CVariant& line)
 {
-  if (iLine < 0 || iLine >= DIALOG_MAX_LINES)
-    return;
+  std::string label = GetLocalized(line);
+  CSingleLock lock(m_section);
+  vector<string> lines = StringUtils::Split(m_text, "\n");
+  if (iLine >= lines.size())
+    lines.resize(iLine+1);
+  lines[iLine] = label;
+  std::string text = StringUtils::Join(lines, "\n");
+  if (text != m_text)
+  {
+    m_text = StringUtils::Join(lines, "\n");
+    SetInvalid();
+  }
+}
 
-  m_strLines[iLine] = GetLocalized(line);
-  if (IsActive())
-    SET_CONTROL_LABEL_THREAD_SAFE(CONTROL_LINES_START + iLine, m_strLines[iLine]);
+void CGUIDialogBoxBase::SetText(const CVariant& text)
+{
+  std::string label = GetLocalized(text);
+  CSingleLock lock(m_section);
+  if (label != m_text)
+  {
+    m_text = label;
+    SetInvalid();
+  }
 }
 
 void CGUIDialogBoxBase::SetChoice(int iButton, const CVariant &choice) // iButton == 0 for no, 1 for yes
@@ -82,9 +106,45 @@ void CGUIDialogBoxBase::SetChoice(int iButton, const CVariant &choice) // iButto
   if (iButton < 0 || iButton >= DIALOG_MAX_CHOICES)
     return;
 
-  m_strChoices[iButton] = GetLocalized(choice);
-  if (IsActive())
-    SET_CONTROL_LABEL_THREAD_SAFE(CONTROL_CHOICES_START + iButton, m_strChoices[iButton]);
+  std::string label = GetLocalized(choice);
+  CSingleLock lock(m_section);
+  if (label != m_strChoices[iButton])
+  {
+    m_strChoices[iButton] = label;
+    SetInvalid();
+  }
+}
+
+void CGUIDialogBoxBase::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions)
+{
+  if (m_bInvalidated)
+  { // take a copy of our labels to save holding the lock for too long
+    string heading, text;
+    vector<string> choices;
+    choices.reserve(DIALOG_MAX_CHOICES);
+    {
+      CSingleLock lock(m_section);
+      heading = m_strHeading;
+      text = m_text;
+      for (int i = 0; i < DIALOG_MAX_CHOICES; ++i)
+        choices.push_back(m_strChoices[i]);
+    }
+    SET_CONTROL_LABEL(CONTROL_HEADING, heading);
+    if (m_hasTextbox)
+    {
+      SET_CONTROL_LABEL(CONTROL_TEXTBOX, text);
+    }
+    else
+    {
+      vector<string> lines = StringUtils::Split(text, "\n", DIALOG_MAX_LINES);
+      lines.resize(DIALOG_MAX_LINES);
+      for (size_t i = 0 ; i < lines.size(); ++i)
+        SET_CONTROL_LABEL(CONTROL_LINES_START + i, lines[i]);
+    }
+    for (size_t i = 0 ; i < choices.size() ; ++i)
+      SET_CONTROL_LABEL(CONTROL_CHOICES_START + i, choices[i]);
+  }
+  CGUIDialog::Process(currentTime, dirtyregions);
 }
 
 void CGUIDialogBoxBase::OnInitWindow()
@@ -92,24 +152,33 @@ void CGUIDialogBoxBase::OnInitWindow()
   // set focus to default
   m_lastControlID = m_defaultControl;
 
-  // set control labels
-  SET_CONTROL_LABEL(CONTROL_HEADING, !m_strHeading.empty() ? m_strHeading : GetDefaultLabel(CONTROL_HEADING));
-  for (int i = 0 ; i < DIALOG_MAX_LINES ; ++i)
-    SET_CONTROL_LABEL(CONTROL_LINES_START + i, !m_strLines[i].empty() ? m_strLines[i] : GetDefaultLabel(CONTROL_LINES_START + i));
-  for (int i = 0 ; i < DIALOG_MAX_CHOICES ; ++i)
-    SET_CONTROL_LABEL(CONTROL_CHOICES_START + i, !m_strChoices[i].empty() ? m_strChoices[i] : GetDefaultLabel(CONTROL_CHOICES_START + i));
+  m_hasTextbox = false;
+  const CGUIControl *control = GetControl(CONTROL_TEXTBOX);
+  if (control && control->GetControlType() == CGUIControl::GUICONTROL_TEXTBOX)
+    m_hasTextbox = true;
 
+  // set initial labels
+  {
+    CSingleLock lock(m_section);
+    for (int i = 0 ; i < DIALOG_MAX_CHOICES ; ++i)
+    {
+      if (m_strChoices[i].empty())
+        m_strChoices[i] = GetDefaultLabel(CONTROL_CHOICES_START + i);
+    }
+  }
   CGUIDialog::OnInitWindow();
 }
 
 void CGUIDialogBoxBase::OnDeinitWindow(int nextWindowID)
 {
   // make sure we set default labels for heading, lines and choices
-  SetHeading(m_strHeading = "");
-  for (int i = 0 ; i < DIALOG_MAX_LINES ; ++i)
-    SetLine(i, m_strLines[i] = "");
-  for (int i = 0 ; i < DIALOG_MAX_CHOICES ; ++i)
-    SetChoice(i, m_strChoices[i] = "");
+  {
+    CSingleLock lock(m_section);
+    m_strHeading.clear();
+    m_text.clear();
+    for (int i = 0 ; i < DIALOG_MAX_CHOICES ; ++i)
+      m_strChoices[i].clear();
+  }
 
   CGUIDialog::OnDeinitWindow(nextWindowID);
 }
index 0488e90..7979b41 100644 (file)
  *
  */
 
+#include <vector>
+
 #include "guilib/GUIDialog.h"
 #include "utils/Variant.h"
+#include "threads/CriticalSection.h"
 
 #define DIALOG_MAX_LINES 3
 #define DIALOG_MAX_CHOICES 2
@@ -34,7 +37,8 @@ public:
   virtual ~CGUIDialogBoxBase(void);
   virtual bool OnMessage(CGUIMessage& message);
   bool IsConfirmed() const;
-  void SetLine(int iLine, const CVariant &line);
+  void SetLine(unsigned int iLine, const CVariant &line);
+  void SetText(const CVariant &text);
   void SetHeading(const CVariant &heading);
   void SetChoice(int iButton, const CVariant &choice);
 protected:
@@ -47,13 +51,16 @@ protected:
    */
   CStdString GetLocalized(const CVariant &var) const;
 
+  virtual void Process(unsigned int currentTime, CDirtyRegionList &dirtyregions);
   virtual void OnInitWindow();
   virtual void OnDeinitWindow(int nextWindowID);
 
   bool m_bConfirmed;
+  bool m_hasTextbox;
 
   // actual strings
+  CCriticalSection m_section;
   std::string m_strHeading;
-  std::string m_strLines[DIALOG_MAX_LINES];
+  std::string m_text;
   std::string m_strChoices[DIALOG_MAX_CHOICES];
 };
index 1647c5f..ffefc4d 100644 (file)
@@ -47,6 +47,17 @@ bool CGUIDialogOK::OnMessage(CGUIMessage& message)
 }
 
 // \brief Show CGUIDialogOK dialog, then wait for user to dismiss it.
+void CGUIDialogOK::ShowAndGetInput(const CVariant &heading, const CVariant &text)
+{
+  CGUIDialogOK *dialog = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK);
+  if (!dialog)
+    return;
+  dialog->SetHeading(heading);
+  dialog->SetText(text);
+  dialog->DoModal();
+}
+
+// \brief Show CGUIDialogOK dialog, then wait for user to dismiss it.
 void CGUIDialogOK::ShowAndGetInput(const CVariant &heading, const CVariant &line0, const CVariant &line1, const CVariant &line2)
 {
   CGUIDialogOK *dialog = (CGUIDialogOK *)g_windowManager.GetWindow(WINDOW_DIALOG_OK);
index dd518d3..542417f 100644 (file)
@@ -29,6 +29,7 @@ public:
   CGUIDialogOK(void);
   virtual ~CGUIDialogOK(void);
   virtual bool OnMessage(CGUIMessage& message);
+  static void ShowAndGetInput(const CVariant &heading, const CVariant &text);
   static void ShowAndGetInput(const CVariant &heading, const CVariant &line0, const CVariant &line1, const CVariant &line2);
 protected:
   virtual int GetDefaultLabelID(int controlId) const;
index a2203a4..5143ecd 100644 (file)
@@ -114,20 +114,18 @@ bool CGUIDialogYesNo::ShowAndGetInput(const CStdString& heading, const CStdStrin
   return ShowAndGetInput(heading,line0,line1,line2,bDummy,noLabel,yesLabel);
 }
 
-bool CGUIDialogYesNo::ShowAndGetInput(const CStdString& heading, const CStdString& line0, const CStdString& line1, const CStdString& line2, bool& bCanceled, const CStdString& noLabel, const CStdString& yesLabel)
+bool CGUIDialogYesNo::ShowAndGetInput(const std::string& heading, const std::string& text, bool& bCanceled, const std::string& noLabel, const std::string& yesLabel)
 {
   CGUIDialogYesNo *dialog = (CGUIDialogYesNo *)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO);
   if (!dialog) return false;
   dialog->SetHeading(heading);
-  dialog->SetLine(0, line0);
-  dialog->SetLine(1, line1);
-  dialog->SetLine(2, line2);
+  dialog->SetText(text);
   dialog->m_bCanceled = false;
-  if (!noLabel.IsEmpty())
+  if (!noLabel.empty())
     dialog->SetChoice(0,noLabel);
   else
     dialog->SetChoice(0,106);
-  if (!yesLabel.IsEmpty())
+  if (!yesLabel.empty())
     dialog->SetChoice(1,yesLabel);
   else
     dialog->SetChoice(1,107);
@@ -136,6 +134,12 @@ bool CGUIDialogYesNo::ShowAndGetInput(const CStdString& heading, const CStdStrin
   return (dialog->IsConfirmed()) ? true : false;
 }
 
+bool CGUIDialogYesNo::ShowAndGetInput(const CStdString& heading, const CStdString& line0, const CStdString& line1, const CStdString& line2, bool& bCanceled, const CStdString& noLabel, const CStdString& yesLabel)
+{
+  std::string text = line0 + "\n" + line1 + "\n" + line2;
+  return ShowAndGetInput(heading, text, bCanceled, noLabel, yesLabel);
+}
+
 int CGUIDialogYesNo::GetDefaultLabelID(int controlId) const
 {
   if (controlId == CONTROL_NO_BUTTON)
index d190b7e..e222c12 100644 (file)
@@ -20,6 +20,7 @@
  *
  */
 
+#include <string>
 #include "GUIDialogBoxBase.h"
 
 class CGUIDialogYesNo :
@@ -35,6 +36,7 @@ public:
   static bool ShowAndGetInput(int heading, int line0, int line1, int line2, bool& bCanceled);
   static bool ShowAndGetInput(int heading, int line0, int line1, int line2, int iNoLabel, int iYesLabel, bool& bCanceled, unsigned int autoCloseTime = 0);
   static bool ShowAndGetInput(const CStdString& heading, const CStdString& line0, const CStdString& line1, const CStdString& line2, const CStdString& noLabel="", const CStdString& yesLabel="");
+  static bool ShowAndGetInput(const std::string& heading, const std::string& text, bool& bCanceled, const std::string& noLabel, const std::string& yesLabel);
   static bool ShowAndGetInput(const CStdString& heading, const CStdString& line0, const CStdString& line1, const CStdString& line2, bool &bCanceled, const CStdString& noLabel="", const CStdString& yesLabel="");
 protected:
   virtual int GetDefaultLabelID(int controlId) const;
index cc0f221..68d23c9 100644 (file)
@@ -21,7 +21,7 @@
 #include "Application.h"
 #include "threads/SingleLock.h"
 #include "settings/AdvancedSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "dialogs/GUIDialogExtendedProgressBar.h"
 #include "dialogs/GUIDialogProgress.h"
index 5a05f66..769f1a7 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 #include "XBDateTime.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "threads/CriticalSection.h"
 #include "threads/Thread.h"
 #include "utils/Observer.h"
index 1908280..8606f09 100644 (file)
@@ -90,7 +90,6 @@ CGUIEPGGridContainer::CGUIEPGGridContainer(int parentID, int controlID, float po
   m_cacheChannelItems     = preloadItems;
   m_cacheRulerItems       = preloadItems;
   m_cacheProgrammeItems   = preloadItems;
-  m_gridIndex             = NULL;
 }
 
 CGUIEPGGridContainer::~CGUIEPGGridContainer(void)
@@ -151,7 +150,7 @@ void CGUIEPGGridContainer::ProcessChannels(unsigned int currentTime, CDirtyRegio
   end += cacheAfterChannel * m_channelLayout->Size(m_orientation);
 
   int current = chanOffset;// - cacheBeforeChannel;
-  while (pos < end && (int)m_channelItems.size())
+  while (pos < end && !m_channelItems.empty())
   {
     int itemNo = CorrectOffset(current, 0);
     if (itemNo >= (int)m_channelItems.size())
@@ -203,7 +202,7 @@ void CGUIEPGGridContainer::RenderChannels()
   float focusedPos = 0;
   CGUIListItemPtr focusedItem;
   int current = chanOffset;// - cacheBeforeChannel;
-  while (pos < end && (int)m_channelItems.size())
+  while (pos < end && !m_channelItems.empty())
   {
     int itemNo = CorrectOffset(current, 0);
     if (itemNo >= (int)m_channelItems.size())
@@ -380,7 +379,7 @@ void CGUIEPGGridContainer::ProcessProgrammeGrid(unsigned int currentTime, CDirty
 
   int channel = chanOffset;
 
-  while (posB < endB && m_channelItems.size())
+  while (posB < endB && !m_channelItems.empty())
   {
     if (channel >= (int)m_channelItems.size())
       break;
@@ -404,7 +403,7 @@ void CGUIEPGGridContainer::ProcessProgrammeGrid(unsigned int currentTime, CDirty
       posA2 -= missingSection * m_blockSize;
     }
 
-    while (posA2 < endA && m_programmeItems.size())   // FOR EACH ITEM ///////////////
+    while (posA2 < endA && !m_programmeItems.empty())   // FOR EACH ITEM ///////////////
     {
       item = m_gridIndex[channel][block].item;
       if (!item || !item.get()->IsFileItem())
@@ -466,7 +465,7 @@ void CGUIEPGGridContainer::RenderProgrammeGrid()
   float focusedPosX = 0;
   float focusedPosY = 0;
   CGUIListItemPtr focusedItem;
-  while (posB < endB && m_channelItems.size())
+  while (posB < endB && !m_channelItems.empty())
   {
     if (channel >= (int)m_channelItems.size())
       break;
@@ -487,7 +486,7 @@ void CGUIEPGGridContainer::RenderProgrammeGrid()
       posA2 -= missingSection * m_blockSize;
     }
 
-    while (posA2 < endA && m_programmeItems.size())   // FOR EACH ITEM ///////////////
+    while (posA2 < endA && !m_programmeItems.empty())   // FOR EACH ITEM ///////////////
     {
       item = m_gridIndex[channel][block].item;
       if (!item || !item.get()->IsFileItem())
@@ -802,16 +801,22 @@ bool CGUIEPGGridContainer::OnMessage(CGUIMessage& message)
       Reset();
       CFileItemList *items = (CFileItemList *)message.GetPointer();
 
+      /* Create programme items */
+      m_programmeItems.reserve(items->Size());
+      for (int i = 0; i < items->Size(); i++)
+      {
+        CFileItemPtr fileItem = items->Get(i);
+        if (fileItem->HasEPGInfoTag() && fileItem->GetEPGInfoTag()->HasPVRChannel())
+          m_programmeItems.push_back(fileItem);
+      }
+
       /* Create Channel items */
       int iLastChannelNumber = -1;
       ItemsPtr itemsPointer;
       itemsPointer.start = 0;
-      for (int i = 0; i < items->Size(); ++i)
+      for (unsigned int i = 0; i < m_programmeItems.size(); ++i)
       {
-        const CEpgInfoTag* tag = items->Get(i)->GetEPGInfoTag();
-        if (!tag || !tag->HasPVRChannel())
-          continue;
-
+        const CEpgInfoTag* tag = ((CFileItem*)m_programmeItems[i].get())->GetEPGInfoTag();
         int iCurrentChannelNumber = tag->PVRChannelNumber();
         if (iCurrentChannelNumber != iLastChannelNumber)
         {
@@ -830,24 +835,18 @@ bool CGUIEPGGridContainer::OnMessage(CGUIMessage& message)
           m_channelItems.push_back(item);
         }
       }
-      if (items->Size() > 0)
+      if (!m_programmeItems.empty())
       {
-        itemsPointer.stop = items->Size()-1;
+        itemsPointer.stop = m_programmeItems.size()-1;
         m_epgItemsPtr.push_back(itemsPointer);
       }
 
-      /* Create programme items */
-      for (int i = 0; i < items->Size(); i++)
-        m_programmeItems.push_back(items->Get(i));
-
       ClearGridIndex();
-      m_gridIndex = (struct GridItemsPtr **) calloc(1,m_channelItems.size()*sizeof(struct GridItemsPtr*));
-      if (m_gridIndex != NULL)
+      m_gridIndex.reserve(m_channelItems.size());
+      for (unsigned int i = 0; i < m_channelItems.size(); i++)
       {
-        for (unsigned int i = 0; i < m_channelItems.size(); i++)
-        {
-          m_gridIndex[i] = (struct GridItemsPtr*) calloc(1,MAXBLOCKS*sizeof(struct GridItemsPtr));
-        }
+        std::vector<GridItemsPtr> blocks(MAXBLOCKS);
+        m_gridIndex.push_back(blocks);
       }
 
       UpdateLayout(true); // true to refresh all items
@@ -917,7 +916,7 @@ void CGUIEPGGridContainer::UpdateItems()
 
   long tick(XbmcThreads::SystemClockMillis());
 
-  for (unsigned int row = 0; row < m_channelItems.size(); ++row)
+  for (unsigned int row = 0; row < m_epgItemsPtr.size(); ++row)
   {
     CDateTime gridCursor  = m_gridStart; //reset cursor for new channel
     unsigned long progIdx = m_epgItemsPtr[row].start;
@@ -1092,7 +1091,7 @@ bool CGUIEPGGridContainer::MoveChannel(bool direction, bool wrapAround)
 
 bool CGUIEPGGridContainer::MoveProgrammes(bool direction)
 {
-  if (!m_gridIndex || !m_item)
+  if (m_gridIndex.empty() || !m_item)
     return false;
 
   if (direction)
@@ -1358,7 +1357,7 @@ bool CGUIEPGGridContainer::SelectItemFromPoint(const CPoint &point, bool justGri
   int blockIndex = block + m_blockOffset;
 
   // bail if out of range
-  if (channelIndex >= m_channels || blockIndex > MAXBLOCKS)
+  if (channelIndex >= m_channels || blockIndex >= m_blocks)
     return false;
   // bail if block isn't occupied
   if (!m_gridIndex[channelIndex][blockIndex].item)
@@ -1483,10 +1482,10 @@ bool CGUIEPGGridContainer::OnMouseWheel(char wheel, const CPoint &point)
 
 int CGUIEPGGridContainer::GetSelectedItem() const
 {
-  if (!m_gridIndex ||
-      !m_epgItemsPtr.size() ||
-      m_channelCursor + m_channelOffset >= (int)m_channelItems.size() ||
-      m_blockCursor + m_blockOffset >= (int)m_programmeItems.size())
+  if (m_gridIndex.empty() ||
+      m_epgItemsPtr.empty() ||
+      m_channelCursor + m_channelOffset >= m_channels ||
+      m_blockCursor + m_blockOffset >= m_blocks)
     return 0;
 
   CGUIListItemPtr currentItem = m_gridIndex[m_channelCursor + m_channelOffset][m_blockCursor + m_blockOffset].item;
@@ -1503,7 +1502,7 @@ int CGUIEPGGridContainer::GetSelectedItem() const
 
 CGUIListItemPtr CGUIEPGGridContainer::GetListItem(int offset, unsigned int flag) const
 {
-  if (!m_channelItems.size())
+  if (m_channelItems.empty())
     return CGUIListItemPtr();
 
   int item = m_channelCursor + m_channelOffset + offset;
@@ -1599,9 +1598,10 @@ int CGUIEPGGridContainer::GetBlock(const CGUIListItemPtr &item, const int &chann
 
 int CGUIEPGGridContainer::GetRealBlock(const CGUIListItemPtr &item, const int &channel)
 {
+  int channelIndex = channel + m_channelOffset;
   int block = 0;
 
-  while (m_gridIndex[channel + m_channelOffset][block].item != item && block < m_blocks)
+  while (m_gridIndex[channelIndex][block].item != item && block < m_blocks)
     block++;
 
   return block;
@@ -1609,32 +1609,42 @@ int CGUIEPGGridContainer::GetRealBlock(const CGUIListItemPtr &item, const int &c
 
 GridItemsPtr *CGUIEPGGridContainer::GetNextItem(const int &channel)
 {
+  int channelIndex = channel + m_channelOffset;
+  int blockIndex = m_blockCursor + m_blockOffset;
+  if (channelIndex >= m_channels || blockIndex >= m_blocks)
+    return NULL;
+
   int i = m_blockCursor;
 
-  while (m_gridIndex[channel + m_channelOffset][i + m_blockOffset].item == m_gridIndex[channel + m_channelOffset][m_blockCursor + m_blockOffset].item && i < m_blocksPerPage)
+  while (i < m_blocksPerPage && m_gridIndex[channelIndex][i + m_blockOffset].item == m_gridIndex[channelIndex][blockIndex].item)
     i++;
 
-  return &m_gridIndex[channel + m_channelOffset][i + m_blockOffset];
+  return &m_gridIndex[channelIndex][i + m_blockOffset];
 }
 
 GridItemsPtr *CGUIEPGGridContainer::GetPrevItem(const int &channel)
 {
+  int channelIndex = channel + m_channelOffset;
+  int blockIndex = m_blockCursor + m_blockOffset;
+  if (channelIndex >= m_channels || blockIndex >= m_blocks)
+    return NULL;
+
   int i = m_blockCursor;
 
-  while (m_gridIndex[channel + m_channelOffset][i + m_blockOffset].item == m_gridIndex[channel + m_channelOffset][m_blockCursor + m_blockOffset].item && i > 0)
+  while (i > 0 && m_gridIndex[channelIndex][i + m_blockOffset].item == m_gridIndex[channelIndex][blockIndex].item)
     i--;
 
-  return &m_gridIndex[channel + m_channelOffset][i + m_blockOffset];
-
-//  return &m_gridIndex[channel + m_channelOffset][m_blockCursor + m_blockOffset - 1];
+  return &m_gridIndex[channelIndex][i + m_blockOffset];
 }
 
 GridItemsPtr *CGUIEPGGridContainer::GetItem(const int &channel)
 {
-  if ( (channel >= 0) && (channel < m_channels) )
-    return &m_gridIndex[channel + m_channelOffset][m_blockCursor + m_blockOffset];
-  else
+  int channelIndex = channel + m_channelOffset;
+  int blockIndex = m_blockCursor + m_blockOffset;
+  if (channelIndex >= m_channels || blockIndex >= m_blocks)
     return NULL;
+
+  return &m_gridIndex[channelIndex][blockIndex];
 }
 
 void CGUIEPGGridContainer::SetFocus(bool bOnOff)
@@ -1813,19 +1823,16 @@ CStdString CGUIEPGGridContainer::GetDescription() const
 
 void CGUIEPGGridContainer::ClearGridIndex(void)
 {
-  if (m_gridIndex)
+  for (unsigned int i = 0; i < m_gridIndex.size(); i++)
   {
-    for (unsigned int i = 0; i < m_channelItems.size(); i++)
+    for (int block = 0; block < m_blocks; block++)
     {
-      for (int block = 0; block < m_blocks; block++)
-      {
-        if (m_gridIndex[i][block].item)
-          m_gridIndex[i][block].item.get()->ClearProperties();
-      }
-      free(m_gridIndex[i]);
+      if (m_gridIndex[i][block].item)
+        m_gridIndex[i][block].item.get()->ClearProperties();
     }
-    free(m_gridIndex);
+    m_gridIndex[i].clear();
   }
+  m_gridIndex.clear();
 }
 
 void CGUIEPGGridContainer::Reset()
@@ -1840,7 +1847,6 @@ void CGUIEPGGridContainer::Reset()
 
   m_lastItem    = NULL;
   m_lastChannel = NULL;
-  m_gridIndex   = NULL;
 }
 
 void CGUIEPGGridContainer::GoToBegin()
@@ -1971,7 +1977,7 @@ void CGUIEPGGridContainer::GetCurrentLayouts()
       break;
     }
   }
-  if (!m_channelLayout && m_channelLayouts.size())
+  if (!m_channelLayout && !m_channelLayouts.empty())
     m_channelLayout = &m_channelLayouts[0];  // failsafe
 
   m_focusedChannelLayout = NULL;
@@ -1983,7 +1989,7 @@ void CGUIEPGGridContainer::GetCurrentLayouts()
       break;
     }
   }
-  if (!m_focusedChannelLayout && m_focusedChannelLayouts.size())
+  if (!m_focusedChannelLayout && !m_focusedChannelLayouts.empty())
     m_focusedChannelLayout = &m_focusedChannelLayouts[0];  // failsafe
 
   m_programmeLayout = NULL;
@@ -1995,7 +2001,7 @@ void CGUIEPGGridContainer::GetCurrentLayouts()
       break;
     }
   }
-  if (!m_programmeLayout && m_programmeLayouts.size())
+  if (!m_programmeLayout && !m_programmeLayouts.empty())
     m_programmeLayout = &m_programmeLayouts[0];  // failsafe
 
   m_focusedProgrammeLayout = NULL;
@@ -2007,7 +2013,7 @@ void CGUIEPGGridContainer::GetCurrentLayouts()
       break;
     }
   }
-  if (!m_focusedProgrammeLayout && m_focusedProgrammeLayouts.size())
+  if (!m_focusedProgrammeLayout && !m_focusedProgrammeLayouts.empty())
     m_focusedProgrammeLayout = &m_focusedProgrammeLayouts[0];  // failsafe
 
   m_rulerLayout = NULL;
@@ -2019,7 +2025,7 @@ void CGUIEPGGridContainer::GetCurrentLayouts()
       break;
     }
   }
-  if (!m_rulerLayout && m_rulerLayouts.size())
+  if (!m_rulerLayout && !m_rulerLayouts.empty())
     m_rulerLayout = &m_rulerLayouts[0];  // failsafe
 }
 
index 6cc0399..f609bb2 100644 (file)
@@ -216,7 +216,7 @@ namespace EPG
 
     CGUITexture m_guiProgressIndicatorTexture;
 
-    struct GridItemsPtr **m_gridIndex;
+    std::vector<std::vector<GridItemsPtr> > m_gridIndex;
     GridItemsPtr *m_item;
     CGUIListItem *m_lastItem;
     CGUIListItem *m_lastChannel;
index 75d7816..c34a74c 100644 (file)
@@ -217,7 +217,9 @@ void CAddonsDirectory::GenerateListing(CURL &path, VECADDONS& addons, CFileItemL
     else if (CAddonMgr::Get().IsAddonDisabled(addon->ID()))
       pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24023));
 
-    if (!addon->Props().broken.IsEmpty())
+    if (addon->Props().broken == "DEPSNOTMET")
+      pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24049));
+    else if (!addon->Props().broken.empty())
       pItem->SetProperty("Addon.Status",g_localizeStrings.Get(24098));
     if (addon2 && addon2->Version() < addon->Version())
     {
@@ -229,7 +231,7 @@ void CAddonsDirectory::GenerateListing(CURL &path, VECADDONS& addons, CFileItemL
   }
 }
 
-CFileItemPtr CAddonsDirectory::FileItemFromAddon(AddonPtr &addon, const CStdString &basePath, bool folder)
+CFileItemPtr CAddonsDirectory::FileItemFromAddon(const AddonPtr &addon, const CStdString &basePath, bool folder)
 {
   if (!addon)
     return CFileItemPtr();
index 894761a..444a224 100644 (file)
@@ -63,6 +63,6 @@ namespace XFILE
     static CFileItemPtr GetMoreItem(const CStdString &content);
 
     static void GenerateListing(CURL &path, ADDON::VECADDONS& addons, CFileItemList &items, bool reposAsFolders = true);
-    static CFileItemPtr FileItemFromAddon(ADDON::AddonPtr &addon, const CStdString &basePath, bool folder = false);
+    static CFileItemPtr FileItemFromAddon(const ADDON::AddonPtr &addon, const CStdString &basePath, bool folder = false);
   };
 }
index 500b54c..b6b8eb1 100644 (file)
@@ -1624,6 +1624,7 @@ bool CCurlFile::GetCookies(const CURL &url, std::string &cookies)
       if (valuesVec.size() < 7)
       {
         CLog::Log(LOGERROR, "CCurlFile::GetCookies - invalid cookie: '%s'", curlCookieIter->data);
+        curlCookieIter = curlCookieIter->next;
         continue;
       }
 
index ac7a870..155246f 100644 (file)
@@ -149,7 +149,7 @@ bool CFavouritesDirectory::AddOrRemove(CFileItem *item, int contextWindow)
   CFileItemList items;
   Load(items);
 
-  CStdString executePath(GetExecutePath(item, contextWindow));
+  CStdString executePath(GetExecutePath(*item, contextWindow));
 
   CFileItemPtr match = items.Get(executePath);
   if (match)
@@ -175,27 +175,35 @@ bool CFavouritesDirectory::IsFavourite(CFileItem *item, int contextWindow)
   CFileItemList items;
   if (!Load(items)) return false;
 
-  return items.Contains(GetExecutePath(item, contextWindow));
+  return items.Contains(GetExecutePath(*item, contextWindow));
 }
 
-CStdString CFavouritesDirectory::GetExecutePath(const CFileItem *item, int contextWindow)
+CStdString CFavouritesDirectory::GetExecutePath(const CFileItem &item, int contextWindow)
+{
+  return GetExecutePath(item, StringUtils::Format("%i", contextWindow));
+}
+
+CStdString CFavouritesDirectory::GetExecutePath(const CFileItem &item, const std::string &contextWindow)
 {
   CStdString execute;
-  if (item->m_bIsFolder && (g_advancedSettings.m_playlistAsFolders ||
-                            !(item->IsSmartPlayList() || item->IsPlayList())))
-    execute.Format("ActivateWindow(%i,%s)", contextWindow, StringUtils::Paramify(item->GetPath()).c_str());
-  else if (item->IsScript())
-    execute.Format("RunScript(%s)", StringUtils::Paramify(item->GetPath().Mid(9)).c_str());
-  else if (item->IsAndroidApp())
-    execute.Format("StartAndroidActivity(%s)", StringUtils::Paramify(item->GetPath().Mid(26)).c_str());
+  if (item.m_bIsFolder && (g_advancedSettings.m_playlistAsFolders ||
+                            !(item.IsSmartPlayList() || item.IsPlayList())))
+  {
+    if (!contextWindow.empty())
+      execute.Format("ActivateWindow(%s,%s,return)", contextWindow.c_str(), StringUtils::Paramify(item.GetPath()).c_str());
+  }
+  else if (item.IsScript())
+    execute.Format("RunScript(%s)", StringUtils::Paramify(item.GetPath().Mid(9)).c_str());
+  else if (item.IsAndroidApp())
+    execute.Format("StartAndroidActivity(%s)", StringUtils::Paramify(item.GetPath().Mid(26)).c_str());
   else  // assume a media file
   {
-    if (item->IsVideoDb() && item->HasVideoInfoTag())
-      execute.Format("PlayMedia(%s)", StringUtils::Paramify(item->GetVideoInfoTag()->m_strFileNameAndPath).c_str());
+    if (item.IsVideoDb() && item.HasVideoInfoTag())
+      execute.Format("PlayMedia(%s)", StringUtils::Paramify(item.GetVideoInfoTag()->m_strFileNameAndPath).c_str());
     else
-      execute.Format("PlayMedia(%s)", StringUtils::Paramify(item->GetPath()).c_str());
+      execute.Format("PlayMedia(%s)", StringUtils::Paramify(item.GetPath()).c_str());
   }
   return execute;
 }
-  
+
 }
index a9b9aa4..c0a87ab 100644 (file)
@@ -40,8 +40,10 @@ namespace XFILE
     static bool AddOrRemove(CFileItem *item, int contextWindow);
     static bool Save(const CFileItemList& items);
     static bool IsFavourite(CFileItem *item, int contextWindow);
+
+    static CStdString GetExecutePath(const CFileItem &item, int contextWindow);
+    static CStdString GetExecutePath(const CFileItem &item, const std::string &contextWindow);
   private:
-    static CStdString GetExecutePath(const CFileItem *item, int contextWindow);
   };
   
 }
index afe79ff..3dc2fa4 100644 (file)
@@ -270,7 +270,7 @@ bool CFile::Cache(const CStdString& strFileName, const CStdString& strDest, XFIL
 }
 
 //*********************************************************************************************
-bool CFile::Open(const CStdString& strFileName, unsigned int flags)
+bool CFile::Open(const CStdString& strFileName, const unsigned int flags)
 {
   m_flags = flags;
   try
@@ -296,16 +296,16 @@ bool CFile::Open(const CStdString& strFileName, unsigned int flags)
      * 2) Only buffer true internet filesystems (streams) (http, etc.)
      * 3) No buffer
      */
-    if ( (flags & READ_NO_CACHE) == 0 && !CUtil::IsPicture(strFileName) )
+    if ( (m_flags & READ_NO_CACHE) == 0 && !CUtil::IsPicture(strFileName) )
     {
       if (g_advancedSettings.m_networkBufferMode == 0 || g_advancedSettings.m_networkBufferMode == 2)
       {
         if (URIUtils::IsInternetStream(url, (g_advancedSettings.m_networkBufferMode == 0) ) )
-          flags |= READ_CACHED;
+          m_flags |= READ_CACHED;
       }
       else if (g_advancedSettings.m_networkBufferMode == 1)
       {
-        flags |= READ_CACHED; // Force cache for all others (in buffer mode 1)
+        m_flags |= READ_CACHED; // Force cache for all others (in buffer mode 1)
       }
     }
 
index ed586cc..7c89586 100644 (file)
@@ -102,7 +102,7 @@ public:
   CFile();
   virtual ~CFile();
 
-  bool Open(const CStdString& strFileName, unsigned int flags = 0);
+  bool Open(const CStdString& strFileName, const unsigned int flags = 0);
   bool OpenForWrite(const CStdString& strFileName, bool bOverWrite = false);
   unsigned int Read(void* lpBuf, int64_t uiBufSize);
   bool ReadString(char *szLine, int iLineLength);
index 79fb944..7759875 100644 (file)
@@ -125,10 +125,10 @@ sftp_file CSFTPSession::CreateFileHande(const CStdString &file)
       return handle;
     }
     else
-      CLog::Log(LOGERROR, "SFTPSession: Was connected but couldn't create filehandle\n");
+      CLog::Log(LOGERROR, "SFTPSession: Was connected but couldn't create filehandle for '%s'", file.c_str());
   }
   else
-    CLog::Log(LOGERROR, "SFTPSession: Not connected and can't create file handle");
+    CLog::Log(LOGERROR, "SFTPSession: Not connected and can't create file handle for '%s'", file.c_str());
 
   return NULL;
 }
@@ -158,7 +158,7 @@ bool CSFTPSession::GetDirectory(const CStdString &base, const CStdString &folder
 
     if (!dir)
     {
-      CLog::Log(LOGERROR, "%s: %s", __FUNCTION__, SFTPErrorText(sftp_error));
+      CLog::Log(LOGERROR, "%s: %s for '%s'", __FUNCTION__, SFTPErrorText(sftp_error), folder.c_str());
     }
     else
     {
@@ -236,7 +236,7 @@ bool CSFTPSession::GetDirectory(const CStdString &base, const CStdString &folder
     }
   }
   else
-    CLog::Log(LOGERROR, "SFTPSession: Not connected, can't list directory");
+    CLog::Log(LOGERROR, "SFTPSession: Not connected, can't list directory '%s'", folder.c_str());
 
   return false;
 }
@@ -272,18 +272,23 @@ int CSFTPSession::Stat(const char *path, struct __stat64* buffer)
       buffer->st_mtime = attributes->mtime;
       buffer->st_atime = attributes->atime;
 
+      if S_ISDIR(attributes->permissions)
+        buffer->st_mode = _S_IFDIR;
+      else if S_ISREG(attributes->permissions)
+        buffer->st_mode = _S_IFREG;
+
       sftp_attributes_free(attributes);
       return 0;
     }
     else
     {
-      CLog::Log(LOGERROR, "SFTPSession: STAT - Failed to get attributes");
+      CLog::Log(LOGERROR, "SFTPSession::Stat - Failed to get attributes for '%s'", path);
       return -1;
     }
   }
   else
   {
-    CLog::Log(LOGERROR, "SFTPSession: STAT - Not connected");
+    CLog::Log(LOGERROR, "SFTPSession::Stat - Failed because not connected for '%s'", path);
     return -1;
   }
 }
@@ -355,7 +360,7 @@ bool CSFTPSession::Connect(const CStdString &host, unsigned int port, const CStd
   m_session=ssh_new();
   if (m_session == NULL)
   {
-    CLog::Log(LOGERROR, "SFTPSession: Failed to initialize session");
+    CLog::Log(LOGERROR, "SFTPSession: Failed to initialize session for host '%s'", host.c_str());
     return false;
   }
 
@@ -654,7 +659,7 @@ bool CSFTPFile::Exists(const CURL& url)
     return session->FileExists(url.GetFileName().c_str());
   else
   {
-    CLog::Log(LOGERROR, "SFTPFile: Failed to create session to check exists");
+    CLog::Log(LOGERROR, "SFTPFile: Failed to create session to check exists for '%s'", url.GetFileName().c_str());
     return false;
   }
 }
@@ -666,7 +671,7 @@ int CSFTPFile::Stat(const CURL& url, struct __stat64* buffer)
     return session->Stat(url.GetFileName().c_str(), buffer);
   else
   {
-    CLog::Log(LOGERROR, "SFTPFile: Failed to create session to stat");
+    CLog::Log(LOGERROR, "SFTPFile: Failed to create session to stat for '%s'", url.GetFileName().c_str());
     return -1;
   }
 }
@@ -676,7 +681,7 @@ int CSFTPFile::Stat(struct __stat64* buffer)
   if (m_session)
     return m_session->Stat(m_file.c_str(), buffer);
 
-  CLog::Log(LOGERROR, "SFTPFile: Can't stat without a session");
+  CLog::Log(LOGERROR, "SFTPFile: Can't stat without a session for '%s'", m_file.c_str());
   return -1;
 }
 
@@ -697,7 +702,7 @@ int64_t CSFTPFile::GetPosition()
   if (m_session && m_sftp_handle)
     return m_session->GetPosition(m_sftp_handle);
 
-  CLog::Log(LOGERROR, "SFTPFile: Can't get position without a filehandle");
+  CLog::Log(LOGERROR, "SFTPFile: Can't get position without a filehandle for '%s'", m_file.c_str());
   return 0;
 }
 
index 61cb57b..7d2b640 100644 (file)
@@ -22,7 +22,7 @@
 #include "GUIAudioManager.h"
 #include "Key.h"
 #include "input/ButtonTranslator.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "threads/SingleLock.h"
 #include "utils/URIUtils.h"
 #include "utils/XBMCTinyXML.h"
index 2fb1cb0..ab0d965 100644 (file)
@@ -23,7 +23,7 @@
 #include <map>
 
 #include "cores/AudioEngine/Interfaces/AESound.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "threads/CriticalSection.h"
 #include "utils/log.h"
 #include "utils/StdString.h"
index a89e4e8..2649442 100644 (file)
 #include "utils/log.h"
 #include "utils/SortUtils.h"
 #include "utils/StringUtils.h"
-#include "GUIStaticItem.h"
+#include "FileItem.h"
 #include "Key.h"
 #include "utils/MathUtils.h"
 #include "utils/XBMCTinyXML.h"
+#include "listproviders/IListProvider.h"
 
 using namespace std;
 
@@ -50,20 +51,18 @@ CGUIBaseContainer::CGUIBaseContainer(int parentID, int controlID, float posX, fl
   m_pageControl = 0;
   m_orientation = orientation;
   m_analogScrollCount = 0;
-  m_staticContent = false;
-  m_staticUpdateTime = 0;
-  m_staticDefaultItem = -1;
-  m_staticDefaultAlways = false;
   m_wasReset = false;
   m_layout = NULL;
   m_focusedLayout = NULL;
   m_cacheItems = preloadItems;
   m_scrollItemsPerFrame = 0.0f;
   m_type = VIEW_TYPE_NONE;
+  m_listProvider = NULL;
 }
 
 CGUIBaseContainer::~CGUIBaseContainer(void)
 {
+  delete m_listProvider;
 }
 
 void CGUIBaseContainer::DoProcess(unsigned int currentTime, CDirtyRegionList &dirtyregions)
@@ -386,7 +385,7 @@ bool CGUIBaseContainer::OnMessage(CGUIMessage& message)
 {
   if (message.GetControlId() == GetID() )
   {
-    if (!m_staticContent)
+    if (!m_listProvider)
     {
       if (message.GetMessage() == GUI_MSG_LABEL_BIND && message.GetPointer())
       { // bind our items
@@ -717,14 +716,11 @@ bool CGUIBaseContainer::OnClick(int actionID)
   int subItem = 0;
   if (actionID == ACTION_SELECT_ITEM || actionID == ACTION_MOUSE_LEFT_CLICK)
   {
-    if (m_staticContent)
+    if (m_listProvider)
     { // "select" action
       int selected = GetSelectedItem();
       if (selected >= 0 && selected < (int)m_items.size())
-      {
-        CGUIStaticItemPtr item = boost::static_pointer_cast<CGUIStaticItem>(m_items[selected]);
-        item->GetClickActions().ExecuteActions(GetID(), GetParentID());
-      }
+        m_listProvider->OnClick(m_items[selected]);
       return true;
     }
     // grab the currently focused subitem (if applicable)
@@ -764,7 +760,7 @@ void CGUIBaseContainer::SetFocus(bool bOnOff)
 
 void CGUIBaseContainer::SaveStates(vector<CControlState> &states)
 {
-  if (!m_staticDefaultAlways)
+  if (!m_listProvider || !m_listProvider->AlwaysFocusDefaultItem())
     states.push_back(CControlState(GetID(), GetSelectedItem()));
 }
 
@@ -788,17 +784,18 @@ void CGUIBaseContainer::AllocResources()
 {
   CGUIControl::AllocResources();
   CalculateLayout();
-  UpdateStaticItems(true);
-  if (m_staticDefaultItem != -1) // select default item
-    SelectStaticItemById(m_staticDefaultItem);
+  UpdateListProvider(true);
+  if (m_listProvider)
+    SelectItem(m_listProvider->GetDefaultItem());
 }
 
 void CGUIBaseContainer::FreeResources(bool immediately)
 {
   CGUIControl::FreeResources(immediately);
-  if (m_staticContent)
-  { // free any static content
+  if (m_listProvider)
+  {
     Reset();
+    m_listProvider->Reset();
   }
   m_scroller.Stop();
 }
@@ -851,51 +848,41 @@ void CGUIBaseContainer::UpdateVisibility(const CGUIListItem *item)
     SelectItem(itemIndex);
   }
 
-  UpdateStaticItems();
+  UpdateListProvider();
 }
 
-void CGUIBaseContainer::UpdateStaticItems(bool refreshItems)
+void CGUIBaseContainer::UpdateListProvider(bool refreshItems)
 {
-  if (m_staticContent)
-  { // update our item list with our new content, but only add those items that should
-    // be visible.  Save the previous item and keep it if we are adding that one.
-    std::vector<CGUIListItemPtr> items;
-    int reselect = -1;
-    int selected = GetSelectedItem();
-    CGUIListItem* selectedItem = (selected >= 0 && (unsigned int)selected < m_items.size()) ? m_items[selected].get() : NULL;
-    bool updateItemsProperties = false;
-    if (!m_staticUpdateTime)
-      m_staticUpdateTime = CTimeUtils::GetFrameTime();
-    if (CTimeUtils::GetFrameTime() - m_staticUpdateTime > 1000)
-    {
-      m_staticUpdateTime = CTimeUtils::GetFrameTime();
-      updateItemsProperties = true;
-    }
-    for (unsigned int i = 0; i < m_staticItems.size(); ++i)
-    {
-      CGUIStaticItemPtr staticItem = boost::static_pointer_cast<CGUIStaticItem>(m_staticItems[i]);
-      if (staticItem->UpdateVisibility(GetParentID()))
-        refreshItems = true;
-      if (staticItem->IsVisible())
-      {
-        items.push_back(staticItem);
-        // if item is selected and it changed position, re-select it
-        if (staticItem.get() == selectedItem && selected != (int)items.size() - 1)
-          reselect = items.size() - 1;
-      }
-      // update any properties
-      if (updateItemsProperties)
-        staticItem->UpdateProperties(GetParentID());
-    }
-    if (refreshItems)
+  if (m_listProvider)
+  {
+    if (m_listProvider->Update(refreshItems))
     {
+      // save the current item
+      int currentItem = GetSelectedItem();
+      CGUIListItem *current = (currentItem >= 0 && currentItem < (int)m_items.size()) ? m_items[currentItem].get() : NULL;
       Reset();
-      m_items = items;
+      m_listProvider->Fetch(m_items);
       SetPageControlRange();
-      if (reselect >= 0 && reselect < (int)m_items.size())
-        SelectItem(reselect);
+      // update the newly selected item
+      bool found = false;
+      for (int i = 0; i < (int)m_items.size(); i++)
+      {
+        if (m_items[i].get() == current)
+        {
+          found = true;
+          if (i != currentItem)
+          {
+            SelectItem(i);
+            break;
+          }
+        }
+      }
+      if (!found && currentItem >= (int)m_items.size())
+        SelectItem(m_items.size()-1);
       SetInvalid();
     }
+    // always update the scroll by letter, as the list provider may have altered labels
+    // while not actually changing the list items.
     UpdateScrollByLetter();
   }
 }
@@ -1034,34 +1021,19 @@ void CGUIBaseContainer::LoadLayout(TiXmlElement *layout)
   }
 }
 
-void CGUIBaseContainer::LoadContent(TiXmlElement *content)
+void CGUIBaseContainer::LoadListProvider(TiXmlElement *content, int defaultItem, bool defaultAlways)
 {
-  TiXmlElement *root = content->FirstChildElement("content");
-  if (!root)
-    return;
-
-  vector<CGUIListItemPtr> items;
-  TiXmlElement *item = root->FirstChildElement("item");
-  while (item)
-  {
-    if (item->FirstChild())
-    {
-      CGUIStaticItemPtr newItem(new CGUIStaticItem(item, GetParentID()));
-      items.push_back(newItem);
-    }
-    item = item->NextSiblingElement("item");
-  }
-  SetStaticContent(items, false);
+  delete m_listProvider;
+  m_listProvider = IListProvider::Create(content, GetParentID());
+  if (m_listProvider)
+    m_listProvider->SetDefaultItem(defaultItem, defaultAlways);
 }
 
-void CGUIBaseContainer::SetStaticContent(const vector<CGUIListItemPtr> &items, bool forceUpdate /* = true */)
+void CGUIBaseContainer::SetListProvider(IListProvider *provider)
 {
-  m_staticContent = true;
-  m_staticUpdateTime = 0;
-  m_staticItems.clear();
-  m_staticItems.assign(items.begin(), items.end());
-  if (forceUpdate)
-    UpdateStaticItems(true);
+  delete m_listProvider;
+  m_listProvider = provider;
+  UpdateListProvider(true);
 }
 
 void CGUIBaseContainer::SetRenderOffset(const CPoint &offset)
@@ -1239,29 +1211,21 @@ void CGUIBaseContainer::SetOffset(int offset)
 
 bool CGUIBaseContainer::CanFocus() const
 {
-  return (!m_items.empty() && CGUIControl::CanFocus());
-}
-
-void CGUIBaseContainer::SelectStaticItemById(int id)
-{
-  if (m_staticContent)
+  if (CGUIControl::CanFocus())
   {
-    for (unsigned int i = 0 ; i < m_items.size() ; i++)
-    {
-      CGUIStaticItemPtr item = boost::static_pointer_cast<CGUIStaticItem>(m_items[i]);
-      if (item->m_iprogramCount == id)
-      {
-        SelectItem(i);
-        return;
-      }
-    }
+    /*
+     We allow focus if we have items available or if we have a list provider
+     that's in the process of updating.
+     */
+    return !m_items.empty() || (m_listProvider && m_listProvider->IsUpdating());
   }
+  return false;
 }
 
 void CGUIBaseContainer::OnFocus()
 {
-  if (m_staticDefaultAlways)
-    SelectStaticItemById(m_staticDefaultItem);
+  if (m_listProvider && m_listProvider->AlwaysFocusDefaultItem())
+    SelectItem(m_listProvider->GetDefaultItem());
 
   CGUIControl::OnFocus();
 }
index f433e69..0006dd2 100644 (file)
@@ -34,6 +34,8 @@
  \brief
  */
 
+class IListProvider;
+
 class CGUIBaseContainer : public IGUIContainer
 {
 public:
@@ -68,16 +70,18 @@ public:
   virtual void Process(unsigned int currentTime, CDirtyRegionList &dirtyregions);
 
   void LoadLayout(TiXmlElement *layout);
-  void LoadContent(TiXmlElement *content);
-  void SetDefaultControl(int id, bool always) { m_staticDefaultItem = id; m_staticDefaultAlways = always; };
+  void LoadListProvider(TiXmlElement *content, int defaultItem, bool defaultAlways);
 
   virtual CGUIListItemPtr GetListItem(int offset, unsigned int flag = 0) const;
 
   virtual bool GetCondition(int condition, int data) const;
   virtual CStdString GetLabel(int info) const;
 
-  void SetStaticContent(const std::vector<CGUIListItemPtr> &items, bool forceUpdate = true);
-  
+  /*! \brief Set the list provider for this container (for python).
+   \param provider the list provider to use for this container.
+   */
+  void SetListProvider(IListProvider *provider);
+
   /*! \brief Set the offset of the first item in the container from the container's position
    Useful for lists/panels where the focused item may be larger than the non-focused items and thus
    normally cut off from the clipping window defined by the container's position + size.
@@ -107,7 +111,6 @@ protected:
   virtual void UpdatePageControl(int offset);
   virtual void CalculateLayout();
   virtual void SelectItem(int item) {};
-  void SelectStaticItemById(int id);
   virtual bool SelectItemFromPoint(const CPoint &point) { return false; };
   virtual int GetCursorFromPoint(const CPoint &point, CPoint *itemPoint = NULL) const { return -1; };
   virtual void Reset();
@@ -115,7 +118,7 @@ protected:
   virtual int GetCurrentPage() const;
   bool InsideLayout(const CGUIListItemLayout *layout, const CPoint &point) const;
   virtual void OnFocus();
-  void UpdateStaticItems(bool refreshItems = false);
+  void UpdateListProvider(bool refreshItems = false);
 
   int ScrollCorrectionRange() const;
   inline float Size() const;
@@ -150,11 +153,8 @@ protected:
 
   CScroller m_scroller;
 
-  bool m_staticContent;
-  bool m_staticDefaultAlways;
-  int  m_staticDefaultItem;
-  unsigned int m_staticUpdateTime;
-  std::vector<CGUIListItemPtr> m_staticItems;
+  IListProvider *m_listProvider;
+
   bool m_wasReset;  // true if we've received a Reset message until we've rendered once.  Allows
                     // us to make sure we don't tell the infomanager that we've been moving when
                     // the "movement" was simply due to the list being repopulated (thus cursor position
index 1587fbf..49e4cc2 100644 (file)
@@ -63,6 +63,8 @@ void CGUIColorManager::Load(const CStdString &colorFile)
     return; // nothing to do
 
   path = URIUtils::AddFileToFolder(basePath, colorFile);
+  if (!URIUtils::HasExtension(path))
+    path += ".xml";
   CLog::Log(LOGINFO, "Loading colors from %s", path.c_str());
 
   if (xmlDoc.LoadFile(path))
index 701e2c9..3898a1b 100644 (file)
@@ -1314,8 +1314,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
 
     control = new CGUIListContainer(parentID, id, posX, posY, width, height, orientation, scroller, preloadItems);
     ((CGUIListContainer *)control)->LoadLayout(pControlNode);
-    ((CGUIListContainer *)control)->LoadContent(pControlNode);
-    ((CGUIListContainer *)control)->SetDefaultControl(defaultControl, defaultAlways);
+    ((CGUIListContainer *)control)->LoadListProvider(pControlNode, defaultControl, defaultAlways);
     ((CGUIListContainer *)control)->SetType(viewType, viewLabel);
     ((CGUIListContainer *)control)->SetPageControl(pageControl);
     ((CGUIListContainer *)control)->SetRenderOffset(offset);
@@ -1327,8 +1326,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
 
     control = new CGUIWrappingListContainer(parentID, id, posX, posY, width, height, orientation, scroller, preloadItems, focusPosition);
     ((CGUIWrappingListContainer *)control)->LoadLayout(pControlNode);
-    ((CGUIWrappingListContainer *)control)->LoadContent(pControlNode);
-    ((CGUIWrappingListContainer *)control)->SetDefaultControl(defaultControl, defaultAlways);
+    ((CGUIWrappingListContainer *)control)->LoadListProvider(pControlNode, defaultControl, defaultAlways);
     ((CGUIWrappingListContainer *)control)->SetType(viewType, viewLabel);
     ((CGUIWrappingListContainer *)control)->SetPageControl(pageControl);
     ((CGUIWrappingListContainer *)control)->SetRenderOffset(offset);
@@ -1347,8 +1345,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
 
     control = new CGUIFixedListContainer(parentID, id, posX, posY, width, height, orientation, scroller, preloadItems, focusPosition, iMovementRange);
     ((CGUIFixedListContainer *)control)->LoadLayout(pControlNode);
-    ((CGUIFixedListContainer *)control)->LoadContent(pControlNode);
-    ((CGUIFixedListContainer *)control)->SetDefaultControl(defaultControl, defaultAlways);
+    ((CGUIFixedListContainer *)control)->LoadListProvider(pControlNode, defaultControl, defaultAlways);
     ((CGUIFixedListContainer *)control)->SetType(viewType, viewLabel);
     ((CGUIFixedListContainer *)control)->SetPageControl(pageControl);
     ((CGUIFixedListContainer *)control)->SetRenderOffset(offset);
@@ -1360,8 +1357,7 @@ CGUIControl* CGUIControlFactory::Create(int parentID, const CRect &rect, TiXmlEl
 
     control = new CGUIPanelContainer(parentID, id, posX, posY, width, height, orientation, scroller, preloadItems);
     ((CGUIPanelContainer *)control)->LoadLayout(pControlNode);
-    ((CGUIPanelContainer *)control)->LoadContent(pControlNode);
-    ((CGUIPanelContainer *)control)->SetDefaultControl(defaultControl, defaultAlways);
+    ((CGUIPanelContainer *)control)->LoadListProvider(pControlNode, defaultControl, defaultAlways);
     ((CGUIPanelContainer *)control)->SetType(viewType, viewLabel);
     ((CGUIPanelContainer *)control)->SetPageControl(pageControl);
     ((CGUIPanelContainer *)control)->SetRenderOffset(offset);
index 5c4c96f..a0f62d3 100644 (file)
@@ -29,7 +29,7 @@
 #include "filesystem/Directory.h"
 #include "filesystem/File.h"
 #include "filesystem/SpecialProtocol.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "utils/log.h"
 #include "utils/URIUtils.h"
 #include "utils/StringUtils.h"
index 7e47ce6..eb678c3 100644 (file)
@@ -45,7 +45,7 @@ CGUIStaticItem::CGUIStaticItem(const TiXmlElement *item, int parentID) : CFileIt
     const char *id = item->Attribute("id");
     CStdString condition;
     CGUIControlFactory::GetConditionalVisibility(item, condition);
-    m_visCondition = g_infoManager.Register(condition, parentID);
+    SetVisibleCondition(condition, parentID);
     CGUIControlFactory::GetActions(item, "onclick", m_clickActions);
     SetLabel(label.GetLabel(parentID));
     SetLabel2(label2.GetLabel(parentID));
@@ -87,7 +87,14 @@ CGUIStaticItem::CGUIStaticItem(const TiXmlElement *item, int parentID) : CFileIt
     m_iprogramCount = id ? atoi(id) : 0;
   }
 }
-    
+
+CGUIStaticItem::CGUIStaticItem(const CFileItem &item)
+: CFileItem(item)
+{
+  m_visCondition = 0;
+  m_visState = false;
+}
+
 void CGUIStaticItem::UpdateProperties(int contextWindow)
 {
   for (InfoVector::const_iterator i = m_info.begin(); i != m_info.end(); ++i)
@@ -128,3 +135,9 @@ bool CGUIStaticItem::IsVisible() const
     return m_visState;
   return true;
 }
+
+void CGUIStaticItem::SetVisibleCondition(const std::string &condition, int context)
+{
+  m_visCondition = g_infoManager.Register(condition, context);
+  m_visState = false;
+}
index acc0ad1..c2d264a 100644 (file)
@@ -58,6 +58,7 @@ public:
    \param contextWindow window context to use for any info labels
    */
   CGUIStaticItem(const TiXmlElement *element, int contextWindow);
+  CGUIStaticItem(const CFileItem &item); // for python
   virtual ~CGUIStaticItem() {};
   virtual CGUIListItem *Clone() const { return new CGUIStaticItem(*this); };
   
@@ -78,6 +79,12 @@ public:
    */
   bool IsVisible() const;
 
+  /*! \brief set a visible condition for this item.
+   \param condition the condition to use.
+   \param context the context for the condition (typically a window id).
+   */
+  void SetVisibleCondition(const std::string &condition, int context);
+
   const CGUIAction &GetClickActions() const { return m_clickActions; };
 private:
   typedef std::vector< std::pair<CGUIInfoLabel, CStdString> > InfoVector;
index 3c8f993..688c785 100644 (file)
@@ -25,7 +25,7 @@
 #include "ApplicationMessenger.h"
 #include "settings/AdvancedSettings.h"
 #include "settings/DisplaySettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "cores/VideoRenderers/RenderManager.h"
 #include "windowing/WindowingFactory.h"
index c15a7e0..1683207 100644 (file)
@@ -47,7 +47,7 @@
 #include "Resolution.h"
 #include "utils/GlobalsHandling.h"
 #include "DirtyRegion.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "rendering/RenderSystem.h"
 
 enum VIEW_TYPE { VIEW_TYPE_NONE = 0,
index f5cd2ee..ff308e9 100644 (file)
@@ -37,8 +37,8 @@
 #include "guilib/Key.h"
 #include "guilib/GUIWindowManager.h"
 #include "settings/AdvancedSettings.h"
-#include "settings/ISettingCallback.h"
-#include "settings/Setting.h"
+#include "settings/lib/ISettingCallback.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "rendering/RenderSystem.h"
 #include "utils/log.h"
index 95edefd..ef28bf7 100644 (file)
@@ -26,7 +26,7 @@
 #pragma once
 
 #include <stdlib.h>
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "guilib/IMsgTargetCallback.h"
 #include "rendering/RenderSystem.h"
 
index e59c1c1..68a8e9b 100644 (file)
 #define WINDOW_DIALOG_PERIPHERAL_SETTINGS 10150
 #define WINDOW_DIALOG_EXT_PROGRESS        10151
 #define WINDOW_DIALOG_MEDIA_FILTER        10152
+#define WINDOW_DIALOG_SUBTITLES           10153
 
 #define WINDOW_MUSIC_PLAYLIST             10500
 #define WINDOW_MUSIC_FILES                10501
index 46df3d5..627e52b 100644 (file)
@@ -354,6 +354,7 @@ static const ActionMapping windows[] =
         {"karaokelargeselector"     , WINDOW_DIALOG_KARAOKE_SELECTOR},
         {"sliderdialog"             , WINDOW_DIALOG_SLIDER},
         {"addoninformation"         , WINDOW_DIALOG_ADDON_INFO},
+        {"subtitlesearch"           , WINDOW_DIALOG_SUBTITLES},
         {"musicplaylist"            , WINDOW_MUSIC_PLAYLIST},
         {"musicfiles"               , WINDOW_MUSIC_FILES},
         {"musiclibrary"             , WINDOW_MUSIC_NAV},
index 4108055..fb27d92 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "MouseStat.h"
 #include "guilib/Key.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "utils/TimeUtils.h"
 #include "windowing/WindowingFactory.h"
 
index 7330ba0..c1b45d0 100644 (file)
@@ -21,7 +21,7 @@
  *
  */
 
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "windowing/XBMC_events.h"
 
 #define XBMC_BUTTON(X)         (1 << ((X)-1))
index d209c44..0334178 100644 (file)
@@ -23,8 +23,9 @@
 #include "ButtonTranslator.h"
 #include "peripherals/devices/PeripheralImon.h"
 #include "settings/AdvancedSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "utils/log.h"
+#include "utils/StringUtils.h"
 
 #include <math.h>
 
@@ -105,14 +106,28 @@ void CJoystick::Initialize()
         continue;
       }
 #endif
-
-      m_Joysticks.push_back(joy);
       if (joy)
       {
-        m_JoystickNames.push_back(string(SDL_JoystickName(i)));
-        CLog::Log(LOGNOTICE, "Enabled Joystick: %s", SDL_JoystickName(i));
-        CLog::Log(LOGNOTICE, "Details: Total Axis: %d Total Hats: %d Total Buttons: %d",
-            SDL_JoystickNumAxes(joy), SDL_JoystickNumHats(joy), SDL_JoystickNumButtons(joy));        
+        // Some (Microsoft) Keyboards are recognized as Joysticks by modern kernels
+        // Don't enumerate them
+        // https://bugs.launchpad.net/ubuntu/+source/linux/+bug/390959
+        // NOTICE: Enabled Joystick: Microsoft Wired Keyboard 600
+        // Details: Total Axis: 37 Total Hats: 0 Total Buttons: 57
+        // NOTICE: Enabled Joystick: Microsoft Microsoft® 2.4GHz Transceiver v6.0
+        // Details: Total Axis: 37 Total Hats: 0 Total Buttons: 57
+        int num_axis = SDL_JoystickNumAxes(joy);
+        int num_buttons = SDL_JoystickNumButtons(joy);
+        if (num_axis > 20 && num_buttons > 50)
+          CLog::Log(LOGNOTICE, "Your Joystick seems to be a Keyboard, ignoring it: %s Axis: %d Buttons: %d", 
+            SDL_JoystickName(i), num_axis, num_buttons);
+        else
+        {
+          m_JoystickNames.push_back(string(SDL_JoystickName(i)));
+          CLog::Log(LOGNOTICE, "Enabled Joystick: %s", SDL_JoystickName(i));
+          CLog::Log(LOGNOTICE, "Details: Total Axis: %d Total Hats: %d Total Buttons: %d",
+            num_axis, SDL_JoystickNumHats(joy), num_buttons);
+          m_Joysticks.push_back(joy);
+        }
       }
       else
       {
index cbc163d..b5fa48a 100644 (file)
@@ -22,7 +22,7 @@
 #define SDL_JOYSTICK_H
 
 #include "system.h" // for HAS_SDL_JOYSTICK
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include <vector>
 #include <string>
 
index d9d9aae..1677dd7 100644 (file)
@@ -22,7 +22,7 @@
 #include "input/ButtonTranslator.h"
 #include "peripherals/devices/PeripheralImon.h"
 #include "settings/AdvancedSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "utils/log.h"
 
 #include <math.h>
index 45b27dc..b023250 100644 (file)
@@ -22,7 +22,7 @@
 #include <vector>
 #include <string>
 #include <stdint.h>
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "threads/CriticalSection.h"
 
 #define JACTIVE_BUTTON 0x00000001
index 2febcba..152a1a8 100644 (file)
@@ -566,14 +566,26 @@ int CBuiltins::Execute(const CStdString& execString)
         CStdString cmd;
         if (plugin && addon->Type() == ADDON_PLUGIN)
         {
+          CStdString addonid = params[0];
+          CStdString urlParameters;
+          CStdStringArray parameters;
+          if (params.size() == 2 &&
+             (StringUtils::StartsWith(params[1], "/") || StringUtils::StartsWith(params[1], "?")))
+            urlParameters = params[1];
+          else if (params.size() > 1)
+          {
+            parameters.insert(parameters.begin(), params.begin() + 1, params.end());
+            urlParameters = "?" + StringUtils::JoinString(parameters, "&");
+          }
+
           if (plugin->Provides(CPluginSource::VIDEO))
-            cmd.Format("ActivateWindow(Video,plugin://%s,return)",params[0]);
+            cmd.Format("ActivateWindow(Video,plugin://%s%s,return)", addonid, urlParameters);
           else if (plugin->Provides(CPluginSource::AUDIO))
-            cmd.Format("ActivateWindow(Music,plugin://%s,return)",params[0]);
+            cmd.Format("ActivateWindow(Music,plugin://%s%s,return)", addonid, urlParameters);
           else if (plugin->Provides(CPluginSource::EXECUTABLE))
-            cmd.Format("ActivateWindow(Programs,plugin://%s,return)",params[0]);
+            cmd.Format("ActivateWindow(Programs,plugin://%s%s,return)", addonid, urlParameters);
           else if (plugin->Provides(CPluginSource::IMAGE))
-            cmd.Format("ActivateWindow(Pictures,plugin://%s,return)",params[0]);
+            cmd.Format("ActivateWindow(Pictures,plugin://%s%s,return)", addonid, urlParameters);
           else
             // Pass the script name (params[0]) and all the parameters
             // (params[1] ... params[x]) separated by a comma to RunPlugin
@@ -763,7 +775,7 @@ int CBuiltins::Execute(const CStdString& execString)
   else if (execute.Equals("reloadskin"))
   {
     //  Reload the skin
-    g_application.ReloadSkin();
+    g_application.ReloadSkin(!params.empty() && StringUtils::EqualsNoCase(params[0], "confirm"));
   }
   else if (execute.Equals("unloadskin"))
   {
index 07a4c8e..c4885a2 100644 (file)
@@ -186,6 +186,11 @@ JSONRPC_STATUS CAddonsOperations::ExecuteAddon(const CStdString &method, ITransp
       argv += StringUtils::Paramify(it->asString());
     }
   }
+  else if (params.isString())
+  {
+    if (!params.empty())
+      argv = StringUtils::Paramify(params.asString());
+  }
   
   CStdString cmd;
   if (params.size() == 0)
index 247cd29..e6bccb2 100644 (file)
@@ -39,6 +39,7 @@
 #include "ProfilesOperations.h"
 #include "FavouritesOperations.h"
 #include "TextureOperations.h"
+#include "SettingsOperations.h"
 
 using namespace std;
 using namespace JSONRPC;
@@ -214,6 +215,14 @@ JsonRpcMethodMap CJSONServiceDescription::m_methodMaps[] = {
   { "Textures.GetTextures",                         CTextureOperations::GetTextures },
   { "Textures.RemoveTexture",                       CTextureOperations::RemoveTexture },
 
+// Settings operations
+  { "Settings.GetSections",                         CSettingsOperations::GetSections },
+  { "Settings.GetCategories",                       CSettingsOperations::GetCategories },
+  { "Settings.GetSettings",                         CSettingsOperations::GetSettings },
+  { "Settings.GetSettingValue",                     CSettingsOperations::GetSettingValue },
+  { "Settings.SetSettingValue",                     CSettingsOperations::SetSettingValue },
+  { "Settings.ResetSettingValue",                   CSettingsOperations::ResetSettingValue },
+
 // XBMC operations
   { "XBMC.GetInfoLabels",                           CXBMCOperations::GetInfoLabels },
   { "XBMC.GetInfoBooleans",                         CXBMCOperations::GetInfoBooleans }
index a44307a..21d472c 100644 (file)
@@ -12,6 +12,7 @@ SRCS=AddonsOperations.cpp \
      PlaylistOperations.cpp \
      ProfilesOperations.cpp \
      PVROperations.cpp \
+     SettingsOperations.cpp \
      SystemOperations.cpp \
      TextureOperations.cpp \
      VideoLibrary.cpp \
index 1c58d9d..59d7708 100644 (file)
@@ -22,7 +22,7 @@
 namespace JSONRPC
 {
   const char* const JSONRPC_SERVICE_ID          = "http://xbmc.org/jsonrpc/ServiceDescription.json";
-  const char* const JSONRPC_SERVICE_VERSION     = "6.12.0";
+  const char* const JSONRPC_SERVICE_VERSION     = "6.13.0";
   const char* const JSONRPC_SERVICE_DESCRIPTION = "JSON-RPC API of XBMC";
 
   const char* const JSONRPC_SERVICE_TYPES[] = {  
@@ -1388,6 +1388,251 @@ namespace JSONRPC
         "\"thumbnail\": { \"type\": \"string\" }"
       "},"
       "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Type\": {"
+      "\"type\": \"string\","
+      "\"enum\": ["
+        "\"boolean\", \"integer\", \"number\", \"string\", \"action\", \"list\","
+        "\"path\", \"addon\""
+      "]"
+    "}",
+    "\"Setting.Level\": {"
+      "\"type\": \"string\","
+      "\"enum\": [ \"basic\", \"standard\", \"advanced\", \"expert\" ]"
+    "}",
+    "\"Setting.Value\": {"
+      "\"type\": ["
+        "{ \"type\": \"boolean\", \"required\": true },"
+        "{ \"type\": \"integer\", \"required\": true },"
+        "{ \"type\": \"number\", \"required\": true },"
+        "{ \"type\": \"string\", \"required\": true }"
+      "]"
+    "}",
+    "\"Setting.Value.List\": {"
+      "\"type\": \"array\","
+      "\"items\": { \"$ref\": \"Setting.Value\" }"
+    "}",
+    "\"Setting.Value.Extended\": {"
+      "\"type\": ["
+        "{ \"type\": \"boolean\", \"required\": true },"
+        "{ \"type\": \"integer\", \"required\": true },"
+        "{ \"type\": \"number\", \"required\": true },"
+        "{ \"type\": \"string\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Value.List\", \"required\": true }"
+      "]"
+    "}",
+    "\"Setting.Details.ControlBase\": {"
+      "\"type\": \"object\","
+      "\"properties\": {"
+        "\"type\": { \"type\": \"string\", \"required\": true },"
+        "\"format\": { \"type\": \"string\", \"required\": true },"
+        "\"delayed\": { \"type\": \"boolean\", \"required\": true }"
+      "}"
+    "}",
+    "\"Setting.Details.ControlCheckmark\": {"
+      "\"extends\": \"Setting.Details.ControlBase\","
+      "\"properties\": {"
+        "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"toggle\" ] },"
+        "\"format\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"boolean\" ] }"
+      "}"
+    "}",
+    "\"Setting.Details.ControlSpinner\": {"
+      "\"extends\": \"Setting.Details.ControlBase\","
+      "\"properties\": {"
+        "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"spinner\" ] },"
+        "\"formatlabel\": { \"type\": \"string\" },"
+        "\"minimumlabel\": { \"type\": \"string\" }"
+      "}"
+    "}",
+    "\"Setting.Details.ControlHeading\": {"
+      "\"extends\": \"Setting.Details.ControlBase\","
+      "\"properties\": {"
+        "\"heading\": { \"type\": \"string\" }"
+      "}"
+    "}",
+    "\"Setting.Details.ControlEdit\": {"
+      "\"extends\": \"Setting.Details.ControlHeading\","
+      "\"properties\": {"
+        "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"edit\" ] },"
+        "\"hidden\": { \"type\": \"boolean\", \"required\": true },"
+        "\"verifynewvalue\": { \"type\": \"boolean\", \"required\": true }"
+      "}"
+    "}",
+    "\"Setting.Details.ControlButton\": {"
+      "\"extends\": \"Setting.Details.ControlHeading\","
+      "\"properties\": {"
+        "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"button\" ] }"
+      "}"
+    "}",
+    "\"Setting.Details.ControlList\": {"
+      "\"extends\": \"Setting.Details.ControlHeading\","
+      "\"properties\": {"
+        "\"type\": { \"type\": \"string\", \"required\": true, \"enum\": [ \"list\" ] },"
+        "\"multiselect\": { \"type\": \"boolean\", \"required\": true }"
+      "}"
+    "}",
+    "\"Setting.Details.Control\": {"
+      "\"type\": ["
+        "{ \"$ref\": \"Setting.Details.ControlCheckmark\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.ControlSpinner\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.ControlEdit\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.ControlButton\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.ControlList\", \"required\": true }"
+      "]"
+    "}",
+    "\"Setting.Details.Base\": {"
+      "\"type\": \"object\","
+      "\"properties\": {"
+        "\"id\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
+        "\"label\": { \"type\": \"string\", \"required\": true },"
+        "\"help\": { \"type\": \"string\" }"
+      "}"
+    "}",
+    "\"Setting.Details.SettingBase\": {"
+      "\"extends\": \"Setting.Details.Base\","
+      "\"properties\": {"
+        "\"type\": { \"$ref\": \"Setting.Type\", \"required\": true },"
+        "\"enabled\": { \"type\": \"boolean\", \"required\": true },"
+        "\"level\": { \"type\": \"integer\", \"required\": true },"
+        "\"parent\": { \"type\": \"string\" },"
+        "\"control\": { \"$ref\": \"Setting.Details.Control\" }"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.SettingBool\": {"
+      "\"extends\": \"Setting.Details.SettingBase\","
+      "\"properties\": {"
+        "\"value\": { \"type\": \"boolean\", \"required\": true },"
+        "\"default\": { \"type\": \"boolean\", \"required\": true }"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.SettingInt\": {"
+      "\"extends\": \"Setting.Details.SettingBase\","
+      "\"properties\": {"
+        "\"value\": { \"type\": \"integer\", \"required\": true },"
+        "\"default\": { \"type\": \"integer\", \"required\": true },"
+        "\"minimum\": { \"type\": \"integer\" },"
+        "\"step\": { \"type\": \"integer\" },"
+        "\"maximum\": { \"type\": \"integer\" },"
+        "\"options\": { \"type\": \"array\","
+          "\"items\": { \"type\": \"object\","
+            "\"properties\": {"
+              "\"label\": { \"type\": \"string\", \"required\": true },"
+              "\"value\": { \"type\": \"integer\", \"required\": true }"
+            "}"
+          "}"
+        "}"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.SettingNumber\": {"
+      "\"extends\": \"Setting.Details.SettingBase\","
+      "\"properties\": {"
+        "\"value\": { \"type\": \"number\", \"required\": true },"
+        "\"default\": { \"type\": \"number\", \"required\": true },"
+        "\"minimum\": { \"type\": \"number\", \"required\": true },"
+        "\"step\": { \"type\": \"number\", \"required\": true },"
+        "\"maximum\": { \"type\": \"number\", \"required\": true }"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.SettingString\": {"
+      "\"extends\": \"Setting.Details.SettingBase\","
+      "\"properties\": {"
+        "\"value\": { \"type\": \"string\", \"required\": true },"
+        "\"default\": { \"type\": \"string\", \"required\": true },"
+        "\"allowempty\": { \"type\": \"boolean\", \"required\": true },"
+        "\"options\": { \"type\": \"array\","
+          "\"items\": { \"type\": \"object\","
+            "\"properties\": {"
+              "\"label\": { \"type\": \"string\", \"required\": true },"
+              "\"value\": { \"type\": \"string\", \"required\": true }"
+            "}"
+          "}"
+        "}"
+      "}"
+    "}",
+    "\"Setting.Details.SettingAction\": {"
+      "\"extends\": \"Setting.Details.SettingBase\","
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.SettingList\": {"
+      "\"extends\": \"Setting.Details.SettingBase\","
+      "\"properties\": {"
+        "\"value\": { \"$ref\": \"Setting.Value.List\", \"required\": true },"
+        "\"default\": { \"$ref\": \"Setting.Value.List\", \"required\": true },"
+        "\"elementtype\": { \"$ref\": \"Setting.Type\", \"required\": true },"
+        "\"definition\": { \"$ref\": \"Setting.Details.Setting\", \"required\": true },"
+        "\"delimiter\": { \"type\": \"string\", \"required\": true },"
+        "\"minimum\": { \"type\": \"integer\" },"
+        "\"maximum\": { \"type\": \"integer\" }"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.SettingPath\": {"
+      "\"extends\": \"Setting.Details.SettingString\","
+      "\"properties\": {"
+        "\"writable\": { \"type\": \"boolean\", \"required\": true },"
+        "\"sources\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } }"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.SettingAddon\": {"
+      "\"extends\": \"Setting.Details.SettingString\","
+      "\"properties\": {"
+        "\"addontype\": { \"$ref\": \"Addon.Types\", \"required\": true }"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.Setting\": {"
+      "\"type\": ["
+        "{ \"$ref\": \"Setting.Details.SettingBool\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.SettingInt\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.SettingNumber\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.SettingString\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.SettingAction\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.SettingList\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.SettingPath\", \"required\": true },"
+        "{ \"$ref\": \"Setting.Details.SettingAddon\", \"required\": true }"
+      "]"
+    "}",
+    "\"Setting.Details.Group\": {"
+      "\"type\": \"object\","
+      "\"properties\": {"
+        "\"id\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
+        "\"settings\": {"
+          "\"type\": \"array\","
+          "\"items\": { \"$ref\": \"Setting.Details.Setting\" },"
+          "\"minItems\": 1,"
+          "\"uniqueItems\": true"
+        "}"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.Category\": {"
+      "\"extends\": \"Setting.Details.Base\","
+      "\"properties\": {"
+        "\"groups\": {"
+          "\"type\": \"array\","
+          "\"items\": { \"$ref\": \"Setting.Details.Group\" },"
+          "\"minItems\": 1,"
+          "\"uniqueItems\": true"
+        "}"
+      "},"
+      "\"additionalProperties\": false"
+    "}",
+    "\"Setting.Details.Section\": {"
+      "\"extends\": \"Setting.Details.Base\","
+      "\"properties\": {"
+        "\"categories\": {"
+          "\"type\": \"array\","
+          "\"items\": { \"$ref\": \"Setting.Details.Category\" },"
+          "\"minItems\": 1,"
+          "\"uniqueItems\": true"
+        "}"
+      "},"
+      "\"additionalProperties\": false"
     "}"
   };
 
@@ -3019,8 +3264,10 @@ namespace JSONRPC
         "{ \"name\": \"addonid\", \"type\": \"string\", \"required\": true },"
         "{ \"name\": \"params\", \"type\": ["
             "{ \"type\": \"object\", \"additionalProperties\": { \"type\": \"string\" } },"
-            "{ \"type\": \"array\", \"items\": { \"type\": \"string\" } }"
-          "]"
+            "{ \"type\": \"array\", \"items\": { \"type\": \"string\" } },"
+            "{ \"type\": \"string\", \"description\": \"URL path (must start with / or ?\" }"
+          "],"
+          "\"default\": \"\""
         "},"
         "{ \"name\": \"wait\", \"type\": \"boolean\", \"default\": false }"
       "],"
@@ -3499,6 +3746,116 @@ namespace JSONRPC
         "{ \"name\": \"thumbnail\", \"$ref\": \"Optional.String\" }"
       "],"
       "\"returns\": \"string\""
+    "}",
+    "\"Settings.GetSections\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Retrieves all setting sections\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
+        "{ \"name\": \"level\", \"$ref\": \"Setting.Level\", \"default\": \"standard\" },"
+        "{ \"name\": \"properties\", \"extends\": \"Item.Fields.Base\","
+          "\"items\": { \"type\": \"string\","
+            "\"enum\": [ \"categories\" ]"
+          "}"
+        "}"
+      "],"
+      "\"returns\": {"
+        "\"type\": \"object\","
+        "\"properties\": {"
+          "\"sections\": { \"type\": \"array\","
+            "\"items\": { \"$ref\": \"Setting.Details.Section\" }"
+          "}"
+        "}"
+      "}"
+    "}",
+    "\"Settings.GetCategories\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Retrieves all setting categories\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
+        "{ \"name\": \"level\", \"$ref\": \"Setting.Level\", \"default\": \"standard\" },"
+        "{ \"name\": \"section\", \"type\": \"string\", \"default\": \"\" },"
+        "{ \"name\": \"properties\", \"extends\": \"Item.Fields.Base\","
+          "\"items\": { \"type\": \"string\","
+            "\"enum\": [ \"settings\" ]"
+          "}"
+        "}"
+      "],"
+      "\"returns\": {"
+        "\"type\": \"object\","
+        "\"properties\": {"
+          "\"categories\": { \"type\": \"array\","
+            "\"items\": { \"$ref\": \"Setting.Details.Category\" }"
+          "}"
+        "}"
+      "}"
+    "}",
+    "\"Settings.GetSettings\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Retrieves all settings\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
+        "{ \"name\": \"level\", \"$ref\": \"Setting.Level\", \"default\": \"standard\" },"
+        "{ \"name\": \"filter\", \"type\": ["
+            "{ \"type\": \"object\","
+              "\"properties\": {"
+                "\"section\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
+                "\"category\": { \"type\": \"string\", \"required\": true, \"minLength\": 1 }"
+              "},"
+              "\"additionalProperties\": false,"
+              "\"required\": true"
+            "}"
+          "],"
+          "\"default\": null"
+        "}"
+      "],"
+      "\"returns\": {"
+        "\"type\": \"object\","
+        "\"properties\": {"
+          "\"settings\": { \"type\": \"array\","
+            "\"items\": { \"$ref\": \"Setting.Details.Setting\" }"
+          "}"
+        "}"
+      "}"
+    "}",
+    "\"Settings.GetSettingValue\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Retrieves the value of a setting\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"ReadData\","
+      "\"params\": ["
+        "{ \"name\": \"setting\", \"type\": \"string\", \"required\": true, \"minLength\": 1 }"
+      "],"
+      "\"returns\": {"
+        "\"type\": \"object\","
+        "\"properties\": {"
+          "\"value\": { \"$ref\": \"Setting.Value.Extended\", \"required\": true }"
+        "}"
+      "}"
+    "}",
+    "\"Settings.SetSettingValue\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Changes the value of a setting\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"WriteSetting\","
+      "\"params\": ["
+        "{ \"name\": \"setting\", \"type\": \"string\", \"required\": true, \"minLength\": 1 },"
+        "{ \"name\": \"value\", \"$ref\": \"Setting.Value.Extended\", \"required\": true }"
+      "],"
+      "\"returns\": \"boolean\""
+    "}",
+    "\"Settings.ResetSettingValue\": {"
+      "\"type\": \"method\","
+      "\"description\": \"Resets the value of a setting\","
+      "\"transport\": \"Response\","
+      "\"permission\": \"WriteSetting\","
+      "\"params\": ["
+        "{ \"name\": \"setting\", \"type\": \"string\", \"required\": true, \"minLength\": 1 }"
+      "],"
+      "\"returns\": \"string\""
     "}"
   };
 
diff --git a/xbmc/interfaces/json-rpc/SettingsOperations.cpp b/xbmc/interfaces/json-rpc/SettingsOperations.cpp
new file mode 100644 (file)
index 0000000..86a21e6
--- /dev/null
@@ -0,0 +1,689 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "SettingsOperations.h"
+#include "addons/Addon.h"
+#include "settings/SettingAddon.h"
+#include "settings/SettingControl.h"
+#include "settings/SettingPath.h"
+#include "settings/Settings.h"
+#include "settings/lib/Setting.h"
+#include "settings/lib/SettingSection.h"
+#include "guilib/LocalizeStrings.h"
+#include "utils/StringUtils.h"
+
+using namespace std;
+using namespace JSONRPC;
+
+JSONRPC_STATUS CSettingsOperations::GetSections(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  SettingLevel level = (SettingLevel)ParseSettingLevel(parameterObject["level"].asString());
+  bool listCategories = !parameterObject["properties"].empty() && parameterObject["properties"][0].asString() == "categories";
+  vector<CSettingSection*> sections;
+
+  result["sections"] = CVariant(CVariant::VariantTypeArray);
+
+  // apply the level filter
+  vector<CSettingSection*> allSections = CSettings::Get().GetSections();
+  for (vector<CSettingSection*>::const_iterator itSection = allSections.begin(); itSection != allSections.end(); ++itSection)
+  {
+    SettingCategoryList categories = (*itSection)->GetCategories(level);
+    if (categories.empty())
+      continue;
+
+    CVariant varSection(CVariant::VariantTypeObject);
+    if (!SerializeSettingSection(*itSection, varSection))
+      continue;
+
+    if (listCategories)
+    {
+      varSection["categories"] = CVariant(CVariant::VariantTypeArray);
+      for (SettingCategoryList::const_iterator itCategory = categories.begin(); itCategory != categories.end(); ++itCategory)
+      {
+        CVariant varCategory(CVariant::VariantTypeObject);
+        if (!SerializeSettingCategory(*itCategory, varCategory))
+          continue;
+
+        varSection["categories"].push_back(varCategory);
+      }
+    }
+
+    result["sections"].push_back(varSection);
+  }
+
+  return OK;
+}
+
+JSONRPC_STATUS CSettingsOperations::GetCategories(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  SettingLevel level = (SettingLevel)ParseSettingLevel(parameterObject["level"].asString());
+  std::string strSection = parameterObject["section"].asString();
+  bool listSettings = !parameterObject["properties"].empty() && parameterObject["properties"][0].asString() == "settings";
+
+  vector<CSettingSection*> sections;
+  if (!strSection.empty())
+  {
+    CSettingSection *section = CSettings::Get().GetSection(strSection);
+    if (section == NULL)
+      return InvalidParams;
+
+    sections.push_back(section);
+  }
+  else
+    sections = CSettings::Get().GetSections();
+
+  result["categories"] = CVariant(CVariant::VariantTypeArray);
+
+  for (vector<CSettingSection*>::const_iterator itSection = sections.begin(); itSection != sections.end(); ++itSection)
+  {
+    SettingCategoryList categories = (*itSection)->GetCategories(level);
+    for (SettingCategoryList::const_iterator itCategory = categories.begin(); itCategory != categories.end(); ++itCategory)
+    {
+      CVariant varCategory(CVariant::VariantTypeObject);
+      if (!SerializeSettingCategory(*itCategory, varCategory))
+        continue;
+
+      if (listSettings)
+      {
+        varCategory["groups"] = CVariant(CVariant::VariantTypeArray);
+
+        SettingGroupList groups = (*itCategory)->GetGroups(level);
+        for (SettingGroupList::const_iterator itGroup = groups.begin(); itGroup != groups.end(); ++itGroup)
+        {
+          CVariant varGroup(CVariant::VariantTypeObject);
+          if (!SerializeSettingGroup(*itGroup, varGroup))
+            continue;
+
+          varGroup["settings"] = CVariant(CVariant::VariantTypeArray);
+          SettingList settings = (*itGroup)->GetSettings(level);
+          for (SettingList::const_iterator itSetting = settings.begin(); itSetting != settings.end(); ++itSetting)
+          {
+            CVariant varSetting(CVariant::VariantTypeObject);
+            if (!SerializeSetting(*itSetting, varSetting))
+              continue;
+
+            varGroup["settings"].push_back(varSetting);
+          }
+
+          varCategory["groups"].push_back(varGroup);
+        }
+      }
+      
+      result["categories"].push_back(varCategory);
+    }
+  }
+
+  return OK;
+}
+
+JSONRPC_STATUS CSettingsOperations::GetSettings(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  SettingLevel level = (SettingLevel)ParseSettingLevel(parameterObject["level"].asString());
+  const CVariant &filter = parameterObject["filter"];
+  bool doFilter = filter.isObject() && filter.isMember("section") && filter.isMember("category");
+  string strSection, strCategory;
+  if (doFilter)
+  {
+    strSection = filter["section"].asString();
+    strCategory = filter["category"].asString();
+  }
+  vector<CSettingSection*> sections;
+
+  if (doFilter)
+  {
+    CSettingSection *section = CSettings::Get().GetSection(strSection);
+    if (section == NULL)
+      return InvalidParams;
+
+    sections.push_back(section);
+  }
+  else
+    sections = CSettings::Get().GetSections();
+
+  result["settings"] = CVariant(CVariant::VariantTypeArray);
+
+  for (vector<CSettingSection*>::const_iterator itSection = sections.begin(); itSection != sections.end(); ++itSection)
+  {
+    SettingCategoryList categories = (*itSection)->GetCategories(level);
+    bool found = !doFilter;
+    for (SettingCategoryList::const_iterator itCategory = categories.begin(); itCategory != categories.end(); ++itCategory)
+    {
+      if (!doFilter || StringUtils::EqualsNoCase((*itCategory)->GetId(), strCategory))
+      {
+        SettingGroupList groups = (*itCategory)->GetGroups(level);
+        for (SettingGroupList::const_iterator itGroup = groups.begin(); itGroup != groups.end(); ++itGroup)
+        {
+          SettingList settings = (*itGroup)->GetSettings(level);
+          for (SettingList::const_iterator itSetting = settings.begin(); itSetting != settings.end(); ++itSetting)
+          {
+            CVariant varSetting(CVariant::VariantTypeObject);
+            if (!SerializeSetting(*itSetting, varSetting))
+              continue;
+
+            result["settings"].push_back(varSetting);
+          }
+        }
+        found = true;
+
+        if (doFilter)
+          break;
+      }
+    }
+
+    if (doFilter && !found)
+      return InvalidParams;
+  }
+
+  return OK;
+}
+
+JSONRPC_STATUS CSettingsOperations::GetSettingValue(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  string settingId = parameterObject["setting"].asString();
+
+  CSetting* setting = CSettings::Get().GetSetting(settingId);
+  if (setting == NULL)
+    return InvalidParams;
+
+  CVariant value;
+  switch (setting->GetType())
+  {
+  case SettingTypeBool:
+    value = static_cast<CSettingBool*>(setting)->GetValue();
+    break;
+
+  case SettingTypeInteger:
+    value = static_cast<CSettingInt*>(setting)->GetValue();
+    break;
+
+  case SettingTypeNumber:
+    value = static_cast<CSettingNumber*>(setting)->GetValue();
+    break;
+
+  case SettingTypeString:
+    value = static_cast<CSettingString*>(setting)->GetValue();
+    break;
+
+  case SettingTypeList:
+  {
+    SerializeSettingListValues(CSettings::Get().GetList(settingId), value);
+    break;
+  }
+
+  case SettingTypeNone:
+  case SettingTypeAction:
+  default:
+    return InvalidParams;
+  }
+
+  result["value"] = value;
+
+  return OK;
+}
+
+JSONRPC_STATUS CSettingsOperations::SetSettingValue(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  string settingId = parameterObject["setting"].asString();
+  CVariant value = parameterObject["value"];
+
+  CSetting* setting = CSettings::Get().GetSetting(settingId);
+  if (setting == NULL)
+    return InvalidParams;
+
+  switch (setting->GetType())
+  {
+  case SettingTypeBool:
+    if (!value.isBoolean())
+      return InvalidParams;
+
+    result = static_cast<CSettingBool*>(setting)->SetValue(value.asBoolean());
+    break;
+
+  case SettingTypeInteger:
+    if (!value.isInteger() && !value.isUnsignedInteger())
+      return InvalidParams;
+
+    result = static_cast<CSettingInt*>(setting)->SetValue((int)value.asInteger());
+    break;
+
+  case SettingTypeNumber:
+    if (!value.isDouble())
+      return InvalidParams;
+
+    result = static_cast<CSettingNumber*>(setting)->SetValue(value.asDouble());
+    break;
+
+  case SettingTypeString:
+    if (!value.isString())
+      return InvalidParams;
+
+    result = static_cast<CSettingString*>(setting)->SetValue(value.asString());
+    break;
+
+  case SettingTypeList:
+  {
+    if (!value.isArray())
+      return InvalidParams;
+
+    std::vector<CVariant> values;
+    for (CVariant::const_iterator_array itValue = value.begin_array(); itValue != value.end_array(); ++itValue)
+      values.push_back(*itValue);
+
+    result = CSettings::Get().SetList(settingId, values);
+    break;
+  }
+
+  case SettingTypeNone:
+  case SettingTypeAction:
+  default:
+    return InvalidParams;
+  }
+
+  return OK;
+}
+
+JSONRPC_STATUS CSettingsOperations::ResetSettingValue(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
+{
+  string settingId = parameterObject["setting"].asString();
+
+  CSetting* setting = CSettings::Get().GetSetting(settingId);
+  if (setting == NULL)
+    return InvalidParams;
+
+  switch (setting->GetType())
+  {
+  case SettingTypeBool:
+  case SettingTypeInteger:
+  case SettingTypeNumber:
+  case SettingTypeString:
+  case SettingTypeList:
+    setting->Reset();
+    break;
+
+  case SettingTypeNone:
+  case SettingTypeAction:
+  default:
+    return InvalidParams;
+  }
+
+  return ACK;
+}
+
+int CSettingsOperations::ParseSettingLevel(const std::string &strLevel)
+{
+  if (StringUtils::EqualsNoCase(strLevel, "basic"))
+    return SettingLevelBasic;
+  if (StringUtils::EqualsNoCase(strLevel, "advanced"))
+    return SettingLevelAdvanced;
+  if (StringUtils::EqualsNoCase(strLevel, "expert"))
+    return SettingLevelExpert;
+
+  return SettingLevelStandard;
+}
+
+bool CSettingsOperations::SerializeISetting(const ISetting* setting, CVariant &obj)
+{
+  if (setting == NULL)
+    return false;
+
+  obj["id"] = setting->GetId();
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingSection(const CSettingSection* setting, CVariant &obj)
+{
+  if (!SerializeISetting(setting, obj))
+    return false;
+
+  obj["label"] = g_localizeStrings.Get(setting->GetLabel());
+  if (setting->GetHelp() >= 0)
+    obj["help"] = g_localizeStrings.Get(setting->GetHelp());
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingCategory(const CSettingCategory* setting, CVariant &obj)
+{
+  if (!SerializeISetting(setting, obj))
+    return false;
+
+  obj["label"] = g_localizeStrings.Get(setting->GetLabel());
+  if (setting->GetHelp() >= 0)
+    obj["help"] = g_localizeStrings.Get(setting->GetHelp());
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingGroup(const CSettingGroup* setting, CVariant &obj)
+{
+  return SerializeISetting(setting, obj);
+}
+
+bool CSettingsOperations::SerializeSetting(const CSetting* setting, CVariant &obj)
+{
+  if (!SerializeISetting(setting, obj))
+    return false;
+
+  obj["label"] = g_localizeStrings.Get(setting->GetLabel());
+  if (setting->GetHelp() >= 0)
+    obj["help"] = g_localizeStrings.Get(setting->GetHelp());
+
+  switch (setting->GetLevel())
+  {
+    case SettingLevelBasic:
+      obj["level"] = "basic";
+      break;
+
+    case SettingLevelStandard:
+      obj["level"] = "standard";
+      break;
+
+    case SettingLevelAdvanced:
+      obj["level"] = "advanced";
+      break;
+
+    case SettingLevelExpert:
+      obj["level"] = "expert";
+      break;
+
+    default:
+      return false;
+  }
+
+  obj["enabled"] = setting->IsEnabled();
+  obj["parent"] = setting->GetParent();
+
+  obj["control"] = CVariant(CVariant::VariantTypeObject);
+  if (!SerializeSettingControl(setting->GetControl(), obj["control"]))
+    return false;
+
+  switch (setting->GetType())
+  {
+    case SettingTypeBool:
+      obj["type"] = "boolean";
+      if (!SerializeSettingBool(static_cast<const CSettingBool*>(setting), obj))
+        return false;
+      break;
+
+    case SettingTypeInteger:
+      obj["type"] = "integer";
+      if (!SerializeSettingInt(static_cast<const CSettingInt*>(setting), obj))
+        return false;
+      break;
+
+    case SettingTypeNumber:
+      obj["type"] = "number";
+      if (!SerializeSettingNumber(static_cast<const CSettingNumber*>(setting), obj))
+        return false;
+      break;
+
+    case SettingTypeString:
+      obj["type"] = "string";
+      if (!SerializeSettingString(static_cast<const CSettingString*>(setting), obj))
+        return false;
+      break;
+
+    case SettingTypeAction:
+      obj["type"] = "action";
+      if (!SerializeSettingAction(static_cast<const CSettingAction*>(setting), obj))
+        return false;
+      break;
+
+    case SettingTypeList:
+      obj["type"] = "list";
+      if (!SerializeSettingList(static_cast<const CSettingList*>(setting), obj))
+        return false;
+      break;
+
+    default:
+      return false;
+  }
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingBool(const CSettingBool* setting, CVariant &obj)
+{
+  if (setting == NULL)
+    return false;
+
+  obj["value"] = setting->GetValue();
+  obj["default"] = setting->GetDefault();
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingInt(const CSettingInt* setting, CVariant &obj)
+{
+  if (setting == NULL)
+    return false;
+
+  obj["value"] = setting->GetValue();
+  obj["default"] = setting->GetDefault();
+
+  switch (setting->GetOptionsType())
+  {
+    case SettingOptionsTypeStatic:
+    {
+      obj["options"] = CVariant(CVariant::VariantTypeArray);
+      const StaticIntegerSettingOptions& options = setting->GetOptions();
+      for (StaticIntegerSettingOptions::const_iterator itOption = options.begin(); itOption != options.end(); ++itOption)
+      {
+        CVariant varOption(CVariant::VariantTypeObject);
+        varOption["label"] = g_localizeStrings.Get(itOption->first);
+        varOption["value"] = itOption->second;
+        obj["options"].push_back(varOption);
+      }
+      break;
+    }
+
+    case SettingOptionsTypeDynamic:
+    {
+      obj["options"] = CVariant(CVariant::VariantTypeArray);
+      DynamicIntegerSettingOptions options = const_cast<CSettingInt*>(setting)->UpdateDynamicOptions();
+      for (DynamicIntegerSettingOptions::const_iterator itOption = options.begin(); itOption != options.end(); ++itOption)
+      {
+        CVariant varOption(CVariant::VariantTypeObject);
+        varOption["label"] = itOption->first;
+        varOption["value"] = itOption->second;
+        obj["options"].push_back(varOption);
+      }
+      break;
+    }
+
+    case SettingOptionsTypeNone:
+    default:
+      obj["minimum"] = setting->GetMinimum();
+      obj["step"] = setting->GetStep();
+      obj["maximum"] = setting->GetMaximum();
+      break;
+  }
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingNumber(const CSettingNumber* setting, CVariant &obj)
+{
+  if (setting == NULL)
+    return false;
+
+  obj["value"] = setting->GetValue();
+  obj["default"] = setting->GetDefault();
+
+  obj["minimum"] = setting->GetMinimum();
+  obj["step"] = setting->GetStep();
+  obj["maximum"] = setting->GetMaximum();
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingString(const CSettingString* setting, CVariant &obj)
+{
+  if (setting == NULL)
+    return false;
+
+  obj["value"] = setting->GetValue();
+  obj["default"] = setting->GetDefault();
+
+  obj["allowempty"] = setting->AllowEmpty();
+
+  if (setting->GetOptionsType() == SettingOptionsTypeDynamic)
+  {
+    obj["options"] = CVariant(CVariant::VariantTypeArray);
+    DynamicStringSettingOptions options = const_cast<CSettingString*>(setting)->UpdateDynamicOptions();
+    for (DynamicStringSettingOptions::const_iterator itOption = options.begin(); itOption != options.end(); ++itOption)
+    {
+      CVariant varOption(CVariant::VariantTypeObject);
+      varOption["label"] = itOption->first;
+      varOption["value"] = itOption->second;
+      obj["options"].push_back(varOption);
+    }
+  }
+
+  const ISettingControl* control = setting->GetControl();
+  if (control->GetFormat() == "path")
+  {
+    if (!SerializeSettingPath(static_cast<const CSettingPath*>(setting), obj))
+      return false;
+  }
+  if (control->GetFormat() == "addon")
+  {
+    if (!SerializeSettingAddon(static_cast<const CSettingAddon*>(setting), obj))
+      return false;
+  }
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingAction(const CSettingAction* setting, CVariant &obj)
+{
+  if (setting == NULL)
+    return false;
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingList(const CSettingList* setting, CVariant &obj)
+{
+  if (setting == NULL ||
+      !SerializeSetting(setting->GetDefinition(), obj["definition"]))
+    return false;
+
+  SerializeSettingListValues(CSettings::Get().GetList(setting->GetId()), obj["value"]);
+  SerializeSettingListValues(CSettings::ListToValues(setting, setting->GetDefault()), obj["default"]);
+
+  obj["elementtype"] = obj["definition"]["type"];
+  obj["delimiter"] = setting->GetDelimiter();
+  obj["minimum"] = setting->GetMinimum();
+  obj["maximum"] = setting->GetMaximum();
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingPath(const CSettingPath* setting, CVariant &obj)
+{
+  if (setting == NULL)
+    return false;
+
+  obj["type"] = "path";
+  obj["writable"] = setting->Writable();
+  obj["sources"] = setting->GetSources();
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingAddon(const CSettingAddon* setting, CVariant &obj)
+{
+  if (setting == NULL)
+    return false;
+
+  obj["type"] = "addon";
+  obj["addontype"] = ADDON::TranslateType(setting->GetAddonType());
+
+  return true;
+}
+
+bool CSettingsOperations::SerializeSettingControl(const ISettingControl* control, CVariant &obj)
+{
+  if (control == NULL)
+    return false;
+  
+  const std::string& type = control->GetType();
+  obj["type"] = type;
+  obj["format"] = control->GetFormat();
+  obj["delayed"] = control->GetDelayed();
+
+  if (type == "spinner")
+  {
+    const CSettingControlSpinner* spinner = static_cast<const CSettingControlSpinner*>(control);
+    if (spinner == NULL)
+      return false;
+
+    if (spinner->GetFormatLabel() >= 0)
+      obj["formatlabel"] = g_localizeStrings.Get(spinner->GetFormatLabel());
+    else if (!spinner->GetFormatString().empty() && spinner->GetFormatString() != "%i")
+      obj["formatlabel"] = spinner->GetFormatString();
+    if (spinner->GetMinimumLabel() >= 0)
+      obj["minimumlabel"] = g_localizeStrings.Get(spinner->GetMinimumLabel());
+  }
+  else if (type == "edit")
+  {
+    const CSettingControlEdit* edit = static_cast<const CSettingControlEdit*>(control);
+    if (edit == NULL)
+      return false;
+
+    obj["hidden"] = edit->IsHidden();
+    obj["verifynewvalue"] = edit->VerifyNewValue();
+    if (edit->GetHeading() >= 0)
+      obj["heading"] = g_localizeStrings.Get(edit->GetHeading());
+  }
+  else if (type == "button")
+  {
+    const CSettingControlButton* button = static_cast<const CSettingControlButton*>(control);
+    if (button == NULL)
+      return false;
+
+    if (button->GetHeading() >= 0)
+      obj["heading"] = g_localizeStrings.Get(button->GetHeading());
+  }
+  else if (type == "list")
+  {
+    const CSettingControlList* list = static_cast<const CSettingControlList*>(control);
+    if (list == NULL)
+      return false;
+
+    if (list->GetHeading() >= 0)
+      obj["heading"] = g_localizeStrings.Get(list->GetHeading());
+    obj["multiselect"] = list->CanMultiSelect();
+  }
+  else if (type != "toggle")
+    return false;
+
+  return true;
+}
+
+void CSettingsOperations::SerializeSettingListValues(const std::vector<CVariant> &values, CVariant &obj)
+{
+  obj = CVariant(CVariant::VariantTypeArray);
+  for (std::vector<CVariant>::const_iterator itValue = values.begin(); itValue != values.end(); ++itValue)
+    obj.push_back(*itValue);
+}
diff --git a/xbmc/interfaces/json-rpc/SettingsOperations.h b/xbmc/interfaces/json-rpc/SettingsOperations.h
new file mode 100644 (file)
index 0000000..cee669c
--- /dev/null
@@ -0,0 +1,73 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "utils/StdString.h"
+#include "JSONRPC.h"
+
+class ISetting;
+class CSettingSection;
+class CSettingCategory;
+class CSettingGroup;
+class CSetting;
+class CSettingBool;
+class CSettingInt;
+class CSettingNumber;
+class CSettingString;
+class CSettingAction;
+class CSettingList;
+class CSettingPath;
+class CSettingAddon;
+class ISettingControl;
+
+namespace JSONRPC
+{
+  class CSettingsOperations
+  {
+  public:
+    static JSONRPC_STATUS GetSections(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetCategories(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS GetSettings(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    
+    static JSONRPC_STATUS GetSettingValue(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS SetSettingValue(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+    static JSONRPC_STATUS ResetSettingValue(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result);
+
+  private:
+    static int ParseSettingLevel(const std::string &strLevel);
+
+    static bool SerializeISetting(const ISetting* setting, CVariant &obj);
+    static bool SerializeSettingSection(const CSettingSection* setting, CVariant &obj);
+    static bool SerializeSettingCategory(const CSettingCategory* setting, CVariant &obj);
+    static bool SerializeSettingGroup(const CSettingGroup* setting, CVariant &obj);
+    static bool SerializeSetting(const CSetting* setting, CVariant &obj);
+    static bool SerializeSettingBool(const CSettingBool* setting, CVariant &obj);
+    static bool SerializeSettingInt(const CSettingInt* setting, CVariant &obj);
+    static bool SerializeSettingNumber(const CSettingNumber* setting, CVariant &obj);
+    static bool SerializeSettingString(const CSettingString* setting, CVariant &obj);
+    static bool SerializeSettingAction(const CSettingAction* setting, CVariant &obj);
+    static bool SerializeSettingList(const CSettingList* setting, CVariant &obj);
+    static bool SerializeSettingPath(const CSettingPath* setting, CVariant &obj);
+    static bool SerializeSettingAddon(const CSettingAddon* setting, CVariant &obj);
+    static bool SerializeSettingControl(const ISettingControl* control, CVariant &obj);
+
+    static void SerializeSettingListValues(const std::vector<CVariant> &values, CVariant &obj);
+  };
+}
index 3b51be1..1ffaa48 100644 (file)
       { "name": "addonid", "type": "string", "required": true },
       { "name": "params", "type": [
           { "type": "object", "additionalProperties": { "type": "string" } },
-          { "type": "array", "items": { "type": "string" } }
-        ]
+          { "type": "array", "items": { "type": "string" } },
+          { "type": "string", "description": "URL path (must start with / or ?" }
+        ],
+        "default": ""
       },
       { "name": "wait", "type": "boolean", "default": false }
     ],
       { "name": "thumbnail", "$ref": "Optional.String" }
     ],
     "returns": "string"
+  },
+  "Settings.GetSections": {
+    "type": "method",
+    "description": "Retrieves all setting sections",
+    "transport": "Response",
+    "permission": "ReadData",
+    "params": [
+      { "name": "level", "$ref": "Setting.Level", "default": "standard" },
+      { "name": "properties", "extends": "Item.Fields.Base",
+        "items": { "type": "string",
+          "enum": [ "categories" ]
+        }
+      }
+    ],
+    "returns": {
+      "type": "object",
+      "properties": {
+        "sections": { "type": "array",
+          "items": { "$ref": "Setting.Details.Section" }
+        }
+      }
+    }
+  },
+  "Settings.GetCategories": {
+    "type": "method",
+    "description": "Retrieves all setting categories",
+    "transport": "Response",
+    "permission": "ReadData",
+    "params": [
+      { "name": "level", "$ref": "Setting.Level", "default": "standard" },
+      { "name": "section", "type": "string", "default": "" },
+      { "name": "properties", "extends": "Item.Fields.Base",
+        "items": { "type": "string",
+          "enum": [ "settings" ]
+        }
+      }
+    ],
+    "returns": {
+      "type": "object",
+      "properties": {
+        "categories": { "type": "array",
+          "items": { "$ref": "Setting.Details.Category" }
+        }
+      }
+    }
+  },
+  "Settings.GetSettings": {
+    "type": "method",
+    "description": "Retrieves all settings",
+    "transport": "Response",
+    "permission": "ReadData",
+    "params": [
+      { "name": "level", "$ref": "Setting.Level", "default": "standard" },
+      { "name": "filter", "type": [
+          { "type": "object",
+            "properties": {
+              "section": { "type": "string", "required": true, "minLength": 1 },
+              "category": { "type": "string", "required": true, "minLength": 1 }
+            },
+            "additionalProperties": false,
+            "required": true
+          }
+        ],
+        "default": null
+      }
+    ],
+    "returns": {
+      "type": "object",
+      "properties": {
+        "settings": { "type": "array",
+          "items": { "$ref": "Setting.Details.Setting" }
+        }
+      }
+    }
+  },
+  "Settings.GetSettingValue": {
+    "type": "method",
+    "description": "Retrieves the value of a setting",
+    "transport": "Response",
+    "permission": "ReadData",
+    "params": [
+      { "name": "setting", "type": "string", "required": true, "minLength": 1 }
+    ],
+    "returns": {
+      "type": "object",
+      "properties": {
+        "value": { "$ref": "Setting.Value.Extended", "required": true }
+      }
+    }
+  },
+  "Settings.SetSettingValue": {
+    "type": "method",
+    "description": "Changes the value of a setting",
+    "transport": "Response",
+    "permission": "WriteSetting",
+    "params": [
+      { "name": "setting", "type": "string", "required": true, "minLength": 1 },
+      { "name": "value", "$ref": "Setting.Value.Extended", "required": true }
+    ],
+    "returns": "boolean"
+  },
+  "Settings.ResetSettingValue": {
+    "type": "method",
+    "description": "Resets the value of a setting",
+    "transport": "Response",
+    "permission": "WriteSetting",
+    "params": [
+      { "name": "setting", "type": "string", "required": true, "minLength": 1 }
+    ],
+    "returns": "string"
   }
 }
\ No newline at end of file
index cefd097..1bba2ea 100644 (file)
       "thumbnail": { "type": "string" }
     },
     "additionalProperties": false
+  },
+  "Setting.Type": {
+    "type": "string",
+    "enum": [
+      "boolean", "integer", "number", "string", "action", "list",
+      "path", "addon"
+    ]
+  },
+  "Setting.Level": {
+    "type": "string",
+    "enum": [ "basic", "standard", "advanced", "expert" ]
+  },
+  "Setting.Value": {
+    "type": [
+      { "type": "boolean", "required": true },
+      { "type": "integer", "required": true },
+      { "type": "number", "required": true },
+      { "type": "string", "required": true }
+    ]
+  },
+  "Setting.Value.List": {
+    "type": "array",
+    "items": { "$ref": "Setting.Value" }
+  },
+  "Setting.Value.Extended": {
+    "type": [
+      { "type": "boolean", "required": true },
+      { "type": "integer", "required": true },
+      { "type": "number", "required": true },
+      { "type": "string", "required": true },
+      { "$ref": "Setting.Value.List", "required": true }
+    ]
+  },
+  "Setting.Details.ControlBase": {
+    "type": "object",
+    "properties": {
+      "type": { "type": "string", "required": true },
+      "format": { "type": "string", "required": true },
+      "delayed": { "type": "boolean", "required": true }
+    }
+  },
+  "Setting.Details.ControlCheckmark": {
+    "extends": "Setting.Details.ControlBase",
+    "properties": {
+      "type": { "type": "string", "required": true, "enum": [ "toggle" ] },
+      "format": { "type": "string", "required": true, "enum": [ "boolean" ] }
+    }
+  },
+  "Setting.Details.ControlSpinner": {
+    "extends": "Setting.Details.ControlBase",
+    "properties": {
+      "type": { "type": "string", "required": true, "enum": [ "spinner" ] },
+      "formatlabel": { "type": "string" },
+      "minimumlabel": { "type": "string" }
+    }
+  },
+  "Setting.Details.ControlHeading": {
+    "extends": "Setting.Details.ControlBase",
+    "properties": {
+      "heading": { "type": "string" }
+    }
+  },
+  "Setting.Details.ControlEdit": {
+    "extends": "Setting.Details.ControlHeading",
+    "properties": {
+      "type": { "type": "string", "required": true, "enum": [ "edit" ] },
+      "hidden": { "type": "boolean", "required": true },
+      "verifynewvalue": { "type": "boolean", "required": true }
+    }
+  },
+  "Setting.Details.ControlButton": {
+    "extends": "Setting.Details.ControlHeading",
+    "properties": {
+      "type": { "type": "string", "required": true, "enum": [ "button" ] }
+    }
+  },
+  "Setting.Details.ControlList": {
+    "extends": "Setting.Details.ControlHeading",
+    "properties": {
+      "type": { "type": "string", "required": true, "enum": [ "list" ] },
+      "multiselect": { "type": "boolean", "required": true }
+    }
+  },
+  "Setting.Details.Control": {
+    "type": [
+      { "$ref": "Setting.Details.ControlCheckmark", "required": true },
+      { "$ref": "Setting.Details.ControlSpinner", "required": true },
+      { "$ref": "Setting.Details.ControlEdit", "required": true },
+      { "$ref": "Setting.Details.ControlButton", "required": true },
+      { "$ref": "Setting.Details.ControlList", "required": true }
+    ]
+  },
+  "Setting.Details.Base": {
+    "type": "object",
+    "properties": {
+      "id": { "type": "string", "required": true, "minLength": 1 },
+      "label": { "type": "string", "required": true },
+      "help": { "type": "string" }
+    }
+  },
+  "Setting.Details.SettingBase": {
+    "extends": "Setting.Details.Base",
+    "properties": {
+      "type": { "$ref": "Setting.Type", "required": true },
+      "enabled": { "type": "boolean", "required": true },
+      "level": { "type": "integer", "required": true },
+      "parent": { "type": "string" },
+      "control": { "$ref": "Setting.Details.Control" }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.SettingBool": {
+    "extends": "Setting.Details.SettingBase",
+    "properties": {
+      "value": { "type": "boolean", "required": true },
+      "default": { "type": "boolean", "required": true }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.SettingInt": {
+    "extends": "Setting.Details.SettingBase",
+    "properties": {
+      "value": { "type": "integer", "required": true },
+      "default": { "type": "integer", "required": true },
+      "minimum": { "type": "integer" },
+      "step": { "type": "integer" },
+      "maximum": { "type": "integer" },
+      "options": { "type": "array",
+        "items": { "type": "object",
+          "properties": {
+            "label": { "type": "string", "required": true },
+            "value": { "type": "integer", "required": true }
+          }
+        }
+      }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.SettingNumber": {
+    "extends": "Setting.Details.SettingBase",
+    "properties": {
+      "value": { "type": "number", "required": true },
+      "default": { "type": "number", "required": true },
+      "minimum": { "type": "number", "required": true },
+      "step": { "type": "number", "required": true },
+      "maximum": { "type": "number", "required": true }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.SettingString": {
+    "extends": "Setting.Details.SettingBase",
+    "properties": {
+      "value": { "type": "string", "required": true },
+      "default": { "type": "string", "required": true },
+      "allowempty": { "type": "boolean", "required": true },
+      "options": { "type": "array",
+        "items": { "type": "object",
+          "properties": {
+            "label": { "type": "string", "required": true },
+            "value": { "type": "string", "required": true }
+          }
+        }
+      }
+    }
+  },
+  "Setting.Details.SettingAction": {
+    "extends": "Setting.Details.SettingBase",
+    "additionalProperties": false
+  },
+  "Setting.Details.SettingList": {
+    "extends": "Setting.Details.SettingBase",
+    "properties": {
+      "value": { "$ref": "Setting.Value.List", "required": true },
+      "default": { "$ref": "Setting.Value.List", "required": true },
+      "elementtype": { "$ref": "Setting.Type", "required": true },
+      "definition": { "$ref": "Setting.Details.Setting", "required": true },
+      "delimiter": { "type": "string", "required": true },
+      "minimum": { "type": "integer" },
+      "maximum": { "type": "integer" }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.SettingPath": {
+    "extends": "Setting.Details.SettingString",
+    "properties": {
+      "writable": { "type": "boolean", "required": true },
+      "sources": { "type": "array", "items": { "type": "string" } }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.SettingAddon": {
+    "extends": "Setting.Details.SettingString",
+    "properties": {
+      "addontype": { "$ref": "Addon.Types", "required": true }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.Setting": {
+    "type": [
+      { "$ref": "Setting.Details.SettingBool", "required": true },
+      { "$ref": "Setting.Details.SettingInt", "required": true },
+      { "$ref": "Setting.Details.SettingNumber", "required": true },
+      { "$ref": "Setting.Details.SettingString", "required": true },
+      { "$ref": "Setting.Details.SettingAction", "required": true },
+      { "$ref": "Setting.Details.SettingList", "required": true },
+      { "$ref": "Setting.Details.SettingPath", "required": true },
+      { "$ref": "Setting.Details.SettingAddon", "required": true }
+    ]
+  },
+  "Setting.Details.Group": {
+    "type": "object",
+    "properties": {
+      "id": { "type": "string", "required": true, "minLength": 1 },
+      "settings": {
+        "type": "array",
+        "items": { "$ref": "Setting.Details.Setting" },
+        "minItems": 1,
+        "uniqueItems": true
+      }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.Category": {
+    "extends": "Setting.Details.Base",
+    "properties": {
+      "groups": {
+        "type": "array",
+        "items": { "$ref": "Setting.Details.Group" },
+        "minItems": 1,
+        "uniqueItems": true
+      }
+    },
+    "additionalProperties": false
+  },
+  "Setting.Details.Section": {
+    "extends": "Setting.Details.Base",
+    "properties": {
+      "categories": {
+        "type": "array",
+        "items": { "$ref": "Setting.Details.Category" },
+        "minItems": 1,
+        "uniqueItems": true
+      }
+    },
+    "additionalProperties": false
   }
 }
index f3fcac7..db0e978 100644 (file)
@@ -38,6 +38,7 @@
 #include "guilib/GUIWindowManager.h"
 #include "guilib/GUIEditControl.h"
 #include "guilib/GUIControlFactory.h"
+#include "listproviders/StaticProvider.h"
 
 #include "utils/XBMCTinyXML.h"
 #include "utils/StringUtils.h"
@@ -1400,22 +1401,21 @@ namespace XBMCAddon
     {
       const ListItemList& vecItems = *pitems;
 
-      std::vector<CGUIListItemPtr> items;
+      std::vector<CGUIStaticItemPtr> items;
 
       for (unsigned int item = 0; item < vecItems.size(); item++)
       {
         ListItem* pItem = vecItems[item];
 
-        // object is a listitem, and we set m_idpeth to 0 as this
-        // is used as the visibility condition for the item in the list
-        ListItem *listItem = (ListItem*)pItem;
-        listItem->item->m_idepth = 0;
-
-        items.push_back((CFileItemPtr &)listItem->item);
+        // NOTE: This code has likely not worked fully correctly for some time
+        //       In particular, the click behaviour won't be working.
+        CGUIStaticItemPtr newItem(new CGUIStaticItem(*pItem->item));
+        items.push_back(newItem);
       }
 
       // set static list
-      ((CGUIBaseContainer *)pGUIControl)->SetStaticContent(items);
+      IListProvider *provider = new CStaticListProvider(items);
+      ((CGUIBaseContainer *)pGUIControl)->SetListProvider(provider);
     }
 
     // ============================================================
index 3f9a4e1..1fe69cf 100644 (file)
@@ -36,7 +36,7 @@
 #include "Util.h"
 #include "utils/StringUtils.h"
 #include "XBDateTime.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 
 using namespace std;
index efb6164..3adc5b5 100644 (file)
@@ -21,7 +21,7 @@
  *
  */
 
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "utils/StdString.h"
 #include <vector>
 #include <map>
diff --git a/xbmc/listproviders/DirectoryProvider.cpp b/xbmc/listproviders/DirectoryProvider.cpp
new file mode 100644 (file)
index 0000000..7e87e1e
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "DirectoryProvider.h"
+#include "filesystem/Directory.h"
+#include "filesystem/FavouritesDirectory.h"
+#include "guilib/GUIWindowManager.h"
+#include "utils/JobManager.h"
+#include "utils/StringUtils.h"
+#include "utils/TimeUtils.h"
+#include "utils/XMLUtils.h"
+#include "threads/SingleLock.h"
+#include "ApplicationMessenger.h"
+#include "FileItem.h"
+
+using namespace std;
+using namespace XFILE;
+
+class CDirectoryJob : public CJob
+{
+public:
+  CDirectoryJob(const std::string &url, int parentID) : m_url(url), m_parentID(parentID) { };
+  virtual ~CDirectoryJob() {};
+
+  virtual const char* GetType() const { return "directory"; };
+  virtual bool operator==(const CJob *job) const
+  {
+    if (strcmp(job->GetType(),GetType()) == 0)
+    {
+      const CDirectoryJob* dirJob = dynamic_cast<const CDirectoryJob*>(job);
+      if (dirJob && dirJob->m_url == m_url)
+        return true;
+    }
+    return false;
+  }
+
+  virtual bool DoWork()
+  {
+    CFileItemList items;
+    if (CDirectory::GetDirectory(m_url, items, ""))
+    {
+      // convert to CGUIStaticItem's and set visibility and targets
+      m_items.reserve(items.Size());
+      for (int i = 0; i < items.Size(); i++)
+      {
+        CGUIStaticItemPtr item(new CGUIStaticItem(*items[i]));
+        if (item->HasProperty("node.visible"))
+          item->SetVisibleCondition(item->GetProperty("node.visible").asString(), m_parentID);
+        m_items.push_back(item);
+      }
+      m_target = items.GetProperty("node.target").asString();
+    }
+    return true;    
+  }
+
+  const std::vector<CGUIStaticItemPtr> &GetItems() const { return m_items; }
+  const std::string &GetTarget() const { return m_target; }
+private:
+  std::string m_url;
+  std::string m_target;
+  int m_parentID;
+  std::vector<CGUIStaticItemPtr> m_items;
+};
+
+CDirectoryProvider::CDirectoryProvider(const TiXmlElement *element, int parentID)
+ : IListProvider(parentID),
+   m_updateTime(0),
+   m_invalid(false),
+   m_jobID(0)
+{
+  assert(element);
+
+  if (!element->NoChildren())
+  {
+    const char *target = element->Attribute("target");
+    if (target)
+      m_target.SetLabel(target, "", parentID);
+    m_url.SetLabel(element->FirstChild()->ValueStr(), "", parentID);
+  }
+}
+
+CDirectoryProvider::~CDirectoryProvider()
+{
+  Reset();
+}
+
+bool CDirectoryProvider::Update(bool refresh)
+{
+  bool changed = refresh;
+  {
+    CSingleLock lock(m_section);
+    changed |= m_invalid;
+    m_invalid = false;
+  }
+
+  // update the URL and fire off a new job if needed
+  CStdString value(m_url.GetLabel(m_parentID, false));
+  if (value != m_currentUrl)
+  {
+    m_currentUrl = value;
+
+    // fire job
+    CSingleLock lock(m_section);
+    if (m_jobID)
+      CJobManager::GetInstance().CancelJob(m_jobID);
+    m_jobID = CJobManager::GetInstance().AddJob(new CDirectoryJob(m_currentUrl, m_parentID), this);
+  }
+
+  for (vector<CGUIStaticItemPtr>::iterator i = m_items.begin(); i != m_items.end(); ++i)
+    changed |= (*i)->UpdateVisibility(m_parentID);
+  return changed; // TODO: Also returned changed if properties are changed (if so, need to update scroll to letter).
+}
+
+void CDirectoryProvider::Fetch(vector<CGUIListItemPtr> &items) const
+{
+  CSingleLock lock(m_section);
+  items.clear();
+  for (vector<CGUIStaticItemPtr>::const_iterator i = m_items.begin(); i != m_items.end(); ++i)
+  {
+    if ((*i)->IsVisible())
+      items.push_back(*i);
+  }
+}
+
+void CDirectoryProvider::Reset()
+{
+  // cancel any pending jobs
+  CSingleLock lock(m_section);
+  if (m_jobID)
+    CJobManager::GetInstance().CancelJob(m_jobID);
+  m_jobID = 0;
+  m_items.clear();
+  m_currentTarget.clear();
+  m_currentUrl.clear();
+  m_invalid = false;
+}
+
+void CDirectoryProvider::OnJobComplete(unsigned int jobID, bool success, CJob *job)
+{
+  CSingleLock lock(m_section);
+  if (success)
+  {
+    m_items = ((CDirectoryJob*)job)->GetItems();
+    m_currentTarget = ((CDirectoryJob*)job)->GetTarget();
+    m_invalid = true;
+  }
+  m_jobID = 0;
+}
+
+bool CDirectoryProvider::OnClick(const CGUIListItemPtr &item)
+{
+  CFileItem fileItem(*boost::static_pointer_cast<CFileItem>(item));
+  string target = fileItem.GetProperty("node.target").asString();
+  if (target.empty())
+    target = m_currentTarget;
+  if (target.empty())
+    target = m_target.GetLabel(m_parentID, false);
+  if (fileItem.HasProperty("node.target_url"))
+    fileItem.SetPath(fileItem.GetProperty("node.target_url").asString());
+  // grab the execute string
+  string execute = CFavouritesDirectory::GetExecutePath(fileItem, target);
+  if (!execute.empty())
+  {
+    CGUIMessage message(GUI_MSG_EXECUTE, 0, 0);
+    message.SetStringParam(execute);
+    g_windowManager.SendMessage(message);
+    return true;
+  }
+  return false;
+}
+
+bool CDirectoryProvider::IsUpdating() const
+{
+  CSingleLock lock(m_section);
+  return m_jobID || m_invalid;
+}
diff --git a/xbmc/listproviders/DirectoryProvider.h b/xbmc/listproviders/DirectoryProvider.h
new file mode 100644 (file)
index 0000000..d0a94fe
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include <string>
+#include "IListProvider.h"
+#include "guilib/GUIStaticItem.h"
+#include "utils/Job.h"
+#include "threads/CriticalSection.h"
+
+class TiXmlElement;
+
+class CDirectoryProvider : public IListProvider, public IJobCallback
+{
+public:
+  CDirectoryProvider(const TiXmlElement *element, int parentID);
+  virtual ~CDirectoryProvider();
+
+  virtual bool Update(bool refresh);
+  virtual void Fetch(std::vector<CGUIListItemPtr> &items) const;
+  virtual void Reset();
+  virtual bool OnClick(const CGUIListItemPtr &item);
+  virtual bool IsUpdating() const;
+
+  // callback from directory job
+  virtual void OnJobComplete(unsigned int jobID, bool success, CJob *job);
+private:
+  unsigned int     m_updateTime;
+  bool             m_invalid;
+  unsigned int     m_jobID;
+  CGUIInfoLabel    m_url;
+  CGUIInfoLabel    m_target;
+  std::string      m_currentUrl;
+  std::string      m_currentTarget;   ///< \brief node.target property on the list as a whole
+  std::vector<CGUIStaticItemPtr> m_items;
+  CCriticalSection m_section;
+};
diff --git a/xbmc/listproviders/IListProvider.cpp b/xbmc/listproviders/IListProvider.cpp
new file mode 100644 (file)
index 0000000..16a11a9
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "IListProvider.h"
+#include "utils/XBMCTinyXML.h"
+#include "StaticProvider.h"
+#include "DirectoryProvider.h"
+
+IListProvider *IListProvider::Create(const TiXmlNode *node, int parentID)
+{
+  const TiXmlElement *root = node->FirstChildElement("content");
+  if (root)
+  {
+    const TiXmlElement *item = root->FirstChildElement("item");
+    if (item)
+      return new CStaticListProvider(root, parentID);
+
+    if (!root->NoChildren())
+      return new CDirectoryProvider(root, parentID);
+  }
+  return NULL;
+}
diff --git a/xbmc/listproviders/IListProvider.h b/xbmc/listproviders/IListProvider.h
new file mode 100644 (file)
index 0000000..505a07b
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include <vector>
+#include "boost/shared_ptr.hpp"
+
+class TiXmlNode;
+class CGUIListItem;
+typedef boost::shared_ptr<CGUIListItem> CGUIListItemPtr;
+
+/*!
+ \ingroup listproviders
+ \brief An interface for providing lists to UI containers.
+ */
+class IListProvider
+{
+public:
+  IListProvider(int parentID) : m_parentID(parentID) {}
+  virtual ~IListProvider() {}
+
+  /*! \brief Factory to create list providers.
+   \param node a TiXmlNode to create.
+   \param parentID id of parent window for context.
+   \return the list provider, NULL if none.
+   */
+  static IListProvider *Create(const TiXmlNode *node, int parentID);
+
+  /*! \brief Update the list content
+   \return true if the content has changed, false otherwise.
+   */
+  virtual bool Update(bool refresh)=0;
+
+  /*! \brief Fetch the current list of items.
+   \param items [out] the list to be filled.
+   */
+  virtual void Fetch(std::vector<CGUIListItemPtr> &items) const=0;
+
+  /*! \brief Check whether the list provider is updating content.
+   \return true if in the processing of updating, false otherwise.
+   */
+  virtual bool IsUpdating() const { return false; }
+
+  /*! \brief Reset the current list of items.
+   Derived classes may choose to ignore this.
+   */
+  virtual void Reset() {};
+
+  /*! \brief Click event on an item.
+   \param item the item that was clicked.
+   \return true if the click was handled, false otherwise.
+   */
+  virtual bool OnClick(const CGUIListItemPtr &item)=0;
+
+  /*! \brief Set the default item to focus. For backwards compatibility.
+   \param item the item to focus.
+   \param always whether this item should always be used on first focus.
+   \sa GetDefaultItem, AlwaysFocusDefaultItem
+   */
+  virtual void SetDefaultItem(int item, bool always) {};
+
+  /*! \brief The default item to focus.
+   \return the item to focus by default. -1 for none.
+   \sa SetDefaultItem, AlwaysFocusDefaultItem
+   */
+  virtual int GetDefaultItem() const { return -1; }
+
+  /*! \brief Whether to always focus the default item.
+   \return true if the default item should always be the one to receive focus.
+   \sa GetDefaultItem, SetDefaultItem
+   */
+  virtual bool AlwaysFocusDefaultItem() const { return false; }
+protected:
+  int m_parentID;
+};
diff --git a/xbmc/listproviders/Makefile b/xbmc/listproviders/Makefile
new file mode 100644 (file)
index 0000000..f0f66a2
--- /dev/null
@@ -0,0 +1,8 @@
+SRCS  = DirectoryProvider.cpp
+SRCS += IListProvider.cpp
+SRCS += StaticProvider.cpp
+     
+LIB=listproviders.a
+
+include ../../Makefile.include
+-include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS)))
diff --git a/xbmc/listproviders/StaticProvider.cpp b/xbmc/listproviders/StaticProvider.cpp
new file mode 100644 (file)
index 0000000..a077a23
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "StaticProvider.h"
+#include "utils/XMLUtils.h"
+#include "utils/TimeUtils.h"
+
+using namespace std;
+
+CStaticListProvider::CStaticListProvider(const TiXmlElement *element, int parentID)
+: IListProvider(parentID),
+  m_defaultItem(-1),
+  m_defaultAlways(false),
+  m_updateTime(0)
+{
+  assert(element);
+
+  const TiXmlElement *item = element->FirstChildElement("item");
+  while (item)
+  {
+    if (item->FirstChild())
+    {
+      CGUIStaticItemPtr newItem(new CGUIStaticItem(item, parentID));
+      m_items.push_back(newItem);
+    }
+    item = item->NextSiblingElement("item");
+  }
+
+  if (XMLUtils::GetInt(element, "default", m_defaultItem))
+  {
+    const char *always = element->FirstChildElement("default")->Attribute("always");
+    if (always && strnicmp(always, "true", 4) == 0)
+      m_defaultAlways = true;
+  }
+}
+
+CStaticListProvider::CStaticListProvider(const std::vector<CGUIStaticItemPtr> &items)
+: IListProvider(0),
+  m_defaultItem(-1),
+  m_defaultAlways(false),
+  m_updateTime(0),
+  m_items(items)
+{
+}
+
+CStaticListProvider::~CStaticListProvider()
+{
+}
+
+bool CStaticListProvider::Update(bool refresh)
+{
+  bool changed = refresh;
+  if (!m_updateTime)
+    m_updateTime = CTimeUtils::GetFrameTime();
+  else if (CTimeUtils::GetFrameTime() - m_updateTime > 1000)
+  {
+    m_updateTime = CTimeUtils::GetFrameTime();
+    for (vector<CGUIStaticItemPtr>::iterator i = m_items.begin(); i != m_items.end(); ++i)
+      (*i)->UpdateProperties(m_parentID);
+  }
+  for (vector<CGUIStaticItemPtr>::iterator i = m_items.begin(); i != m_items.end(); ++i)
+    changed |= (*i)->UpdateVisibility(m_parentID);
+  return changed; // TODO: Also returned changed if properties are changed (if so, need to update scroll to letter).
+}
+
+void CStaticListProvider::Fetch(vector<CGUIListItemPtr> &items) const
+{
+  items.clear();
+  for (vector<CGUIStaticItemPtr>::const_iterator i = m_items.begin(); i != m_items.end(); ++i)
+  {
+    if ((*i)->IsVisible())
+      items.push_back(*i);
+  }
+}
+
+void CStaticListProvider::SetDefaultItem(int item, bool always)
+{
+  m_defaultItem = item;
+  m_defaultAlways = always;
+}
+
+int CStaticListProvider::GetDefaultItem() const
+{
+  if (m_defaultItem >= 0)
+  {
+    for (vector<CGUIStaticItemPtr>::const_iterator i = m_items.begin(); i != m_items.end(); ++i)
+    {
+      if ((*i)->m_iprogramCount == m_defaultItem && (*i)->IsVisible())
+        return i - m_items.begin();
+    }
+  }
+  return -1;
+}
+
+bool CStaticListProvider::AlwaysFocusDefaultItem() const
+{
+  return m_defaultAlways;
+}
+
+bool CStaticListProvider::OnClick(const CGUIListItemPtr &item)
+{
+  CGUIStaticItemPtr staticItem = boost::static_pointer_cast<CGUIStaticItem>(item);
+  return staticItem->GetClickActions().ExecuteActions(0, m_parentID);
+}
diff --git a/xbmc/listproviders/StaticProvider.h b/xbmc/listproviders/StaticProvider.h
new file mode 100644 (file)
index 0000000..205e457
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#pragma once
+
+#include "IListProvider.h"
+#include "guilib/GUIStaticItem.h"
+
+class CStaticListProvider : public IListProvider
+{
+public:
+  CStaticListProvider(const TiXmlElement *element, int parentID);
+  CStaticListProvider(const std::vector<CGUIStaticItemPtr> &items); // for python
+  virtual ~CStaticListProvider();
+
+  virtual bool Update(bool refresh);
+  virtual void Fetch(std::vector<CGUIListItemPtr> &items) const;
+  virtual bool OnClick(const CGUIListItemPtr &item);
+  virtual void SetDefaultItem(int item, bool always);
+  virtual int  GetDefaultItem() const;
+  virtual bool AlwaysFocusDefaultItem() const;
+private:
+  int                            m_defaultItem;
+  bool                           m_defaultAlways;
+  unsigned int                   m_updateTime;
+  std::vector<CGUIStaticItemPtr> m_items;
+};
index c268f6e..84b1e54 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "system.h"
 
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "utils/StdString.h"
 
 enum EncMode { ENC_NONE = 0, ENC_WEP = 1, ENC_WPA = 2, ENC_WPA2 = 3 };
index bc78c3e..f1b82d7 100644 (file)
@@ -74,7 +74,7 @@
 #endif
 
 #include "settings/AdvancedSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "utils/log.h"
 #include "utils/RssManager.h"
index 457e181..0c3555b 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include "system.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 
 #ifdef HAS_WEB_SERVER
 class CWebServer;
index f801b92..c4fe564 100644 (file)
@@ -21,7 +21,7 @@
 #include "URL.h"
 #include "XBDateTime.h"
 #include "utils/Job.h"
-#include "settings/ISettingsHandler.h"
+#include "settings/lib/ISettingsHandler.h"
 
 class CWakeOnAccess : private IJobCallback, public ISettingsHandler
 {
index 68aaee1..bb1d253 100644 (file)
@@ -20,7 +20,7 @@
 #pragma once
 #include <string>
 
-#include "settings/ISettingsHandler.h"
+#include "settings/lib/ISettingsHandler.h"
 #include "threads/CriticalSection.h"
 
 class CUPnPSettings : public ISettingsHandler
index f9b390d..1acf29b 100644 (file)
@@ -174,6 +174,7 @@ const char *GetDarwinOSReleaseString(void)
 
 const char *GetDarwinVersionString(void)
 {
+  CCocoaAutoPool pool;
   return [[[NSProcessInfo processInfo] operatingSystemVersionString] UTF8String];
 }
 
index 2b6fd35..a4b7494 100644 (file)
@@ -32,7 +32,7 @@
 #include "dialogs/GUIDialogYesNo.h"
 #include "utils/log.h"
 #include "system.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "utils/SystemInfo.h"
 
index 9e99f95..d0068c9 100644 (file)
@@ -23,7 +23,7 @@
 
 #if !defined(__arm__)
 
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 
 enum AppleRemoteOptions
 {
index 8b13ebc..f445b84 100644 (file)
@@ -47,7 +47,7 @@
 #include "utils/StringUtils.h"
 #include "Util.h"
 #include "guilib/Key.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 
 using namespace PERIPHERALS;
 using namespace XFILE;
index 7ffc19d..3926566 100644 (file)
@@ -22,7 +22,7 @@
 #include "system.h"
 #include "bus/PeripheralBus.h"
 #include "devices/Peripheral.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "threads/CriticalSection.h"
 #include "threads/Thread.h"
 #include "utils/Observer.h"
index 86d26e5..e53feed 100644 (file)
 #include "utils/log.h"
 #include "utils/StringUtils.h"
 
-static GUID USB_RAW_GUID =  { 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } };
-static GUID USB_HID_GUID =  { 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } };
-static GUID USB_DISK_GUID = { 0x53F56307, 0xB6BF, 0x11D0, { 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B } };
-static GUID USB_NIC_GUID =  { 0xAD498944, 0x762F, 0x11D0, { 0x8D, 0xCB, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C } };
+const static GUID USB_RAW_GUID = { 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } };
+const static GUID USB_HID_GUID = { 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } };
+const static GUID USB_DISK_GUID = { 0x53F56307, 0xB6BF, 0x11D0, { 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B } };
+const static GUID USB_NIC_GUID = { 0xAD498944, 0x762F, 0x11D0, { 0x8D, 0xCB, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C } };
 
 using namespace PERIPHERALS;
 
+// Only to avoid endless loops while scanning for devices
+#define MAX_BUS_DEVICES 2000
+
 CPeripheralBusUSB::CPeripheralBusUSB(CPeripherals *manager) :
     CPeripheralBus("PeripBusUSB", manager, PERIPHERAL_BUS_USB)
 {
@@ -45,12 +48,11 @@ bool CPeripheralBusUSB::PerformDeviceScan(PeripheralScanResults &results)
   return PerformDeviceScan(&USB_RAW_GUID, PERIPHERAL_UNKNOWN, results);
 }
 
-bool CPeripheralBusUSB::PerformDeviceScan(const GUID *guid, const PeripheralType type, PeripheralScanResults &results)
+bool CPeripheralBusUSB::PerformDeviceScan(const GUID *guid, const PeripheralType defaultType, PeripheralScanResults &results)
 {
   bool     bReturn(false);
-  HDEVINFO hDevHandle;
   DWORD    required = 0, iMemberIndex = 0;
-  int      nBufferSize = 0;
+  int      nBufferSize = 200;  // Just initial guess, will be increased if required
 
   SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
   deviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
@@ -58,80 +60,120 @@ bool CPeripheralBusUSB::PerformDeviceScan(const GUID *guid, const PeripheralType
   SP_DEVINFO_DATA devInfoData;
   devInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
 
-  if ((hDevHandle = SetupDiGetClassDevs(guid, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) == INVALID_HANDLE_VALUE)
+  HDEVINFO const hDevHandle = SetupDiGetClassDevs(guid, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
+  if (hDevHandle == INVALID_HANDLE_VALUE)
   {
     CLog::Log(LOGWARNING, "%s - cannot query USB devices: invalid handle", __FUNCTION__);
     return bReturn;
   }
 
-  bReturn = true;
-  BOOL bResult = true;
-  PSP_DEVICE_INTERFACE_DETAIL_DATA devicedetailData = NULL;
-  while(bResult)
+  PSP_DEVICE_INTERFACE_DETAIL_DATA devicedetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(nBufferSize);
+  int nPropertyBufferSize = 100; // Just initial guess, will be increased if required
+  char* deviceProperty = (char*)malloc(nPropertyBufferSize);
+  if (!devicedetailData || !deviceProperty)
   {
-    bResult = SetupDiEnumDeviceInfo(hDevHandle, iMemberIndex, &devInfoData);
+    free(devicedetailData);
+    free(deviceProperty);
+    CLog::Log(LOGSEVERE, "%s: memory allocation failed", __FUNCTION__);
+    return false;
+  }
 
-    if (bResult)
-      bResult = SetupDiEnumDeviceInterfaces(hDevHandle, 0, guid, iMemberIndex, &deviceInterfaceData);
+  SP_DEVINFO_DATA deviceInfo;
+  bReturn = true;
+  for (iMemberIndex = 0; bReturn && iMemberIndex < MAX_BUS_DEVICES; iMemberIndex++)
+  {
+    bReturn = SetupDiEnumDeviceInfo(hDevHandle, iMemberIndex, &devInfoData) == TRUE;
 
-    if (bResult)
+    if (bReturn)
+      bReturn = SetupDiEnumDeviceInterfaces(hDevHandle, 0, guid, iMemberIndex, &deviceInterfaceData) == TRUE;
+    else
     {
-      iMemberIndex++;
-      BOOL bDetailResult = false;
-      {
-        // As per MSDN, Get the required buffer size. Call SetupDiGetDeviceInterfaceDetail with a 
-        // NULL DeviceInterfaceDetailData pointer, a DeviceInterfaceDetailDataSize of zero, 
-        // and a valid RequiredSize variable. In response to such a call, this function returns 
-        // the required buffer size at RequiredSize and fails with GetLastError returning 
-        // ERROR_INSUFFICIENT_BUFFER. 
-        // Allocate an appropriately sized buffer and call the function again to get the interface details. 
+      bReturn = true;
+      if (GetLastError() == ERROR_NO_MORE_ITEMS)
+        break; // no more USB devices, nothing more to scan
+      else
+        continue; // try to get other USB devices
+    }
 
-        SetupDiGetDeviceInterfaceDetail(hDevHandle, &deviceInterfaceData, NULL, 0, &required, NULL);
+    if (bReturn)
+    {
+      devicedetailData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
+      deviceInfo.cbSize = sizeof(SP_DEVINFO_DATA);
 
+      BOOL bDetailResult = SetupDiGetDeviceInterfaceDetail(hDevHandle, &deviceInterfaceData, devicedetailData, nBufferSize , &required, &deviceInfo);
+      if (!bDetailResult && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+      {
+        free(devicedetailData);
         devicedetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(required * sizeof(TCHAR));
+        if (!devicedetailData)
+        {
+          free(deviceProperty);
+          CLog::Log(LOGSEVERE, "%s: memory allocation failed", __FUNCTION__);
+          return false;
+        }
         devicedetailData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
         nBufferSize = required;
+        bDetailResult = SetupDiGetDeviceInterfaceDetail(hDevHandle, &deviceInterfaceData, devicedetailData, nBufferSize , &required, &deviceInfo);
       }
 
-      bDetailResult = SetupDiGetDeviceInterfaceDetail(hDevHandle, &deviceInterfaceData, devicedetailData, nBufferSize , &required, NULL);
       if (bDetailResult)
       {
-        CStdString strVendorId(StringUtils::EmptyString);
-        CStdString strProductId(StringUtils::EmptyString);
-        CStdString strTmp(devicedetailData->DevicePath);
-        strVendorId = strTmp.substr(strTmp.Find("vid_") + 4, 4);
-        strProductId = strTmp.substr(strTmp.Find("pid_") + 4, 4);
+        bDetailResult = SetupDiGetDeviceRegistryProperty(hDevHandle, &deviceInfo, SPDRP_HARDWAREID, NULL, (PBYTE)deviceProperty, nPropertyBufferSize, &required);
+        if (!bDetailResult && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+        {
+          free(deviceProperty);
+          deviceProperty = (char*)malloc(required);
+          if (!deviceProperty)
+          {
+            free(devicedetailData);
+            CLog::Log(LOGSEVERE, "%s: memory allocation failed", __FUNCTION__);
+            return false;
+          }
+          nPropertyBufferSize = required;
+          bDetailResult = SetupDiGetDeviceRegistryProperty(hDevHandle, &deviceInfo, SPDRP_HARDWAREID, NULL, (PBYTE)deviceProperty, nPropertyBufferSize, &required);
+        }
+      }
 
-        if ((strTmp.Find("&mi_") < 0) || (strTmp.Find("&mi_00") >= 0))
+      if (bDetailResult)
+      {
+        std::string strTmp(deviceProperty);
+
+        StringUtils::ToLower(strTmp);
+        size_t posVid, posPid;
+        if (((posVid=strTmp.find("\\vid_")) != std::string::npos || (posVid=strTmp.find("&vid_")) != std::string::npos) &&
+              ((posPid=strTmp.find("\\pid_")) != std::string::npos || (posPid=strTmp.find("&pid_")) != std::string::npos))
         {
+          std::string strVendorId(strTmp, posVid + 5, 4);
+          std::string strProductId(strTmp, posPid + 5, 4);
           PeripheralScanResult prevDevice(m_type);
           if (!results.GetDeviceOnLocation(devicedetailData->DevicePath, &prevDevice))
           {
             PeripheralScanResult result(m_type);
             result.m_strLocation  = devicedetailData->DevicePath;
-            result.m_type         = type;
             result.m_iVendorId    = PeripheralTypeTranslator::HexStringToInt(strVendorId.c_str());
             result.m_iProductId   = PeripheralTypeTranslator::HexStringToInt(strProductId.c_str());
             result.m_iSequence    = GetNumberOfPeripheralsWithId(result.m_iVendorId, result.m_iProductId);
 
+            // Assume that buffer is more then enough (we need only 8 chars, initial allocation is 100 chars). If not - just skip type detection.
+            if (SetupDiGetDeviceRegistryProperty(hDevHandle, &devInfoData, SPDRP_CLASS, NULL, (PBYTE)deviceProperty, nPropertyBufferSize, &required) &&
+                strcmp("HIDClass", deviceProperty) == 0)
+              result.m_type = PERIPHERAL_HID;
+            else
+              result.m_type = defaultType;
+
             if (!results.ContainsResult(result))
               results.m_results.push_back(result);
           }
         }
       }
-
-      if (devicedetailData)
-      {
-        free(devicedetailData);
-        devicedetailData = NULL;
-      } 
-    }
-    else
-    {
-      SetupDiDestroyDeviceInfoList(hDevHandle);
-      return bReturn;
     }
   }
 
+  SetupDiDestroyDeviceInfoList(hDevHandle);
+  if (devicedetailData)
+    free(devicedetailData);
+  if (deviceProperty)
+    free(deviceProperty);
+
   return bReturn;
 }
index c31727f..92c51d3 100644 (file)
@@ -38,7 +38,7 @@ namespace PERIPHERALS
     bool PerformDeviceScan(PeripheralScanResults &results);
 
   private:
-    bool PerformDeviceScan(const GUID *guid, const PeripheralType type, PeripheralScanResults &results);
+    bool PerformDeviceScan(const GUID *guid, const PeripheralType defaultType, PeripheralScanResults &results);
     bool GetProductAndVendorId(const PeripheralType type, const CStdString &strDeviceLocation, int *iVendorId, int *iProductId);
   };
 }
index 056600d..dd2db26 100644 (file)
@@ -22,7 +22,7 @@
 #include "peripherals/Peripherals.h"
 #include "utils/log.h"
 #include "utils/StringUtils.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "utils/XBMCTinyXML.h"
 #include "utils/URIUtils.h"
 #include "guilib/LocalizeStrings.h"
index af5c29f..95df796 100644 (file)
@@ -21,7 +21,7 @@
 #include "GUIDialogPeripheralSettings.h"
 #include "addons/Skin.h"
 #include "peripherals/Peripherals.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "utils/log.h"
 #include "video/dialogs/GUIDialogVideoSettings.h"
 
index 2033574..590a887 100644 (file)
@@ -23,7 +23,7 @@
 #include "Application.h"
 #include "cores/AudioEngine/AEFactory.h"
 #include "input/KeyboardStat.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "windowing/WindowingFactory.h"
 #include "utils/log.h"
index 8d7b4fa..5c12c4f 100644 (file)
@@ -22,7 +22,7 @@
 #include <vector>
 
 #include "profiles/Profile.h"
-#include "settings/ISettingsHandler.h"
+#include "settings/lib/ISettingsHandler.h"
 #include "threads/CriticalSection.h"
 
 class TiXmlNode;
index f0ed5a0..55074fe 100644 (file)
@@ -342,6 +342,15 @@ bool CPVRGUIInfo::TranslateCharInfo(DWORD dwInfo, CStdString &strValue) const
   case PVR_ACTUAL_STREAM_CRYPTION:
     CharInfoEncryption(strValue);
     break;
+  case PVR_ACTUAL_STREAM_SERVICE:
+    CharInfoService(strValue);
+    break;
+  case PVR_ACTUAL_STREAM_MUX:
+    CharInfoMux(strValue);
+    break;
+  case PVR_ACTUAL_STREAM_PROVIDER:
+    CharInfoProvider(strValue);
+    break;
   case PVR_BACKEND_NAME:
     CharInfoBackendName(strValue);
     break;
@@ -620,6 +629,30 @@ void CPVRGUIInfo::CharInfoEncryption(CStdString &strValue) const
     strValue = StringUtils::EmptyString;
 }
 
+void CPVRGUIInfo::CharInfoService(CStdString &strValue) const
+{
+  if (!strcmp(m_qualityInfo.strServiceName, StringUtils::EmptyString))
+    strValue.Format("%s", g_localizeStrings.Get(13205));
+  else
+    strValue.Format("%s", m_qualityInfo.strServiceName);
+}
+
+void CPVRGUIInfo::CharInfoMux(CStdString &strValue) const
+{
+  if (!strcmp(m_qualityInfo.strMuxName, StringUtils::EmptyString))
+    strValue.Format("%s", g_localizeStrings.Get(13205));
+  else
+    strValue.Format("%s", m_qualityInfo.strMuxName);
+}
+
+void CPVRGUIInfo::CharInfoProvider(CStdString &strValue) const
+{
+  if (!strcmp(m_qualityInfo.strProviderName, StringUtils::EmptyString))
+    strValue.Format("%s", g_localizeStrings.Get(13205));
+  else
+    strValue.Format("%s", m_qualityInfo.strProviderName);
+}
+
 void CPVRGUIInfo::UpdateBackendCache(void)
 {
   CStdString strBackendName;
@@ -783,10 +816,10 @@ int CPVRGUIInfo::GetStartTime(void) const
   if (m_playingEpgTag)
   {
     /* Calculate here the position we have of the running live TV event.
-     * "position in ms" = ("current local time" - "event start local time") * 1000
+     * "position in ms" = ("current UTC" - "event start UTC") * 1000
      */
-    CDateTime current = CDateTime::GetCurrentDateTime();
-    CDateTime start = m_playingEpgTag->StartAsLocalTime();
+    CDateTime current = g_PVRClients->GetPlayingTime();
+    CDateTime start = m_playingEpgTag->StartAsUTC();
     CDateTimeSpan time = current > start ? current - start : CDateTimeSpan(0, 0, 0, 0);
     return (time.GetDays()   * 60 * 60 * 24
          + time.GetHours()   * 60 * 60
index 2967084..34bc258 100644 (file)
@@ -125,6 +125,9 @@ namespace PVR
     void CharInfoBackendRecordings(CStdString &strValue) const;
     void CharInfoPlayingClientName(CStdString &strValue) const;
     void CharInfoEncryption(CStdString &strValue) const;
+    void CharInfoService(CStdString &strValue) const;
+    void CharInfoMux(CStdString &strValue) const;
+    void CharInfoProvider(CStdString &strValue) const;
 
     /** @name GUIInfoManager data */
     //@{
index a4545bc..675abe3 100644 (file)
@@ -32,7 +32,7 @@
 #include "music/tags/MusicInfoTag.h"
 #include "settings/AdvancedSettings.h"
 #include "settings/MediaSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "threads/SingleLock.h"
 #include "windows/GUIWindowPVR.h"
index e1dd398..5eb3195 100644 (file)
@@ -22,7 +22,7 @@
 #include <map>
 
 #include "addons/include/xbmc_pvr_types.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "threads/Event.h"
 #include "threads/Thread.h"
 #include "utils/JobManager.h"
index 90da360..349cad6 100644 (file)
@@ -1502,3 +1502,50 @@ void CPVRClient::UpdateCharInfoSignalStatus(void)
   CSingleLock lock(m_critSection);
   m_qualityInfo = qualityInfo;
 }
+
+time_t CPVRClient::GetPlayingTime(void) const
+{
+  time_t time = 0;
+  if (IsPlaying())
+  {
+    try
+    {
+      time = m_pStruct->GetPlayingTime();
+    }
+    catch (exception &e) { LogException(e, __FUNCTION__); }
+  }
+  // fallback if not implemented by addon
+  if (time == 0)
+  {
+    CDateTime::GetUTCDateTime().GetAsTime(time);
+  }
+  return time;
+}
+
+time_t CPVRClient::GetBufferTimeStart(void) const
+{
+  time_t time = 0;
+  if (IsPlaying())
+  {
+    try
+    {
+      time = m_pStruct->GetBufferTimeStart();
+    }
+    catch (exception &e) { LogException(e, __FUNCTION__); }
+  }
+  return time;
+}
+
+time_t CPVRClient::GetBufferTimeEnd(void) const
+{
+  time_t time = 0;
+  if (IsPlaying())
+  {
+    try
+    {
+      time = m_pStruct->GetBufferTimeEnd();
+    }
+    catch (exception &e) { LogException(e, __FUNCTION__); }
+  }
+  return time;
+}
index 660ae2c..0daca5e 100644 (file)
@@ -511,6 +511,21 @@ namespace PVR
 
     static const char *ToString(const PVR_ERROR error);
 
+    /*!
+     * @brief actual playing time
+     */
+    time_t GetPlayingTime() const;
+
+    /*!
+     * @brief time of oldest packet in timeshift buffer
+     */
+    time_t GetBufferTimeStart() const;
+
+    /*!
+     * @brief time of latest packet in timeshift buffer
+     */
+    time_t GetBufferTimeEnd() const;
+
   private:
     /*!
      * @brief Checks whether the provided API version is compatible with XBMC
index 5aaf881..0435a34 100644 (file)
@@ -1432,3 +1432,42 @@ bool CPVRClients::IsEncrypted(void) const
     return client->IsPlayingEncryptedChannel();
   return false;
 }
+
+time_t CPVRClients::GetPlayingTime() const
+{
+  PVR_CLIENT client;
+  time_t time = 0;
+
+  if (GetPlayingClient(client))
+  {
+     time = client->GetPlayingTime();
+  }
+
+  return time;
+}
+
+time_t CPVRClients::GetBufferTimeStart() const
+{
+  PVR_CLIENT client;
+  time_t time = 0;
+
+  if (GetPlayingClient(client))
+  {
+    time = client->GetBufferTimeStart();
+  }
+
+  return time;
+}
+
+time_t CPVRClients::GetBufferTimeEnd() const
+{
+  PVR_CLIENT client;
+  time_t time = 0;
+
+  if (GetPlayingClient(client))
+  {
+    time = client->GetBufferTimeEnd();
+  }
+
+  return time;
+}
index 8db19ec..bf241e5 100644 (file)
@@ -562,6 +562,10 @@ namespace PVR
 
     bool GetPlayingClient(PVR_CLIENT &client) const;
 
+    time_t GetPlayingTime() const;
+    time_t GetBufferTimeStart() const;
+    time_t GetBufferTimeEnd() const;
+
   private:
     /*!
      * @brief Update add-ons from the AddonManager
index cea725b..f06c632 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 #include "settings/AdvancedSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "guilib/GUIWindowManager.h"
 #include "dialogs/GUIDialogYesNo.h"
index 76ef0b4..3aba14f 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "FileItem.h"
 #include "PVRChannel.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "utils/JobManager.h"
 
 #include <boost/shared_ptr.hpp>
index e59d8dd..48b946d 100644 (file)
@@ -109,6 +109,7 @@ bool CPVRTimerInfoTag::operator ==(const CPVRTimerInfoTag& right) const
           m_iClientIndex       == right.m_iClientIndex &&
           m_strSummary         == right.m_strSummary &&
           m_iClientChannelUid  == right.m_iClientChannelUid &&
+          m_bIsRadio           == right.m_bIsRadio &&
           m_bIsRepeating       == right.m_bIsRepeating &&
           m_StartTime          == right.m_StartTime &&
           m_StopTime           == right.m_StopTime &&
@@ -131,6 +132,7 @@ CPVRTimerInfoTag &CPVRTimerInfoTag::operator=(const CPVRTimerInfoTag &orig)
   m_iClientIndex       = orig.m_iClientIndex;
   m_strSummary         = orig.m_strSummary;
   m_iClientChannelUid  = orig.m_iClientChannelUid;
+  m_bIsRadio           = orig.m_bIsRadio;
   m_bIsRepeating       = orig.m_bIsRepeating;
   m_StartTime          = orig.m_StartTime;
   m_StopTime           = orig.m_StopTime;
index d649b0d..f5d2d6e 100644 (file)
@@ -867,6 +867,8 @@ bool CGUIWindowPVRCommon::OnContextButtonFind(CFileItem *item, CONTEXT_BUTTON bu
         m_parent->m_windowSearch->m_searchfilter.m_strSearchTerm = "\"" + tag.Title() + "\"";
       else if (item->IsPVRRecording())
         m_parent->m_windowSearch->m_searchfilter.m_strSearchTerm = "\"" + item->GetPVRRecordingInfoTag()->m_strTitle + "\"";
+      else if (item->IsPVRTimer())
+        m_parent->m_windowSearch->m_searchfilter.m_strSearchTerm = "\"" + item->GetPVRTimerInfoTag()->m_strTitle + "\"";
 
       m_parent->m_windowSearch->m_bSearchConfirmed = true;
       m_parent->SetLabel(m_iControlButton, 0);
index 1674e37..f23b852 100644 (file)
@@ -358,10 +358,10 @@ bool CGUIWindowPVRGuide::OnClickList(CGUIMessage &message)
     bReturn = true;
     if (iAction == ACTION_SELECT_ITEM || iAction == ACTION_MOUSE_LEFT_CLICK)
     {
-      if (g_advancedSettings.m_bPVRShowEpgInfoOnEpgItemSelect)
-        ShowEPGInfo(pItem.get());
-      else
+      if (!g_advancedSettings.m_bPVRShowEpgInfoOnEpgItemSelect && pItem->GetEPGInfoTag()->StartAsLocalTime() <= CDateTime::GetCurrentDateTime())
         PlayEpgItem(pItem.get());
+      else
+        ShowEPGInfo(pItem.get());
     }
     else if (iAction == ACTION_SHOW_INFO)
       ShowEPGInfo(pItem.get());
@@ -432,6 +432,7 @@ bool CGUIWindowPVRGuide::PlayEpgItem(CFileItem *item)
 
   CLog::Log(LOGDEBUG, "play channel '%s'", channel->ChannelName().c_str());
   CFileItem channelItem = CFileItem(*channel);
+  g_application.SwitchToFullScreen();
   bool bReturn = PlayFile(&channelItem);
   if (!bReturn)
   {
index e8420c0..45b52fd 100644 (file)
@@ -70,11 +70,12 @@ void CGUIWindowPVRTimers::GetContextButtons(int itemNumber, CContextButtons &but
   }
   else
   {
-    buttons.Add(CONTEXT_BUTTON_EDIT, 19057);            /* edit timer */
-    buttons.Add(CONTEXT_BUTTON_ADD, 19056);             /* new timer */
+    buttons.Add(CONTEXT_BUTTON_FIND, 19003);            /* Find similar program */
     buttons.Add(CONTEXT_BUTTON_ACTIVATE, 19058);        /* activate/deactivate */
-    buttons.Add(CONTEXT_BUTTON_RENAME, 118);            /* rename timer */
     buttons.Add(CONTEXT_BUTTON_DELETE, 117);            /* delete timer */
+    buttons.Add(CONTEXT_BUTTON_EDIT, 19057);            /* edit timer */
+    buttons.Add(CONTEXT_BUTTON_RENAME, 118);            /* rename timer */
+    buttons.Add(CONTEXT_BUTTON_ADD, 19056);             /* new timer */
     buttons.Add(CONTEXT_BUTTON_SORTBY_NAME, 103);       /* sort by name */
     buttons.Add(CONTEXT_BUTTON_SORTBY_DATE, 104);       /* sort by date */
     if (g_PVRClients->HasMenuHooks(pItem->GetPVRTimerInfoTag()->m_iClientId, PVR_MENUHOOK_TIMER))
index cc8cdec..4333df8 100644 (file)
@@ -28,7 +28,7 @@
 #include "utils/LangCodeExpander.h"
 #include "LangInfo.h"
 #include "profiles/ProfilesManager.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "utils/StringUtils.h"
 #include "utils/SystemInfo.h"
@@ -361,7 +361,7 @@ void CAdvancedSettings::Initialize()
 
   m_iPVRTimeCorrection             = 0;
   m_iPVRInfoToggleInterval         = 3000;
-  m_bPVRShowEpgInfoOnEpgItemSelect = true;
+  m_bPVRShowEpgInfoOnEpgItemSelect = false;
   m_iPVRMinVideoCacheLevel         = 5;
   m_iPVRMinAudioCacheLevel         = 10;
   m_bPVRCacheInDvdPlayer           = true;
index bf6797f..7d16957 100644 (file)
@@ -21,8 +21,8 @@
 
 #include <vector>
 
-#include "settings/ISettingCallback.h"
-#include "settings/ISettingsHandler.h"
+#include "settings/lib/ISettingCallback.h"
+#include "settings/lib/ISettingsHandler.h"
 #include "utils/StdString.h"
 #include "utils/GlobalsHandling.h"
 
@@ -358,7 +358,7 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler
     /* PVR/TV related advanced settings */
     int m_iPVRTimeCorrection;     /*!< @brief correct all times (epg tags, timer tags, recording tags) by this amount of minutes. defaults to 0. */
     int m_iPVRInfoToggleInterval; /*!< @brief if there are more than 1 pvr gui info item available (e.g. multiple recordings active at the same time), use this toggle delay in milliseconds. defaults to 3000. */
-    bool m_bPVRShowEpgInfoOnEpgItemSelect; /*!< @brief when selecting an EPG fileitem, show the EPG info dialog if this setting is true. start playback on the selected channel if false */
+    bool m_bPVRShowEpgInfoOnEpgItemSelect; /*!< @brief when selecting an EPG fileitem, show the EPG info dialog if this setting is true. start playback on the selected channel if false AND fileitem has started */
     int m_iPVRMinVideoCacheLevel;      /*!< @brief cache up to this level in the video buffer buffer before resuming playback if the buffers run dry */
     int m_iPVRMinAudioCacheLevel;      /*!< @brief cache up to this level in the audio buffer before resuming playback if the buffers run dry */
     bool m_bPVRCacheInDvdPlayer; /*!< @brief true to use "CACHESTATE_PVR" in CDVDPlayer (default) */
index bf307f6..c8c2bbd 100644 (file)
@@ -28,7 +28,7 @@
 #include "guilib/LocalizeStrings.h"
 #include "guilib/StereoscopicsManager.h"
 #include "settings/AdvancedSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "threads/SingleLock.h"
 #include "utils/log.h"
index cc4002b..8ee1be2 100644 (file)
@@ -24,8 +24,8 @@
 #include <vector>
 
 #include "guilib/Resolution.h"
-#include "settings/ISettingCallback.h"
-#include "settings/ISubSettings.h"
+#include "settings/lib/ISettingCallback.h"
+#include "settings/lib/ISubSettings.h"
 #include "threads/CriticalSection.h"
 #include "utils/Observer.h"
 
diff --git a/xbmc/settings/ISetting.cpp b/xbmc/settings/ISetting.cpp
deleted file mode 100644 (file)
index 755b1bf..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "ISetting.h"
-#include "SettingDefinitions.h"
-#include "utils/log.h"
-#include "utils/XBMCTinyXML.h"
-#include "utils/XMLUtils.h"
-
-using namespace std;
-
-ISetting::ISetting(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : m_id(id),
-    m_settingsManager(settingsManager),
-    m_visible(true),
-    m_meetsRequirements(true),
-    m_requirementCondition(settingsManager)
-{ }
-  
-bool ISetting::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  if (node == NULL)
-    return false;
-
-  bool value;
-  if (XMLUtils::GetBoolean(node, SETTING_XML_ELM_VISIBLE, value))
-    m_visible = value;
-
-  const TiXmlNode *requirementNode = node->FirstChild(SETTING_XML_ELM_REQUIREMENT);
-  if (requirementNode == NULL)
-    return true;
-
-  return m_requirementCondition.Deserialize(requirementNode);
-}
-
-bool ISetting::DeserializeIdentification(const TiXmlNode *node, std::string &identification)
-{
-  if (node == NULL)
-    return false;
-
-  const TiXmlElement *element = node->ToElement();
-  if (element == NULL)
-    return false;
-
-  const char *idAttribute = element->Attribute(SETTING_XML_ATTR_ID);
-  if (idAttribute == NULL || strlen(idAttribute) <= 0)
-    return false;
-
-  identification = idAttribute;
-  return true;
-}
-
-void ISetting::CheckRequirements()
-{
-  m_meetsRequirements = m_requirementCondition.Check();
-}
diff --git a/xbmc/settings/ISetting.h b/xbmc/settings/ISetting.h
deleted file mode 100644 (file)
index 4bfe65c..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-#include <string>
-#include <vector>
-
-#include "SettingRequirement.h"
-
-class CSettingsManager;
-class TiXmlNode;
-
-/*!
- \ingroup settings
- \brief Interface defining the base of all setting objects
- */
-class ISetting
-{
-public:
-  /*!
-   \brief Creates a new setting object with the given identifier.
-
-   \param id Identifier of the setting object
-   \param settingsManager Reference to the settings manager
-   */
-  ISetting(const std::string &id, CSettingsManager *settingsManager = NULL);
-  virtual ~ISetting() { }
-
-  /*!
-   \brief Deserializes the given XML node into the properties of the setting
-   object.
-
-   If the update parameter is true, the checks for mandatory properties are
-   skipped and values are only updated.
-
-   \param node XML node containing the properties of the setting object
-   \param update Whether to perform checks for mandatory properties or not
-   \return True if deserialization was successful, false otherwise
-   */
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  /*!
-   \brief Gets the identifier of the setting object.
-
-   \return Identifier of the setting object
-   */
-  const std::string& GetId() const { return m_id; }
-  /*!
-   \brief Whether the setting object is visible or hidden.
-
-   \return True if the setting object is visible, false otherwise
-   */
-  virtual bool IsVisible() const { return m_visible; }
-  /*!
-   \brief Sets the visibility state of the setting object.
-
-   \param visible Whether the setting object shall be visible or not
-   */
-  virtual void SetVisible(bool visible) { m_visible = visible; }
-
-  /*!
-   \brief Whether the setting object meets all necessary requirements.
-
-   \return True if the setting object meets all necessary requirements, false otherwise
-   */
-  virtual bool MeetsRequirements() const { return m_meetsRequirements; }
-  /*!
-   \brief Checks if the setting object meets all necessary requirements.
-   */
-  virtual void CheckRequirements();
-  /*!
-   \brief Sets whether the setting object meets all necessary requirements.
-
-   \param visible Whether the setting object meets all necessary requirements or not
-   */
-  virtual void SetRequirementsMet(bool requirementsMet) { m_meetsRequirements = requirementsMet; }
-
-  /*!
-   \brief Deserializes the given XML node to retrieve a setting object's
-   identifier.
-
-   \param node XML node containing a setting object's identifier
-   \param identification Will contain the deserialized setting object's identifier
-   \return True if a setting object's identifier was deserialized, false otherwise
-   */
-  static bool DeserializeIdentification(const TiXmlNode *node, std::string &identification);
-
-protected:
-  std::string m_id;
-  CSettingsManager *m_settingsManager;
-
-private:
-  bool m_visible;
-  bool m_meetsRequirements;
-  CSettingRequirement m_requirementCondition;
-};
diff --git a/xbmc/settings/ISettingCallback.h b/xbmc/settings/ISettingCallback.h
deleted file mode 100644 (file)
index 1c1b79c..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-class CSetting;
-class TiXmlNode;
-
-class ISettingCallback
-{
-public:
-  virtual ~ISettingCallback() { }
-
-  /*!
-   \brief The value of the given setting is being changed.
-
-   This callback is triggered whenever the value of a setting is being
-   changed. The given CSetting already contains the new value and the handler
-   of the callback has the possibility to allow or revert changing the value
-   of the setting. In case of a revert OnSettingChanging() is called again to
-   inform all listeners that the value change has been reverted.
-
-   \param setting The setting whose value is being changed (already containing the changed value)
-   \return True if the new value is acceptable otherwise false
-   */
-  virtual bool OnSettingChanging(const CSetting *setting) { return true; }
-
-  /*!
-   \brief The value of the given setting has changed.
-
-   This callback is triggered whenever the value of a setting has been
-   successfully changed (i.e. none of the OnSettingChanging() handlers)
-   has reverted the change.
-
-   \param setting The setting whose value has been changed
-   */
-  virtual void OnSettingChanged(const CSetting *setting) { }
-
-  /*!
-   \brief The given setting has been activated.
-
-   This callback is triggered whenever the given setting has been activated.
-   This callback is only fired for CSettingAction settings.
-
-   \param setting The setting which has been activated.
-   */
-  virtual void OnSettingAction(const CSetting *setting) { }
-
-  /*!
-   \brief The given setting needs to be updated.
-
-   This callback is triggered when a setting needs to be updated because its
-   value is outdated. This only happens when initially loading the value of a
-   setting and will not be triggered afterwards.
-
-   \param setting The setting which needs to be updated.
-   \return True if the setting has been successfully updated otherwise false
-   */
-  virtual bool OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode) { return false; }
-
-  /*!
-   \brief The given property of the given setting has changed
-
-   This callback is triggered when a property (e.g. enabled or the list of
-   dynamic options) has changed.
-
-   \param setting The setting which has a changed property
-   \param propertyName The string representation of the changed property
-   */
-  virtual void OnSettingPropertyChanged(const CSetting *setting, const char *propertyName) { }
-};
diff --git a/xbmc/settings/ISettingControl.cpp b/xbmc/settings/ISettingControl.cpp
deleted file mode 100644 (file)
index 5e3c695..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "ISettingControl.h"
-#include "SettingDefinitions.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/XBMCTinyXML.h"
-
-bool ISettingControl::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  if (node == NULL)
-    return false;
-
-  const TiXmlElement *elem = node->ToElement();
-  if (elem == NULL)
-    return false;
-
-  const char *strTmp = elem->Attribute(SETTING_XML_ATTR_FORMAT);
-  std::string format;
-  if (strTmp != NULL)
-    format = strTmp;
-  if (!SetFormat(format))
-  {
-    CLog::Log(LOGERROR, "ISettingControl: error reading \"format\" attribute of <control>");
-    return false;
-  }
-
-  if ((strTmp = elem->Attribute(SETTING_XML_ATTR_DELAYED)) != NULL)
-  {
-    if (!StringUtils::EqualsNoCase(strTmp, "false") && !StringUtils::EqualsNoCase(strTmp, "true"))
-    {
-      CLog::Log(LOGERROR, "ISettingControl: error reading \"delayed\" attribute of <control>");
-      return false;
-    }
-    else
-      m_delayed = StringUtils::EqualsNoCase(strTmp, "true");
-  }
-
-  return true;
-}
diff --git a/xbmc/settings/ISettingControl.h b/xbmc/settings/ISettingControl.h
deleted file mode 100644 (file)
index 8ef118f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <string>
-
-class TiXmlNode;
-
-class ISettingControl
-{
-public:
-  ISettingControl()
-    : m_delayed(false)
-  { }
-  virtual ~ISettingControl() { }
-
-  virtual std::string GetType() const = 0;
-  const std::string& GetFormat() const { return m_format; }
-  bool GetDelayed() const { return m_delayed; }
-
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-protected:
-  virtual bool SetFormat(const std::string &format) { return true; }
-
-  bool m_delayed;
-  std::string m_format;
-};
diff --git a/xbmc/settings/ISettingControlCreator.h b/xbmc/settings/ISettingControlCreator.h
deleted file mode 100644 (file)
index a3c8537..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <string>
-
-class ISettingControl;
-
-/*!
- \ingroup settings
- \brief Interface for creating a new setting control of a custom setting control type.
- */
-class ISettingControlCreator
-{
-public:
-  virtual ~ISettingControlCreator() { }
-
-  /*!
-   \brief Creates a new setting control of the given custom setting control type.
-
-   \param controlType string representation of the setting control type
-   \return A new setting control object of the given (custom) setting control type or NULL if the setting control type is unknown
-   */
-  virtual ISettingControl* CreateControl(const std::string &controlType) const = 0;
-};
diff --git a/xbmc/settings/ISettingCreator.h b/xbmc/settings/ISettingCreator.h
deleted file mode 100644 (file)
index 945915e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <string>
-
-class CSetting;
-class CSettingsManager;
-
-/*!
- \ingroup settings
- \brief Interface for creating a new setting of a custom setting type.
- */
-class ISettingCreator
-{
-public:
-  virtual ~ISettingCreator() { }
-
-  /*!
-   \brief Creates a new setting of the given custom setting type.
-
-   \param settingType string representation of the setting type
-   \param settingId Identifier of the setting to be created
-   \param settingsManager Reference to the settings manager
-   \return A new setting object of the given (custom) setting type or NULL if the setting type is unknown
-   */
-  virtual CSetting* CreateSetting(const std::string &settingType, const std::string &settingId, CSettingsManager *settingsManager = NULL) const = 0;
-};
diff --git a/xbmc/settings/ISettingsHandler.h b/xbmc/settings/ISettingsHandler.h
deleted file mode 100644 (file)
index b31d88b..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-/*!
- \ingroup settings
- \brief Interface defining methods being called by the settings system if an
- action is performed on multiple/all settings
- */
-class ISettingsHandler
-{
-public:
-  virtual ~ISettingsHandler() { }
-
-  /*!
-   \brief Settings loading has been initiated.
-
-   \return True if the settings should be loaded, false if the loading should be aborted.
-   */
-  virtual bool OnSettingsLoading() { return true; }
-  /*!
-   \brief Settings have been loaded.
-
-   This callback can be used to trigger loading other settings.
-   */
-  virtual void OnSettingsLoaded() { }
-  /*!
-   \brief Settings saving has been initiated.
-
-   \return True if the settings should be saved, false if the saving should be aborted.
-   */
-  virtual bool OnSettingsSaving() const { return true; }
-  /*!
-   \brief Settings have been saved.
-
-   This callback can be used to trigger saving other settings.
-   */
-  virtual void OnSettingsSaved() const { }
-  /*!
-   \brief Setting values have been unloaded.
-
-   This callback can be used to trigger uninitializing any state variables
-   (e.g. before re-loading the settings).
-   */
-  virtual void OnSettingsUnloaded() { }
-  /*!
-   \brief Settings have been cleared.
-
-   This callback can be used to trigger clearing any state variables.
-   */
-  virtual void OnSettingsCleared() { }
-};
diff --git a/xbmc/settings/ISubSettings.h b/xbmc/settings/ISubSettings.h
deleted file mode 100644 (file)
index 707a32d..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-class TiXmlNode;
-
-/*!
- \ingroup settings
- \brief Interface defining methods to load additional setting values from an
- XML file being loaded by the settings system.
- */
-class ISubSettings
-{
-public:
-  virtual ~ISubSettings() { }
-
-  /*!
-   \brief Load settings from the given XML node.
-
-   \param settings XML node containing setting values
-   \return True if loading the settings was successful, false otherwise.
-   */
-  virtual bool Load(const TiXmlNode *settings) { return true; }
-  /*!
-   \brief Save settings to the given XML node.
-
-   \param settings XML node in which the settings will be saved
-   \return True if saving the settings was successful, false otherwise.
-   */
-  virtual bool Save(TiXmlNode *settings) const { return true; }
-  /*!
-   \brief Clear any loaded setting values.
-   */
-  virtual void Clear() { }
-};
index c73493c..3861188 100644 (file)
@@ -1,21 +1,11 @@
 SRCS=AdvancedSettings.cpp \
      DisplaySettings.cpp \
-     ISetting.cpp \
-     ISettingControl.cpp \
      MediaSettings.cpp \
      MediaSourceSettings.cpp \
-     Setting.cpp \
      SettingAddon.cpp \
-     SettingCategoryAccess.cpp \
-     SettingConditions.cpp \
      SettingControl.cpp \
-     SettingDependency.cpp \
      SettingPath.cpp \
-     SettingSection.cpp \
      Settings.cpp \
-     SettingsManager.cpp \
-     SettingRequirement.cpp \
-     SettingUpdate.cpp \
      SkinSettings.cpp \
      VideoSettings.cpp \
 
index 7c89f3a..4e6e83d 100644 (file)
@@ -30,7 +30,7 @@
 #include "interfaces/Builtins.h"
 #include "music/MusicDatabase.h"
 #include "profiles/ProfilesManager.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "storage/MediaManager.h"
 #include "threads/SingleLock.h"
 #include "utils/log.h"
index a33f621..ad2fb7a 100644 (file)
@@ -22,8 +22,8 @@
 #include <map>
 #include <string>
 
-#include "settings/ISettingCallback.h"
-#include "settings/ISubSettings.h"
+#include "settings/lib/ISettingCallback.h"
+#include "settings/lib/ISubSettings.h"
 #include "settings/VideoSettings.h"
 #include "threads/CriticalSection.h"
 
index abcbe99..fe6a898 100644 (file)
@@ -22,7 +22,7 @@
 #include <string>
 
 #include "MediaSource.h"
-#include "settings/ISettingsHandler.h"
+#include "settings/lib/ISettingsHandler.h"
 
 class TiXmlNode;
 
diff --git a/xbmc/settings/Setting.cpp b/xbmc/settings/Setting.cpp
deleted file mode 100644 (file)
index d02090f..0000000
+++ /dev/null
@@ -1,967 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <sstream>
-
-#include "Setting.h"
-#include "SettingDefinitions.h"
-#include "SettingsManager.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/XBMCTinyXML.h"
-#include "utils/XMLUtils.h"
-
-CSetting::CSetting(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : ISetting(id, settingsManager),
-    m_callback(NULL),
-    m_label(-1), m_help(-1),
-    m_level(SettingLevelStandard),
-    m_control(NULL),
-    m_changed(false)
-{ }
-  
-CSetting::CSetting(const std::string &id, const CSetting &setting)
-  : ISetting(id, setting.m_settingsManager),
-    m_callback(NULL),
-    m_label(-1), m_help(-1),
-    m_level(SettingLevelStandard),
-    m_control(NULL),
-    m_changed(false)
-{
-  m_id = id;
-  Copy(setting);
-}
-
-CSetting::~CSetting()
-{
-  delete m_control;
-}
-
-bool CSetting::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  // handle <visible> conditions
-  if (!ISetting::Deserialize(node, update))
-    return false;
-
-  const TiXmlElement *element = node->ToElement();
-  if (element == NULL)
-    return false;
-
-  // get the attributes label and help
-  int tmp = -1;
-  if (element->QueryIntAttribute(SETTING_XML_ATTR_LABEL, &tmp) == TIXML_SUCCESS && tmp > 0)
-    m_label = tmp;
-  
-  tmp = -1;
-  if (element->QueryIntAttribute(SETTING_XML_ATTR_HELP, &tmp) == TIXML_SUCCESS && tmp > 0)
-    m_help = tmp;
-  const char *parentSetting = element->Attribute(SETTING_XML_ATTR_PARENT);
-  if (parentSetting != NULL)
-    m_parentSetting = parentSetting;
-
-  // get the <level>
-  int level = -1;
-  if (XMLUtils::GetInt(node, SETTING_XML_ELM_LEVEL, level))
-    m_level = (SettingLevel)level;
-    
-  if (m_level < (int)SettingLevelBasic || m_level > (int)SettingLevelInternal)
-    m_level = SettingLevelStandard;
-
-  const TiXmlNode *dependencies = node->FirstChild(SETTING_XML_ELM_DEPENDENCIES);
-  if (dependencies != NULL)
-  {
-    const TiXmlNode *dependencyNode = dependencies->FirstChild(SETTING_XML_ELM_DEPENDENCY);
-    while (dependencyNode != NULL)
-    {
-      CSettingDependency dependency(m_settingsManager);
-      if (dependency.Deserialize(dependencyNode))
-        m_dependencies.push_back(dependency);
-      else
-        CLog::Log(LOGWARNING, "CSetting: error reading <dependency> tag of \"%s\"", m_id.c_str());
-
-      dependencyNode = dependencyNode->NextSibling(SETTING_XML_ELM_DEPENDENCY);
-    }
-  }
-
-  const TiXmlElement *control = node->FirstChildElement(SETTING_XML_ELM_CONTROL);
-  if (control != NULL)
-  {
-    const char *controlType = control->Attribute(SETTING_XML_ATTR_TYPE);
-    if (controlType == NULL)
-    {
-      CLog::Log(LOGERROR, "CSetting: error reading \"type\" attribute of <control> tag of \"%s\"", m_id.c_str());
-      return false;
-    }
-
-    m_control = m_settingsManager->CreateControl(controlType);
-    if (m_control == NULL || !m_control->Deserialize(control, update))
-    {
-      CLog::Log(LOGERROR, "CSetting: error reading <control> tag of \"%s\"", m_id.c_str());
-      return false;
-    }
-  }
-  else if (!update && m_level < SettingLevelInternal)
-  {
-    CLog::Log(LOGERROR, "CSetting: missing <control> tag of \"%s\"", m_id.c_str());
-    return false;
-  }
-
-  const TiXmlNode *updates = node->FirstChild(SETTING_XML_ELM_UPDATES);
-  if (updates != NULL)
-  {
-    const TiXmlElement *updateElem = updates->FirstChildElement(SETTING_XML_ELM_UPDATE);
-    while (updateElem != NULL)
-    {
-      CSettingUpdate update;
-      if (update.Deserialize(updateElem))
-      {
-        if (!m_updates.insert(update).second)
-          CLog::Log(LOGWARNING, "CSetting: duplicate <update> definition for \"%s\"", m_id.c_str());
-      }
-      else
-        CLog::Log(LOGWARNING, "CSetting: error reading <update> tag of \"%s\"", m_id.c_str());
-
-      updateElem = updateElem->NextSiblingElement(SETTING_XML_ELM_UPDATE);
-    }
-  }
-    
-  return true;
-}
-  
-bool CSetting::IsEnabled() const
-{
-  bool enabled = true;
-  for (SettingDependencies::const_iterator depIt = m_dependencies.begin(); depIt != m_dependencies.end(); ++depIt)
-  {
-    if (depIt->GetType() != SettingDependencyTypeEnable)
-      continue;
-
-    if (!depIt->Check())
-    {
-      enabled = false;
-      break;
-    }
-  }
-
-  return enabled;
-}
-
-bool CSetting::IsVisible() const
-{
-  if (!ISetting::IsVisible())
-    return false;
-
-  bool visible = true;
-  for (SettingDependencies::const_iterator depIt = m_dependencies.begin(); depIt != m_dependencies.end(); ++depIt)
-  {
-    if (depIt->GetType() != SettingDependencyTypeVisible)
-      continue;
-
-    if (!depIt->Check())
-    {
-      visible = false;
-      break;
-    }
-  }
-
-  return visible;
-}
-
-bool CSetting::OnSettingChanging(const CSetting *setting)
-{
-  if (m_callback == NULL)
-    return true;
-    
-  return m_callback->OnSettingChanging(setting);
-}
-  
-void CSetting::OnSettingChanged(const CSetting *setting)
-{
-  if (m_callback == NULL)
-    return;
-
-  m_callback->OnSettingChanged(setting);
-}
-
-void CSetting::OnSettingAction(const CSetting *setting)
-{
-  if (m_callback == NULL)
-    return;
-
-  m_callback->OnSettingAction(setting);
-}
-
-bool CSetting::OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode)
-{
-  if (m_callback == NULL)
-    return false;
-
-  return m_callback->OnSettingUpdate(setting, oldSettingId, oldSettingNode);
-}
-
-void CSetting::OnSettingPropertyChanged(const CSetting *setting, const char *propertyName)
-{
-  if (m_callback == NULL)
-    return;
-
-  m_callback->OnSettingPropertyChanged(setting, propertyName);
-}
-
-void CSetting::Copy(const CSetting &setting)
-{
-  SetVisible(setting.IsVisible());
-  SetRequirementsMet(setting.MeetsRequirements());
-  m_callback = setting.m_callback;
-  m_label = setting.m_label;
-  m_help = setting.m_help;
-  m_level = setting.m_level;
-  
-  delete m_control;
-  if (setting.m_control != NULL)
-  {
-    m_control = m_settingsManager->CreateControl(setting.m_control->GetType());
-    *m_control = *setting.m_control;
-  }
-  else
-    m_control = NULL;
-
-  m_dependencies = setting.m_dependencies;
-  m_updates = setting.m_updates;
-  m_changed = setting.m_changed;
-}
-  
-CSettingBool::CSettingBool(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_value(false), m_default(false)
-{ }
-  
-CSettingBool::CSettingBool(const std::string &id, const CSettingBool &setting)
-  : CSetting(id, setting)
-{
-  copy(setting);
-}
-
-CSettingBool::CSettingBool(const std::string &id, int label, bool value, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_value(value), m_default(value)
-{
-  m_label = label;
-}
-
-bool CSettingBool::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  CExclusiveLock lock(m_critical);
-
-  if (!CSetting::Deserialize(node, update))
-    return false;
-    
-  // get the default value
-  bool value;
-  if (XMLUtils::GetBoolean(node, SETTING_XML_ELM_DEFAULT, value))
-    m_value = m_default = value;
-  else if (!update)
-  {
-    CLog::Log(LOGERROR, "CSettingBool: error reading the default value of \"%s\"", m_id.c_str());
-    return false;
-  }
-
-  return true;
-}
-  
-bool CSettingBool::FromString(const std::string &value)
-{
-  bool bValue;
-  if (!fromString(value, bValue))
-    return false;
-
-  return SetValue(bValue);
-}
-
-std::string CSettingBool::ToString() const
-{
-  return m_value ? "true" : "false";
-}
-
-bool CSettingBool::Equals(const std::string &value) const
-{
-  bool bValue;
-  return (fromString(value, bValue) && m_value == bValue);
-}
-
-bool CSettingBool::CheckValidity(const std::string &value) const
-{
-  bool bValue;
-  return fromString(value, bValue);
-}
-
-bool CSettingBool::SetValue(bool value)
-{
-  CExclusiveLock lock(m_critical);
-
-  if (value == m_value)
-    return true;
-
-  bool oldValue = m_value;
-  m_value = value;
-
-  if (!OnSettingChanging(this))
-  {
-    m_value = oldValue;
-
-    // the setting couldn't be changed because one of the
-    // callback handlers failed the OnSettingChanging()
-    // callback so we need to let all the callback handlers
-    // know that the setting hasn't changed
-    OnSettingChanging(this);
-    return false;
-  }
-
-  m_changed = m_value != m_default;
-  OnSettingChanged(this);
-  return true;
-}
-  
-void CSettingBool::SetDefault(bool value)
-{
-  CExclusiveLock lock(m_critical);
-
-  m_default = value;
-  if (!m_changed)
-    m_value = m_default;
-}
-
-void CSettingBool::copy(const CSettingBool &setting)
-{
-  CSetting::Copy(setting);
-
-  m_value = setting.m_value;
-  m_default = setting.m_default;
-}
-  
-bool CSettingBool::fromString(const std::string &strValue, bool &value) const
-{
-  if (StringUtils::EqualsNoCase(strValue, "true"))
-  {
-    value = true;
-    return true;
-  }
-  if (StringUtils::EqualsNoCase(strValue, "false"))
-  {
-    value = false;
-    return true;
-  }
-
-  return false;
-}
-
-CSettingInt::CSettingInt(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_value(0), m_default(0),
-    m_min(0), m_step(1), m_max(0)
-{ }
-  
-CSettingInt::CSettingInt(const std::string &id, const CSettingInt &setting)
-  : CSetting(id, setting)
-{
-  copy(setting);
-}
-
-CSettingInt::CSettingInt(const std::string &id, int label, int value, int minimum, int step, int maximum, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_value(value), m_default(value),
-    m_min(minimum), m_step(step), m_max(maximum)
-{
-  m_label = label;
-}
-
-CSettingInt::CSettingInt(const std::string &id, int label, int value, const StaticIntegerSettingOptions &options, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_value(value), m_default(value),
-    m_min(0), m_step(1), m_max(0),
-    m_options(options)
-{
-  m_label = label;
-}
-
-bool CSettingInt::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  CExclusiveLock lock(m_critical);
-
-  if (!CSetting::Deserialize(node, update))
-    return false;
-
-  // get the default value
-  int value;
-  if (XMLUtils::GetInt(node, SETTING_XML_ELM_DEFAULT, value))
-    m_value = m_default = value;
-  else if (!update)
-  {
-    CLog::Log(LOGERROR, "CSettingInt: error reading the default value of \"%s\"", m_id.c_str());
-    return false;
-  }
-
-  const TiXmlNode *constraints = node->FirstChild(SETTING_XML_ELM_CONSTRAINTS);
-  if (constraints != NULL)
-  {
-    // get the entries
-    const TiXmlNode *options = constraints->FirstChild(SETTING_XML_ELM_OPTIONS);
-    if (options != NULL && options->FirstChild() != NULL)
-    {
-      if (options->FirstChild()->Type() == TiXmlNode::TINYXML_TEXT)
-        m_optionsFiller = options->FirstChild()->ValueStr();
-      else
-      {
-        m_options.clear();
-        const TiXmlElement *optionElement = options->FirstChildElement(SETTING_XML_ELM_OPTION);
-        while (optionElement != NULL)
-        {
-          std::pair<int, int> entry;
-          if (optionElement->QueryIntAttribute(SETTING_XML_ATTR_LABEL, &entry.first) == TIXML_SUCCESS && entry.first > 0)
-          {
-            entry.second = strtol(optionElement->FirstChild()->Value(), NULL, 10);
-            m_options.push_back(entry);
-          }
-
-          optionElement = optionElement->NextSiblingElement(SETTING_XML_ELM_OPTION);
-        }
-      }
-    }
-
-    // get minimum
-    XMLUtils::GetInt(constraints, SETTING_XML_ELM_MINIMUM, m_min);
-    // get step
-    XMLUtils::GetInt(constraints, SETTING_XML_ELM_STEP, m_step);
-    // get maximum
-    XMLUtils::GetInt(constraints, SETTING_XML_ELM_MAXIMUM, m_max);
-  }
-
-  return true;
-}
-
-bool CSettingInt::FromString(const std::string &value)
-{
-  int iValue;
-  if (!fromString(value, iValue))
-    return false;
-
-  return SetValue(iValue);
-}
-
-std::string CSettingInt::ToString() const
-{
-  std::ostringstream oss;
-  oss << m_value;
-
-  return oss.str();
-}
-
-bool CSettingInt::Equals(const std::string &value) const
-{
-  int iValue;
-  return (fromString(value, iValue) && m_value == iValue);
-}
-
-bool CSettingInt::CheckValidity(const std::string &value) const
-{
-  int iValue;
-  if (!fromString(value, iValue))
-    return false;
-
-  return CheckValidity(iValue);
-}
-
-bool CSettingInt::CheckValidity(int value) const
-{
-  if (!m_options.empty())
-  {
-    //if the setting is an std::map, check if we got a valid value before assigning it
-    bool ok = false;
-    for (StaticIntegerSettingOptions::const_iterator it = m_options.begin(); it != m_options.end(); ++it)
-    {
-      if (it->second == value)
-      {
-        ok = true;
-        break;
-      }
-    }
-
-    if (!ok)
-      return false;
-  }
-  else if (m_optionsFiller.empty() && m_min != m_max &&
-          (value < m_min || value > m_max))
-    return false;
-
-  return true;
-}
-
-bool CSettingInt::SetValue(int value)
-{
-  CExclusiveLock lock(m_critical);
-
-  if (value == m_value)
-    return true;
-
-  if (!CheckValidity(value))
-    return false;
-
-  int oldValue = m_value;
-  m_value = value;
-
-  if (!OnSettingChanging(this))
-  {
-    m_value = oldValue;
-
-    // the setting couldn't be changed because one of the
-    // callback handlers failed the OnSettingChanging()
-    // callback so we need to let all the callback handlers
-    // know that the setting hasn't changed
-    OnSettingChanging(this);
-    return false;
-  }
-
-  m_changed = m_value != m_default;
-  OnSettingChanged(this);
-  return true;
-}
-
-void CSettingInt::SetDefault(int value)
-{
-  CExclusiveLock lock(m_critical);
-
-  m_default = value;
-  if (!m_changed)
-    m_value = m_default;
-}
-
-SettingOptionsType CSettingInt::GetOptionsType() const
-{
-  CSharedLock lock(m_critical);
-  if (!m_options.empty())
-    return SettingOptionsTypeStatic;
-  if (!m_optionsFiller.empty())
-    return SettingOptionsTypeDynamic;
-
-  return SettingOptionsTypeNone;
-}
-
-DynamicIntegerSettingOptions CSettingInt::UpdateDynamicOptions()
-{
-  CExclusiveLock lock(m_critical);
-  DynamicIntegerSettingOptions options;
-  if (m_optionsFiller.empty() || m_settingsManager == NULL)
-    return options;
-
-  IntegerSettingOptionsFiller filler = (IntegerSettingOptionsFiller)m_settingsManager->GetSettingOptionsFiller(this);
-  if (filler == NULL)
-    return options;
-
-  int bestMatchingValue = m_value;
-  filler(this, options, bestMatchingValue);
-
-  if (bestMatchingValue != m_value)
-    SetValue(bestMatchingValue);
-
-  bool changed = m_dynamicOptions.size() != options.size();
-  if (!changed)
-  {
-    for (size_t index = 0; index < options.size(); index++)
-    {
-      if (options[index].first.compare(m_dynamicOptions[index].first) != 0 ||
-          options[index].second != m_dynamicOptions[index].second)
-      {
-        changed = true;
-        break;
-      }
-    }
-  }
-
-  if (changed)
-  {
-    m_dynamicOptions = options;
-    OnSettingPropertyChanged(this, "options");
-  }
-
-  return options;
-}
-
-void CSettingInt::copy(const CSettingInt &setting)
-{
-  CSetting::Copy(setting);
-
-  CExclusiveLock lock(m_critical);
-
-  m_value = setting.m_value;
-  m_default = setting.m_default;
-  m_min = setting.m_min;
-  m_step = setting.m_step;
-  m_max = setting.m_max;
-  m_options = setting.m_options;
-  m_optionsFiller = setting.m_optionsFiller;
-}
-
-bool CSettingInt::fromString(const std::string &strValue, int &value)
-{
-  if (strValue.empty())
-    return false;
-
-  char *end = NULL;
-  value = (int)strtol(strValue.c_str(), &end, 10);
-  if (end != NULL && *end != '\0')
-    return false; 
-
-  return true;
-}
-
-CSettingNumber::CSettingNumber(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_value(0.0), m_default(0.0),
-    m_min(0.0), m_step(1.0), m_max(0.0)
-{ }
-  
-CSettingNumber::CSettingNumber(const std::string &id, const CSettingNumber &setting)
-  : CSetting(id, setting)
-{
-  copy(setting);
-}
-
-CSettingNumber::CSettingNumber(const std::string &id, int label, float value, float minimum, float step, float maximum, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_value(value), m_default(value),
-    m_min(minimum), m_step(step), m_max(maximum)
-{
-  m_label = label;
-}
-
-bool CSettingNumber::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  CExclusiveLock lock(m_critical);
-
-  if (!CSetting::Deserialize(node, update))
-    return false;
-    
-  // get the default value
-  double value;
-  if (XMLUtils::GetDouble(node, SETTING_XML_ELM_DEFAULT, value))
-    m_value = m_default = value;
-  else if (!update)
-  {
-    CLog::Log(LOGERROR, "CSettingNumber: error reading the default value of \"%s\"", m_id.c_str());
-    return false;
-  }
-    
-  const TiXmlNode *constraints = node->FirstChild(SETTING_XML_ELM_CONSTRAINTS);
-  if (constraints != NULL)
-  {
-    // get the minimum value
-    XMLUtils::GetDouble(constraints, SETTING_XML_ELM_MINIMUM, m_min);
-    // get the step value
-    XMLUtils::GetDouble(constraints, SETTING_XML_ELM_STEP, m_step);
-    // get the maximum value
-    XMLUtils::GetDouble(constraints, SETTING_XML_ELM_MAXIMUM, m_max);
-  }
-
-  return true;
-}
-
-bool CSettingNumber::FromString(const std::string &value)
-{
-  double dValue;
-  if (!fromString(value, dValue))
-    return false;
-
-  return SetValue(dValue);
-}
-
-std::string CSettingNumber::ToString() const
-{
-  std::ostringstream oss;
-  oss << m_value;
-
-  return oss.str();
-}
-
-bool CSettingNumber::Equals(const std::string &value) const
-{
-  double dValue;
-  CSharedLock lock(m_critical);
-  return (fromString(value, dValue) && m_value == dValue);
-}
-
-bool CSettingNumber::CheckValidity(const std::string &value) const
-{
-  double dValue;
-  if (!fromString(value, dValue))
-    return false;
-
-  return CheckValidity(dValue);
-}
-
-bool CSettingNumber::CheckValidity(double value) const
-{
-  CSharedLock lock(m_critical);
-  if (m_min != m_max &&
-     (value < m_min || value > m_max))
-    return false;
-
-  return true;
-}
-
-bool CSettingNumber::SetValue(double value)
-{
-  CExclusiveLock lock(m_critical);
-
-  if (value == m_value)
-    return true;
-
-  if (!CheckValidity(value))
-    return false;
-
-  double oldValue = m_value;
-  m_value = value;
-
-  if (!OnSettingChanging(this))
-  {
-    m_value = oldValue;
-
-    // the setting couldn't be changed because one of the
-    // callback handlers failed the OnSettingChanging()
-    // callback so we need to let all the callback handlers
-    // know that the setting hasn't changed
-    OnSettingChanging(this);
-    return false;
-  }
-
-  m_changed = m_value != m_default;
-  OnSettingChanged(this);
-  return true;
-}
-
-void CSettingNumber::SetDefault(double value)
-{
-  CExclusiveLock lock(m_critical);
-
-  m_default = value;
-  if (!m_changed)
-    m_value = m_default;
-}
-
-void CSettingNumber::copy(const CSettingNumber &setting)
-{
-  CSetting::Copy(setting);
-  CExclusiveLock lock(m_critical);
-
-  m_value = setting.m_value;
-  m_default = setting.m_default;
-  m_min = setting.m_min;
-  m_step = setting.m_step;
-  m_max = setting.m_max;
-}
-
-bool CSettingNumber::fromString(const std::string &strValue, double &value)
-{
-  if (strValue.empty())
-    return false;
-
-  char *end = NULL;
-  value = (int)strtod(strValue.c_str(), &end);
-  if (end != NULL && *end != '\0')
-    return false;
-
-  return true;
-}
-
-CSettingString::CSettingString(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_allowEmpty(false)
-{ }
-  
-CSettingString::CSettingString(const std::string &id, const CSettingString &setting)
-  : CSetting(id, setting)
-{
-  copy(setting);
-}
-
-CSettingString::CSettingString(const std::string &id, int label, const std::string &value, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager),
-    m_value(value), m_default(value),
-    m_allowEmpty(false)
-{
-  m_label = label;
-}
-
-bool CSettingString::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  CExclusiveLock lock(m_critical);
-
-  if (!CSetting::Deserialize(node, update))
-    return false;
-
-  const TiXmlNode *constraints = node->FirstChild(SETTING_XML_ELM_CONSTRAINTS);
-  if (constraints != NULL)
-  {
-    // get allowempty (needs to be parsed before parsing the default value)
-    XMLUtils::GetBoolean(constraints, SETTING_XML_ELM_ALLOWEMPTY, m_allowEmpty);
-
-    // get the entries
-    const TiXmlNode *options = constraints->FirstChild(SETTING_XML_ELM_OPTIONS);
-    if (options != NULL && options->FirstChild() != NULL &&
-        options->FirstChild()->Type() == TiXmlNode::TINYXML_TEXT)
-      m_optionsFiller = options->FirstChild()->ValueStr();
-  }
-
-  // get the default value
-  CStdString value;
-  if (XMLUtils::GetString(node, SETTING_XML_ELM_DEFAULT, value) && !value.empty())
-    m_value = m_default = value;
-  else if (!update && !m_allowEmpty)
-  {
-    CLog::Log(LOGERROR, "CSettingString: error reading the default value of \"%s\"", m_id.c_str());
-    return false;
-  }
-
-  return true;
-}
-
-bool CSettingString::CheckValidity(const std::string &value) const
-{
-  CSharedLock lock(m_critical);
-  if (!m_allowEmpty && value.empty())
-    return false;
-
-  return true;
-}
-
-bool CSettingString::SetValue(const std::string &value)
-{
-  CExclusiveLock lock(m_critical);
-
-  if (value == m_value)
-    return true;
-    
-  if (!CheckValidity(value))
-    return false;
-
-  std::string oldValue = m_value;
-  m_value = value;
-
-  if (!OnSettingChanging(this))
-  {
-    m_value = oldValue;
-
-    // the setting couldn't be changed because one of the
-    // callback handlers failed the OnSettingChanging()
-    // callback so we need to let all the callback handlers
-    // know that the setting hasn't changed
-    OnSettingChanging(this);
-    return false;
-  }
-
-  m_changed = m_value != m_default;
-  OnSettingChanged(this);
-  return true;
-}
-
-void CSettingString::SetDefault(const std::string &value)
-{
-  CSharedLock lock(m_critical);
-
-  m_default = value;
-  if (!m_changed)
-    m_value = m_default;
-}
-
-SettingOptionsType CSettingString::GetOptionsType() const
-{
-  CSharedLock lock(m_critical);
-  if (!m_optionsFiller.empty())
-    return SettingOptionsTypeDynamic;
-
-  return SettingOptionsTypeNone;
-}
-
-DynamicStringSettingOptions CSettingString::UpdateDynamicOptions()
-{
-  CExclusiveLock lock(m_critical);
-  DynamicStringSettingOptions options;
-  if (m_optionsFiller.empty() || m_settingsManager == NULL)
-    return options;
-
-  StringSettingOptionsFiller filler = (StringSettingOptionsFiller)m_settingsManager->GetSettingOptionsFiller(this);
-  if (filler == NULL)
-    return options;
-
-  std::string bestMatchingValue = m_value;
-  filler(this, options, bestMatchingValue);
-
-  if (bestMatchingValue != m_value)
-    SetValue(bestMatchingValue);
-
-  // check if the list of items has changed
-  bool changed = m_dynamicOptions.size() != options.size();
-  if (!changed)
-  {
-    for (size_t index = 0; index < options.size(); index++)
-    {
-      if (options[index].first.compare(m_dynamicOptions[index].first) != 0 ||
-          options[index].second.compare(m_dynamicOptions[index].second) != 0)
-      {
-        changed = true;
-        break;
-      }
-    }
-  }
-
-  if (changed)
-  {
-    m_dynamicOptions = options;
-    OnSettingPropertyChanged(this, "options");
-  }
-
-  return options;
-}
-
-void CSettingString::copy(const CSettingString &setting)
-{
-  CSetting::Copy(setting);
-
-  CExclusiveLock lock(m_critical);
-  m_value = setting.m_value;
-  m_default = setting.m_default;
-  m_allowEmpty = setting.m_allowEmpty;
-}
-  
-CSettingAction::CSettingAction(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : CSetting(id, settingsManager)
-{ }
-  
-CSettingAction::CSettingAction(const std::string &id, const CSettingAction &setting)
-  : CSetting(id, setting)
-{ }
-
-bool CSettingAction::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  CSharedLock lock(m_critical);
-
-  if (!CSetting::Deserialize(node, update))
-    return false;
-    
-  return true;
-}
diff --git a/xbmc/settings/Setting.h b/xbmc/settings/Setting.h
deleted file mode 100644 (file)
index 73046e6..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "ISetting.h"
-#include "ISettingCallback.h"
-#include "ISettingControl.h"
-#include "SettingDependency.h"
-#include "SettingUpdate.h"
-#include "threads/SharedSection.h"
-
-/*!
- \ingroup settings
- \brief Basic setting types available in the settings system.
- */
-typedef enum {
-  SettingTypeNone = 0,
-  SettingTypeBool,
-  SettingTypeInteger,
-  SettingTypeNumber,
-  SettingTypeString,
-  SettingTypeAction
-} SettingType;
-
-/*!
- \ingroup settings
- \brief Levels which every setting is assigned to.
- */
-typedef enum {
-  SettingLevelBasic  = 0,
-  SettingLevelStandard,
-  SettingLevelAdvanced,
-  SettingLevelExpert,
-  SettingLevelInternal
-} SettingLevel;
-
-typedef enum {
-  SettingOptionsTypeNone = 0,
-  SettingOptionsTypeStatic,
-  SettingOptionsTypeDynamic
-} SettingOptionsType;
-
-typedef std::pair<int, int> StaticIntegerSettingOption;
-typedef std::vector<StaticIntegerSettingOption> StaticIntegerSettingOptions;
-typedef std::pair<std::string, int> DynamicIntegerSettingOption;
-typedef std::vector<DynamicIntegerSettingOption> DynamicIntegerSettingOptions;
-typedef std::pair<std::string, std::string> DynamicStringSettingOption;
-typedef std::vector<DynamicStringSettingOption> DynamicStringSettingOptions;
-
-/*!
- \ingroup settings
- \brief Setting base class containing all the properties which are common to
- all settings independent of the setting type.
- */
-class CSetting : public ISetting,
-                 protected ISettingCallback
-{
-public:
-  CSetting(const std::string &id, CSettingsManager *settingsManager = NULL);
-  CSetting(const std::string &id, const CSetting &setting);
-  virtual ~CSetting();
-
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  virtual int GetType() const = 0;
-  virtual bool FromString(const std::string &value) = 0;
-  virtual std::string ToString() const = 0;
-  virtual bool Equals(const std::string &value) const = 0;
-  virtual bool CheckValidity(const std::string &value) const = 0;
-  virtual void Reset() = 0;
-
-  int GetLabel() const { return m_label; }
-  void SetLabel(int label) { m_label = label; }
-  int GetHelp() const { return m_help; }
-  void SetHelp(int help) { m_help = help; }
-  bool IsEnabled() const;
-  const std::string& GetParent() const { return m_parentSetting; }
-  SettingLevel GetLevel() const { return m_level; }
-  const ISettingControl* GetControl() const { return m_control; }
-  void SetControl(ISettingControl* control) { m_control = control; }
-  const SettingDependencies& GetDependencies() const { return m_dependencies; }
-  const std::set<CSettingUpdate>& GetUpdates() const { return m_updates; }
-
-  // overrides of ISetting
-  virtual bool IsVisible() const;
-
-protected:
-  friend class CSettingsManager;
-
-  virtual bool OnSettingChanging(const CSetting *setting);
-  virtual void OnSettingChanged(const CSetting *setting);
-  virtual void OnSettingAction(const CSetting *setting);
-  virtual bool OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode);
-  virtual void OnSettingPropertyChanged(const CSetting *setting, const char *propertyName);
-
-  void Copy(const CSetting &setting);
-
-  ISettingCallback *m_callback;
-  int m_label;
-  int m_help;
-  std::string m_parentSetting;
-  SettingLevel m_level;
-  ISettingControl *m_control;
-  SettingDependencies m_dependencies;
-  std::set<CSettingUpdate> m_updates;
-  bool m_changed;
-  CSharedSection m_critical;
-};
-
-typedef std::vector<CSetting *> SettingList;
-
-/*!
- \ingroup settings
- \brief Boolean setting implementation.
- \sa CSetting
- */
-class CSettingBool : public CSetting
-{
-public:
-  CSettingBool(const std::string &id, CSettingsManager *settingsManager = NULL);
-  CSettingBool(const std::string &id, const CSettingBool &setting);
-  CSettingBool(const std::string &id, int label, bool value, CSettingsManager *settingsManager = NULL);
-  virtual ~CSettingBool() { }
-
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  virtual int GetType() const { return SettingTypeBool; }
-  virtual bool FromString(const std::string &value);
-  virtual std::string ToString() const;
-  virtual bool Equals(const std::string &value) const;
-  virtual bool CheckValidity(const std::string &value) const;
-  virtual void Reset() { SetValue(m_default); }
-
-  bool GetValue() const { CSharedLock lock(m_critical); return m_value; }
-  bool SetValue(bool value);
-  bool GetDefault() const { return m_default; }
-  void SetDefault(bool value);
-
-private:
-  void copy(const CSettingBool &setting);
-  bool fromString(const std::string &strValue, bool &value) const;
-
-  bool m_value;
-  bool m_default;
-};
-
-/*!
- \ingroup settings
- \brief Integer setting implementation
- \sa CSetting
- */
-class CSettingInt : public CSetting
-{
-public:
-  CSettingInt(const std::string &id, CSettingsManager *settingsManager = NULL);
-  CSettingInt(const std::string &id, const CSettingInt &setting);
-  CSettingInt(const std::string &id, int label, int value, int minimum, int step, int maximum, CSettingsManager *settingsManager = NULL);
-  CSettingInt(const std::string &id, int label, int value, const StaticIntegerSettingOptions &options, CSettingsManager *settingsManager = NULL);
-  virtual ~CSettingInt() { }
-
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  virtual int GetType() const { return SettingTypeInteger; }
-  virtual bool FromString(const std::string &value);
-  virtual std::string ToString() const;
-  virtual bool Equals(const std::string &value) const;
-  virtual bool CheckValidity(const std::string &value) const;
-  virtual bool CheckValidity(int value) const;
-  virtual void Reset() { SetValue(m_default); }
-
-  int GetValue() const { CSharedLock lock(m_critical); return m_value; }
-  bool SetValue(int value);
-  int GetDefault() const { return m_default; }
-  void SetDefault(int value);
-
-  int GetMinimum() const { return m_min; }
-  int GetStep() const { return m_step; }
-  int GetMaximum() const { return m_max; }
-
-  SettingOptionsType GetOptionsType() const;
-  const StaticIntegerSettingOptions& GetOptions() const { return m_options; }
-  const std::string& GetOptionsFiller() const { return m_optionsFiller; }
-  DynamicIntegerSettingOptions UpdateDynamicOptions();
-
-private:
-  void copy(const CSettingInt &setting);
-  static bool fromString(const std::string &strValue, int &value);
-
-  int m_value;
-  int m_default;
-  int m_min;
-  int m_step;
-  int m_max;
-  StaticIntegerSettingOptions m_options;
-  std::string m_optionsFiller;
-  DynamicIntegerSettingOptions m_dynamicOptions;
-};
-
-/*!
- \ingroup settings
- \brief Real number setting implementation.
- \sa CSetting
- */
-class CSettingNumber : public CSetting
-{
-public:
-  CSettingNumber(const std::string &id, CSettingsManager *settingsManager = NULL);
-  CSettingNumber(const std::string &id, const CSettingNumber &setting);
-  CSettingNumber(const std::string &id, int label, float value, float minimum, float step, float maximum, CSettingsManager *settingsManager = NULL);
-  virtual ~CSettingNumber() { }
-
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  virtual int GetType() const { return SettingTypeNumber; }
-  virtual bool FromString(const std::string &value);
-  virtual std::string ToString() const;
-  virtual bool Equals(const std::string &value) const;
-  virtual bool CheckValidity(const std::string &value) const;
-  virtual bool CheckValidity(double value) const;
-  virtual void Reset() { SetValue(m_default); }
-
-  double GetValue() const { CSharedLock lock(m_critical); return m_value; }
-  bool SetValue(double value);
-  double GetDefault() const { return m_default; }
-  void SetDefault(double value);
-
-  double GetMinimum() const { return m_min; }
-  double GetStep() const { return m_step; }
-  double GetMaximum() const { return m_max; }
-
-private:
-  virtual void copy(const CSettingNumber &setting);
-  static bool fromString(const std::string &strValue, double &value);
-
-  double m_value;
-  double m_default;
-  double m_min;
-  double m_step;
-  double m_max;
-};
-
-/*!
- \ingroup settings
- \brief String setting implementation.
- \sa CSetting
- */
-class CSettingString : public CSetting
-{
-public:
-  CSettingString(const std::string &id, CSettingsManager *settingsManager = NULL);
-  CSettingString(const std::string &id, const CSettingString &setting);
-  CSettingString(const std::string &id, int label, const std::string &value, CSettingsManager *settingsManager = NULL);
-  virtual ~CSettingString() { }
-
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  virtual int GetType() const { return SettingTypeString; }
-  virtual bool FromString(const std::string &value) { return SetValue(value); }
-  virtual std::string ToString() const { return m_value; }
-  virtual bool Equals(const std::string &value) const { return m_value == value; }
-  virtual bool CheckValidity(const std::string &value) const;
-  virtual void Reset() { SetValue(m_default); }
-
-  virtual const std::string& GetValue() const { CSharedLock lock(m_critical); return m_value; }
-  virtual bool SetValue(const std::string &value);
-  virtual const std::string& GetDefault() const { return m_default; }
-  virtual void SetDefault(const std::string &value);
-
-  virtual bool AllowEmpty() const { return m_allowEmpty; }
-
-  SettingOptionsType GetOptionsType() const;
-  const std::string& GetOptionsFiller() const { return m_optionsFiller; }
-  DynamicStringSettingOptions UpdateDynamicOptions();
-
-protected:
-  virtual void copy(const CSettingString &setting);
-
-  std::string m_value;
-  std::string m_default;
-  bool m_allowEmpty;
-  std::string m_optionsFiller;
-  DynamicStringSettingOptions m_dynamicOptions;
-};
-
-/*!
- \ingroup settings
- \brief Action setting implementation.
-
- A setting action will trigger a call to the OnSettingAction() callback method
- when activated.
-
- \sa CSetting
- */
-class CSettingAction : public CSetting
-{
-public:
-  CSettingAction(const std::string &id, CSettingsManager *settingsManager = NULL);
-  CSettingAction(const std::string &id, const CSettingAction &setting);
-  virtual ~CSettingAction() { }
-
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  virtual int GetType() const { return SettingTypeAction; }
-  virtual bool FromString(const std::string &value) { return false; }
-  virtual std::string ToString() const { return ""; }
-  virtual bool Equals(const std::string &value) const { return false; }
-  virtual bool CheckValidity(const std::string &value) const { return false; }
-  virtual void Reset() { }
-
-  // this needs to be public so it can be triggered when activated
-  // by the user in the GUI.
-  virtual void OnSettingAction(const CSetting *setting) { return CSetting::OnSettingAction(this); }
-};
index e77a517..f6d38ea 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "SettingAddon.h"
 #include "addons/Addon.h"
-#include "settings/SettingsManager.h"
+#include "settings/lib/SettingsManager.h"
 #include "utils/log.h"
 #include "utils/XBMCTinyXML.h"
 #include "utils/XMLUtils.h"
@@ -38,6 +38,11 @@ CSettingAddon::CSettingAddon(const std::string &id, const CSettingAddon &setting
   copy(setting);
 }
 
+CSetting* CSettingAddon::Clone(const std::string &id) const
+{
+  return new CSettingAddon(id, *this);
+}
+
 bool CSettingAddon::Deserialize(const TiXmlNode *node, bool update /* = false */)
 {
   CExclusiveLock lock(m_critical);
index edb561f..fb58f15 100644 (file)
@@ -19,7 +19,7 @@
  *
  */
 
-#include "Setting.h"
+#include "settings/lib/Setting.h"
 #include "addons/IAddon.h"
 
 class CSettingAddon : public CSettingString
@@ -29,6 +29,8 @@ public:
   CSettingAddon(const std::string &id, const CSettingAddon &setting);
   virtual ~CSettingAddon() { }
 
+  virtual CSetting* Clone(const std::string &id) const;
+
   virtual bool Deserialize(const TiXmlNode *node, bool update = false);
 
   ADDON::TYPE GetAddonType() const { return m_addonType; }
diff --git a/xbmc/settings/SettingCategoryAccess.cpp b/xbmc/settings/SettingCategoryAccess.cpp
deleted file mode 100644 (file)
index 2604239..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "SettingCategoryAccess.h"
-#include "SettingConditions.h"
-#include "SettingsManager.h"
-#include "utils/log.h"
-
-bool CSettingCategoryAccessCondition::Check() const
-{
-  if (m_value.empty())
-    return true;
-
-  if (m_settingsManager == NULL)
-    return false;
-
-  bool found = m_settingsManager->GetConditions().Check(m_value, "true");
-  if (m_negated)
-    return !found;
-
-  return found;
-}
-
-bool CSettingCategoryAccessConditionCombination::Check() const
-{
-  if (m_operations.empty() && m_values.empty())
-    return true;
-
-  return CSettingConditionCombination::Check();
-}
-
-CSettingCategoryAccess::CSettingCategoryAccess(CSettingsManager *settingsManager /* = NULL */)
-  : CSettingCondition(settingsManager)
-{
-  m_operation = CBooleanLogicOperationPtr(new CSettingCategoryAccessConditionCombination(m_settingsManager));
-}
diff --git a/xbmc/settings/SettingCategoryAccess.h b/xbmc/settings/SettingCategoryAccess.h
deleted file mode 100644 (file)
index e6b4960..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <set>
-#include <string>
-
-#include "SettingConditions.h"
-
-class CSettingCategoryAccessCondition : public CSettingConditionItem
-{
-public:
-  CSettingCategoryAccessCondition(CSettingsManager *settingsManager = NULL)
-    : CSettingConditionItem(settingsManager)
-  { }
-  virtual ~CSettingCategoryAccessCondition() { }
-
-  virtual bool Check() const;
-};
-
-class CSettingCategoryAccessConditionCombination : public CSettingConditionCombination
-{
-public:
-  CSettingCategoryAccessConditionCombination(CSettingsManager *settingsManager = NULL)
-    : CSettingConditionCombination(settingsManager)
-  { }
-  virtual ~CSettingCategoryAccessConditionCombination() { }
-
-  virtual bool Check() const;
-
-private:
-  virtual CBooleanLogicOperation* newOperation() { return new CSettingCategoryAccessConditionCombination(m_settingsManager); }
-  virtual CBooleanLogicValue* newValue() { return new CSettingCategoryAccessCondition(m_settingsManager); }
-};
-
-class CSettingCategoryAccess : public CSettingCondition
-{
-public:
-  CSettingCategoryAccess(CSettingsManager *settingsManager = NULL);
-  virtual ~CSettingCategoryAccess() { }
-};
diff --git a/xbmc/settings/SettingConditions.cpp b/xbmc/settings/SettingConditions.cpp
deleted file mode 100644 (file)
index 3cd1e0b..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "SettingConditions.h"
-#include "SettingDefinitions.h"
-#include "SettingsManager.h"
-#include "utils/StringUtils.h"
-#include "utils/XBMCTinyXML.h"
-
-bool CSettingConditionItem::Deserialize(const TiXmlNode *node)
-{
-  if (!CBooleanLogicValue::Deserialize(node))
-    return false;
-
-  const TiXmlElement *elem = node->ToElement();
-  if (elem == NULL)
-    return false;
-
-  // get the "name" attribute
-  const char *strAttribute = elem->Attribute(SETTING_XML_ATTR_NAME);
-  if (strAttribute != NULL)
-    m_name = strAttribute;
-
-  // get the "setting" attribute
-  strAttribute = elem->Attribute(SETTING_XML_ATTR_SETTING);
-  if (strAttribute != NULL)
-    m_setting = strAttribute;
-
-  return true;
-}
-
-bool CSettingConditionItem::Check() const
-{
-  if (m_settingsManager == NULL)
-    return false;
-
-  return m_settingsManager->GetConditions().Check(m_name, m_value, m_setting) == !m_negated;
-}
-
-bool CSettingConditionCombination::Check() const
-{
-  bool ok = false;
-  for (CBooleanLogicOperations::const_iterator operation = m_operations.begin();
-       operation != m_operations.end(); ++operation)
-  {
-    if (*operation == NULL)
-      continue;
-
-    CSettingConditionCombination *combination = static_cast<CSettingConditionCombination*>((*operation).get());
-    if (combination == NULL)
-      continue;
-    
-    if (combination->Check())
-      ok = true;
-    else if (m_operation == BooleanLogicOperationAnd)
-      return false;
-  }
-
-  for (CBooleanLogicValues::const_iterator value = m_values.begin();
-       value != m_values.end(); ++value)
-  {
-    if (*value == NULL)
-      continue;
-
-    CSettingConditionItem *condition = static_cast<CSettingConditionItem*>((*value).get());
-    if (condition == NULL)
-      continue;
-
-    if (condition->Check())
-      ok = true;
-    else if (m_operation == BooleanLogicOperationAnd)
-      return false;
-  }
-
-  return ok;
-}
-
-CSettingCondition::CSettingCondition(CSettingsManager *settingsManager /* = NULL */)
-  : ISettingCondition(settingsManager)
-{
-  m_operation = CBooleanLogicOperationPtr(new CSettingConditionCombination(settingsManager));
-}
-
-bool CSettingCondition::Check() const
-{
-  CSettingConditionCombination *combination = static_cast<CSettingConditionCombination*>(m_operation.get());
-  if (combination == NULL)
-    return false;
-
-  return combination->Check();
-}
-
-void CSettingConditionsManager::AddCondition(const std::string &condition)
-{
-  if (condition.empty())
-    return;
-
-  m_defines.insert(condition);
-}
-
-void CSettingConditionsManager::AddCondition(const std::string &identifier, SettingConditionCheck condition)
-{
-  if (identifier.empty() || condition == NULL)
-    return;
-
-  m_conditions.insert(SettingConditionPair(identifier, condition));
-}
-
-bool CSettingConditionsManager::Check(const std::string &condition, const std::string &value /* = "" */, const std::string &settingId /* = "" */) const
-{
-  if (condition.empty())
-    return false;
-
-  std::string tmpCondition = condition;
-  StringUtils::ToLower(tmpCondition);
-
-  // special handling of "isdefined" conditions
-  if (tmpCondition == "isdefined")
-  {
-    std::string tmpValue = value;
-    StringUtils::ToLower(tmpValue);
-
-    return m_defines.find(tmpValue) != m_defines.end();
-  }
-
-  SettingConditionMap::const_iterator conditionIt = m_conditions.find(tmpCondition);
-  if (conditionIt == m_conditions.end())
-    return false;
-
-  return conditionIt->second(tmpCondition, value, settingId);
-}
-
-CSettingConditionsManager::CSettingConditionsManager()
-{ }
-
-CSettingConditionsManager::~CSettingConditionsManager()
-{
-  m_conditions.clear();
-  m_defines.clear();
-}
diff --git a/xbmc/settings/SettingConditions.h b/xbmc/settings/SettingConditions.h
deleted file mode 100644 (file)
index d83a633..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <map>
-#include <set>
-#include <string>
-
-#include "SettingDefinitions.h"
-#include "utils/BooleanLogic.h"
-
-class CSettingsManager;
-
-typedef bool (*SettingConditionCheck)(const std::string &condition, const std::string &value, const std::string &settingId);
-
-class ISettingCondition
-{
-public:
-  ISettingCondition(CSettingsManager *settingsManager)
-    : m_settingsManager(settingsManager)
-  { }
-  virtual ~ISettingCondition() { }
-
-  virtual bool Check() const = 0;
-
-protected:
-  CSettingsManager *m_settingsManager;
-};
-
-class CSettingConditionItem : public CBooleanLogicValue, public ISettingCondition
-{
-public:
-  CSettingConditionItem(CSettingsManager *settingsManager = NULL)
-    : ISettingCondition(settingsManager)
-  { }
-  virtual ~CSettingConditionItem() { }
-  
-  virtual bool Deserialize(const TiXmlNode *node);
-  virtual const char* GetTag() const { return SETTING_XML_ELM_CONDITION; }
-  virtual bool Check() const;
-
-protected:
-  std::string m_name;
-  std::string m_setting;
-};
-
-class CSettingConditionCombination : public CBooleanLogicOperation, public ISettingCondition
-{
-public:
-  CSettingConditionCombination(CSettingsManager *settingsManager = NULL)
-    : ISettingCondition(settingsManager)
-  { }
-  virtual ~CSettingConditionCombination() { }
-
-  virtual bool Check() const;
-
-private:
-  virtual CBooleanLogicOperation* newOperation() { return new CSettingConditionCombination(m_settingsManager); }
-  virtual CBooleanLogicValue* newValue() { return new CSettingConditionItem(m_settingsManager); }
-};
-
-class CSettingCondition : public CBooleanLogic, public ISettingCondition
-{
-public:
-  CSettingCondition(CSettingsManager *settingsManager = NULL);
-  virtual ~CSettingCondition() { }
-
-  virtual bool Check() const;
-};
-
-class CSettingConditionsManager
-{
-public:
-  CSettingConditionsManager();
-  virtual ~CSettingConditionsManager();
-
-  void AddCondition(const std::string &condition);
-  void AddCondition(const std::string &identifier, SettingConditionCheck condition);
-
-  bool Check(const std::string &condition, const std::string &value = "", const std::string &settingId = "") const;
-
-private:
-  CSettingConditionsManager(const CSettingConditionsManager&);
-  CSettingConditionsManager const& operator=(CSettingConditionsManager const&);
-  
-  typedef std::pair<std::string, SettingConditionCheck> SettingConditionPair;
-  typedef std::map<std::string, SettingConditionCheck> SettingConditionMap;
-
-  SettingConditionMap m_conditions;
-  std::set<std::string> m_defines;
-};
index afd9889..92e64fa 100644 (file)
@@ -21,7 +21,7 @@
 #include <vector>
 
 #include "SettingControl.h"
-#include "settings/SettingDefinitions.h"
+#include "settings/lib/SettingDefinitions.h"
 #include "utils/log.h"
 #include "utils/StringUtils.h"
 #include "utils/XBMCTinyXML.h"
@@ -146,6 +146,7 @@ bool CSettingControlList::Deserialize(const TiXmlNode *node, bool update /* = fa
     return false;
   
   XMLUtils::GetInt(node, SETTING_XML_ELM_CONTROL_HEADING, m_heading);
+  XMLUtils::GetBoolean(node, SETTING_XML_ELM_CONTROL_MULTISELECT, m_multiselect);
 
   return true;
 }
index 0092a69..4d9901d 100644 (file)
  *
  */
 
-#include "ISettingControl.h"
+#include "settings/lib/ISettingControl.h"
 
 #define SETTING_XML_ELM_CONTROL_FORMATLABEL  "formatlabel"
 #define SETTING_XML_ELM_CONTROL_HIDDEN       "hidden"
 #define SETTING_XML_ELM_CONTROL_VERIFYNEW    "verifynew"
 #define SETTING_XML_ELM_CONTROL_HEADING      "heading"
 #define SETTING_XML_ELM_CONTROL_HIDEVALUE    "hidevalue"
+#define SETTING_XML_ELM_CONTROL_MULTISELECT  "multiselect"
 
 class CSettingControlCheckmark : public ISettingControl
 {
@@ -125,7 +126,8 @@ class CSettingControlList : public ISettingControl
 {
 public:
   CSettingControlList()
-    : m_heading(-1)
+    : m_heading(-1),
+      m_multiselect(false)
   { }
   virtual ~CSettingControlList() { }
 
@@ -134,9 +136,11 @@ public:
   virtual bool Deserialize(const TiXmlNode *node, bool update = false);
   
   int GetHeading() const { return m_heading; }
+  bool CanMultiSelect() const { return m_multiselect; }
 
 protected:
   virtual bool SetFormat(const std::string &format);
   
   int m_heading;
+  bool m_multiselect;
 };
diff --git a/xbmc/settings/SettingDefinitions.h b/xbmc/settings/SettingDefinitions.h
deleted file mode 100644 (file)
index e4eff84..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#define SETTING_XML_ROOT              "settings"
-
-#define SETTING_XML_ELM_SECTION       "section"
-#define SETTING_XML_ELM_CATEGORY      "category"
-#define SETTING_XML_ELM_GROUP         "group"
-#define SETTING_XML_ELM_SETTING       "setting"
-#define SETTING_XML_ELM_VISIBLE       "visible"
-#define SETTING_XML_ELM_REQUIREMENT   "requirement"
-#define SETTING_XML_ELM_CONDITION     "condition"
-#define SETTING_XML_ELM_LEVEL         "level"
-#define SETTING_XML_ELM_DEFAULT       "default"
-#define SETTING_XML_ELM_VALUE         "value"
-#define SETTING_XML_ELM_CONTROL       "control"
-#define SETTING_XML_ELM_CONSTRAINTS   "constraints"
-#define SETTING_XML_ELM_OPTIONS       "options"
-#define SETTING_XML_ELM_OPTION        "option"
-#define SETTING_XML_ELM_MINIMUM       "minimum"
-#define SETTING_XML_ELM_STEP          "step"
-#define SETTING_XML_ELM_MAXIMUM       "maximum"
-#define SETTING_XML_ELM_ALLOWEMPTY    "allowempty"
-#define SETTING_XML_ELM_DEPENDENCIES  "dependencies"
-#define SETTING_XML_ELM_DEPENDENCY    "dependency"
-#define SETTING_XML_ELM_UPDATES       "updates"
-#define SETTING_XML_ELM_UPDATE        "update"
-#define SETTING_XML_ELM_ACCESS        "access"
-
-#define SETTING_XML_ATTR_ID           "id"
-#define SETTING_XML_ATTR_LABEL        "label"
-#define SETTING_XML_ATTR_HELP         "help"
-#define SETTING_XML_ATTR_TYPE         "type"
-#define SETTING_XML_ATTR_PARENT       "parent"
-#define SETTING_XML_ATTR_FORMAT       "format"
-#define SETTING_XML_ATTR_DELAYED      "delayed"
-#define SETTING_XML_ATTR_ON           "on"
-#define SETTING_XML_ATTR_OPERATOR     "operator"
-#define SETTING_XML_ATTR_NAME         "name"
-#define SETTING_XML_ATTR_SETTING      "setting"
-#define SETTING_XML_ATTR_BEFORE       "before"
-#define SETTING_XML_ATTR_AFTER        "after"
diff --git a/xbmc/settings/SettingDependency.cpp b/xbmc/settings/SettingDependency.cpp
deleted file mode 100644 (file)
index 363acc2..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdlib.h>
-
-#include "SettingDependency.h"
-#include "Setting.h"
-#include "SettingDefinitions.h"
-#include "SettingsManager.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/XBMCTinyXML.h"
-
-bool CSettingDependencyCondition::Deserialize(const TiXmlNode *node)
-{
-  if (!CSettingConditionItem::Deserialize(node))
-    return false;
-
-  const TiXmlElement *elem = node->ToElement();
-  if (elem == NULL)
-    return false;
-
-  m_target = SettingDependencyTargetSetting;
-  const char *strTarget = elem->Attribute(SETTING_XML_ATTR_ON);
-  if (strTarget != NULL && !setTarget(strTarget))
-  {
-    CLog::Log(LOGWARNING, "CSettingDependencyCondition: unknown target \"%s\"", strTarget);
-    return false;
-  }
-
-  if (m_target != SettingDependencyTargetSetting && m_name.empty())
-  {
-    CLog::Log(LOGWARNING, "CSettingDependencyCondition: missing name for dependency");
-    return false;
-  }
-
-  if (m_target == SettingDependencyTargetSetting)
-  {
-    if (m_setting.empty())
-    {
-      CLog::Log(LOGWARNING, "CSettingDependencyCondition: missing setting for dependency");
-      return false;
-    }
-
-    m_name = m_setting;
-  }
-
-  m_operator = SettingDependencyOperatorEquals;
-  const char *strOperator = elem->Attribute(SETTING_XML_ATTR_OPERATOR);
-  if (strOperator != NULL && !setOperator(strOperator))
-  {
-    CLog::Log(LOGWARNING, "CSettingDependencyCondition: unknown operator \"%s\"", strOperator);
-    return false;
-  }
-
-  return true;
-}
-
-bool CSettingDependencyCondition::Check() const
-{
-  if (m_name.empty() ||
-      m_target == SettingDependencyTargetNone ||
-      m_operator == SettingDependencyOperatorNone ||
-      m_settingsManager == NULL)
-    return false;
-  
-  bool result = false;
-  switch (m_target)
-  {
-    case SettingDependencyTargetSetting:
-    {
-      if (m_setting.empty())
-        return false;
-
-      const CSetting *setting = m_settingsManager->GetSetting(m_setting);
-      if (setting == NULL)
-      {
-        CLog::Log(LOGWARNING, "CSettingDependencyCondition: unable to check condition on unknown setting \"%s\"", m_setting.c_str());
-        return false;
-      }
-
-      if (m_operator == SettingDependencyOperatorEquals)
-        result = setting->Equals(m_value);
-      else if (m_operator == SettingDependencyOperatorContains)
-        result = (setting->ToString().find(m_value) != std::string::npos);
-
-      break;
-    }
-
-    case SettingDependencyTargetProperty:
-    {
-      result = m_settingsManager->GetConditions().Check(m_name, m_value, m_setting);
-      break;
-    }
-
-    default:
-      return false;
-  }
-
-  return result == !m_negated;
-}
-
-bool CSettingDependencyCondition::setTarget(const std::string &target)
-{
-  if (StringUtils::EqualsNoCase(target, "setting"))
-    m_target = SettingDependencyTargetSetting;
-  else if (StringUtils::EqualsNoCase(target, "property"))
-    m_target = SettingDependencyTargetProperty;
-  else
-    return false;
-
-  return true;
-}
-
-bool CSettingDependencyCondition::setOperator(const std::string &op)
-{
-  size_t length = 0;
-  if (StringUtils::EndsWithNoCase(op, "is"))
-  {
-    m_operator = SettingDependencyOperatorEquals;
-    length = 2;
-  }
-  else if (StringUtils::EndsWithNoCase(op, "contains"))
-  {
-    m_operator = SettingDependencyOperatorContains;
-    length = 8;
-  }
-
-  if (op.size() > length + 1)
-    return false;
-  if (op.size() == length + 1)
-  {
-    if (!StringUtils::StartsWith(op, "!"))
-      return false;
-    m_negated = true;
-  }
-
-  return true;
-}
-
-bool CSettingDependencyConditionCombination::Deserialize(const TiXmlNode *node)
-{
-  if (node == NULL)
-    return false;
-
-  size_t numOperations = m_operations.size();
-  size_t numValues = m_values.size();
-
-  if (!CSettingConditionCombination::Deserialize(node))
-    return false;
-
-  if (numOperations < m_operations.size())
-  {
-    for (size_t i = numOperations; i < m_operations.size(); i++)
-    {
-      if (m_operations[i] == NULL)
-        continue;
-
-      CSettingDependencyConditionCombination *combination = static_cast<CSettingDependencyConditionCombination*>(m_operations[i].get());
-      if (combination == NULL)
-        continue;
-
-      const std::set<std::string>& settings = combination->GetSettings();
-      m_settings.insert(settings.begin(), settings.end());
-    }
-  }
-
-  if (numValues < m_values.size())
-  {
-    for (size_t i = numValues; i < m_values.size(); i++)
-    {
-      if (m_values[i] == NULL)
-        continue;
-
-      CSettingDependencyCondition *condition = static_cast<CSettingDependencyCondition*>(m_values[i].get());
-      if (condition == NULL)
-        continue;
-
-      std::string settingId = condition->GetSetting();
-      if (!settingId.empty())
-        m_settings.insert(settingId);
-    }
-  }
-
-  return true;
-}
-
-CSettingDependency::CSettingDependency(CSettingsManager *settingsManager /* = NULL */)
-  : CSettingCondition(settingsManager),
-    m_type(SettingDependencyTypeNone)
-{
-  m_operation = CBooleanLogicOperationPtr(new CSettingDependencyConditionCombination(m_settingsManager));
-}
-
-bool CSettingDependency::Deserialize(const TiXmlNode *node)
-{
-  if (node == NULL)
-    return false;
-
-  const TiXmlElement *elem = node->ToElement();
-  if (elem == NULL)
-    return false;
-  
-  const char *strType = elem->Attribute(SETTING_XML_ATTR_TYPE);
-  if (strType == NULL || strlen(strType) <= 0 || !setType(strType))
-  {
-    CLog::Log(LOGWARNING, "CSettingDependency: missing or unknown dependency type definition");
-    return false;
-  }
-
-  return CSettingCondition::Deserialize(node);
-}
-
-std::set<std::string> CSettingDependency::GetSettings() const
-{
-  if (m_operation == NULL)
-    return std::set<std::string>();
-
-  CSettingDependencyConditionCombination *combination = static_cast<CSettingDependencyConditionCombination*>(m_operation.get());
-  if (combination == NULL)
-    return std::set<std::string>();
-
-  return combination->GetSettings();
-}
-
-bool CSettingDependency::setType(const std::string &type)
-{
-  if (StringUtils::EqualsNoCase(type, "enable"))
-    m_type = SettingDependencyTypeEnable;
-  else if (StringUtils::EqualsNoCase(type, "update"))
-    m_type = SettingDependencyTypeUpdate;
-  else if (StringUtils::EqualsNoCase(type, "visible"))
-    m_type = SettingDependencyTypeVisible;
-  else
-    return false;
-
-  return true;
-}
diff --git a/xbmc/settings/SettingDependency.h b/xbmc/settings/SettingDependency.h
deleted file mode 100644 (file)
index 7cf3db1..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <list>
-#include <set>
-#include <string>
-
-#include "SettingConditions.h"
-#include "utils/BooleanLogic.h"
-
-typedef enum {
-  SettingDependencyTypeNone   = 0,
-  SettingDependencyTypeEnable,
-  SettingDependencyTypeUpdate,
-  SettingDependencyTypeVisible
-} SettingDependencyType;
-
-typedef enum {
-  SettingDependencyOperatorNone     = 0,
-  SettingDependencyOperatorEquals,
-  SettingDependencyOperatorContains
-} SettingDependencyOperator;
-
-typedef enum {
-  SettingDependencyTargetNone     = 0,
-  SettingDependencyTargetSetting,
-  SettingDependencyTargetProperty
-} SettingDependencyTarget;
-
-class CSettingDependencyCondition : public CSettingConditionItem
-{
-public:
-  CSettingDependencyCondition(CSettingsManager *settingsManager = NULL)
-    : CSettingConditionItem(settingsManager),
-      m_target(SettingDependencyTargetNone),  
-      m_operator(SettingDependencyOperatorEquals)      
-  { }
-  virtual ~CSettingDependencyCondition() { }
-
-  virtual bool Deserialize(const TiXmlNode *node);
-  virtual bool Check() const;
-  
-  const std::string& GetName() const { return m_name; }
-  const std::string& GetSetting() const { return m_setting; }
-  const SettingDependencyTarget GetTarget() const { return m_target; }
-  const SettingDependencyOperator GetOperator() const { return m_operator; }
-
-private:
-  bool setTarget(const std::string &target);
-  bool setOperator(const std::string &op);
-  
-  SettingDependencyTarget m_target;
-  SettingDependencyOperator m_operator;
-};
-
-class CSettingDependencyConditionCombination : public CSettingConditionCombination
-{
-public:
-  CSettingDependencyConditionCombination(CSettingsManager *settingsManager = NULL)
-    : CSettingConditionCombination(settingsManager)
-  { }
-  virtual ~CSettingDependencyConditionCombination() { }
-
-  virtual bool Deserialize(const TiXmlNode *node);
-
-  const std::set<std::string>& GetSettings() const { return m_settings; }
-
-private:
-  virtual CBooleanLogicOperation* newOperation() { return new CSettingDependencyConditionCombination(m_settingsManager); }
-  virtual CBooleanLogicValue* newValue() { return new CSettingDependencyCondition(m_settingsManager); }
-
-  std::set<std::string> m_settings;
-};
-
-class CSettingDependency : public CSettingCondition
-{
-public:
-  CSettingDependency(CSettingsManager *settingsManager = NULL);
-  virtual ~CSettingDependency() { }
-
-  virtual bool Deserialize(const TiXmlNode *node);
-
-  SettingDependencyType GetType() const { return m_type; }
-  std::set<std::string> GetSettings() const;
-
-private:
-  bool setType(const std::string &type);
-
-  SettingDependencyType m_type;
-};
-
-typedef std::list<CSettingDependency> SettingDependencies;
-typedef std::map<std::string, SettingDependencies> SettingDependencyMap;
index eab1ebb..b331c08 100644 (file)
@@ -19,7 +19,7 @@
  */
 
 #include "SettingPath.h"
-#include "settings/SettingsManager.h"
+#include "settings/lib/SettingsManager.h"
 #include "utils/log.h"
 #include "utils/StringUtils.h"
 #include "utils/XBMCTinyXML.h"
@@ -39,6 +39,11 @@ CSettingPath::CSettingPath(const std::string &id, const CSettingPath &setting)
   copy(setting);
 }
 
+CSetting* CSettingPath::Clone(const std::string &id) const
+{
+  return new CSettingPath(id, *this);
+}
+
 bool CSettingPath::Deserialize(const TiXmlNode *node, bool update /* = false */)
 {
   CExclusiveLock lock(m_critical);
index 9300b93..d4bc580 100644 (file)
@@ -21,7 +21,7 @@
 
 #include <vector>
 
-#include "Setting.h"
+#include "settings/lib/Setting.h"
 
 class CSettingPath : public CSettingString
 {
@@ -30,6 +30,8 @@ public:
   CSettingPath(const std::string &id, const CSettingPath &setting);
   virtual ~CSettingPath() { }
 
+  virtual CSetting* Clone(const std::string &id) const;
+
   virtual bool Deserialize(const TiXmlNode *node, bool update = false);
   virtual bool SetValue(const std::string &value);
 
diff --git a/xbmc/settings/SettingRequirement.cpp b/xbmc/settings/SettingRequirement.cpp
deleted file mode 100644 (file)
index 3b57eb7..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "SettingRequirement.h"
-#include "SettingsManager.h"
-
-bool CSettingRequirementCondition::Check() const
-{
-  if (m_settingsManager == NULL)
-    return false;
-
-  bool found = m_settingsManager->GetConditions().Check("IsDefined", m_value);
-  if (m_negated)
-    return !found;
-
-  return found;
-}
-
-bool CSettingRequirementConditionCombination::Check() const
-{
-  if (m_operations.empty() && m_values.empty())
-    return true;
-
-  return CSettingConditionCombination::Check();
-}
-
-CSettingRequirement::CSettingRequirement(CSettingsManager *settingsManager /* = NULL */)
-  : CSettingCondition(settingsManager)
-{
-  m_operation = CBooleanLogicOperationPtr(new CSettingRequirementConditionCombination(m_settingsManager));
-}
diff --git a/xbmc/settings/SettingRequirement.h b/xbmc/settings/SettingRequirement.h
deleted file mode 100644 (file)
index 3534761..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <set>
-#include <string>
-
-#include "SettingConditions.h"
-
-class CSettingRequirementCondition : public CSettingConditionItem
-{
-public:
-  CSettingRequirementCondition(CSettingsManager *settingsManager = NULL)
-    : CSettingConditionItem(settingsManager)
-  { }
-  virtual ~CSettingRequirementCondition() { }
-
-  virtual bool Check() const;
-};
-
-class CSettingRequirementConditionCombination : public CSettingConditionCombination
-{
-public:
-  CSettingRequirementConditionCombination(CSettingsManager *settingsManager = NULL)
-    : CSettingConditionCombination(settingsManager)
-  { }
-  virtual ~CSettingRequirementConditionCombination() { }
-
-  virtual bool Check() const;
-
-private:
-  virtual CBooleanLogicOperation* newOperation() { return new CSettingRequirementConditionCombination(m_settingsManager); }
-  virtual CBooleanLogicValue* newValue() { return new CSettingRequirementCondition(m_settingsManager); }
-};
-
-class CSettingRequirement : public CSettingCondition
-{
-public:
-  CSettingRequirement(CSettingsManager *settingsManager = NULL);
-  virtual ~CSettingRequirement() { }
-};
diff --git a/xbmc/settings/SettingSection.cpp b/xbmc/settings/SettingSection.cpp
deleted file mode 100644 (file)
index 87d85bd..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "SettingSection.h"
-#include "SettingDefinitions.h"
-#include "SettingsManager.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/XBMCTinyXML.h"
-
-template<class T> void addISetting(const TiXmlNode *node, const T &item, std::vector<T> &items)
-{
-  if (node == NULL)
-    return;
-
-  const TiXmlElement *element = node->ToElement();
-  if (element == NULL)
-    return;
-
-  // check if there is a "before" or "after" attribute to place the setting at a specific position
-  int position = -1; // -1 => end, 0 => before, 1 => after
-  const char *positionId = element->Attribute(SETTING_XML_ATTR_BEFORE);
-  if (positionId != NULL && strlen(positionId) > 0)
-    position = 0;
-  else if ((positionId = element->Attribute(SETTING_XML_ATTR_AFTER)) != NULL && strlen(positionId) > 0)
-    position = 1;
-
-  if (positionId != NULL && strlen(positionId) > 0 && position >= 0)
-  {
-    for (typename std::vector<T>::iterator it = items.begin(); it != items.end(); ++it)
-    {
-      if (!StringUtils::EqualsNoCase((*it)->GetId(), positionId))
-        continue;
-
-      typename std::vector<T>::iterator positionIt = it;
-      if (position == 1)
-        ++positionIt;
-
-      items.insert(positionIt, item);
-      return;
-    }
-  }
-
-  items.push_back(item);
-}
-
-CSettingGroup::CSettingGroup(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : ISetting(id, settingsManager)
-{ }
-
-CSettingGroup::~CSettingGroup()
-{
-  for (SettingList::const_iterator setting = m_settings.begin(); setting != m_settings.end(); ++setting)
-    delete *setting;
-  m_settings.clear();
-}
-
-bool CSettingGroup::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  // handle <visible> conditions
-  if (!ISetting::Deserialize(node, update))
-    return false;
-
-  const TiXmlElement *settingElement = node->FirstChildElement(SETTING_XML_ELM_SETTING);
-  while (settingElement != NULL)
-  {
-    std::string settingId;
-    if (CSettingCategory::DeserializeIdentification(settingElement, settingId))
-    {
-      CSetting *setting = NULL;
-      for (SettingList::iterator itSetting = m_settings.begin(); itSetting != m_settings.end(); ++itSetting)
-      {
-        if ((*itSetting)->GetId() == settingId)
-        {
-          setting = *itSetting;
-          break;
-        }
-      }
-      
-      update = (setting != NULL);
-      if (!update)
-      {
-        const char* settingType = settingElement->Attribute(SETTING_XML_ATTR_TYPE);
-        if (settingType == NULL || strlen(settingType) <= 0)
-        {
-          CLog::Log(LOGERROR, "CSettingGroup: unable to read setting type of \"%s\"", settingId.c_str());
-          return false;
-        }
-
-        setting = m_settingsManager->CreateSetting(settingType, settingId, m_settingsManager);
-        if (setting == NULL)
-          CLog::Log(LOGERROR, "CSettingGroup: unknown setting type \"%s\" of \"%s\"", settingType, settingId.c_str());
-      }
-      
-      if (setting == NULL)
-        CLog::Log(LOGERROR, "CSettingGroup: unable to create new setting \"%s\"", settingId.c_str());
-      else if (!setting->Deserialize(settingElement, update))
-      {
-        CLog::Log(LOGWARNING, "CSettingGroup: unable to read setting \"%s\"", settingId.c_str());
-        if (!update)
-          delete setting;
-      }
-      else if (!update)
-        addISetting(settingElement, setting, m_settings);
-    }
-      
-    settingElement = settingElement->NextSiblingElement(SETTING_XML_ELM_SETTING);
-  }
-    
-  return true;
-}
-
-SettingList CSettingGroup::GetSettings(SettingLevel level) const
-{
-  SettingList settings;
-
-  for (SettingList::const_iterator it = m_settings.begin(); it != m_settings.end(); ++it)
-  {
-    if ((*it)->GetLevel() <= level && (*it)->MeetsRequirements())
-      settings.push_back(*it);
-  }
-
-  return settings;
-}
-
-CSettingCategory::CSettingCategory(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : ISetting(id, settingsManager),
-    m_label(-1), m_help(-1),
-    m_accessCondition(settingsManager)
-{ }
-
-CSettingCategory::~CSettingCategory()
-{
-  for (SettingGroupList::const_iterator it = m_groups.begin(); it != m_groups.end(); ++it)
-    delete *it;
-
-  m_groups.clear();
-}
-
-bool CSettingCategory::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  // handle <visible> conditions
-  if (!ISetting::Deserialize(node, update))
-    return false;
-    
-  const TiXmlElement *element = node->ToElement();
-  if (element == NULL)
-    return false;
-    
-  int tmp = -1;
-  if (element->QueryIntAttribute(SETTING_XML_ATTR_LABEL, &tmp) == TIXML_SUCCESS && tmp > 0)
-    m_label = tmp;
-  if (element->QueryIntAttribute(SETTING_XML_ATTR_HELP, &tmp) == TIXML_SUCCESS && tmp > 0)
-    m_help = tmp;
-
-  const TiXmlNode *accessNode = node->FirstChild(SETTING_XML_ELM_ACCESS);
-  if (accessNode != NULL && !m_accessCondition.Deserialize(accessNode))
-    return false;
-    
-  const TiXmlNode *groupNode = node->FirstChildElement(SETTING_XML_ELM_GROUP);
-  while (groupNode != NULL)
-  {
-    std::string groupId;
-    if (CSettingGroup::DeserializeIdentification(groupNode, groupId))
-    {
-      CSettingGroup *group = NULL;
-      for (SettingGroupList::iterator itGroup = m_groups.begin(); itGroup != m_groups.end(); ++itGroup)
-      {
-        if ((*itGroup)->GetId() == groupId)
-        {
-          group = *itGroup;
-          break;
-        }
-      }
-      
-      update = (group != NULL);
-      if (!update)
-        group = new CSettingGroup(groupId, m_settingsManager);
-
-      if (group->Deserialize(groupNode, update))
-      {
-        if (!update)
-          addISetting(groupNode, group, m_groups);
-      }
-      else
-      {
-        CLog::Log(LOGWARNING, "CSettingCategory: unable to read group \"%s\"", groupId.c_str());
-        if (!update)
-          delete group;
-      }
-    }
-      
-    groupNode = groupNode->NextSibling(SETTING_XML_ELM_GROUP);
-  }
-    
-  return true;
-}
-
-SettingGroupList CSettingCategory::GetGroups(SettingLevel level) const
-{
-  SettingGroupList groups;
-
-  for (SettingGroupList::const_iterator it = m_groups.begin(); it != m_groups.end(); ++it)
-  {
-    if ((*it)->MeetsRequirements() && (*it)->IsVisible() && (*it)->GetSettings(level).size() > 0)
-      groups.push_back(*it);
-  }
-
-  return groups;
-}
-
-bool CSettingCategory::CanAccess() const
-{
-  return m_accessCondition.Check();
-}
-
-CSettingSection::CSettingSection(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
-  : ISetting(id, settingsManager),
-    m_label(-1), m_help(-1)
-{ }
-
-CSettingSection::~CSettingSection()
-{
-  for (SettingCategoryList::const_iterator it = m_categories.begin(); it != m_categories.end(); ++it)
-    delete *it;
-
-  m_categories.clear();
-}
-  
-bool CSettingSection::Deserialize(const TiXmlNode *node, bool update /* = false */)
-{
-  // handle <visible> conditions
-  if (!ISetting::Deserialize(node, update))
-    return false;
-    
-  const TiXmlElement *element = node->ToElement();
-  if (element == NULL)
-    return false;
-
-  int tmp = -1;
-  if (element->QueryIntAttribute(SETTING_XML_ATTR_LABEL, &tmp) == TIXML_SUCCESS && tmp > 0)
-    m_label = tmp;
-  if (element->QueryIntAttribute(SETTING_XML_ATTR_HELP, &tmp) == TIXML_SUCCESS && tmp > 0)
-    m_help = tmp;
-    
-  const TiXmlNode *categoryNode = node->FirstChild(SETTING_XML_ELM_CATEGORY);
-  while (categoryNode != NULL)
-  {
-    std::string categoryId;
-    if (CSettingCategory::DeserializeIdentification(categoryNode, categoryId))
-    {
-      CSettingCategory *category = NULL;
-      for (SettingCategoryList::iterator itCategory = m_categories.begin(); itCategory != m_categories.end(); ++itCategory)
-      {
-        if ((*itCategory)->GetId() == categoryId)
-        {
-          category = *itCategory;
-          break;
-        }
-      }
-      
-      update = (category != NULL);
-      if (!update)
-        category = new CSettingCategory(categoryId, m_settingsManager);
-
-      if (category->Deserialize(categoryNode, update))
-      {
-        if (!update)
-          addISetting(categoryNode, category, m_categories);
-      }
-      else
-      {
-        CLog::Log(LOGWARNING, "CSettingSection: unable to read category \"%s\"", categoryId.c_str());
-        if (!update)
-          delete category;
-      }
-    }
-      
-    categoryNode = categoryNode->NextSibling(SETTING_XML_ELM_CATEGORY);
-  }
-    
-  return true;
-}
-
-SettingCategoryList CSettingSection::GetCategories(SettingLevel level) const
-{
-  SettingCategoryList categories;
-
-  for (SettingCategoryList::const_iterator it = m_categories.begin(); it != m_categories.end(); ++it)
-  {
-    if ((*it)->MeetsRequirements() && (*it)->IsVisible() && (*it)->GetGroups(level).size() > 0)
-      categories.push_back(*it);
-  }
-
-  return categories;
-}
diff --git a/xbmc/settings/SettingSection.h b/xbmc/settings/SettingSection.h
deleted file mode 100644 (file)
index 359e5b8..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <string>
-#include <vector>
-
-#include "ISetting.h"
-#include "Setting.h"
-#include "SettingCategoryAccess.h"
-
-class CSettingsManager;
-
-/*!
- \ingroup settings
- \brief Group of settings being part of a category
- \sa CSettingCategory
- \sa CSetting
- */
-class CSettingGroup : public ISetting
-{
-public:
-  /*!
-   \brief Creates a new setting group with the given identifier.
-
-   \param id Identifier of the setting group
-   \param settingsManager Reference to the settings manager
-   */
-  CSettingGroup(const std::string &id, CSettingsManager *settingsManager = NULL);
-  ~CSettingGroup();
-
-  // implementation of ISetting
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  /*!
-   \brief Gets the full list of settings belonging to the setting group.
-
-   \return Full list of settings belonging to the setting group
-   */
-  const SettingList& GetSettings() const { return m_settings; }
-  /*!
-   \brief Gets the list of settings assigned to the given setting level (or
-   below) and that meet the requirements conditions belonging to the setting
-   group.
-
-   \param level Level the settings should be assigned to
-   \return List of settings belonging to the setting group
-   */
-  SettingList GetSettings(SettingLevel level) const;
-
-private:
-  SettingList m_settings;
-};
-
-typedef std::vector<CSettingGroup *> SettingGroupList;
-
-/*!
- \ingroup settings
- \brief Category of groups of settings being part of a section
- \sa CSettingSection
- \sa CSettingGroup
- */
-class CSettingCategory : public ISetting
-{
-public:
-  /*!
-   \brief Creates a new setting category with the given identifier.
-
-   \param id Identifier of the setting category
-   \param settingsManager Reference to the settings manager
-   */
-  CSettingCategory(const std::string &id, CSettingsManager *settingsManager = NULL);
-  ~CSettingCategory();
-
-  // implementation of ISetting
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  /*!
-   \brief Gets the localizeable label ID of the setting category.
-
-   \return Localizeable label ID of the setting category
-   */
-  const int GetLabel() const { return m_label; }
-  /*!
-   \brief Sets the localizeable label ID of the setting category.
-
-   \param label Localizeable label ID of the setting category
-   */
-  void SetLabel(int label) { m_label = label; }
-  /*!
-   \brief Gets the localizeable help ID of the setting category.
-
-   \return Localizeable help ID of the setting category
-   */
-  const int GetHelp() const { return m_help; }
-  /*!
-   \brief Sets the localizeable help ID of the setting category.
-
-   \param label Localizeable help ID of the setting category
-   */
-  void SetHelp(int help) { m_help = help; }
-  /*!
-   \brief Gets the full list of setting groups belonging to the setting
-   category.
-
-   \return Full list of setting groups belonging to the setting category
-   */
-  const SettingGroupList& GetGroups() const { return m_groups; }
-  /*!
-   \brief Gets the list of setting groups belonging to the setting category
-   that contain settings assigned to the given setting level (or below) and
-   that meet the requirements and visibility conditions.
-
-   \param level Level the settings should be assigned to
-   \return List of setting groups belonging to the setting category
-   */
-  SettingGroupList GetGroups(SettingLevel level) const;
-
-  /*!
-   \brief Whether the setting category can be accessed or not.
-
-   \return True if the setting category can be accessed, false otherwise
-   */
-  bool CanAccess() const;
-
-private:
-  int m_label;
-  int m_help;
-  SettingGroupList m_groups;
-  CSettingCategoryAccess m_accessCondition;
-};
-
-typedef std::vector<CSettingCategory *> SettingCategoryList;
-
-/*!
- \ingroup settings
- \brief Section of setting categories
- \sa CSettings
- \sa CSettingCategory
- */
-class CSettingSection : public ISetting
-{
-public:
-  /*!
-   \brief Creates a new setting section with the given identifier.
-
-   \param id Identifier of the setting section
-   \param settingsManager Reference to the settings manager
-   */
-  CSettingSection(const std::string &id, CSettingsManager *settingsManager = NULL);
-  ~CSettingSection();
-
-  // implementation of ISetting
-  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
-
-  /*!
-   \brief Gets the localizeable label ID of the setting section.
-
-   \return Localizeable label ID of the setting section
-   */
-  const int GetLabel() const { return m_label; }
-  /*!
-   \brief Sets the localizeable label ID of the setting section.
-
-   \param label Localizeable label ID of the setting section
-   */
-  void SetLabel(int label) { m_label = label; }
-  /*!
-   \brief Gets the localizeable help ID of the setting section.
-
-   \return Localizeable help ID of the setting section
-   */
-  const int GetHelp() const { return m_help; }
-  /*!
-   \brief Sets the localizeable help ID of the setting section.
-
-   \param label Localizeable help ID of the setting section
-   */
-  void SetHelp(int help) { m_help = help; }
-  /*!
-   \brief Gets the full list of setting categories belonging to the setting
-   section.
-
-   \return Full list of setting categories belonging to the setting section
-   */
-  const SettingCategoryList& GetCategories() const { return m_categories; }
-  /*!
-   \brief Gets the list of setting categories belonging to the setting section
-   that contain settings assigned to the given setting level (or below) and
-   that meet the requirements and visibility conditions.
-
-   \param level Level the settings should be assigned to
-   \return List of setting categories belonging to the setting section
-   */
-  SettingCategoryList GetCategories(SettingLevel level) const;
-
-private:
-  int m_label;
-  int m_help;
-  SettingCategoryList m_categories;
-};
diff --git a/xbmc/settings/SettingUpdate.cpp b/xbmc/settings/SettingUpdate.cpp
deleted file mode 100644 (file)
index e1c9513..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "SettingUpdate.h"
-#include "SettingDefinitions.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/XBMCTinyXML.h"
-
-CSettingUpdate::CSettingUpdate()
-  : m_type(SettingUpdateTypeNone)
-{ }
-
-bool CSettingUpdate::operator<(const CSettingUpdate& rhs) const
-{
-  return m_type < rhs.m_type && m_value < rhs.m_value;
-}
-
-bool CSettingUpdate::Deserialize(const TiXmlNode *node)
-{
-  if (node == NULL)
-    return false;
-
-  const TiXmlElement *elem = node->ToElement();
-  if (elem == NULL)
-    return false;
-  
-  const char *strType = elem->Attribute(SETTING_XML_ATTR_TYPE);
-  if (strType == NULL || strlen(strType) <= 0 || !setType(strType))
-  {
-    CLog::Log(LOGWARNING, "CSettingUpdate: missing or unknown update type definition");
-    return false;
-  }
-
-  if (m_type == SettingUpdateTypeRename)
-  {
-    if (node->FirstChild() == NULL || node->FirstChild()->Type() != TiXmlNode::TINYXML_TEXT)
-    {
-      CLog::Log(LOGWARNING, "CSettingUpdate: missing or invalid setting id for rename update definition");
-      return false;
-    }
-
-    m_value = node->FirstChild()->ValueStr();
-  }
-
-  return true;
-}
-
-bool CSettingUpdate::setType(const std::string &type)
-{
-  if (StringUtils::EqualsNoCase(type, "change"))
-    m_type = SettingUpdateTypeChange;
-  else if (StringUtils::EqualsNoCase(type, "rename"))
-    m_type = SettingUpdateTypeRename;
-  else
-    return false;
-
-  return true;
-}
diff --git a/xbmc/settings/SettingUpdate.h b/xbmc/settings/SettingUpdate.h
deleted file mode 100644 (file)
index c8ecba2..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <string>
-
-class TiXmlNode;
-
-typedef enum {
-  SettingUpdateTypeNone   = 0,
-  SettingUpdateTypeRename,
-  SettingUpdateTypeChange
-} SettingUpdateType;
-
-class CSettingUpdate
-{
-public:
-  CSettingUpdate();
-  virtual ~CSettingUpdate() { }
-
-  bool operator<(const CSettingUpdate& rhs) const;
-
-  virtual bool Deserialize(const TiXmlNode *node);
-
-  SettingUpdateType GetType() const { return m_type; }
-  const std::string& GetValue() const { return m_value; }
-
-private:
-  bool setType(const std::string &type);
-
-  SettingUpdateType m_type;
-  std::string m_value;
-};
index 3c4310c..13fd236 100644 (file)
@@ -70,9 +70,9 @@
 #include "settings/MediaSourceSettings.h"
 #include "settings/SettingAddon.h"
 #include "settings/SettingControl.h"
-#include "settings/SettingsManager.h"
 #include "settings/SettingPath.h"
 #include "settings/SkinSettings.h"
+#include "settings/lib/SettingsManager.h"
 #include "threads/SingleLock.h"
 #include "utils/CharsetConverter.h"
 #include "utils/log.h"
@@ -491,6 +491,12 @@ CSetting* CSettings::GetSetting(const std::string &id) const
   return m_settingsManager->GetSetting(id);
 }
 
+std::vector<CSettingSection*> CSettings::GetSections() const
+{
+  CSingleLock lock(m_critical);
+  return m_settingsManager->GetSections();
+}
+
 CSettingSection* CSettings::GetSection(const std::string &section) const
 {
   CSingleLock lock(m_critical);
@@ -549,11 +555,115 @@ bool CSettings::SetString(const std::string &id, const std::string &value)
   return m_settingsManager->SetString(id, value);
 }
 
+std::vector<CVariant> CSettings::GetList(const std::string &id) const
+{
+  CSetting *setting = m_settingsManager->GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeList)
+    return std::vector<CVariant>();
+
+  CSettingList *listSetting = static_cast<CSettingList*>(setting);
+  return ListToValues(listSetting, listSetting->GetValue());
+}
+
+bool CSettings::SetList(const std::string &id, const std::vector<CVariant> &value)
+{
+  CSetting *setting = m_settingsManager->GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeList)
+    return false;
+
+  CSettingList *listSetting = static_cast<CSettingList*>(setting);
+  SettingPtrList newValues;
+  bool ret = true;
+  int index = 0;
+  for (std::vector<CVariant>::const_iterator itValue = value.begin(); itValue != value.end(); ++itValue)
+  {
+    CSetting *settingValue = listSetting->GetDefinition()->Clone(StringUtils::Format("%s.%d", listSetting->GetId().c_str(), index++));
+    if (settingValue == NULL)
+      return false;
+
+    switch (listSetting->GetElementType())
+    {
+      case SettingTypeBool:
+        if (!itValue->isBoolean())
+          return false;
+        ret = static_cast<CSettingBool*>(settingValue)->SetValue(itValue->asBoolean());
+        break;
+
+      case SettingTypeInteger:
+        if (!itValue->isInteger())
+          return false;
+        ret = static_cast<CSettingInt*>(settingValue)->SetValue(itValue->asInteger());
+        break;
+
+      case SettingTypeNumber:
+        if (!itValue->isDouble())
+          return false;
+        ret = static_cast<CSettingNumber*>(settingValue)->SetValue(itValue->asDouble());
+        break;
+
+      case SettingTypeString:
+        if (!itValue->isString())
+          return false;
+        ret = static_cast<CSettingString*>(settingValue)->SetValue(itValue->asString());
+        break;
+
+      default:
+        ret = false;
+        break;
+    }
+
+    if (!ret)
+    {
+      delete settingValue;
+      return false;
+    }
+
+    newValues.push_back(SettingPtr(settingValue));
+  }
+
+  return listSetting->SetValue(newValues);
+}
+
 bool CSettings::LoadSetting(const TiXmlNode *node, const std::string &settingId)
 {
   return m_settingsManager->LoadSetting(node, settingId);
 }
 
+std::vector<CVariant> CSettings::ListToValues(const CSettingList *setting, const std::vector< boost::shared_ptr<CSetting> > &values)
+{
+  std::vector<CVariant> realValues;
+
+  if (setting == NULL)
+    return realValues;
+
+  for (SettingPtrList::const_iterator it = values.begin(); it != values.end(); ++it)
+  {
+    switch (setting->GetElementType())
+    {
+      case SettingTypeBool:
+        realValues.push_back(static_cast<const CSettingBool*>(it->get())->GetValue());
+        break;
+
+      case SettingTypeInteger:
+        realValues.push_back(static_cast<const CSettingInt*>(it->get())->GetValue());
+        break;
+
+      case SettingTypeNumber:
+        realValues.push_back(static_cast<const CSettingNumber*>(it->get())->GetValue());
+        break;
+
+      case SettingTypeString:
+        realValues.push_back(static_cast<const CSettingString*>(it->get())->GetValue());
+        break;
+
+      default:
+        break;
+    }
+  }
+
+  return realValues;
+}
+
 bool CSettings::Initialize(const std::string &file)
 {
   CXBMCTinyXML xmlDoc;
index 4c6f21a..529e23c 100644 (file)
 
 #include <set>
 #include <string>
+#include <vector>
 
-#include "settings/ISettingCallback.h"
-#include "settings/ISettingControlCreator.h"
-#include "settings/ISettingCreator.h"
+#include <boost/shared_ptr.hpp>
+
+#include "settings/lib/ISettingCallback.h"
+#include "settings/lib/ISettingControlCreator.h"
+#include "settings/lib/ISettingCreator.h"
 #include "threads/CriticalSection.h"
+#include "utils/Variant.h"
 
 class CSetting;
+class CSettingList;
 class CSettingSection;
 class CSettingsManager;
 class TiXmlElement;
@@ -150,6 +155,12 @@ public:
    */
   CSetting* GetSetting(const std::string &id) const;
   /*!
+   \brief Gets the full list of setting sections.
+
+   \return List of setting sections
+   */
+  std::vector<CSettingSection*> GetSections() const;
+  /*!
    \brief Gets the setting section with the given identifier.
 
    \param section Setting section identifier
@@ -185,6 +196,13 @@ public:
    \return String value of the setting with the given identifier
    */
   std::string GetString(const std::string &id) const;
+  /*!
+   \brief Gets the values of the list setting with the given identifier.
+
+   \param id Setting identifier
+   \return List of values of the setting with the given identifier
+   */
+  std::vector<CVariant> GetList(const std::string &id) const;
 
   /*!
    \brief Sets the boolean value of the setting with the given identifier.
@@ -225,6 +243,14 @@ public:
    \return True if setting the value was successful, false otherwise
    */
   bool SetString(const std::string &id, const std::string &value);
+  /*!
+   \brief Sets the values of the list setting with the given identifier.
+
+   \param id Setting identifier
+   \param value Values to set
+   \return True if setting the values was successful, false otherwise
+   */
+  bool SetList(const std::string &id, const std::vector<CVariant> &value);
 
   /*!
    \brief Loads the setting being represented by the given XML node with the
@@ -236,6 +262,7 @@ public:
    */
   bool LoadSetting(const TiXmlNode *node, const std::string &settingId);
 
+  static std::vector<CVariant> ListToValues(const CSettingList *setting, const std::vector< boost::shared_ptr<CSetting> > &values);
 private:
   CSettings(const CSettings&);
   CSettings const& operator=(CSettings const&);
diff --git a/xbmc/settings/SettingsManager.cpp b/xbmc/settings/SettingsManager.cpp
deleted file mode 100644 (file)
index 01009a8..0000000
+++ /dev/null
@@ -1,1010 +0,0 @@
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "SettingsManager.h"
-#include "SettingDefinitions.h"
-#include "SettingSection.h"
-#include "Setting.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/XBMCTinyXML.h"
-
-
-CSettingsManager::CSettingsManager()
-  : m_initialized(false), m_loaded(false)
-{ }
-
-CSettingsManager::~CSettingsManager()
-{
-  // first clear all registered settings handler and subsettings
-  // implementations because we can't be sure that they are still valid
-  m_settingsHandlers.clear();
-  m_subSettings.clear();
-  m_settingCreators.clear();
-  m_settingControlCreators.clear();
-
-  Clear();
-}
-
-bool CSettingsManager::Initialize(const TiXmlElement *root)
-{
-  CExclusiveLock lock(m_critical);
-  CExclusiveLock settingsLock(m_settingsCritical);
-  if (m_initialized || root == NULL)
-    return false;
-
-  if (!StringUtils::EqualsNoCase(root->ValueStr(), SETTING_XML_ROOT))
-  {
-    CLog::Log(LOGERROR, "CSettingsManager: error reading settings definition: doesn't contain <settings> tag");
-    return false;
-  }
-
-  const TiXmlNode *sectionNode = root->FirstChild(SETTING_XML_ELM_SECTION);
-  while (sectionNode != NULL)
-  {
-    std::string sectionId;
-    if (CSettingSection::DeserializeIdentification(sectionNode, sectionId))
-    {
-      CSettingSection *section = NULL;
-      SettingSectionMap::iterator itSection = m_sections.find(sectionId);
-      bool update = (itSection != m_sections.end());
-      if (!update)
-        section = new CSettingSection(sectionId, this);
-      else
-        section = itSection->second;
-
-      if (section->Deserialize(sectionNode, update))
-      {
-        section->CheckRequirements();
-        if (!update)
-          m_sections[section->GetId()] = section;
-
-        // get all settings and add them to the settings map
-        for (SettingCategoryList::const_iterator categoryIt = section->GetCategories().begin(); categoryIt != section->GetCategories().end(); ++categoryIt)
-        {
-          (*categoryIt)->CheckRequirements();
-          for (SettingGroupList::const_iterator groupIt = (*categoryIt)->GetGroups().begin(); groupIt != (*categoryIt)->GetGroups().end(); ++groupIt)
-          {
-            (*groupIt)->CheckRequirements();
-            for (SettingList::const_iterator settingIt = (*groupIt)->GetSettings().begin(); settingIt != (*groupIt)->GetSettings().end(); ++settingIt)
-            {
-              (*settingIt)->CheckRequirements();
-
-              const std::string &settingId = (*settingIt)->GetId();
-              SettingMap::iterator setting = m_settings.find(settingId);
-              if (setting == m_settings.end())
-              {
-                Setting tmpSetting = { NULL };
-                std::pair<SettingMap::iterator, bool> tmpIt = m_settings.insert(make_pair(settingId, tmpSetting));
-                setting = tmpIt.first;
-              }
-                
-              if (setting->second.setting == NULL)
-              {
-                setting->second.setting = *settingIt;
-                (*settingIt)->m_callback = this;
-              }
-            }
-          }
-        }
-      }
-      else
-      {
-        CLog::Log(LOGWARNING, "CSettingsManager: unable to read section \"%s\"", sectionId.c_str());
-        if (!update)
-          delete section;
-      }
-    }
-      
-    sectionNode = sectionNode->NextSibling(SETTING_XML_ELM_SECTION);
-  }
-
-  for (SettingMap::iterator itSettingDep = m_settings.begin(); itSettingDep != m_settings.end(); ++itSettingDep)
-  {
-    if (itSettingDep->second.setting == NULL)
-      continue;
-
-    const SettingDependencies& deps = itSettingDep->second.setting->GetDependencies();
-    for (SettingDependencies::const_iterator depIt = deps.begin(); depIt != deps.end(); ++depIt)
-    {
-      std::set<std::string> settingIds = depIt->GetSettings();
-      for (std::set<std::string>::const_iterator itSettingId = settingIds.begin(); itSettingId != settingIds.end(); ++itSettingId)
-      {
-        SettingMap::iterator setting = m_settings.find(*itSettingId);
-        if (setting == m_settings.end())
-          continue;
-
-        bool newDep = true;
-        SettingDependencies &settingDeps = setting->second.dependencies[itSettingDep->first];
-        for (SettingDependencies::const_iterator itDeps = settingDeps.begin(); itDeps != settingDeps.end(); ++itDeps)
-        {
-          if (itDeps->GetType() == depIt->GetType())
-          {
-            newDep = false;
-            break;
-          }
-        }
-
-        if (newDep)
-          settingDeps.push_back(*depIt);
-      }
-    }
-  }
-
-  return true;
-}
-
-bool CSettingsManager::Load(const TiXmlElement *root, bool &updated, bool triggerEvents /* = true */, std::map<std::string, CSetting*> *loadedSettings /* = NULL */)
-{
-  CSharedLock lock(m_critical);
-  CExclusiveLock settingsLock(m_settingsCritical);
-  if (m_loaded || root == NULL)
-    return false;
-
-  if (triggerEvents && !OnSettingsLoading())
-    return false;
-
-  if (!Deserialize(root, loadedSettings))
-    return false;
-
-  bool ret = true;
-  // load any ISubSettings implementations
-  if (triggerEvents)
-    ret = Load(root);
-
-  updated = UpdateSettings(root);
-
-  if (triggerEvents)
-    OnSettingsLoaded();
-
-  return ret;
-}
-
-bool CSettingsManager::Save(TiXmlNode *root) const
-{
-  CSharedLock lock(m_critical);
-  CSharedLock settingsLock(m_settingsCritical);
-  if (!m_initialized || root == NULL)
-    return false;
-
-  if (!OnSettingsSaving())
-    return false;
-
-  if (!Serialize(root))
-  {
-    CLog::Log(LOGERROR, "CSettingsManager: failed to save settings");
-    return false;
-  }
-
-  // save any ISubSettings implementations
-  for (std::set<ISubSettings*>::const_iterator it = m_subSettings.begin(); it != m_subSettings.end(); ++it)
-  {
-    if (!(*it)->Save(root))
-      return false;
-  }
-
-  OnSettingsSaved();
-
-  return true;
-}
-
-void CSettingsManager::Unload()
-{
-  CExclusiveLock lock(m_settingsCritical);
-  if (!m_loaded)
-    return;
-
-  // needs to be set before calling CSetting::Reset() to avoid calls to
-  // OnSettingChanging() and OnSettingChanged()
-  m_loaded = false;
-
-  for (SettingMap::iterator setting = m_settings.begin(); setting != m_settings.end(); ++setting)
-    setting->second.setting->Reset();
-
-  OnSettingsUnloaded();
-}
-
-void CSettingsManager::Clear()
-{
-  CExclusiveLock lock(m_critical);
-  Unload();
-
-  m_settings.clear();
-  for (SettingSectionMap::iterator section = m_sections.begin(); section != m_sections.end(); ++section)
-    delete section->second;
-  m_sections.clear();
-
-  OnSettingsCleared();
-
-  for (std::set<ISubSettings*>::const_iterator it = m_subSettings.begin(); it != m_subSettings.end(); ++it)
-    (*it)->Clear();
-
-  m_initialized = false;
-}
-
-bool CSettingsManager::LoadSetting(const TiXmlNode *node, const std::string &settingId)
-{
-  if (node == NULL)
-    return false;
-
-  CSetting *setting = GetSetting(settingId);
-  if (setting == NULL)
-    return false;
-
-  return LoadSetting(node, setting);
-}
-
-void CSettingsManager::SetInitialized()
-{
-  CExclusiveLock lock(m_settingsCritical);
-  if (m_initialized)
-    return;
-
-  m_initialized = true;
-
-  for (SettingMap::iterator setting = m_settings.begin(); setting != m_settings.end(); )
-  {
-    SettingMap::iterator tmpIterator = setting++;
-    if (tmpIterator->second.setting == NULL)
-      m_settings.erase(tmpIterator);
-  }
-}
-
-void CSettingsManager::RegisterCallback(ISettingCallback *callback, const std::set<std::string> &settingList)
-{
-  CExclusiveLock lock(m_settingsCritical);
-  if (callback == NULL)
-    return;
-
-  for (std::set<std::string>::const_iterator settingIt = settingList.begin(); settingIt != settingList.end(); ++settingIt)
-  {
-    std::string id = *settingIt;
-    StringUtils::ToLower(id);
-
-    SettingMap::iterator setting = m_settings.find(id);
-    if (setting == m_settings.end())
-    {
-      if (m_initialized)
-        continue;
-
-      Setting tmpSetting = { NULL };
-      std::pair<SettingMap::iterator, bool> tmpIt = m_settings.insert(make_pair(id, tmpSetting));
-      setting = tmpIt.first;
-    }
-
-    setting->second.callbacks.insert(callback);
-  }
-}
-
-void CSettingsManager::UnregisterCallback(ISettingCallback *callback)
-{
-  CExclusiveLock lock(m_settingsCritical);
-  for (SettingMap::iterator settingIt = m_settings.begin(); settingIt != m_settings.end(); ++settingIt)
-    settingIt->second.callbacks.erase(callback);
-}
-
-void CSettingsManager::RegisterSettingType(const std::string &settingType, ISettingCreator *settingCreator)
-{
-  CExclusiveLock lock(m_critical);
-  if (settingType.empty() || settingCreator == NULL)
-    return;
-
-  SettingCreatorMap::const_iterator creatorIt = m_settingCreators.find(settingType);
-  if (creatorIt == m_settingCreators.end())
-    m_settingCreators.insert(make_pair(settingType, settingCreator));
-}
-
-void CSettingsManager::RegisterSettingControl(const std::string &controlType, ISettingControlCreator *settingControlCreator)
-{
-  if (controlType.empty() || settingControlCreator == NULL)
-    return;
-
-  CExclusiveLock lock(m_critical);
-  SettingControlCreatorMap::const_iterator creatorIt = m_settingControlCreators.find(controlType);
-  if (creatorIt == m_settingControlCreators.end())
-    m_settingControlCreators.insert(make_pair(controlType, settingControlCreator));
-}
-
-void CSettingsManager::RegisterSettingsHandler(ISettingsHandler *settingsHandler)
-{
-  if (settingsHandler == NULL)
-    return;
-
-  CExclusiveLock lock(m_critical);
-  if (find(m_settingsHandlers.begin(), m_settingsHandlers.end(), settingsHandler) == m_settingsHandlers.end())
-    m_settingsHandlers.push_back(settingsHandler);
-}
-
-void CSettingsManager::UnregisterSettingsHandler(ISettingsHandler *settingsHandler)
-{
-  if (settingsHandler == NULL)
-    return;
-
-  CExclusiveLock lock(m_critical);
-  SettingsHandlers::iterator it = find(m_settingsHandlers.begin(), m_settingsHandlers.end(), settingsHandler);
-  if (it != m_settingsHandlers.end())
-    m_settingsHandlers.erase(it);
-}
-
-void CSettingsManager::RegisterSubSettings(ISubSettings *subSettings)
-{
-  CExclusiveLock lock(m_critical);
-  if (subSettings == NULL)
-    return;
-
-  m_subSettings.insert(subSettings);
-}
-
-void CSettingsManager::UnregisterSubSettings(ISubSettings *subSettings)
-{
-  CExclusiveLock lock(m_critical);
-  if (subSettings == NULL)
-    return;
-
-  m_subSettings.erase(subSettings);
-}
-
-void CSettingsManager::RegisterSettingOptionsFiller(const std::string &identifier, IntegerSettingOptionsFiller optionsFiller)
-{
-  if (identifier.empty() || optionsFiller == NULL)
-    return;
-
-  RegisterSettingOptionsFiller(identifier, (void*)optionsFiller, SettingOptionsFillerTypeInteger);
-}
-
-void CSettingsManager::RegisterSettingOptionsFiller(const std::string &identifier, StringSettingOptionsFiller optionsFiller)
-{
-  if (identifier.empty() || optionsFiller == NULL)
-    return;
-
-  RegisterSettingOptionsFiller(identifier, (void*)optionsFiller, SettingOptionsFillerTypeString);
-}
-
-void CSettingsManager::UnregisterSettingOptionsFiller(const std::string &identifier)
-{
-  CExclusiveLock lock(m_critical);
-  m_optionsFillers.erase(identifier);
-}
-
-void* CSettingsManager::GetSettingOptionsFiller(const CSetting *setting)
-{
-  CSharedLock lock(m_critical);
-  if (setting == NULL)
-    return NULL;
-
-  // get the option filler's identifier
-  std::string filler;
-  if (setting->GetType() == SettingTypeInteger)
-    filler = ((const CSettingInt*)setting)->GetOptionsFiller();
-  else if (setting->GetType() == SettingTypeString)
-    filler = ((const CSettingString*)setting)->GetOptionsFiller();
-
-  if (filler.empty())
-    return NULL;
-
-  // check if such an option filler is known
-  SettingOptionsFillerMap::const_iterator fillerIt = m_optionsFillers.find(filler);
-  if (fillerIt == m_optionsFillers.end())
-    return NULL;
-
-  if (fillerIt->second.filler == NULL)
-    return NULL;
-
-  // make sure the option filler's type matches the setting's type
-  switch (fillerIt->second.type)
-  {
-    case SettingOptionsFillerTypeInteger:
-    {
-      if (setting->GetType() != SettingTypeInteger)
-        return NULL;
-
-      break;
-    }
-    
-    case SettingOptionsFillerTypeString:
-    {
-      if (setting->GetType() != SettingTypeString)
-        return NULL;
-
-      break;
-    }
-
-    default:
-      return NULL;
-  }
-
-  return fillerIt->second.filler;
-}
-
-CSetting* CSettingsManager::GetSetting(const std::string &id) const
-{
-  CSharedLock lock(m_settingsCritical);
-  if (id.empty())
-    return NULL;
-
-  std::string settingId = id;
-  StringUtils::ToLower(settingId);
-
-  SettingMap::const_iterator setting = m_settings.find(settingId);
-  if (setting != m_settings.end())
-    return setting->second.setting;
-
-  CLog::Log(LOGDEBUG, "CSettingsManager: requested setting (%s) was not found.", id.c_str());
-  return NULL;
-}
-
-CSettingSection* CSettingsManager::GetSection(const std::string &section) const
-{
-  CSharedLock lock(m_critical);
-  if (section.empty())
-    return NULL;
-
-  std::string sectionId = section;
-  StringUtils::ToLower(sectionId);
-
-  SettingSectionMap::const_iterator sectionIt = m_sections.find(sectionId);
-  if (sectionIt != m_sections.end())
-    return sectionIt->second;
-
-  CLog::Log(LOGDEBUG, "CSettingsManager: requested setting section (%s) was not found.", section.c_str());
-  return NULL;
-}
-
-SettingDependencyMap CSettingsManager::GetDependencies(const std::string &id) const
-{
-  CSharedLock lock(m_settingsCritical);
-  SettingMap::const_iterator setting = m_settings.find(id);
-  if (setting == m_settings.end())
-    return SettingDependencyMap();
-
-  return setting->second.dependencies;
-}
-
-SettingDependencyMap CSettingsManager::GetDependencies(const CSetting *setting) const
-{
-  if (setting == NULL)
-    return SettingDependencyMap();
-
-  return GetDependencies(setting->GetId());
-}
-
-bool CSettingsManager::GetBool(const std::string &id) const
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeBool)
-    return false;
-
-  return ((CSettingBool*)setting)->GetValue();
-}
-
-bool CSettingsManager::SetBool(const std::string &id, bool value)
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeBool)
-    return false;
-
-  return ((CSettingBool*)setting)->SetValue(value);
-}
-
-bool CSettingsManager::ToggleBool(const std::string &id)
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeBool)
-    return false;
-
-  return SetBool(id, !((CSettingBool*)setting)->GetValue());
-}
-
-int CSettingsManager::GetInt(const std::string &id) const
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeInteger)
-    return 0;
-
-  return ((CSettingInt*)setting)->GetValue();
-}
-
-bool CSettingsManager::SetInt(const std::string &id, int value)
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeInteger)
-    return false;
-
-  return ((CSettingInt*)setting)->SetValue(value);
-}
-
-double CSettingsManager::GetNumber(const std::string &id) const
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeNumber)
-    return 0.0;
-
-  return ((CSettingNumber*)setting)->GetValue();
-}
-
-bool CSettingsManager::SetNumber(const std::string &id, double value)
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeNumber)
-    return false;
-
-  return ((CSettingNumber*)setting)->SetValue(value);
-}
-
-std::string CSettingsManager::GetString(const std::string &id) const
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeString)
-    return "";
-
-  return ((CSettingString*)setting)->GetValue();
-}
-
-bool CSettingsManager::SetString(const std::string &id, const std::string &value)
-{
-  CSharedLock lock(m_settingsCritical);
-  CSetting *setting = GetSetting(id);
-  if (setting == NULL || setting->GetType() != SettingTypeString)
-    return false;
-
-  return ((CSettingString*)setting)->SetValue(value);
-}
-
-void CSettingsManager::AddCondition(const std::string &condition)
-{
-  CExclusiveLock lock(m_critical);
-  if (condition.empty())
-    return;
-
-  m_conditions.AddCondition(condition);
-}
-
-void CSettingsManager::AddCondition(const std::string &identifier, SettingConditionCheck condition)
-{
-  CExclusiveLock lock(m_critical);
-  if (identifier.empty() || condition == NULL)
-    return;
-
-  m_conditions.AddCondition(identifier, condition);
-}
-  
-bool CSettingsManager::Serialize(TiXmlNode *parent) const
-{
-  if (parent == NULL)
-    return false;
-
-  CSharedLock lock(m_settingsCritical);
-
-  for (SettingMap::const_iterator it = m_settings.begin(); it != m_settings.end(); ++it)
-  {
-    if (it->second.setting->GetType() == SettingTypeAction)
-      continue;
-
-    std::vector<std::string> parts = StringUtils::Split(it->first, ".");
-    if (parts.size() != 2 || parts.at(0).empty() || parts.at(1).empty())
-    {
-      CLog::Log(LOGWARNING, "CSettingsManager: unable to save setting \"%s\"", it->first.c_str());
-      continue;
-    }
-      
-    TiXmlNode *sectionNode = parent->FirstChild(parts.at(0));
-    if (sectionNode == NULL)
-    {
-      TiXmlElement sectionElement(parts.at(0));
-      sectionNode = parent->InsertEndChild(sectionElement);
-        
-      if (sectionNode == NULL)
-      {
-        CLog::Log(LOGWARNING, "CSettingsManager: unable to write <%s> tag", parts.at(0).c_str());
-        continue;
-      }
-    }
-      
-    TiXmlElement settingElement(parts.at(1));
-    TiXmlNode *settingNode = sectionNode->InsertEndChild(settingElement);
-    if (settingNode == NULL)
-    {
-      CLog::Log(LOGWARNING, "CSetting: unable to write <%s> tag in <%s>", parts.at(1).c_str(), parts.at(0).c_str());
-      continue;
-    }
-      
-    TiXmlText value(it->second.setting->ToString());
-    settingNode->InsertEndChild(value);
-  }
-
-  return true;
-}
-  
-bool CSettingsManager::Deserialize(const TiXmlNode *node, std::map<std::string, CSetting*> *loadedSettings /* = NULL */)
-{
-  if (node == NULL)
-    return false;
-
-  CSharedLock lock(m_settingsCritical);
-
-  for (SettingMap::iterator it = m_settings.begin(); it != m_settings.end(); ++it)
-  {
-    if (LoadSetting(node, it->second.setting) && loadedSettings != NULL)
-      loadedSettings->insert(make_pair(it->first, it->second.setting));
-  }
-
-  return true;
-}
-
-bool CSettingsManager::OnSettingChanging(const CSetting *setting)
-{
-  if (setting == NULL)
-    return false;
-
-  CSharedLock lock(m_settingsCritical);
-  if (!m_loaded)
-    return true;
-
-  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
-  if (settingIt == m_settings.end())
-    return false;
-
-  Setting settingData = settingIt->second;
-  // now that we have a copy of the setting's data, we can leave the lock
-  lock.Leave();
-
-  for (CallbackSet::iterator callback = settingData.callbacks.begin();
-        callback != settingData.callbacks.end();
-        ++callback)
-  {
-    if (!(*callback)->OnSettingChanging(setting))
-      return false;
-  }
-
-  return true;
-}
-  
-void CSettingsManager::OnSettingChanged(const CSetting *setting)
-{
-  CSharedLock lock(m_settingsCritical);
-  if (!m_loaded || setting == NULL)
-    return;
-    
-  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
-  if (settingIt == m_settings.end())
-    return;
-
-  Setting settingData = settingIt->second;
-  // now that we have a copy of the setting's data, we can leave the lock
-  lock.Leave();
-    
-  for (CallbackSet::iterator callback = settingData.callbacks.begin();
-        callback != settingData.callbacks.end();
-        ++callback)
-    (*callback)->OnSettingChanged(setting);
-
-  // now handle any settings which depend on the changed setting
-  const SettingDependencyMap& deps = GetDependencies(setting);
-  for (SettingDependencyMap::const_iterator depsIt = deps.begin(); depsIt != deps.end(); ++depsIt)
-  {
-    for (SettingDependencies::const_iterator depIt = depsIt->second.begin(); depIt != depsIt->second.end(); ++depIt)
-      UpdateSettingByDependency(depsIt->first, *depIt);
-  }
-}
-
-void CSettingsManager::OnSettingAction(const CSetting *setting)
-{
-  CSharedLock lock(m_settingsCritical);
-  if (!m_loaded || setting == NULL)
-    return;
-
-  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
-  if (settingIt == m_settings.end())
-    return;
-
-  Setting settingData = settingIt->second;
-  // now that we have a copy of the setting's data, we can leave the lock
-  lock.Leave();
-
-  for (CallbackSet::iterator callback = settingData.callbacks.begin();
-        callback != settingData.callbacks.end();
-        ++callback)
-    (*callback)->OnSettingAction(setting);
-}
-
-bool CSettingsManager::OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode)
-{
-  CSharedLock lock(m_settingsCritical);
-  if (setting == NULL)
-    return false;
-
-  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
-  if (settingIt == m_settings.end())
-    return false;
-
-  Setting settingData = settingIt->second;
-  // now that we have a copy of the setting's data, we can leave the lock
-  lock.Leave();
-
-  bool ret = false;
-  for (CallbackSet::iterator callback = settingData.callbacks.begin();
-        callback != settingData.callbacks.end();
-        ++callback)
-    ret |= (*callback)->OnSettingUpdate(setting, oldSettingId, oldSettingNode);
-
-  return ret;
-}
-
-void CSettingsManager::OnSettingPropertyChanged(const CSetting *setting, const char *propertyName)
-{
-  CSharedLock lock(m_settingsCritical);
-  if (!m_loaded || setting == NULL)
-    return;
-
-  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
-  if (settingIt == m_settings.end())
-    return;
-
-  Setting settingData = settingIt->second;
-  // now that we have a copy of the setting's data, we can leave the lock
-  lock.Leave();
-
-  for (CallbackSet::iterator callback = settingData.callbacks.begin();
-        callback != settingData.callbacks.end();
-        ++callback)
-    (*callback)->OnSettingPropertyChanged(setting, propertyName);
-}
-
-CSetting* CSettingsManager::CreateSetting(const std::string &settingType, const std::string &settingId, CSettingsManager *settingsManager /* = NULL */) const
-{
-  if (StringUtils::EqualsNoCase(settingType, "boolean"))
-    return new CSettingBool(settingId, (CSettingsManager*)this);
-  else if (StringUtils::EqualsNoCase(settingType, "integer"))
-    return new CSettingInt(settingId, (CSettingsManager*)this);
-  else if (StringUtils::EqualsNoCase(settingType, "number"))
-    return new CSettingNumber(settingId, (CSettingsManager*)this);
-  else if (StringUtils::EqualsNoCase(settingType, "string"))
-    return new CSettingString(settingId, (CSettingsManager*)this);
-  else if (StringUtils::EqualsNoCase(settingType, "action"))
-    return new CSettingAction(settingId, (CSettingsManager*)this);
-
-  CSharedLock lock(m_critical);
-  SettingCreatorMap::const_iterator creator = m_settingCreators.find(settingType);
-  if (creator != m_settingCreators.end())
-    return creator->second->CreateSetting(settingType, settingId, (CSettingsManager*)this);
-
-  return NULL;
-}
-
-ISettingControl* CSettingsManager::CreateControl(const std::string &controlType) const
-{
-  if (controlType.empty())
-    return NULL;
-
-  CSharedLock lock(m_critical);
-  SettingControlCreatorMap::const_iterator creator = m_settingControlCreators.find(controlType);
-  if (creator != m_settingControlCreators.end() && creator->second != NULL)
-    return creator->second->CreateControl(controlType);
-
-  return NULL;
-}
-
-bool CSettingsManager::OnSettingsLoading()
-{
-  CSharedLock lock(m_critical);
-  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
-  {
-    if (!(*it)->OnSettingsLoading())
-      return false;
-  }
-
-  return true;
-}
-
-void CSettingsManager::OnSettingsLoaded()
-{
-  CSharedLock lock(m_critical);
-  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
-    (*it)->OnSettingsLoaded();
-}
-
-bool CSettingsManager::OnSettingsSaving() const
-{
-  CSharedLock lock(m_critical);
-  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
-  {
-    if (!(*it)->OnSettingsSaving())
-      return false;
-  }
-
-  return true;
-}
-
-void CSettingsManager::OnSettingsSaved() const
-{
-  CSharedLock lock(m_critical);
-  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
-    (*it)->OnSettingsSaved();
-}
-
-void CSettingsManager::OnSettingsCleared()
-{
-  CSharedLock lock(m_critical);
-  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
-    (*it)->OnSettingsCleared();
-}
-
-bool CSettingsManager::Load(const TiXmlNode *settings)
-{
-  bool ok = true;
-  CSharedLock lock(m_critical);
-  for (std::set<ISubSettings*>::const_iterator it = m_subSettings.begin(); it != m_subSettings.end(); ++it)
-    ok &= (*it)->Load(settings);
-
-  return ok;
-}
-
-bool CSettingsManager::LoadSetting(const TiXmlNode *node, CSetting *setting)
-{
-  if (node == NULL || setting == NULL)
-    return false;
-
-  if (setting->GetType() == SettingTypeAction)
-    return false;
-
-  const std::string &settingId = setting->GetId();
-
-  std::vector<std::string> parts = StringUtils::Split(settingId, ".");
-  if (parts.size() != 2 || parts.at(0).empty() || parts.at(1).empty())
-  {
-    CLog::Log(LOGWARNING, "CSettingsManager: unable to load setting \"%s\"", settingId.c_str());
-    return false;
-  }
-
-  const TiXmlNode *sectionNode = node->FirstChild(parts.at(0));
-  if (sectionNode == NULL)
-    return false;
-
-  const TiXmlNode *settingNode = sectionNode->FirstChild(parts.at(1));
-  if (settingNode == NULL)
-    return false;
-
-  if (!setting->FromString(settingNode->FirstChild() != NULL ? settingNode->FirstChild()->ValueStr() : StringUtils::Empty))
-  {
-    CLog::Log(LOGWARNING, "CSettingsManager: unable to read value of setting \"%s\"", settingId.c_str());
-    return false;
-  }
-
-  return true;
-}
-
-bool CSettingsManager::UpdateSettings(const TiXmlNode *root)
-{
-  bool updated = false;
-  CSharedLock lock(m_settingsCritical);
-
-  for (SettingMap::iterator setting = m_settings.begin(); setting != m_settings.end(); ++setting)
-  {
-    const std::set<CSettingUpdate>& updates = setting->second.setting->GetUpdates();
-    if (updates.empty())
-      continue;
-
-    for (std::set<CSettingUpdate>::const_iterator update = updates.begin(); update != updates.end(); ++update)
-      updated |= UpdateSetting(root, setting->second.setting, *update);
-  }
-
-  return updated;
-}
-
-bool CSettingsManager::UpdateSetting(const TiXmlNode *node, CSetting *setting, const CSettingUpdate& update)
-{
-  if (node == NULL || setting == NULL || update.GetType() == SettingUpdateTypeNone)
-    return false;
-
-  bool updated = false;
-  const char *oldSetting = NULL;
-  const TiXmlNode *oldSettingNode = NULL;
-  if (update.GetType() == SettingUpdateTypeRename)
-  {
-    if (update.GetValue().empty())
-      return false;
-
-    oldSetting = update.GetValue().c_str();
-    std::vector<std::string> parts = StringUtils::Split(oldSetting, ".");
-    if (parts.size() != 2 || parts.at(0).empty() || parts.at(1).empty())
-      return false;
-
-    const TiXmlNode *sectionNode = node->FirstChild(parts.at(0));
-    if (sectionNode == NULL)
-      return false;
-
-    oldSettingNode = sectionNode->FirstChild(parts.at(1));
-    if (oldSettingNode == NULL)
-      return false;
-
-    if (setting->FromString(oldSettingNode->FirstChild() != NULL ? oldSettingNode->FirstChild()->ValueStr() : StringUtils::Empty))
-      updated = true;
-    else
-      CLog::Log(LOGWARNING, "CSetting: unable to update \"%s\" through automatically renaming from \"%s\"", setting->GetId().c_str(), oldSetting);
-  }
-
-  updated |= OnSettingUpdate(setting, oldSetting, oldSettingNode);
-  return updated;
-}
-
-void CSettingsManager::UpdateSettingByDependency(const std::string &settingId, const CSettingDependency &dependency)
-{
-  CSetting *setting = GetSetting(settingId);
-  if (setting == NULL)
-    return;
-
-  switch (dependency.GetType())
-  {
-    case SettingDependencyTypeEnable:
-      // just trigger the property changed callback and a call to
-      // CSetting::IsEnabled() will automatically determine the new
-      // enabled state
-      OnSettingPropertyChanged(setting, "enabled");
-      break;
-
-    case SettingDependencyTypeUpdate:
-    {
-      SettingType type = (SettingType)setting->GetType();
-      if (type == SettingTypeInteger)
-      {
-        CSettingInt *settingInt = ((CSettingInt*)setting);
-        if (settingInt->GetOptionsType() == SettingOptionsTypeDynamic)
-          settingInt->UpdateDynamicOptions();
-      }
-      else if (type == SettingTypeString)
-      {
-        CSettingString *settingString = ((CSettingString*)setting);
-        if (settingString->GetOptionsType() == SettingOptionsTypeDynamic)
-          settingString->UpdateDynamicOptions();
-      }
-      break;
-    }
-
-    case SettingDependencyTypeVisible:
-      // just trigger the property changed callback and a call to
-      // CSetting::IsVisible() will automatically determine the new
-      // visible state
-      OnSettingPropertyChanged(setting, "visible");
-      break;
-
-    case SettingDependencyTypeNone:
-    default:
-      break;
-  }
-}
-
-void CSettingsManager::RegisterSettingOptionsFiller(const std::string &identifier, void *filler, SettingOptionsFillerType type)
-{
-  CExclusiveLock lock(m_critical);
-  SettingOptionsFillerMap::const_iterator it = m_optionsFillers.find(identifier);
-  if (it != m_optionsFillers.end())
-    return;
-
-  SettingOptionsFiller optionsFiller = { filler, type };
-  m_optionsFillers.insert(make_pair(identifier, optionsFiller));
-}
diff --git a/xbmc/settings/SettingsManager.h b/xbmc/settings/SettingsManager.h
deleted file mode 100644 (file)
index 92150fc..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-#pragma once
-/*
- *      Copyright (C) 2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <map>
-#include <set>
-#include <vector>
-
-#include "ISetting.h"
-#include "ISettingCallback.h"
-#include "ISettingControlCreator.h"
-#include "ISettingCreator.h"
-#include "ISettingsHandler.h"
-#include "ISubSettings.h"
-#include "SettingConditions.h"
-#include "SettingDependency.h"
-#include "threads/SharedSection.h"
-
-class CSettingSection;
-class CSettingUpdate;
-
-class TiXmlElement;
-class TiXmlNode;
-
-typedef void (*IntegerSettingOptionsFiller)(const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int &current);
-typedef void (*StringSettingOptionsFiller)(const CSetting *setting, std::vector< std::pair<std::string, std::string> > &list, std::string &current);
-
-/*!
- \ingroup settings
- \brief Settings manager responsible for initializing, loading and handling
- all settings.
- */
-class CSettingsManager : public ISettingCreator, public ISettingControlCreator,
-                         private ISettingCallback,
-                         private ISettingsHandler, private ISubSettings
-{
-public:
-  /*!
-   \brief Creates a new (uninitialized) settings manager.
-   */
-  CSettingsManager();
-  virtual ~CSettingsManager();
-
-  // implementation of ISettingCreator
-  virtual CSetting* CreateSetting(const std::string &settingType, const std::string &settingId, CSettingsManager *settingsManager = NULL) const;
-
-  // implementation of ISettingControlCreator
-  virtual ISettingControl* CreateControl(const std::string &controlType) const;
-
-  /*!
-   \brief Initializes the settings manager using the setting definitions
-   represented by the given XML element.
-
-   \param root XML element representing setting definitions
-   \return True if the XML element was successfully deserialized into setting definitions, false otherwise
-   */
-  bool Initialize(const TiXmlElement *root);
-  /*!
-   \brief Loads setting values from the given XML element.
-
-   \param root XML element containing setting values
-   \param updated Whether some settings were automatically updated
-   \param triggerEvents Whether to trigger ISettingCallback methods
-   \param loadedSettings A list to fill with all the successfully loaded settings
-   \return True if the setting values were successfully loaded, false otherwise
-   */
-  bool Load(const TiXmlElement *root, bool &updated, bool triggerEvents = true, std::map<std::string, CSetting*> *loadedSettings = NULL);
-  /*!
-   \brief Saves the setting values to the given XML node.
-
-   \param root XML node
-   \return True if the setting values were successfully saved, false otherwise
-   */
-  virtual bool Save(TiXmlNode *root) const;
-  /*!
-   \brief Unloads the previously loaded setting values.
-
-   The values of all the settings are reset to their default values.
-   */
-  void Unload();
-  /*!
-   \brief Clears the complete settings manager.
-
-   This removes all initialized settings, groups, categories and sections and
-   returns to the uninitialized state. Any registered callbacks or
-   implementations stay registered.
-   */
-  void Clear();
-
-  /*!
-   \brief Loads the setting being represented by the given XML node with the
-   given identifier.
-
-   \param node XML node representing the setting to load
-   \param settingId Setting identifier
-   \return True if the setting was successfully loaded from the given XML node, false otherwise
-   */
-  bool LoadSetting(const TiXmlNode *node, const std::string &settingId);
-
-  /*!
-   \brief Tells the settings system that the initialization is complete.
-
-   Setting values can only be loaded after a complete and successful
-   initialization of the settings system.
-   */
-  void SetInitialized();
-  /*!
-   \brief Tells the settings system that all setting values
-   have been loaded.
-
-   This manual trigger is necessary to enable the ISettingCallback methods
-   being executed.
-   */
-  void SetLoaded() { m_loaded = true; }
-
-  /*!
-   \brief Registers the given ISettingCallback implementation to be triggered
-   for the given list of settings.
-
-   \param settingsHandler ISettingsHandler implementation
-   \param settingList List of settings to trigger the given ISettingCallback implementation
-   */
-  void RegisterCallback(ISettingCallback *callback, const std::set<std::string> &settingList);
-  /*!
-   \brief Unregisters the given ISettingCallback implementation.
-
-   \param callback ISettingCallback implementation
-   */
-  void UnregisterCallback(ISettingCallback *callback);
-
-  /*!
-   \brief Registers a custom setting type and its ISettingCreator
-   implementation.
-
-   When a setting definition for a registered custom setting type is found its
-   ISettingCreator implementation is called to create and deserialize the
-   setting definition.
-
-   \param settingType String representation of the custom setting type
-   \param settingCreator ISettingCreator implementation
-   */
-  void RegisterSettingType(const std::string &settingType, ISettingCreator *settingCreator);
-
-  /*!
-   \brief Registers a custom setting control type and its
-   ISettingControlCreator implementation
-
-   When a setting control definition for a registered custom setting control
-   type is found its ISettingControlCreator implementation is called to create
-   and deserialize the setting control definition.
-   
-   \param controlType String representation of the custom setting control type
-   \param settingControlCreator ISettingControlCreator implementation
-   */
-  void RegisterSettingControl(const std::string &controlType, ISettingControlCreator *settingControlCreator);
-
-  /*!
-   \brief Registers the given ISettingsHandler implementation.
-
-   \param settingsHandler ISettingsHandler implementation
-   */
-  void RegisterSettingsHandler(ISettingsHandler *settingsHandler);
-  /*!
-   \brief Unregisters the given ISettingsHandler implementation.
-
-   \param settingsHandler ISettingsHandler implementation
-   */
-  void UnregisterSettingsHandler(ISettingsHandler *settingsHandler);
-
-  /*!
-   \brief Registers the given ISubSettings implementation.
-
-   \param subSettings ISubSettings implementation
-   */
-  void RegisterSubSettings(ISubSettings *subSettings);
-  /*!
-   \brief Unregisters the given ISubSettings implementation.
-
-   \param subSettings ISubSettings implementation
-   */
-  void UnregisterSubSettings(ISubSettings *subSettings);
-
-  /*!
-   \brief Registers the given integer setting options filler under the given identifier.
-
-   \param identifier Setting options filler identifier
-   \param optionsFiller Integer setting options filler implementation
-   */
-  void RegisterSettingOptionsFiller(const std::string &identifier, IntegerSettingOptionsFiller optionsFiller);
-  /*!
-   \brief Registers the given string setting options filler under the given identifier.
-
-   \param identifier Setting options filler identifier
-   \param optionsFiller String setting options filler implementation
-   */
-  void RegisterSettingOptionsFiller(const std::string &identifier, StringSettingOptionsFiller optionsFiller);
-  /*!
-   \brief Unregisters the setting options filler registered under the given identifier.
-
-   \param identifier Setting options filler identifier
-   */
-  void UnregisterSettingOptionsFiller(const std::string &identifier);
-  /*!
-   \brief Gets the implementation of the setting options filler used by the
-   given setting.
-
-   \param setting Setting object
-   \return Implementation of the setting options filler (either IntegerSettingOptionsFiller or StringSettingOptionsFiller)
-   */
-  void* GetSettingOptionsFiller(const CSetting *setting);
-
-  /*!
-   \brief Gets the setting with the given identifier.
-
-   \param id Setting identifier
-   \return Setting object with the given identifier or NULL if the identifier is unknown
-   */
-  CSetting* GetSetting(const std::string &id) const;
-  /*!
-   \brief Gets the setting section with the given identifier.
-
-   \param section Setting section identifier
-   \return Setting section with the given identifier or NULL if the identifier is unknown
-   */
-  CSettingSection* GetSection(const std::string &section) const;
-  /*!
-   \brief Gets a map of settings (and their dependencies) which depend on
-   the setting with the given identifier.
-
-   It is important to note that the returned dependencies are not the
-   dependencies of the setting with the given identifier but the settings
-   (and their dependencies) which depend on the setting with the given
-   identifier.
-
-   \param id Setting identifier
-   \return Map of settings (and their dependencies) which depend on the setting with the given identifier
-   */
-  SettingDependencyMap GetDependencies(const std::string &id) const;
-  /*!
-   \brief Gets a map of settings (and their dependencies) which depend on
-   the given setting.
-
-   It is important to note that the returned dependencies are not the
-   dependencies of the given setting but the settings (and their dependencies)
-   which depend on the given setting.
-
-   \param setting Setting object
-   \return Map of settings (and their dependencies) which depend on the given setting
-   */
-  SettingDependencyMap GetDependencies(const CSetting *setting) const;
-
-  /*!
-   \brief Gets the boolean value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \return Boolean value of the setting with the given identifier
-   */
-  bool GetBool(const std::string &id) const;
-  /*!
-   \brief Gets the integer value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \return Integer value of the setting with the given identifier
-   */
-  int GetInt(const std::string &id) const;
-  /*!
-   \brief Gets the real number value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \return Real number value of the setting with the given identifier
-   */
-  double GetNumber(const std::string &id) const;
-  /*!
-   \brief Gets the string value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \return String value of the setting with the given identifier
-   */
-  std::string GetString(const std::string &id) const;
-
-  /*!
-   \brief Sets the boolean value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \param value Boolean value to set
-   \return True if setting the value was successful, false otherwise
-   */
-  bool SetBool(const std::string &id, bool value);
-  /*!
-   \brief Toggles the boolean value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \return True if toggling the boolean value was successful, false otherwise
-   */
-  bool ToggleBool(const std::string &id);
-  /*!
-   \brief Sets the integer value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \param value Integer value to set
-   \return True if setting the value was successful, false otherwise
-   */
-  bool SetInt(const std::string &id, int value);
-  /*!
-   \brief Sets the real number value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \param value Real number value to set
-   \return True if setting the value was successful, false otherwise
-   */
-  bool SetNumber(const std::string &id, double value);
-  /*!
-   \brief Sets the string value of the setting with the given identifier.
-
-   \param id Setting identifier
-   \param value String value to set
-   \return True if setting the value was successful, false otherwise
-   */
-  bool SetString(const std::string &id, const std::string &value);
-
-  /*!
-   \brief Gets the setting conditions manager used by the settings manager.
-
-   \return Setting conditions manager used by the settings manager.
-   */
-  const CSettingConditionsManager& GetConditions() const { return m_conditions; }
-  /*!
-   \brief Adds the given static condition.
-
-   A static condition is just a string. If a static condition is evaluated,
-   the result depends on whether the condition's value is defined or not.
-
-   \param condition Static condition string/value
-   */
-  void AddCondition(const std::string &condition);
-  /*!
-   \brief Adds the given dynamic condition.
-
-   A dynamic condition has an identifier and an implementation which is
-   triggered when the condition is evaluated.
-
-   \param identifier Identifier of the dynamic condition
-   \param condition Implementation of the dynamic condition
-   */
-  void AddCondition(const std::string &identifier, SettingConditionCheck condition);
-
-private:
-  // implementation of ISettingCallback
-  virtual bool OnSettingChanging(const CSetting *setting);
-  virtual void OnSettingChanged(const CSetting *setting);
-  virtual void OnSettingAction(const CSetting *setting);
-  virtual bool OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode);
-  virtual void OnSettingPropertyChanged(const CSetting *setting, const char *propertyName);
-
-  // implementation of ISettingsHandler
-  virtual bool OnSettingsLoading();
-  virtual void OnSettingsLoaded();
-  virtual bool OnSettingsSaving() const;
-  virtual void OnSettingsSaved() const;
-  virtual void OnSettingsCleared();
-
-  // implementation of ISubSettings
-  virtual bool Load(const TiXmlNode *settings);
-
-  bool Serialize(TiXmlNode *parent) const;
-  bool Deserialize(const TiXmlNode *node, std::map<std::string, CSetting*> *loadedSettings = NULL);
-
-  static bool LoadSetting(const TiXmlNode *node, CSetting *setting);
-  bool UpdateSettings(const TiXmlNode *root);
-  bool UpdateSetting(const TiXmlNode *node, CSetting *setting, const CSettingUpdate& update);
-  void UpdateSettingByDependency(const std::string &settingId, const CSettingDependency &dependency);
-
-  typedef enum {
-    SettingOptionsFillerTypeNone = 0,
-    SettingOptionsFillerTypeInteger,
-    SettingOptionsFillerTypeString
-  } SettingOptionsFillerType;
-
-  void RegisterSettingOptionsFiller(const std::string &identifier, void *filler, SettingOptionsFillerType type);
-
-  typedef std::set<ISettingCallback *> CallbackSet;
-  typedef struct {
-    CSetting *setting;
-    SettingDependencyMap dependencies;
-    CallbackSet callbacks;
-  } Setting;
-
-  bool m_initialized;
-  bool m_loaded;
-
-  typedef std::map<std::string, Setting> SettingMap;
-  SettingMap m_settings;
-  typedef std::map<std::string, CSettingSection*> SettingSectionMap;
-  SettingSectionMap m_sections;
-
-  typedef std::map<std::string, ISettingCreator*> SettingCreatorMap;
-  SettingCreatorMap m_settingCreators;
-
-  typedef std::map<std::string, ISettingControlCreator*> SettingControlCreatorMap;
-  SettingControlCreatorMap m_settingControlCreators;
-
-  std::set<ISubSettings*> m_subSettings;
-  typedef std::vector<ISettingsHandler*> SettingsHandlers;
-  SettingsHandlers m_settingsHandlers;
-
-  CSettingConditionsManager m_conditions;
-
-  typedef struct {
-    void *filler;
-    SettingOptionsFillerType type;
-  } SettingOptionsFiller;
-  typedef std::map<std::string, SettingOptionsFiller> SettingOptionsFillerMap;
-  SettingOptionsFillerMap m_optionsFillers;
-
-  CSharedSection m_critical;
-  CSharedSection m_settingsCritical;
-};
index d80939b..c2d0da8 100644 (file)
@@ -22,7 +22,7 @@
 #include <map>
 #include <string>
 
-#include "settings/ISubSettings.h"
+#include "settings/lib/ISubSettings.h"
 #include "threads/CriticalSection.h"
 
 class TiXmlNode;
diff --git a/xbmc/settings/lib/ISetting.cpp b/xbmc/settings/lib/ISetting.cpp
new file mode 100644 (file)
index 0000000..755b1bf
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "ISetting.h"
+#include "SettingDefinitions.h"
+#include "utils/log.h"
+#include "utils/XBMCTinyXML.h"
+#include "utils/XMLUtils.h"
+
+using namespace std;
+
+ISetting::ISetting(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : m_id(id),
+    m_settingsManager(settingsManager),
+    m_visible(true),
+    m_meetsRequirements(true),
+    m_requirementCondition(settingsManager)
+{ }
+  
+bool ISetting::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  if (node == NULL)
+    return false;
+
+  bool value;
+  if (XMLUtils::GetBoolean(node, SETTING_XML_ELM_VISIBLE, value))
+    m_visible = value;
+
+  const TiXmlNode *requirementNode = node->FirstChild(SETTING_XML_ELM_REQUIREMENT);
+  if (requirementNode == NULL)
+    return true;
+
+  return m_requirementCondition.Deserialize(requirementNode);
+}
+
+bool ISetting::DeserializeIdentification(const TiXmlNode *node, std::string &identification)
+{
+  if (node == NULL)
+    return false;
+
+  const TiXmlElement *element = node->ToElement();
+  if (element == NULL)
+    return false;
+
+  const char *idAttribute = element->Attribute(SETTING_XML_ATTR_ID);
+  if (idAttribute == NULL || strlen(idAttribute) <= 0)
+    return false;
+
+  identification = idAttribute;
+  return true;
+}
+
+void ISetting::CheckRequirements()
+{
+  m_meetsRequirements = m_requirementCondition.Check();
+}
diff --git a/xbmc/settings/lib/ISetting.h b/xbmc/settings/lib/ISetting.h
new file mode 100644 (file)
index 0000000..4bfe65c
--- /dev/null
@@ -0,0 +1,112 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+#include <string>
+#include <vector>
+
+#include "SettingRequirement.h"
+
+class CSettingsManager;
+class TiXmlNode;
+
+/*!
+ \ingroup settings
+ \brief Interface defining the base of all setting objects
+ */
+class ISetting
+{
+public:
+  /*!
+   \brief Creates a new setting object with the given identifier.
+
+   \param id Identifier of the setting object
+   \param settingsManager Reference to the settings manager
+   */
+  ISetting(const std::string &id, CSettingsManager *settingsManager = NULL);
+  virtual ~ISetting() { }
+
+  /*!
+   \brief Deserializes the given XML node into the properties of the setting
+   object.
+
+   If the update parameter is true, the checks for mandatory properties are
+   skipped and values are only updated.
+
+   \param node XML node containing the properties of the setting object
+   \param update Whether to perform checks for mandatory properties or not
+   \return True if deserialization was successful, false otherwise
+   */
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  /*!
+   \brief Gets the identifier of the setting object.
+
+   \return Identifier of the setting object
+   */
+  const std::string& GetId() const { return m_id; }
+  /*!
+   \brief Whether the setting object is visible or hidden.
+
+   \return True if the setting object is visible, false otherwise
+   */
+  virtual bool IsVisible() const { return m_visible; }
+  /*!
+   \brief Sets the visibility state of the setting object.
+
+   \param visible Whether the setting object shall be visible or not
+   */
+  virtual void SetVisible(bool visible) { m_visible = visible; }
+
+  /*!
+   \brief Whether the setting object meets all necessary requirements.
+
+   \return True if the setting object meets all necessary requirements, false otherwise
+   */
+  virtual bool MeetsRequirements() const { return m_meetsRequirements; }
+  /*!
+   \brief Checks if the setting object meets all necessary requirements.
+   */
+  virtual void CheckRequirements();
+  /*!
+   \brief Sets whether the setting object meets all necessary requirements.
+
+   \param visible Whether the setting object meets all necessary requirements or not
+   */
+  virtual void SetRequirementsMet(bool requirementsMet) { m_meetsRequirements = requirementsMet; }
+
+  /*!
+   \brief Deserializes the given XML node to retrieve a setting object's
+   identifier.
+
+   \param node XML node containing a setting object's identifier
+   \param identification Will contain the deserialized setting object's identifier
+   \return True if a setting object's identifier was deserialized, false otherwise
+   */
+  static bool DeserializeIdentification(const TiXmlNode *node, std::string &identification);
+
+protected:
+  std::string m_id;
+  CSettingsManager *m_settingsManager;
+
+private:
+  bool m_visible;
+  bool m_meetsRequirements;
+  CSettingRequirement m_requirementCondition;
+};
diff --git a/xbmc/settings/lib/ISettingCallback.h b/xbmc/settings/lib/ISettingCallback.h
new file mode 100644 (file)
index 0000000..1c1b79c
--- /dev/null
@@ -0,0 +1,87 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+class CSetting;
+class TiXmlNode;
+
+class ISettingCallback
+{
+public:
+  virtual ~ISettingCallback() { }
+
+  /*!
+   \brief The value of the given setting is being changed.
+
+   This callback is triggered whenever the value of a setting is being
+   changed. The given CSetting already contains the new value and the handler
+   of the callback has the possibility to allow or revert changing the value
+   of the setting. In case of a revert OnSettingChanging() is called again to
+   inform all listeners that the value change has been reverted.
+
+   \param setting The setting whose value is being changed (already containing the changed value)
+   \return True if the new value is acceptable otherwise false
+   */
+  virtual bool OnSettingChanging(const CSetting *setting) { return true; }
+
+  /*!
+   \brief The value of the given setting has changed.
+
+   This callback is triggered whenever the value of a setting has been
+   successfully changed (i.e. none of the OnSettingChanging() handlers)
+   has reverted the change.
+
+   \param setting The setting whose value has been changed
+   */
+  virtual void OnSettingChanged(const CSetting *setting) { }
+
+  /*!
+   \brief The given setting has been activated.
+
+   This callback is triggered whenever the given setting has been activated.
+   This callback is only fired for CSettingAction settings.
+
+   \param setting The setting which has been activated.
+   */
+  virtual void OnSettingAction(const CSetting *setting) { }
+
+  /*!
+   \brief The given setting needs to be updated.
+
+   This callback is triggered when a setting needs to be updated because its
+   value is outdated. This only happens when initially loading the value of a
+   setting and will not be triggered afterwards.
+
+   \param setting The setting which needs to be updated.
+   \return True if the setting has been successfully updated otherwise false
+   */
+  virtual bool OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode) { return false; }
+
+  /*!
+   \brief The given property of the given setting has changed
+
+   This callback is triggered when a property (e.g. enabled or the list of
+   dynamic options) has changed.
+
+   \param setting The setting which has a changed property
+   \param propertyName The string representation of the changed property
+   */
+  virtual void OnSettingPropertyChanged(const CSetting *setting, const char *propertyName) { }
+};
diff --git a/xbmc/settings/lib/ISettingControl.cpp b/xbmc/settings/lib/ISettingControl.cpp
new file mode 100644 (file)
index 0000000..5e3c695
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "ISettingControl.h"
+#include "SettingDefinitions.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+#include "utils/XBMCTinyXML.h"
+
+bool ISettingControl::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  if (node == NULL)
+    return false;
+
+  const TiXmlElement *elem = node->ToElement();
+  if (elem == NULL)
+    return false;
+
+  const char *strTmp = elem->Attribute(SETTING_XML_ATTR_FORMAT);
+  std::string format;
+  if (strTmp != NULL)
+    format = strTmp;
+  if (!SetFormat(format))
+  {
+    CLog::Log(LOGERROR, "ISettingControl: error reading \"format\" attribute of <control>");
+    return false;
+  }
+
+  if ((strTmp = elem->Attribute(SETTING_XML_ATTR_DELAYED)) != NULL)
+  {
+    if (!StringUtils::EqualsNoCase(strTmp, "false") && !StringUtils::EqualsNoCase(strTmp, "true"))
+    {
+      CLog::Log(LOGERROR, "ISettingControl: error reading \"delayed\" attribute of <control>");
+      return false;
+    }
+    else
+      m_delayed = StringUtils::EqualsNoCase(strTmp, "true");
+  }
+
+  return true;
+}
diff --git a/xbmc/settings/lib/ISettingControl.h b/xbmc/settings/lib/ISettingControl.h
new file mode 100644 (file)
index 0000000..8ef118f
--- /dev/null
@@ -0,0 +1,45 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string>
+
+class TiXmlNode;
+
+class ISettingControl
+{
+public:
+  ISettingControl()
+    : m_delayed(false)
+  { }
+  virtual ~ISettingControl() { }
+
+  virtual std::string GetType() const = 0;
+  const std::string& GetFormat() const { return m_format; }
+  bool GetDelayed() const { return m_delayed; }
+
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+protected:
+  virtual bool SetFormat(const std::string &format) { return true; }
+
+  bool m_delayed;
+  std::string m_format;
+};
diff --git a/xbmc/settings/lib/ISettingControlCreator.h b/xbmc/settings/lib/ISettingControlCreator.h
new file mode 100644 (file)
index 0000000..a3c8537
--- /dev/null
@@ -0,0 +1,42 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string>
+
+class ISettingControl;
+
+/*!
+ \ingroup settings
+ \brief Interface for creating a new setting control of a custom setting control type.
+ */
+class ISettingControlCreator
+{
+public:
+  virtual ~ISettingControlCreator() { }
+
+  /*!
+   \brief Creates a new setting control of the given custom setting control type.
+
+   \param controlType string representation of the setting control type
+   \return A new setting control object of the given (custom) setting control type or NULL if the setting control type is unknown
+   */
+  virtual ISettingControl* CreateControl(const std::string &controlType) const = 0;
+};
diff --git a/xbmc/settings/lib/ISettingCreator.h b/xbmc/settings/lib/ISettingCreator.h
new file mode 100644 (file)
index 0000000..945915e
--- /dev/null
@@ -0,0 +1,45 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string>
+
+class CSetting;
+class CSettingsManager;
+
+/*!
+ \ingroup settings
+ \brief Interface for creating a new setting of a custom setting type.
+ */
+class ISettingCreator
+{
+public:
+  virtual ~ISettingCreator() { }
+
+  /*!
+   \brief Creates a new setting of the given custom setting type.
+
+   \param settingType string representation of the setting type
+   \param settingId Identifier of the setting to be created
+   \param settingsManager Reference to the settings manager
+   \return A new setting object of the given (custom) setting type or NULL if the setting type is unknown
+   */
+  virtual CSetting* CreateSetting(const std::string &settingType, const std::string &settingId, CSettingsManager *settingsManager = NULL) const = 0;
+};
diff --git a/xbmc/settings/lib/ISettingsHandler.h b/xbmc/settings/lib/ISettingsHandler.h
new file mode 100644 (file)
index 0000000..b31d88b
--- /dev/null
@@ -0,0 +1,69 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/*!
+ \ingroup settings
+ \brief Interface defining methods being called by the settings system if an
+ action is performed on multiple/all settings
+ */
+class ISettingsHandler
+{
+public:
+  virtual ~ISettingsHandler() { }
+
+  /*!
+   \brief Settings loading has been initiated.
+
+   \return True if the settings should be loaded, false if the loading should be aborted.
+   */
+  virtual bool OnSettingsLoading() { return true; }
+  /*!
+   \brief Settings have been loaded.
+
+   This callback can be used to trigger loading other settings.
+   */
+  virtual void OnSettingsLoaded() { }
+  /*!
+   \brief Settings saving has been initiated.
+
+   \return True if the settings should be saved, false if the saving should be aborted.
+   */
+  virtual bool OnSettingsSaving() const { return true; }
+  /*!
+   \brief Settings have been saved.
+
+   This callback can be used to trigger saving other settings.
+   */
+  virtual void OnSettingsSaved() const { }
+  /*!
+   \brief Setting values have been unloaded.
+
+   This callback can be used to trigger uninitializing any state variables
+   (e.g. before re-loading the settings).
+   */
+  virtual void OnSettingsUnloaded() { }
+  /*!
+   \brief Settings have been cleared.
+
+   This callback can be used to trigger clearing any state variables.
+   */
+  virtual void OnSettingsCleared() { }
+};
diff --git a/xbmc/settings/lib/ISubSettings.h b/xbmc/settings/lib/ISubSettings.h
new file mode 100644 (file)
index 0000000..707a32d
--- /dev/null
@@ -0,0 +1,52 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+class TiXmlNode;
+
+/*!
+ \ingroup settings
+ \brief Interface defining methods to load additional setting values from an
+ XML file being loaded by the settings system.
+ */
+class ISubSettings
+{
+public:
+  virtual ~ISubSettings() { }
+
+  /*!
+   \brief Load settings from the given XML node.
+
+   \param settings XML node containing setting values
+   \return True if loading the settings was successful, false otherwise.
+   */
+  virtual bool Load(const TiXmlNode *settings) { return true; }
+  /*!
+   \brief Save settings to the given XML node.
+
+   \param settings XML node in which the settings will be saved
+   \return True if saving the settings was successful, false otherwise.
+   */
+  virtual bool Save(TiXmlNode *settings) const { return true; }
+  /*!
+   \brief Clear any loaded setting values.
+   */
+  virtual void Clear() { }
+};
diff --git a/xbmc/settings/lib/Makefile b/xbmc/settings/lib/Makefile
new file mode 100644 (file)
index 0000000..c038f12
--- /dev/null
@@ -0,0 +1,15 @@
+SRCS=ISetting.cpp \
+     ISettingControl.cpp \
+     Setting.cpp \
+     SettingCategoryAccess.cpp \
+     SettingConditions.cpp \
+     SettingDependency.cpp \
+     SettingSection.cpp \
+     SettingsManager.cpp \
+     SettingRequirement.cpp \
+     SettingUpdate.cpp \
+
+LIB=settings_lib.a
+
+include ../../../Makefile.include
+-include $(patsubst %.cpp,%.P,$(patsubst %.c,%.P,$(SRCS)))
diff --git a/xbmc/settings/lib/Setting.cpp b/xbmc/settings/lib/Setting.cpp
new file mode 100644 (file)
index 0000000..5106a45
--- /dev/null
@@ -0,0 +1,1288 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sstream>
+
+#include "Setting.h"
+#include "SettingDefinitions.h"
+#include "SettingsManager.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+#include "utils/XBMCTinyXML.h"
+#include "utils/XMLUtils.h"
+
+CSetting::CSetting(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : ISetting(id, settingsManager),
+    m_callback(NULL),
+    m_label(-1), m_help(-1),
+    m_level(SettingLevelStandard),
+    m_control(NULL),
+    m_changed(false)
+{ }
+  
+CSetting::CSetting(const std::string &id, const CSetting &setting)
+  : ISetting(id, setting.m_settingsManager),
+    m_callback(NULL),
+    m_label(-1), m_help(-1),
+    m_level(SettingLevelStandard),
+    m_control(NULL),
+    m_changed(false)
+{
+  m_id = id;
+  Copy(setting);
+}
+
+CSetting::~CSetting()
+{
+  delete m_control;
+}
+
+bool CSetting::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  // handle <visible> conditions
+  if (!ISetting::Deserialize(node, update))
+    return false;
+
+  const TiXmlElement *element = node->ToElement();
+  if (element == NULL)
+    return false;
+
+  // get the attributes label and help
+  int tmp = -1;
+  if (element->QueryIntAttribute(SETTING_XML_ATTR_LABEL, &tmp) == TIXML_SUCCESS && tmp > 0)
+    m_label = tmp;
+  
+  tmp = -1;
+  if (element->QueryIntAttribute(SETTING_XML_ATTR_HELP, &tmp) == TIXML_SUCCESS && tmp > 0)
+    m_help = tmp;
+  const char *parentSetting = element->Attribute(SETTING_XML_ATTR_PARENT);
+  if (parentSetting != NULL)
+    m_parentSetting = parentSetting;
+
+  // get the <level>
+  int level = -1;
+  if (XMLUtils::GetInt(node, SETTING_XML_ELM_LEVEL, level))
+    m_level = (SettingLevel)level;
+    
+  if (m_level < (int)SettingLevelBasic || m_level > (int)SettingLevelInternal)
+    m_level = SettingLevelStandard;
+
+  const TiXmlNode *dependencies = node->FirstChild(SETTING_XML_ELM_DEPENDENCIES);
+  if (dependencies != NULL)
+  {
+    const TiXmlNode *dependencyNode = dependencies->FirstChild(SETTING_XML_ELM_DEPENDENCY);
+    while (dependencyNode != NULL)
+    {
+      CSettingDependency dependency(m_settingsManager);
+      if (dependency.Deserialize(dependencyNode))
+        m_dependencies.push_back(dependency);
+      else
+        CLog::Log(LOGWARNING, "CSetting: error reading <dependency> tag of \"%s\"", m_id.c_str());
+
+      dependencyNode = dependencyNode->NextSibling(SETTING_XML_ELM_DEPENDENCY);
+    }
+  }
+
+  const TiXmlElement *control = node->FirstChildElement(SETTING_XML_ELM_CONTROL);
+  if (control != NULL)
+  {
+    const char *controlType = control->Attribute(SETTING_XML_ATTR_TYPE);
+    if (controlType == NULL)
+    {
+      CLog::Log(LOGERROR, "CSetting: error reading \"type\" attribute of <control> tag of \"%s\"", m_id.c_str());
+      return false;
+    }
+
+    m_control = m_settingsManager->CreateControl(controlType);
+    if (m_control == NULL || !m_control->Deserialize(control, update))
+    {
+      CLog::Log(LOGERROR, "CSetting: error reading <control> tag of \"%s\"", m_id.c_str());
+      return false;
+    }
+  }
+  else if (!update && m_level < SettingLevelInternal)
+  {
+    CLog::Log(LOGERROR, "CSetting: missing <control> tag of \"%s\"", m_id.c_str());
+    return false;
+  }
+
+  const TiXmlNode *updates = node->FirstChild(SETTING_XML_ELM_UPDATES);
+  if (updates != NULL)
+  {
+    const TiXmlElement *updateElem = updates->FirstChildElement(SETTING_XML_ELM_UPDATE);
+    while (updateElem != NULL)
+    {
+      CSettingUpdate update;
+      if (update.Deserialize(updateElem))
+      {
+        if (!m_updates.insert(update).second)
+          CLog::Log(LOGWARNING, "CSetting: duplicate <update> definition for \"%s\"", m_id.c_str());
+      }
+      else
+        CLog::Log(LOGWARNING, "CSetting: error reading <update> tag of \"%s\"", m_id.c_str());
+
+      updateElem = updateElem->NextSiblingElement(SETTING_XML_ELM_UPDATE);
+    }
+  }
+    
+  return true;
+}
+  
+bool CSetting::IsEnabled() const
+{
+  bool enabled = true;
+  for (SettingDependencies::const_iterator depIt = m_dependencies.begin(); depIt != m_dependencies.end(); ++depIt)
+  {
+    if (depIt->GetType() != SettingDependencyTypeEnable)
+      continue;
+
+    if (!depIt->Check())
+    {
+      enabled = false;
+      break;
+    }
+  }
+
+  return enabled;
+}
+
+bool CSetting::IsVisible() const
+{
+  if (!ISetting::IsVisible())
+    return false;
+
+  bool visible = true;
+  for (SettingDependencies::const_iterator depIt = m_dependencies.begin(); depIt != m_dependencies.end(); ++depIt)
+  {
+    if (depIt->GetType() != SettingDependencyTypeVisible)
+      continue;
+
+    if (!depIt->Check())
+    {
+      visible = false;
+      break;
+    }
+  }
+
+  return visible;
+}
+
+bool CSetting::OnSettingChanging(const CSetting *setting)
+{
+  if (m_callback == NULL)
+    return true;
+    
+  return m_callback->OnSettingChanging(setting);
+}
+  
+void CSetting::OnSettingChanged(const CSetting *setting)
+{
+  if (m_callback == NULL)
+    return;
+
+  m_callback->OnSettingChanged(setting);
+}
+
+void CSetting::OnSettingAction(const CSetting *setting)
+{
+  if (m_callback == NULL)
+    return;
+
+  m_callback->OnSettingAction(setting);
+}
+
+bool CSetting::OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode)
+{
+  if (m_callback == NULL)
+    return false;
+
+  return m_callback->OnSettingUpdate(setting, oldSettingId, oldSettingNode);
+}
+
+void CSetting::OnSettingPropertyChanged(const CSetting *setting, const char *propertyName)
+{
+  if (m_callback == NULL)
+    return;
+
+  m_callback->OnSettingPropertyChanged(setting, propertyName);
+}
+
+void CSetting::Copy(const CSetting &setting)
+{
+  SetVisible(setting.IsVisible());
+  SetRequirementsMet(setting.MeetsRequirements());
+  m_callback = setting.m_callback;
+  m_label = setting.m_label;
+  m_help = setting.m_help;
+  m_level = setting.m_level;
+  
+  delete m_control;
+  if (setting.m_control != NULL)
+  {
+    m_control = m_settingsManager->CreateControl(setting.m_control->GetType());
+    *m_control = *setting.m_control;
+  }
+  else
+    m_control = NULL;
+
+  m_dependencies = setting.m_dependencies;
+  m_updates = setting.m_updates;
+  m_changed = setting.m_changed;
+}
+
+CSettingList::CSettingList(const std::string &id, CSetting *settingDefinition, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_definition(settingDefinition),
+    m_delimiter("|"),
+    m_minimum(0), m_maximum(-1)
+{ }
+
+CSettingList::CSettingList(const std::string &id, const CSettingList &setting)
+  : CSetting(id, setting),
+    m_definition(NULL),
+    m_delimiter("|"),
+    m_minimum(0), m_maximum(-1)
+{
+  copy(setting);
+}
+
+CSettingList::~CSettingList()
+{
+  m_values.clear();
+  m_defaults.clear();
+  delete m_definition;
+}
+
+CSetting* CSettingList::Clone(const std::string &id) const
+{
+  if (m_definition == NULL)
+    return NULL;
+
+  return new CSettingList(id, *this);
+}
+
+bool CSettingList::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (m_definition == NULL)
+    return false;
+
+  if (!CSetting::Deserialize(node, update))
+    return false;
+
+  const TiXmlElement *element = node->ToElement();
+  if (element == NULL)
+  {
+    CLog::Log(LOGWARNING, "CSettingList: unable to read type of list setting of %s", m_id.c_str());
+    return false;
+  }
+
+  if (!m_definition->Deserialize(node, update))
+    return false;
+
+  const TiXmlNode *constraints = node->FirstChild(SETTING_XML_ELM_CONSTRAINTS);
+  if (constraints != NULL)
+  {
+    // read the delimiter
+    std::string delimiter;
+    if (XMLUtils::GetString(constraints, SETTING_XML_ELM_DELIMITER, delimiter) && !delimiter.empty())
+      m_delimiter = delimiter;
+
+    XMLUtils::GetInt(constraints, SETTING_XML_ELM_MINIMUM, m_minimum);
+    if (m_minimum < 0)
+      m_minimum = 0;
+    XMLUtils::GetInt(constraints, SETTING_XML_ELM_MAXIMUM, m_maximum);
+    if (m_maximum <= 0)
+      m_maximum = -1;
+    else if (m_maximum < m_minimum)
+    {
+      CLog::Log(LOGWARNING, "CSettingList: invalid <minimum> (%d) and/or <maximum> (%d) of %s", m_minimum, m_maximum, m_id.c_str());
+      return false;
+    }
+  }
+
+  // read the default and initial values
+  std::string values;
+  if (XMLUtils::GetString(node, SETTING_XML_ELM_DEFAULT, values))
+  {
+    if (!fromString(values, m_defaults))
+    {
+      CLog::Log(LOGWARNING, "CSettingList: invalid <default> definition \"%s\" of %s", values.c_str(), m_id.c_str());
+      return false;
+    }
+    Reset();
+  }
+
+  return true;
+}
+
+int CSettingList::GetElementType() const
+{
+  CSharedLock lock(m_critical);
+  
+  if (m_definition == NULL)
+    return SettingTypeNone;
+
+  return m_definition->GetType();
+}
+
+bool CSettingList::FromString(const std::string &value)
+{
+  SettingPtrList values;
+  if (!fromString(value, values))
+    return false;
+
+  return SetValue(values);
+}
+
+std::string CSettingList::ToString() const
+{
+  return toString(m_values);
+}
+
+bool CSettingList::Equals(const std::string &value) const
+{
+  SettingPtrList values;
+  if (!fromString(value, values) ||
+      values.size() != m_values.size())
+    return false;
+
+  bool ret = true;
+  for (size_t index = 0; index < values.size(); index++)
+  {
+    if (!m_values[index]->Equals(values[index]->ToString()))
+    {
+      ret = false;
+      break;
+    }
+  }
+
+  return ret;
+}
+
+bool CSettingList::CheckValidity(const std::string &value) const
+{
+  SettingPtrList values;
+  return fromString(value, values);
+}
+
+void CSettingList::Reset()
+{
+  CExclusiveLock lock(m_critical);
+  SettingPtrList values;
+  for (SettingPtrList::const_iterator it = m_defaults.begin(); it != m_defaults.end(); ++it)
+    values.push_back(SettingPtr((*it)->Clone((*it)->GetId())));
+
+  SetValue(values);
+}
+
+bool CSettingList::FromString(const std::vector<std::string> &value)
+{
+  SettingPtrList values;
+  if (!fromValues(value, values))
+    return false;
+
+  return SetValue(values);
+}
+
+bool CSettingList::SetValue(const SettingPtrList &values)
+{
+  CExclusiveLock lock(m_critical);
+
+  if ((int)values.size() < m_minimum ||
+     (m_maximum > 0 && (int)values.size() > m_maximum))
+    return false;
+
+  bool equal = values.size() == m_values.size();
+  for (size_t index = 0; index < values.size(); index++)
+  {
+    if (values[index]->GetType() != GetElementType())
+      return false;
+
+    if (equal &&
+        !values[index]->Equals(m_values[index]->ToString()))
+      equal = false;
+  }
+
+  if (equal)
+    return true;
+
+  SettingPtrList oldValues = m_values;
+  m_values.clear();
+  m_values.insert(m_values.begin(), values.begin(), values.end());
+
+  if (!OnSettingChanging(this))
+  {
+    m_values = oldValues;
+
+    // the setting couldn't be changed because one of the
+    // callback handlers failed the OnSettingChanging()
+    // callback so we need to let all the callback handlers
+    // know that the setting hasn't changed
+    OnSettingChanging(this);
+    return false;
+  }
+
+  m_changed = (toString(m_values) == toString(m_defaults));
+  OnSettingChanged(this);
+  return true;
+}
+
+void CSettingList::SetDefault(const SettingPtrList &values)
+{
+  CExclusiveLock lock(m_critical);
+
+  m_defaults.clear();
+  m_defaults.insert(m_defaults.begin(), values.begin(), values.end());
+
+  if (!m_changed)
+  {
+    m_values.clear();
+    for (SettingPtrList::const_iterator it = m_defaults.begin(); it != m_defaults.end(); ++it)
+      m_values.push_back(SettingPtr((*it)->Clone((*it)->GetId())));
+  }
+}
+
+void CSettingList::copy(const CSettingList &setting)
+{
+  CSetting::Copy(setting);
+
+  copy(setting.m_values, m_values);
+  copy(setting.m_defaults, m_defaults);
+  
+  if (setting.m_definition != NULL)
+  {
+    CSetting *definitionCopy = setting.m_definition->Clone(m_id + ".definition");
+    if (definitionCopy != NULL)
+      m_definition = definitionCopy;
+  }
+
+  m_delimiter = setting.m_delimiter;
+  m_minimum = setting.m_minimum;
+  m_maximum = setting.m_maximum;
+}
+
+void CSettingList::copy(const SettingPtrList &srcValues, SettingPtrList &dstValues)
+{
+  dstValues.clear();
+
+  for (SettingPtrList::const_iterator itValue = srcValues.begin(); itValue != srcValues.end(); ++itValue)
+  {
+    if (*itValue == NULL)
+      continue;
+
+    CSetting *valueCopy = (*itValue)->Clone((*itValue)->GetId());
+    if (valueCopy == NULL)
+      continue;
+
+    dstValues.push_back(SettingPtr(valueCopy));
+  }
+}
+
+bool CSettingList::fromString(const std::string &strValue, SettingPtrList &values) const
+{
+  std::vector<std::string> strValues = StringUtils::Split(strValue, m_delimiter);
+  return fromValues(strValues, values);
+}
+
+bool CSettingList::fromValues(const std::vector<std::string> &strValues, SettingPtrList &values) const
+{
+  if ((int)strValues.size() < m_minimum ||
+     (m_maximum > 0 && (int)strValues.size() > m_maximum))
+    return false;
+
+  bool ret = true;
+  int index = 0;
+  for (std::vector<std::string>::const_iterator itValue = strValues.begin(); itValue != strValues.end(); ++itValue)
+  {
+    CSetting *settingValue = m_definition->Clone(StringUtils::Format("%s.%d", m_id.c_str(), index++));
+    if (settingValue == NULL ||
+        !settingValue->FromString(*itValue))
+    {
+      delete settingValue;
+      ret = false;
+      break;
+    }
+
+    values.push_back(SettingPtr(settingValue));
+  }
+
+  if (!ret)
+    values.clear();
+
+  return ret;
+}
+
+std::string CSettingList::toString(const SettingPtrList &values) const
+{
+  std::vector<std::string> strValues;
+  for (SettingPtrList::const_iterator it = values.begin(); it != values.end(); ++it)
+  {
+    if (*it != NULL)
+      strValues.push_back((*it)->ToString());
+  }
+
+  return StringUtils::Join(strValues, m_delimiter);
+}
+  
+CSettingBool::CSettingBool(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_value(false), m_default(false)
+{ }
+  
+CSettingBool::CSettingBool(const std::string &id, const CSettingBool &setting)
+  : CSetting(id, setting)
+{
+  copy(setting);
+}
+
+CSettingBool::CSettingBool(const std::string &id, int label, bool value, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_value(value), m_default(value)
+{
+  m_label = label;
+}
+
+CSetting* CSettingBool::Clone(const std::string &id) const
+{
+  return new CSettingBool(id, *this);
+}
+
+bool CSettingBool::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (!CSetting::Deserialize(node, update))
+    return false;
+    
+  // get the default value
+  bool value;
+  if (XMLUtils::GetBoolean(node, SETTING_XML_ELM_DEFAULT, value))
+    m_value = m_default = value;
+  else if (!update)
+  {
+    CLog::Log(LOGERROR, "CSettingBool: error reading the default value of \"%s\"", m_id.c_str());
+    return false;
+  }
+
+  return true;
+}
+  
+bool CSettingBool::FromString(const std::string &value)
+{
+  bool bValue;
+  if (!fromString(value, bValue))
+    return false;
+
+  return SetValue(bValue);
+}
+
+std::string CSettingBool::ToString() const
+{
+  return m_value ? "true" : "false";
+}
+
+bool CSettingBool::Equals(const std::string &value) const
+{
+  bool bValue;
+  return (fromString(value, bValue) && m_value == bValue);
+}
+
+bool CSettingBool::CheckValidity(const std::string &value) const
+{
+  bool bValue;
+  return fromString(value, bValue);
+}
+
+bool CSettingBool::SetValue(bool value)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (value == m_value)
+    return true;
+
+  bool oldValue = m_value;
+  m_value = value;
+
+  if (!OnSettingChanging(this))
+  {
+    m_value = oldValue;
+
+    // the setting couldn't be changed because one of the
+    // callback handlers failed the OnSettingChanging()
+    // callback so we need to let all the callback handlers
+    // know that the setting hasn't changed
+    OnSettingChanging(this);
+    return false;
+  }
+
+  m_changed = m_value != m_default;
+  OnSettingChanged(this);
+  return true;
+}
+  
+void CSettingBool::SetDefault(bool value)
+{
+  CExclusiveLock lock(m_critical);
+
+  m_default = value;
+  if (!m_changed)
+    m_value = m_default;
+}
+
+void CSettingBool::copy(const CSettingBool &setting)
+{
+  CSetting::Copy(setting);
+
+  m_value = setting.m_value;
+  m_default = setting.m_default;
+}
+  
+bool CSettingBool::fromString(const std::string &strValue, bool &value) const
+{
+  if (StringUtils::EqualsNoCase(strValue, "true"))
+  {
+    value = true;
+    return true;
+  }
+  if (StringUtils::EqualsNoCase(strValue, "false"))
+  {
+    value = false;
+    return true;
+  }
+
+  return false;
+}
+
+CSettingInt::CSettingInt(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_value(0), m_default(0),
+    m_min(0), m_step(1), m_max(0)
+{ }
+  
+CSettingInt::CSettingInt(const std::string &id, const CSettingInt &setting)
+  : CSetting(id, setting)
+{
+  copy(setting);
+}
+
+CSettingInt::CSettingInt(const std::string &id, int label, int value, int minimum, int step, int maximum, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_value(value), m_default(value),
+    m_min(minimum), m_step(step), m_max(maximum)
+{
+  m_label = label;
+}
+
+CSettingInt::CSettingInt(const std::string &id, int label, int value, const StaticIntegerSettingOptions &options, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_value(value), m_default(value),
+    m_min(0), m_step(1), m_max(0),
+    m_options(options)
+{
+  m_label = label;
+}
+
+CSetting* CSettingInt::Clone(const std::string &id) const
+{
+  return new CSettingInt(id, *this);
+}
+
+bool CSettingInt::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (!CSetting::Deserialize(node, update))
+    return false;
+
+  // get the default value
+  int value;
+  if (XMLUtils::GetInt(node, SETTING_XML_ELM_DEFAULT, value))
+    m_value = m_default = value;
+  else if (!update)
+  {
+    CLog::Log(LOGERROR, "CSettingInt: error reading the default value of \"%s\"", m_id.c_str());
+    return false;
+  }
+
+  const TiXmlNode *constraints = node->FirstChild(SETTING_XML_ELM_CONSTRAINTS);
+  if (constraints != NULL)
+  {
+    // get the entries
+    const TiXmlNode *options = constraints->FirstChild(SETTING_XML_ELM_OPTIONS);
+    if (options != NULL && options->FirstChild() != NULL)
+    {
+      if (options->FirstChild()->Type() == TiXmlNode::TINYXML_TEXT)
+        m_optionsFiller = options->FirstChild()->ValueStr();
+      else
+      {
+        m_options.clear();
+        const TiXmlElement *optionElement = options->FirstChildElement(SETTING_XML_ELM_OPTION);
+        while (optionElement != NULL)
+        {
+          std::pair<int, int> entry;
+          if (optionElement->QueryIntAttribute(SETTING_XML_ATTR_LABEL, &entry.first) == TIXML_SUCCESS && entry.first > 0)
+          {
+            entry.second = strtol(optionElement->FirstChild()->Value(), NULL, 10);
+            m_options.push_back(entry);
+          }
+
+          optionElement = optionElement->NextSiblingElement(SETTING_XML_ELM_OPTION);
+        }
+      }
+    }
+
+    // get minimum
+    XMLUtils::GetInt(constraints, SETTING_XML_ELM_MINIMUM, m_min);
+    // get step
+    XMLUtils::GetInt(constraints, SETTING_XML_ELM_STEP, m_step);
+    // get maximum
+    XMLUtils::GetInt(constraints, SETTING_XML_ELM_MAXIMUM, m_max);
+  }
+
+  return true;
+}
+
+bool CSettingInt::FromString(const std::string &value)
+{
+  int iValue;
+  if (!fromString(value, iValue))
+    return false;
+
+  return SetValue(iValue);
+}
+
+std::string CSettingInt::ToString() const
+{
+  std::ostringstream oss;
+  oss << m_value;
+
+  return oss.str();
+}
+
+bool CSettingInt::Equals(const std::string &value) const
+{
+  int iValue;
+  return (fromString(value, iValue) && m_value == iValue);
+}
+
+bool CSettingInt::CheckValidity(const std::string &value) const
+{
+  int iValue;
+  if (!fromString(value, iValue))
+    return false;
+
+  return CheckValidity(iValue);
+}
+
+bool CSettingInt::CheckValidity(int value) const
+{
+  if (!m_options.empty())
+  {
+    //if the setting is an std::map, check if we got a valid value before assigning it
+    bool ok = false;
+    for (StaticIntegerSettingOptions::const_iterator it = m_options.begin(); it != m_options.end(); ++it)
+    {
+      if (it->second == value)
+      {
+        ok = true;
+        break;
+      }
+    }
+
+    if (!ok)
+      return false;
+  }
+  else if (m_optionsFiller.empty() && m_min != m_max &&
+          (value < m_min || value > m_max))
+    return false;
+
+  return true;
+}
+
+bool CSettingInt::SetValue(int value)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (value == m_value)
+    return true;
+
+  if (!CheckValidity(value))
+    return false;
+
+  int oldValue = m_value;
+  m_value = value;
+
+  if (!OnSettingChanging(this))
+  {
+    m_value = oldValue;
+
+    // the setting couldn't be changed because one of the
+    // callback handlers failed the OnSettingChanging()
+    // callback so we need to let all the callback handlers
+    // know that the setting hasn't changed
+    OnSettingChanging(this);
+    return false;
+  }
+
+  m_changed = m_value != m_default;
+  OnSettingChanged(this);
+  return true;
+}
+
+void CSettingInt::SetDefault(int value)
+{
+  CExclusiveLock lock(m_critical);
+
+  m_default = value;
+  if (!m_changed)
+    m_value = m_default;
+}
+
+SettingOptionsType CSettingInt::GetOptionsType() const
+{
+  CSharedLock lock(m_critical);
+  if (!m_options.empty())
+    return SettingOptionsTypeStatic;
+  if (!m_optionsFiller.empty())
+    return SettingOptionsTypeDynamic;
+
+  return SettingOptionsTypeNone;
+}
+
+DynamicIntegerSettingOptions CSettingInt::UpdateDynamicOptions()
+{
+  CExclusiveLock lock(m_critical);
+  DynamicIntegerSettingOptions options;
+  if (m_optionsFiller.empty() || m_settingsManager == NULL)
+    return options;
+
+  IntegerSettingOptionsFiller filler = (IntegerSettingOptionsFiller)m_settingsManager->GetSettingOptionsFiller(this);
+  if (filler == NULL)
+    return options;
+
+  int bestMatchingValue = m_value;
+  filler(this, options, bestMatchingValue);
+
+  if (bestMatchingValue != m_value)
+    SetValue(bestMatchingValue);
+
+  bool changed = m_dynamicOptions.size() != options.size();
+  if (!changed)
+  {
+    for (size_t index = 0; index < options.size(); index++)
+    {
+      if (options[index].first.compare(m_dynamicOptions[index].first) != 0 ||
+          options[index].second != m_dynamicOptions[index].second)
+      {
+        changed = true;
+        break;
+      }
+    }
+  }
+
+  if (changed)
+  {
+    m_dynamicOptions = options;
+    OnSettingPropertyChanged(this, "options");
+  }
+
+  return options;
+}
+
+void CSettingInt::copy(const CSettingInt &setting)
+{
+  CSetting::Copy(setting);
+
+  CExclusiveLock lock(m_critical);
+
+  m_value = setting.m_value;
+  m_default = setting.m_default;
+  m_min = setting.m_min;
+  m_step = setting.m_step;
+  m_max = setting.m_max;
+  m_options = setting.m_options;
+  m_optionsFiller = setting.m_optionsFiller;
+}
+
+bool CSettingInt::fromString(const std::string &strValue, int &value)
+{
+  if (strValue.empty())
+    return false;
+
+  char *end = NULL;
+  value = (int)strtol(strValue.c_str(), &end, 10);
+  if (end != NULL && *end != '\0')
+    return false; 
+
+  return true;
+}
+
+CSettingNumber::CSettingNumber(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_value(0.0), m_default(0.0),
+    m_min(0.0), m_step(1.0), m_max(0.0)
+{ }
+  
+CSettingNumber::CSettingNumber(const std::string &id, const CSettingNumber &setting)
+  : CSetting(id, setting)
+{
+  copy(setting);
+}
+
+CSettingNumber::CSettingNumber(const std::string &id, int label, float value, float minimum, float step, float maximum, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_value(value), m_default(value),
+    m_min(minimum), m_step(step), m_max(maximum)
+{
+  m_label = label;
+}
+
+CSetting* CSettingNumber::Clone(const std::string &id) const
+{
+  return new CSettingNumber(id, *this);
+}
+
+bool CSettingNumber::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (!CSetting::Deserialize(node, update))
+    return false;
+    
+  // get the default value
+  double value;
+  if (XMLUtils::GetDouble(node, SETTING_XML_ELM_DEFAULT, value))
+    m_value = m_default = value;
+  else if (!update)
+  {
+    CLog::Log(LOGERROR, "CSettingNumber: error reading the default value of \"%s\"", m_id.c_str());
+    return false;
+  }
+    
+  const TiXmlNode *constraints = node->FirstChild(SETTING_XML_ELM_CONSTRAINTS);
+  if (constraints != NULL)
+  {
+    // get the minimum value
+    XMLUtils::GetDouble(constraints, SETTING_XML_ELM_MINIMUM, m_min);
+    // get the step value
+    XMLUtils::GetDouble(constraints, SETTING_XML_ELM_STEP, m_step);
+    // get the maximum value
+    XMLUtils::GetDouble(constraints, SETTING_XML_ELM_MAXIMUM, m_max);
+  }
+
+  return true;
+}
+
+bool CSettingNumber::FromString(const std::string &value)
+{
+  double dValue;
+  if (!fromString(value, dValue))
+    return false;
+
+  return SetValue(dValue);
+}
+
+std::string CSettingNumber::ToString() const
+{
+  std::ostringstream oss;
+  oss << m_value;
+
+  return oss.str();
+}
+
+bool CSettingNumber::Equals(const std::string &value) const
+{
+  double dValue;
+  CSharedLock lock(m_critical);
+  return (fromString(value, dValue) && m_value == dValue);
+}
+
+bool CSettingNumber::CheckValidity(const std::string &value) const
+{
+  double dValue;
+  if (!fromString(value, dValue))
+    return false;
+
+  return CheckValidity(dValue);
+}
+
+bool CSettingNumber::CheckValidity(double value) const
+{
+  CSharedLock lock(m_critical);
+  if (m_min != m_max &&
+     (value < m_min || value > m_max))
+    return false;
+
+  return true;
+}
+
+bool CSettingNumber::SetValue(double value)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (value == m_value)
+    return true;
+
+  if (!CheckValidity(value))
+    return false;
+
+  double oldValue = m_value;
+  m_value = value;
+
+  if (!OnSettingChanging(this))
+  {
+    m_value = oldValue;
+
+    // the setting couldn't be changed because one of the
+    // callback handlers failed the OnSettingChanging()
+    // callback so we need to let all the callback handlers
+    // know that the setting hasn't changed
+    OnSettingChanging(this);
+    return false;
+  }
+
+  m_changed = m_value != m_default;
+  OnSettingChanged(this);
+  return true;
+}
+
+void CSettingNumber::SetDefault(double value)
+{
+  CExclusiveLock lock(m_critical);
+
+  m_default = value;
+  if (!m_changed)
+    m_value = m_default;
+}
+
+void CSettingNumber::copy(const CSettingNumber &setting)
+{
+  CSetting::Copy(setting);
+  CExclusiveLock lock(m_critical);
+
+  m_value = setting.m_value;
+  m_default = setting.m_default;
+  m_min = setting.m_min;
+  m_step = setting.m_step;
+  m_max = setting.m_max;
+}
+
+bool CSettingNumber::fromString(const std::string &strValue, double &value)
+{
+  if (strValue.empty())
+    return false;
+
+  char *end = NULL;
+  value = (int)strtod(strValue.c_str(), &end);
+  if (end != NULL && *end != '\0')
+    return false;
+
+  return true;
+}
+
+CSettingString::CSettingString(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_allowEmpty(false)
+{ }
+  
+CSettingString::CSettingString(const std::string &id, const CSettingString &setting)
+  : CSetting(id, setting)
+{
+  copy(setting);
+}
+
+CSettingString::CSettingString(const std::string &id, int label, const std::string &value, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager),
+    m_value(value), m_default(value),
+    m_allowEmpty(false)
+{
+  m_label = label;
+}
+
+CSetting* CSettingString::Clone(const std::string &id) const
+{
+  return new CSettingString(id, *this);
+}
+
+bool CSettingString::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (!CSetting::Deserialize(node, update))
+    return false;
+
+  const TiXmlNode *constraints = node->FirstChild(SETTING_XML_ELM_CONSTRAINTS);
+  if (constraints != NULL)
+  {
+    // get allowempty (needs to be parsed before parsing the default value)
+    XMLUtils::GetBoolean(constraints, SETTING_XML_ELM_ALLOWEMPTY, m_allowEmpty);
+
+    // get the entries
+    const TiXmlNode *options = constraints->FirstChild(SETTING_XML_ELM_OPTIONS);
+    if (options != NULL && options->FirstChild() != NULL &&
+        options->FirstChild()->Type() == TiXmlNode::TINYXML_TEXT)
+      m_optionsFiller = options->FirstChild()->ValueStr();
+  }
+
+  // get the default value
+  CStdString value;
+  if (XMLUtils::GetString(node, SETTING_XML_ELM_DEFAULT, value) && !value.empty())
+    m_value = m_default = value;
+  else if (!update && !m_allowEmpty)
+  {
+    CLog::Log(LOGERROR, "CSettingString: error reading the default value of \"%s\"", m_id.c_str());
+    return false;
+  }
+
+  return true;
+}
+
+bool CSettingString::CheckValidity(const std::string &value) const
+{
+  CSharedLock lock(m_critical);
+  if (!m_allowEmpty && value.empty())
+    return false;
+
+  return true;
+}
+
+bool CSettingString::SetValue(const std::string &value)
+{
+  CExclusiveLock lock(m_critical);
+
+  if (value == m_value)
+    return true;
+    
+  if (!CheckValidity(value))
+    return false;
+
+  std::string oldValue = m_value;
+  m_value = value;
+
+  if (!OnSettingChanging(this))
+  {
+    m_value = oldValue;
+
+    // the setting couldn't be changed because one of the
+    // callback handlers failed the OnSettingChanging()
+    // callback so we need to let all the callback handlers
+    // know that the setting hasn't changed
+    OnSettingChanging(this);
+    return false;
+  }
+
+  m_changed = m_value != m_default;
+  OnSettingChanged(this);
+  return true;
+}
+
+void CSettingString::SetDefault(const std::string &value)
+{
+  CSharedLock lock(m_critical);
+
+  m_default = value;
+  if (!m_changed)
+    m_value = m_default;
+}
+
+SettingOptionsType CSettingString::GetOptionsType() const
+{
+  CSharedLock lock(m_critical);
+  if (!m_optionsFiller.empty())
+    return SettingOptionsTypeDynamic;
+
+  return SettingOptionsTypeNone;
+}
+
+DynamicStringSettingOptions CSettingString::UpdateDynamicOptions()
+{
+  CExclusiveLock lock(m_critical);
+  DynamicStringSettingOptions options;
+  if (m_optionsFiller.empty() || m_settingsManager == NULL)
+    return options;
+
+  StringSettingOptionsFiller filler = (StringSettingOptionsFiller)m_settingsManager->GetSettingOptionsFiller(this);
+  if (filler == NULL)
+    return options;
+
+  std::string bestMatchingValue = m_value;
+  filler(this, options, bestMatchingValue);
+
+  if (bestMatchingValue != m_value)
+    SetValue(bestMatchingValue);
+
+  // check if the list of items has changed
+  bool changed = m_dynamicOptions.size() != options.size();
+  if (!changed)
+  {
+    for (size_t index = 0; index < options.size(); index++)
+    {
+      if (options[index].first.compare(m_dynamicOptions[index].first) != 0 ||
+          options[index].second.compare(m_dynamicOptions[index].second) != 0)
+      {
+        changed = true;
+        break;
+      }
+    }
+  }
+
+  if (changed)
+  {
+    m_dynamicOptions = options;
+    OnSettingPropertyChanged(this, "options");
+  }
+
+  return options;
+}
+
+void CSettingString::copy(const CSettingString &setting)
+{
+  CSetting::Copy(setting);
+
+  CExclusiveLock lock(m_critical);
+  m_value = setting.m_value;
+  m_default = setting.m_default;
+  m_allowEmpty = setting.m_allowEmpty;
+}
+  
+CSettingAction::CSettingAction(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : CSetting(id, settingsManager)
+{ }
+  
+CSettingAction::CSettingAction(const std::string &id, const CSettingAction &setting)
+  : CSetting(id, setting)
+{ }
+
+CSetting* CSettingAction::Clone(const std::string &id) const
+{
+  return new CSettingAction(id, *this);
+}
+
+bool CSettingAction::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  CSharedLock lock(m_critical);
+
+  if (!CSetting::Deserialize(node, update))
+    return false;
+    
+  return true;
+}
diff --git a/xbmc/settings/lib/Setting.h b/xbmc/settings/lib/Setting.h
new file mode 100644 (file)
index 0000000..a3adcc1
--- /dev/null
@@ -0,0 +1,405 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+#include <boost/shared_ptr.hpp>
+
+#include "ISetting.h"
+#include "ISettingCallback.h"
+#include "ISettingControl.h"
+#include "SettingDependency.h"
+#include "SettingUpdate.h"
+#include "threads/SharedSection.h"
+
+/*!
+ \ingroup settings
+ \brief Basic setting types available in the settings system.
+ */
+typedef enum {
+  SettingTypeNone = 0,
+  SettingTypeBool,
+  SettingTypeInteger,
+  SettingTypeNumber,
+  SettingTypeString,
+  SettingTypeAction,
+  SettingTypeList
+} SettingType;
+
+/*!
+ \ingroup settings
+ \brief Levels which every setting is assigned to.
+ */
+typedef enum {
+  SettingLevelBasic  = 0,
+  SettingLevelStandard,
+  SettingLevelAdvanced,
+  SettingLevelExpert,
+  SettingLevelInternal
+} SettingLevel;
+
+typedef enum {
+  SettingOptionsTypeNone = 0,
+  SettingOptionsTypeStatic,
+  SettingOptionsTypeDynamic
+} SettingOptionsType;
+
+typedef std::pair<int, int> StaticIntegerSettingOption;
+typedef std::vector<StaticIntegerSettingOption> StaticIntegerSettingOptions;
+typedef std::pair<std::string, int> DynamicIntegerSettingOption;
+typedef std::vector<DynamicIntegerSettingOption> DynamicIntegerSettingOptions;
+typedef std::pair<std::string, std::string> DynamicStringSettingOption;
+typedef std::vector<DynamicStringSettingOption> DynamicStringSettingOptions;
+
+/*!
+ \ingroup settings
+ \brief Setting base class containing all the properties which are common to
+ all settings independent of the setting type.
+ */
+class CSetting : public ISetting,
+                 protected ISettingCallback
+{
+public:
+  CSetting(const std::string &id, CSettingsManager *settingsManager = NULL);
+  CSetting(const std::string &id, const CSetting &setting);
+  virtual ~CSetting();
+
+  virtual CSetting* Clone(const std::string &id) const = 0;
+
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  virtual int GetType() const = 0;
+  virtual bool FromString(const std::string &value) = 0;
+  virtual std::string ToString() const = 0;
+  virtual bool Equals(const std::string &value) const = 0;
+  virtual bool CheckValidity(const std::string &value) const = 0;
+  virtual void Reset() = 0;
+
+  int GetLabel() const { return m_label; }
+  void SetLabel(int label) { m_label = label; }
+  int GetHelp() const { return m_help; }
+  void SetHelp(int help) { m_help = help; }
+  bool IsEnabled() const;
+  const std::string& GetParent() const { return m_parentSetting; }
+  SettingLevel GetLevel() const { return m_level; }
+  const ISettingControl* GetControl() const { return m_control; }
+  void SetControl(ISettingControl* control) { m_control = control; }
+  const SettingDependencies& GetDependencies() const { return m_dependencies; }
+  const std::set<CSettingUpdate>& GetUpdates() const { return m_updates; }
+
+  // overrides of ISetting
+  virtual bool IsVisible() const;
+
+protected:
+  friend class CSettingsManager;
+
+  virtual bool OnSettingChanging(const CSetting *setting);
+  virtual void OnSettingChanged(const CSetting *setting);
+  virtual void OnSettingAction(const CSetting *setting);
+  virtual bool OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode);
+  virtual void OnSettingPropertyChanged(const CSetting *setting, const char *propertyName);
+
+  void Copy(const CSetting &setting);
+
+  ISettingCallback *m_callback;
+  int m_label;
+  int m_help;
+  std::string m_parentSetting;
+  SettingLevel m_level;
+  ISettingControl *m_control;
+  SettingDependencies m_dependencies;
+  std::set<CSettingUpdate> m_updates;
+  bool m_changed;
+  CSharedSection m_critical;
+};
+
+typedef boost::shared_ptr<CSetting> SettingPtr;
+
+typedef std::vector<CSetting *> SettingList;
+typedef std::vector<SettingPtr> SettingPtrList;
+
+/*!
+ \ingroup settings
+ \brief List setting implementation
+ \sa CSetting
+ */
+class CSettingList : public CSetting
+{
+public:
+  CSettingList(const std::string &id, CSetting *settingDefinition, CSettingsManager *settingsManager = NULL);
+  CSettingList(const std::string &id, const CSettingList &setting);
+  virtual ~CSettingList();
+
+  virtual CSetting* Clone(const std::string &id) const;
+
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  virtual int GetType() const { return SettingTypeList; }
+  virtual bool FromString(const std::string &value);
+  virtual std::string ToString() const;
+  virtual bool Equals(const std::string &value) const;
+  virtual bool CheckValidity(const std::string &value) const;
+  virtual void Reset();
+  
+  int GetElementType() const;
+  const CSetting* GetDefinition() const { return m_definition; }
+
+  const std::string& GetDelimiter() const { return m_delimiter; }
+  int GetMinimum() const { return m_minimum; }
+  int GetMaximum() const { return m_maximum; }
+  
+  bool FromString(const std::vector<std::string> &value);
+
+  const SettingPtrList& GetValue() const { return m_values; }
+  bool SetValue(const SettingPtrList &values);
+  const SettingPtrList& GetDefault() const { return m_defaults; }
+  void SetDefault(const SettingPtrList &values);
+
+protected:
+  void copy(const CSettingList &setting);
+  static void copy(const SettingPtrList &srcValues, SettingPtrList &dstValues);
+  bool fromString(const std::string &strValue, SettingPtrList &values) const;
+  bool fromValues(const std::vector<std::string> &strValues, SettingPtrList &values) const;
+  std::string toString(const SettingPtrList &values) const;
+
+  SettingPtrList m_values;
+  SettingPtrList m_defaults;
+  CSetting *m_definition;
+  std::string m_delimiter;
+  int m_minimum;
+  int m_maximum;
+};
+
+/*!
+ \ingroup settings
+ \brief Boolean setting implementation.
+ \sa CSetting
+ */
+class CSettingBool : public CSetting
+{
+public:
+  CSettingBool(const std::string &id, CSettingsManager *settingsManager = NULL);
+  CSettingBool(const std::string &id, const CSettingBool &setting);
+  CSettingBool(const std::string &id, int label, bool value, CSettingsManager *settingsManager = NULL);
+  virtual ~CSettingBool() { }
+
+  virtual CSetting* Clone(const std::string &id) const;
+
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  virtual int GetType() const { return SettingTypeBool; }
+  virtual bool FromString(const std::string &value);
+  virtual std::string ToString() const;
+  virtual bool Equals(const std::string &value) const;
+  virtual bool CheckValidity(const std::string &value) const;
+  virtual void Reset() { SetValue(m_default); }
+
+  bool GetValue() const { CSharedLock lock(m_critical); return m_value; }
+  bool SetValue(bool value);
+  bool GetDefault() const { return m_default; }
+  void SetDefault(bool value);
+
+private:
+  void copy(const CSettingBool &setting);
+  bool fromString(const std::string &strValue, bool &value) const;
+
+  bool m_value;
+  bool m_default;
+};
+
+/*!
+ \ingroup settings
+ \brief Integer setting implementation
+ \sa CSetting
+ */
+class CSettingInt : public CSetting
+{
+public:
+  CSettingInt(const std::string &id, CSettingsManager *settingsManager = NULL);
+  CSettingInt(const std::string &id, const CSettingInt &setting);
+  CSettingInt(const std::string &id, int label, int value, int minimum, int step, int maximum, CSettingsManager *settingsManager = NULL);
+  CSettingInt(const std::string &id, int label, int value, const StaticIntegerSettingOptions &options, CSettingsManager *settingsManager = NULL);
+  virtual ~CSettingInt() { }
+
+  virtual CSetting* Clone(const std::string &id) const;
+
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  virtual int GetType() const { return SettingTypeInteger; }
+  virtual bool FromString(const std::string &value);
+  virtual std::string ToString() const;
+  virtual bool Equals(const std::string &value) const;
+  virtual bool CheckValidity(const std::string &value) const;
+  virtual bool CheckValidity(int value) const;
+  virtual void Reset() { SetValue(m_default); }
+
+  int GetValue() const { CSharedLock lock(m_critical); return m_value; }
+  bool SetValue(int value);
+  int GetDefault() const { return m_default; }
+  void SetDefault(int value);
+
+  int GetMinimum() const { return m_min; }
+  int GetStep() const { return m_step; }
+  int GetMaximum() const { return m_max; }
+
+  SettingOptionsType GetOptionsType() const;
+  const StaticIntegerSettingOptions& GetOptions() const { return m_options; }
+  const std::string& GetOptionsFiller() const { return m_optionsFiller; }
+  DynamicIntegerSettingOptions UpdateDynamicOptions();
+
+private:
+  void copy(const CSettingInt &setting);
+  static bool fromString(const std::string &strValue, int &value);
+
+  int m_value;
+  int m_default;
+  int m_min;
+  int m_step;
+  int m_max;
+  StaticIntegerSettingOptions m_options;
+  std::string m_optionsFiller;
+  DynamicIntegerSettingOptions m_dynamicOptions;
+};
+
+/*!
+ \ingroup settings
+ \brief Real number setting implementation.
+ \sa CSetting
+ */
+class CSettingNumber : public CSetting
+{
+public:
+  CSettingNumber(const std::string &id, CSettingsManager *settingsManager = NULL);
+  CSettingNumber(const std::string &id, const CSettingNumber &setting);
+  CSettingNumber(const std::string &id, int label, float value, float minimum, float step, float maximum, CSettingsManager *settingsManager = NULL);
+  virtual ~CSettingNumber() { }
+
+  virtual CSetting* Clone(const std::string &id) const;
+
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  virtual int GetType() const { return SettingTypeNumber; }
+  virtual bool FromString(const std::string &value);
+  virtual std::string ToString() const;
+  virtual bool Equals(const std::string &value) const;
+  virtual bool CheckValidity(const std::string &value) const;
+  virtual bool CheckValidity(double value) const;
+  virtual void Reset() { SetValue(m_default); }
+
+  double GetValue() const { CSharedLock lock(m_critical); return m_value; }
+  bool SetValue(double value);
+  double GetDefault() const { return m_default; }
+  void SetDefault(double value);
+
+  double GetMinimum() const { return m_min; }
+  double GetStep() const { return m_step; }
+  double GetMaximum() const { return m_max; }
+
+private:
+  virtual void copy(const CSettingNumber &setting);
+  static bool fromString(const std::string &strValue, double &value);
+
+  double m_value;
+  double m_default;
+  double m_min;
+  double m_step;
+  double m_max;
+};
+
+/*!
+ \ingroup settings
+ \brief String setting implementation.
+ \sa CSetting
+ */
+class CSettingString : public CSetting
+{
+public:
+  CSettingString(const std::string &id, CSettingsManager *settingsManager = NULL);
+  CSettingString(const std::string &id, const CSettingString &setting);
+  CSettingString(const std::string &id, int label, const std::string &value, CSettingsManager *settingsManager = NULL);
+  virtual ~CSettingString() { }
+
+  virtual CSetting* Clone(const std::string &id) const;
+
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  virtual int GetType() const { return SettingTypeString; }
+  virtual bool FromString(const std::string &value) { return SetValue(value); }
+  virtual std::string ToString() const { return m_value; }
+  virtual bool Equals(const std::string &value) const { return m_value == value; }
+  virtual bool CheckValidity(const std::string &value) const;
+  virtual void Reset() { SetValue(m_default); }
+
+  virtual const std::string& GetValue() const { CSharedLock lock(m_critical); return m_value; }
+  virtual bool SetValue(const std::string &value);
+  virtual const std::string& GetDefault() const { return m_default; }
+  virtual void SetDefault(const std::string &value);
+
+  virtual bool AllowEmpty() const { return m_allowEmpty; }
+
+  SettingOptionsType GetOptionsType() const;
+  const std::string& GetOptionsFiller() const { return m_optionsFiller; }
+  DynamicStringSettingOptions UpdateDynamicOptions();
+
+protected:
+  virtual void copy(const CSettingString &setting);
+
+  std::string m_value;
+  std::string m_default;
+  bool m_allowEmpty;
+  std::string m_optionsFiller;
+  DynamicStringSettingOptions m_dynamicOptions;
+};
+
+/*!
+ \ingroup settings
+ \brief Action setting implementation.
+
+ A setting action will trigger a call to the OnSettingAction() callback method
+ when activated.
+
+ \sa CSetting
+ */
+class CSettingAction : public CSetting
+{
+public:
+  CSettingAction(const std::string &id, CSettingsManager *settingsManager = NULL);
+  CSettingAction(const std::string &id, const CSettingAction &setting);
+  virtual ~CSettingAction() { }
+
+  virtual CSetting* Clone(const std::string &id) const;
+
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  virtual int GetType() const { return SettingTypeAction; }
+  virtual bool FromString(const std::string &value) { return false; }
+  virtual std::string ToString() const { return ""; }
+  virtual bool Equals(const std::string &value) const { return false; }
+  virtual bool CheckValidity(const std::string &value) const { return false; }
+  virtual void Reset() { }
+
+  // this needs to be public so it can be triggered when activated
+  // by the user in the GUI.
+  virtual void OnSettingAction(const CSetting *setting) { return CSetting::OnSettingAction(this); }
+};
diff --git a/xbmc/settings/lib/SettingCategoryAccess.cpp b/xbmc/settings/lib/SettingCategoryAccess.cpp
new file mode 100644 (file)
index 0000000..2604239
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "SettingCategoryAccess.h"
+#include "SettingConditions.h"
+#include "SettingsManager.h"
+#include "utils/log.h"
+
+bool CSettingCategoryAccessCondition::Check() const
+{
+  if (m_value.empty())
+    return true;
+
+  if (m_settingsManager == NULL)
+    return false;
+
+  bool found = m_settingsManager->GetConditions().Check(m_value, "true");
+  if (m_negated)
+    return !found;
+
+  return found;
+}
+
+bool CSettingCategoryAccessConditionCombination::Check() const
+{
+  if (m_operations.empty() && m_values.empty())
+    return true;
+
+  return CSettingConditionCombination::Check();
+}
+
+CSettingCategoryAccess::CSettingCategoryAccess(CSettingsManager *settingsManager /* = NULL */)
+  : CSettingCondition(settingsManager)
+{
+  m_operation = CBooleanLogicOperationPtr(new CSettingCategoryAccessConditionCombination(m_settingsManager));
+}
diff --git a/xbmc/settings/lib/SettingCategoryAccess.h b/xbmc/settings/lib/SettingCategoryAccess.h
new file mode 100644 (file)
index 0000000..e6b4960
--- /dev/null
@@ -0,0 +1,58 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <set>
+#include <string>
+
+#include "SettingConditions.h"
+
+class CSettingCategoryAccessCondition : public CSettingConditionItem
+{
+public:
+  CSettingCategoryAccessCondition(CSettingsManager *settingsManager = NULL)
+    : CSettingConditionItem(settingsManager)
+  { }
+  virtual ~CSettingCategoryAccessCondition() { }
+
+  virtual bool Check() const;
+};
+
+class CSettingCategoryAccessConditionCombination : public CSettingConditionCombination
+{
+public:
+  CSettingCategoryAccessConditionCombination(CSettingsManager *settingsManager = NULL)
+    : CSettingConditionCombination(settingsManager)
+  { }
+  virtual ~CSettingCategoryAccessConditionCombination() { }
+
+  virtual bool Check() const;
+
+private:
+  virtual CBooleanLogicOperation* newOperation() { return new CSettingCategoryAccessConditionCombination(m_settingsManager); }
+  virtual CBooleanLogicValue* newValue() { return new CSettingCategoryAccessCondition(m_settingsManager); }
+};
+
+class CSettingCategoryAccess : public CSettingCondition
+{
+public:
+  CSettingCategoryAccess(CSettingsManager *settingsManager = NULL);
+  virtual ~CSettingCategoryAccess() { }
+};
diff --git a/xbmc/settings/lib/SettingConditions.cpp b/xbmc/settings/lib/SettingConditions.cpp
new file mode 100644 (file)
index 0000000..3cd1e0b
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "SettingConditions.h"
+#include "SettingDefinitions.h"
+#include "SettingsManager.h"
+#include "utils/StringUtils.h"
+#include "utils/XBMCTinyXML.h"
+
+bool CSettingConditionItem::Deserialize(const TiXmlNode *node)
+{
+  if (!CBooleanLogicValue::Deserialize(node))
+    return false;
+
+  const TiXmlElement *elem = node->ToElement();
+  if (elem == NULL)
+    return false;
+
+  // get the "name" attribute
+  const char *strAttribute = elem->Attribute(SETTING_XML_ATTR_NAME);
+  if (strAttribute != NULL)
+    m_name = strAttribute;
+
+  // get the "setting" attribute
+  strAttribute = elem->Attribute(SETTING_XML_ATTR_SETTING);
+  if (strAttribute != NULL)
+    m_setting = strAttribute;
+
+  return true;
+}
+
+bool CSettingConditionItem::Check() const
+{
+  if (m_settingsManager == NULL)
+    return false;
+
+  return m_settingsManager->GetConditions().Check(m_name, m_value, m_setting) == !m_negated;
+}
+
+bool CSettingConditionCombination::Check() const
+{
+  bool ok = false;
+  for (CBooleanLogicOperations::const_iterator operation = m_operations.begin();
+       operation != m_operations.end(); ++operation)
+  {
+    if (*operation == NULL)
+      continue;
+
+    CSettingConditionCombination *combination = static_cast<CSettingConditionCombination*>((*operation).get());
+    if (combination == NULL)
+      continue;
+    
+    if (combination->Check())
+      ok = true;
+    else if (m_operation == BooleanLogicOperationAnd)
+      return false;
+  }
+
+  for (CBooleanLogicValues::const_iterator value = m_values.begin();
+       value != m_values.end(); ++value)
+  {
+    if (*value == NULL)
+      continue;
+
+    CSettingConditionItem *condition = static_cast<CSettingConditionItem*>((*value).get());
+    if (condition == NULL)
+      continue;
+
+    if (condition->Check())
+      ok = true;
+    else if (m_operation == BooleanLogicOperationAnd)
+      return false;
+  }
+
+  return ok;
+}
+
+CSettingCondition::CSettingCondition(CSettingsManager *settingsManager /* = NULL */)
+  : ISettingCondition(settingsManager)
+{
+  m_operation = CBooleanLogicOperationPtr(new CSettingConditionCombination(settingsManager));
+}
+
+bool CSettingCondition::Check() const
+{
+  CSettingConditionCombination *combination = static_cast<CSettingConditionCombination*>(m_operation.get());
+  if (combination == NULL)
+    return false;
+
+  return combination->Check();
+}
+
+void CSettingConditionsManager::AddCondition(const std::string &condition)
+{
+  if (condition.empty())
+    return;
+
+  m_defines.insert(condition);
+}
+
+void CSettingConditionsManager::AddCondition(const std::string &identifier, SettingConditionCheck condition)
+{
+  if (identifier.empty() || condition == NULL)
+    return;
+
+  m_conditions.insert(SettingConditionPair(identifier, condition));
+}
+
+bool CSettingConditionsManager::Check(const std::string &condition, const std::string &value /* = "" */, const std::string &settingId /* = "" */) const
+{
+  if (condition.empty())
+    return false;
+
+  std::string tmpCondition = condition;
+  StringUtils::ToLower(tmpCondition);
+
+  // special handling of "isdefined" conditions
+  if (tmpCondition == "isdefined")
+  {
+    std::string tmpValue = value;
+    StringUtils::ToLower(tmpValue);
+
+    return m_defines.find(tmpValue) != m_defines.end();
+  }
+
+  SettingConditionMap::const_iterator conditionIt = m_conditions.find(tmpCondition);
+  if (conditionIt == m_conditions.end())
+    return false;
+
+  return conditionIt->second(tmpCondition, value, settingId);
+}
+
+CSettingConditionsManager::CSettingConditionsManager()
+{ }
+
+CSettingConditionsManager::~CSettingConditionsManager()
+{
+  m_conditions.clear();
+  m_defines.clear();
+}
diff --git a/xbmc/settings/lib/SettingConditions.h b/xbmc/settings/lib/SettingConditions.h
new file mode 100644 (file)
index 0000000..d83a633
--- /dev/null
@@ -0,0 +1,108 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <map>
+#include <set>
+#include <string>
+
+#include "SettingDefinitions.h"
+#include "utils/BooleanLogic.h"
+
+class CSettingsManager;
+
+typedef bool (*SettingConditionCheck)(const std::string &condition, const std::string &value, const std::string &settingId);
+
+class ISettingCondition
+{
+public:
+  ISettingCondition(CSettingsManager *settingsManager)
+    : m_settingsManager(settingsManager)
+  { }
+  virtual ~ISettingCondition() { }
+
+  virtual bool Check() const = 0;
+
+protected:
+  CSettingsManager *m_settingsManager;
+};
+
+class CSettingConditionItem : public CBooleanLogicValue, public ISettingCondition
+{
+public:
+  CSettingConditionItem(CSettingsManager *settingsManager = NULL)
+    : ISettingCondition(settingsManager)
+  { }
+  virtual ~CSettingConditionItem() { }
+  
+  virtual bool Deserialize(const TiXmlNode *node);
+  virtual const char* GetTag() const { return SETTING_XML_ELM_CONDITION; }
+  virtual bool Check() const;
+
+protected:
+  std::string m_name;
+  std::string m_setting;
+};
+
+class CSettingConditionCombination : public CBooleanLogicOperation, public ISettingCondition
+{
+public:
+  CSettingConditionCombination(CSettingsManager *settingsManager = NULL)
+    : ISettingCondition(settingsManager)
+  { }
+  virtual ~CSettingConditionCombination() { }
+
+  virtual bool Check() const;
+
+private:
+  virtual CBooleanLogicOperation* newOperation() { return new CSettingConditionCombination(m_settingsManager); }
+  virtual CBooleanLogicValue* newValue() { return new CSettingConditionItem(m_settingsManager); }
+};
+
+class CSettingCondition : public CBooleanLogic, public ISettingCondition
+{
+public:
+  CSettingCondition(CSettingsManager *settingsManager = NULL);
+  virtual ~CSettingCondition() { }
+
+  virtual bool Check() const;
+};
+
+class CSettingConditionsManager
+{
+public:
+  CSettingConditionsManager();
+  virtual ~CSettingConditionsManager();
+
+  void AddCondition(const std::string &condition);
+  void AddCondition(const std::string &identifier, SettingConditionCheck condition);
+
+  bool Check(const std::string &condition, const std::string &value = "", const std::string &settingId = "") const;
+
+private:
+  CSettingConditionsManager(const CSettingConditionsManager&);
+  CSettingConditionsManager const& operator=(CSettingConditionsManager const&);
+  
+  typedef std::pair<std::string, SettingConditionCheck> SettingConditionPair;
+  typedef std::map<std::string, SettingConditionCheck> SettingConditionMap;
+
+  SettingConditionMap m_conditions;
+  std::set<std::string> m_defines;
+};
diff --git a/xbmc/settings/lib/SettingDefinitions.h b/xbmc/settings/lib/SettingDefinitions.h
new file mode 100644 (file)
index 0000000..381d0fa
--- /dev/null
@@ -0,0 +1,61 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#define SETTING_XML_ROOT              "settings"
+
+#define SETTING_XML_ELM_SECTION       "section"
+#define SETTING_XML_ELM_CATEGORY      "category"
+#define SETTING_XML_ELM_GROUP         "group"
+#define SETTING_XML_ELM_SETTING       "setting"
+#define SETTING_XML_ELM_VISIBLE       "visible"
+#define SETTING_XML_ELM_REQUIREMENT   "requirement"
+#define SETTING_XML_ELM_CONDITION     "condition"
+#define SETTING_XML_ELM_LEVEL         "level"
+#define SETTING_XML_ELM_DEFAULT       "default"
+#define SETTING_XML_ELM_VALUE         "value"
+#define SETTING_XML_ELM_CONTROL       "control"
+#define SETTING_XML_ELM_CONSTRAINTS   "constraints"
+#define SETTING_XML_ELM_OPTIONS       "options"
+#define SETTING_XML_ELM_OPTION        "option"
+#define SETTING_XML_ELM_MINIMUM       "minimum"
+#define SETTING_XML_ELM_STEP          "step"
+#define SETTING_XML_ELM_MAXIMUM       "maximum"
+#define SETTING_XML_ELM_ALLOWEMPTY    "allowempty"
+#define SETTING_XML_ELM_DEPENDENCIES  "dependencies"
+#define SETTING_XML_ELM_DEPENDENCY    "dependency"
+#define SETTING_XML_ELM_UPDATES       "updates"
+#define SETTING_XML_ELM_UPDATE        "update"
+#define SETTING_XML_ELM_ACCESS        "access"
+#define SETTING_XML_ELM_DELIMITER     "delimiter"
+
+#define SETTING_XML_ATTR_ID           "id"
+#define SETTING_XML_ATTR_LABEL        "label"
+#define SETTING_XML_ATTR_HELP         "help"
+#define SETTING_XML_ATTR_TYPE         "type"
+#define SETTING_XML_ATTR_PARENT       "parent"
+#define SETTING_XML_ATTR_FORMAT       "format"
+#define SETTING_XML_ATTR_DELAYED      "delayed"
+#define SETTING_XML_ATTR_ON           "on"
+#define SETTING_XML_ATTR_OPERATOR     "operator"
+#define SETTING_XML_ATTR_NAME         "name"
+#define SETTING_XML_ATTR_SETTING      "setting"
+#define SETTING_XML_ATTR_BEFORE       "before"
+#define SETTING_XML_ATTR_AFTER        "after"
diff --git a/xbmc/settings/lib/SettingDependency.cpp b/xbmc/settings/lib/SettingDependency.cpp
new file mode 100644 (file)
index 0000000..363acc2
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <stdlib.h>
+
+#include "SettingDependency.h"
+#include "Setting.h"
+#include "SettingDefinitions.h"
+#include "SettingsManager.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+#include "utils/XBMCTinyXML.h"
+
+bool CSettingDependencyCondition::Deserialize(const TiXmlNode *node)
+{
+  if (!CSettingConditionItem::Deserialize(node))
+    return false;
+
+  const TiXmlElement *elem = node->ToElement();
+  if (elem == NULL)
+    return false;
+
+  m_target = SettingDependencyTargetSetting;
+  const char *strTarget = elem->Attribute(SETTING_XML_ATTR_ON);
+  if (strTarget != NULL && !setTarget(strTarget))
+  {
+    CLog::Log(LOGWARNING, "CSettingDependencyCondition: unknown target \"%s\"", strTarget);
+    return false;
+  }
+
+  if (m_target != SettingDependencyTargetSetting && m_name.empty())
+  {
+    CLog::Log(LOGWARNING, "CSettingDependencyCondition: missing name for dependency");
+    return false;
+  }
+
+  if (m_target == SettingDependencyTargetSetting)
+  {
+    if (m_setting.empty())
+    {
+      CLog::Log(LOGWARNING, "CSettingDependencyCondition: missing setting for dependency");
+      return false;
+    }
+
+    m_name = m_setting;
+  }
+
+  m_operator = SettingDependencyOperatorEquals;
+  const char *strOperator = elem->Attribute(SETTING_XML_ATTR_OPERATOR);
+  if (strOperator != NULL && !setOperator(strOperator))
+  {
+    CLog::Log(LOGWARNING, "CSettingDependencyCondition: unknown operator \"%s\"", strOperator);
+    return false;
+  }
+
+  return true;
+}
+
+bool CSettingDependencyCondition::Check() const
+{
+  if (m_name.empty() ||
+      m_target == SettingDependencyTargetNone ||
+      m_operator == SettingDependencyOperatorNone ||
+      m_settingsManager == NULL)
+    return false;
+  
+  bool result = false;
+  switch (m_target)
+  {
+    case SettingDependencyTargetSetting:
+    {
+      if (m_setting.empty())
+        return false;
+
+      const CSetting *setting = m_settingsManager->GetSetting(m_setting);
+      if (setting == NULL)
+      {
+        CLog::Log(LOGWARNING, "CSettingDependencyCondition: unable to check condition on unknown setting \"%s\"", m_setting.c_str());
+        return false;
+      }
+
+      if (m_operator == SettingDependencyOperatorEquals)
+        result = setting->Equals(m_value);
+      else if (m_operator == SettingDependencyOperatorContains)
+        result = (setting->ToString().find(m_value) != std::string::npos);
+
+      break;
+    }
+
+    case SettingDependencyTargetProperty:
+    {
+      result = m_settingsManager->GetConditions().Check(m_name, m_value, m_setting);
+      break;
+    }
+
+    default:
+      return false;
+  }
+
+  return result == !m_negated;
+}
+
+bool CSettingDependencyCondition::setTarget(const std::string &target)
+{
+  if (StringUtils::EqualsNoCase(target, "setting"))
+    m_target = SettingDependencyTargetSetting;
+  else if (StringUtils::EqualsNoCase(target, "property"))
+    m_target = SettingDependencyTargetProperty;
+  else
+    return false;
+
+  return true;
+}
+
+bool CSettingDependencyCondition::setOperator(const std::string &op)
+{
+  size_t length = 0;
+  if (StringUtils::EndsWithNoCase(op, "is"))
+  {
+    m_operator = SettingDependencyOperatorEquals;
+    length = 2;
+  }
+  else if (StringUtils::EndsWithNoCase(op, "contains"))
+  {
+    m_operator = SettingDependencyOperatorContains;
+    length = 8;
+  }
+
+  if (op.size() > length + 1)
+    return false;
+  if (op.size() == length + 1)
+  {
+    if (!StringUtils::StartsWith(op, "!"))
+      return false;
+    m_negated = true;
+  }
+
+  return true;
+}
+
+bool CSettingDependencyConditionCombination::Deserialize(const TiXmlNode *node)
+{
+  if (node == NULL)
+    return false;
+
+  size_t numOperations = m_operations.size();
+  size_t numValues = m_values.size();
+
+  if (!CSettingConditionCombination::Deserialize(node))
+    return false;
+
+  if (numOperations < m_operations.size())
+  {
+    for (size_t i = numOperations; i < m_operations.size(); i++)
+    {
+      if (m_operations[i] == NULL)
+        continue;
+
+      CSettingDependencyConditionCombination *combination = static_cast<CSettingDependencyConditionCombination*>(m_operations[i].get());
+      if (combination == NULL)
+        continue;
+
+      const std::set<std::string>& settings = combination->GetSettings();
+      m_settings.insert(settings.begin(), settings.end());
+    }
+  }
+
+  if (numValues < m_values.size())
+  {
+    for (size_t i = numValues; i < m_values.size(); i++)
+    {
+      if (m_values[i] == NULL)
+        continue;
+
+      CSettingDependencyCondition *condition = static_cast<CSettingDependencyCondition*>(m_values[i].get());
+      if (condition == NULL)
+        continue;
+
+      std::string settingId = condition->GetSetting();
+      if (!settingId.empty())
+        m_settings.insert(settingId);
+    }
+  }
+
+  return true;
+}
+
+CSettingDependency::CSettingDependency(CSettingsManager *settingsManager /* = NULL */)
+  : CSettingCondition(settingsManager),
+    m_type(SettingDependencyTypeNone)
+{
+  m_operation = CBooleanLogicOperationPtr(new CSettingDependencyConditionCombination(m_settingsManager));
+}
+
+bool CSettingDependency::Deserialize(const TiXmlNode *node)
+{
+  if (node == NULL)
+    return false;
+
+  const TiXmlElement *elem = node->ToElement();
+  if (elem == NULL)
+    return false;
+  
+  const char *strType = elem->Attribute(SETTING_XML_ATTR_TYPE);
+  if (strType == NULL || strlen(strType) <= 0 || !setType(strType))
+  {
+    CLog::Log(LOGWARNING, "CSettingDependency: missing or unknown dependency type definition");
+    return false;
+  }
+
+  return CSettingCondition::Deserialize(node);
+}
+
+std::set<std::string> CSettingDependency::GetSettings() const
+{
+  if (m_operation == NULL)
+    return std::set<std::string>();
+
+  CSettingDependencyConditionCombination *combination = static_cast<CSettingDependencyConditionCombination*>(m_operation.get());
+  if (combination == NULL)
+    return std::set<std::string>();
+
+  return combination->GetSettings();
+}
+
+bool CSettingDependency::setType(const std::string &type)
+{
+  if (StringUtils::EqualsNoCase(type, "enable"))
+    m_type = SettingDependencyTypeEnable;
+  else if (StringUtils::EqualsNoCase(type, "update"))
+    m_type = SettingDependencyTypeUpdate;
+  else if (StringUtils::EqualsNoCase(type, "visible"))
+    m_type = SettingDependencyTypeVisible;
+  else
+    return false;
+
+  return true;
+}
diff --git a/xbmc/settings/lib/SettingDependency.h b/xbmc/settings/lib/SettingDependency.h
new file mode 100644 (file)
index 0000000..7cf3db1
--- /dev/null
@@ -0,0 +1,111 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <list>
+#include <set>
+#include <string>
+
+#include "SettingConditions.h"
+#include "utils/BooleanLogic.h"
+
+typedef enum {
+  SettingDependencyTypeNone   = 0,
+  SettingDependencyTypeEnable,
+  SettingDependencyTypeUpdate,
+  SettingDependencyTypeVisible
+} SettingDependencyType;
+
+typedef enum {
+  SettingDependencyOperatorNone     = 0,
+  SettingDependencyOperatorEquals,
+  SettingDependencyOperatorContains
+} SettingDependencyOperator;
+
+typedef enum {
+  SettingDependencyTargetNone     = 0,
+  SettingDependencyTargetSetting,
+  SettingDependencyTargetProperty
+} SettingDependencyTarget;
+
+class CSettingDependencyCondition : public CSettingConditionItem
+{
+public:
+  CSettingDependencyCondition(CSettingsManager *settingsManager = NULL)
+    : CSettingConditionItem(settingsManager),
+      m_target(SettingDependencyTargetNone),  
+      m_operator(SettingDependencyOperatorEquals)      
+  { }
+  virtual ~CSettingDependencyCondition() { }
+
+  virtual bool Deserialize(const TiXmlNode *node);
+  virtual bool Check() const;
+  
+  const std::string& GetName() const { return m_name; }
+  const std::string& GetSetting() const { return m_setting; }
+  const SettingDependencyTarget GetTarget() const { return m_target; }
+  const SettingDependencyOperator GetOperator() const { return m_operator; }
+
+private:
+  bool setTarget(const std::string &target);
+  bool setOperator(const std::string &op);
+  
+  SettingDependencyTarget m_target;
+  SettingDependencyOperator m_operator;
+};
+
+class CSettingDependencyConditionCombination : public CSettingConditionCombination
+{
+public:
+  CSettingDependencyConditionCombination(CSettingsManager *settingsManager = NULL)
+    : CSettingConditionCombination(settingsManager)
+  { }
+  virtual ~CSettingDependencyConditionCombination() { }
+
+  virtual bool Deserialize(const TiXmlNode *node);
+
+  const std::set<std::string>& GetSettings() const { return m_settings; }
+
+private:
+  virtual CBooleanLogicOperation* newOperation() { return new CSettingDependencyConditionCombination(m_settingsManager); }
+  virtual CBooleanLogicValue* newValue() { return new CSettingDependencyCondition(m_settingsManager); }
+
+  std::set<std::string> m_settings;
+};
+
+class CSettingDependency : public CSettingCondition
+{
+public:
+  CSettingDependency(CSettingsManager *settingsManager = NULL);
+  virtual ~CSettingDependency() { }
+
+  virtual bool Deserialize(const TiXmlNode *node);
+
+  SettingDependencyType GetType() const { return m_type; }
+  std::set<std::string> GetSettings() const;
+
+private:
+  bool setType(const std::string &type);
+
+  SettingDependencyType m_type;
+};
+
+typedef std::list<CSettingDependency> SettingDependencies;
+typedef std::map<std::string, SettingDependencies> SettingDependencyMap;
diff --git a/xbmc/settings/lib/SettingRequirement.cpp b/xbmc/settings/lib/SettingRequirement.cpp
new file mode 100644 (file)
index 0000000..3b57eb7
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "SettingRequirement.h"
+#include "SettingsManager.h"
+
+bool CSettingRequirementCondition::Check() const
+{
+  if (m_settingsManager == NULL)
+    return false;
+
+  bool found = m_settingsManager->GetConditions().Check("IsDefined", m_value);
+  if (m_negated)
+    return !found;
+
+  return found;
+}
+
+bool CSettingRequirementConditionCombination::Check() const
+{
+  if (m_operations.empty() && m_values.empty())
+    return true;
+
+  return CSettingConditionCombination::Check();
+}
+
+CSettingRequirement::CSettingRequirement(CSettingsManager *settingsManager /* = NULL */)
+  : CSettingCondition(settingsManager)
+{
+  m_operation = CBooleanLogicOperationPtr(new CSettingRequirementConditionCombination(m_settingsManager));
+}
diff --git a/xbmc/settings/lib/SettingRequirement.h b/xbmc/settings/lib/SettingRequirement.h
new file mode 100644 (file)
index 0000000..3534761
--- /dev/null
@@ -0,0 +1,58 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <set>
+#include <string>
+
+#include "SettingConditions.h"
+
+class CSettingRequirementCondition : public CSettingConditionItem
+{
+public:
+  CSettingRequirementCondition(CSettingsManager *settingsManager = NULL)
+    : CSettingConditionItem(settingsManager)
+  { }
+  virtual ~CSettingRequirementCondition() { }
+
+  virtual bool Check() const;
+};
+
+class CSettingRequirementConditionCombination : public CSettingConditionCombination
+{
+public:
+  CSettingRequirementConditionCombination(CSettingsManager *settingsManager = NULL)
+    : CSettingConditionCombination(settingsManager)
+  { }
+  virtual ~CSettingRequirementConditionCombination() { }
+
+  virtual bool Check() const;
+
+private:
+  virtual CBooleanLogicOperation* newOperation() { return new CSettingRequirementConditionCombination(m_settingsManager); }
+  virtual CBooleanLogicValue* newValue() { return new CSettingRequirementCondition(m_settingsManager); }
+};
+
+class CSettingRequirement : public CSettingCondition
+{
+public:
+  CSettingRequirement(CSettingsManager *settingsManager = NULL);
+  virtual ~CSettingRequirement() { }
+};
diff --git a/xbmc/settings/lib/SettingSection.cpp b/xbmc/settings/lib/SettingSection.cpp
new file mode 100644 (file)
index 0000000..87d85bd
--- /dev/null
@@ -0,0 +1,313 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "SettingSection.h"
+#include "SettingDefinitions.h"
+#include "SettingsManager.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+#include "utils/XBMCTinyXML.h"
+
+template<class T> void addISetting(const TiXmlNode *node, const T &item, std::vector<T> &items)
+{
+  if (node == NULL)
+    return;
+
+  const TiXmlElement *element = node->ToElement();
+  if (element == NULL)
+    return;
+
+  // check if there is a "before" or "after" attribute to place the setting at a specific position
+  int position = -1; // -1 => end, 0 => before, 1 => after
+  const char *positionId = element->Attribute(SETTING_XML_ATTR_BEFORE);
+  if (positionId != NULL && strlen(positionId) > 0)
+    position = 0;
+  else if ((positionId = element->Attribute(SETTING_XML_ATTR_AFTER)) != NULL && strlen(positionId) > 0)
+    position = 1;
+
+  if (positionId != NULL && strlen(positionId) > 0 && position >= 0)
+  {
+    for (typename std::vector<T>::iterator it = items.begin(); it != items.end(); ++it)
+    {
+      if (!StringUtils::EqualsNoCase((*it)->GetId(), positionId))
+        continue;
+
+      typename std::vector<T>::iterator positionIt = it;
+      if (position == 1)
+        ++positionIt;
+
+      items.insert(positionIt, item);
+      return;
+    }
+  }
+
+  items.push_back(item);
+}
+
+CSettingGroup::CSettingGroup(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : ISetting(id, settingsManager)
+{ }
+
+CSettingGroup::~CSettingGroup()
+{
+  for (SettingList::const_iterator setting = m_settings.begin(); setting != m_settings.end(); ++setting)
+    delete *setting;
+  m_settings.clear();
+}
+
+bool CSettingGroup::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  // handle <visible> conditions
+  if (!ISetting::Deserialize(node, update))
+    return false;
+
+  const TiXmlElement *settingElement = node->FirstChildElement(SETTING_XML_ELM_SETTING);
+  while (settingElement != NULL)
+  {
+    std::string settingId;
+    if (CSettingCategory::DeserializeIdentification(settingElement, settingId))
+    {
+      CSetting *setting = NULL;
+      for (SettingList::iterator itSetting = m_settings.begin(); itSetting != m_settings.end(); ++itSetting)
+      {
+        if ((*itSetting)->GetId() == settingId)
+        {
+          setting = *itSetting;
+          break;
+        }
+      }
+      
+      update = (setting != NULL);
+      if (!update)
+      {
+        const char* settingType = settingElement->Attribute(SETTING_XML_ATTR_TYPE);
+        if (settingType == NULL || strlen(settingType) <= 0)
+        {
+          CLog::Log(LOGERROR, "CSettingGroup: unable to read setting type of \"%s\"", settingId.c_str());
+          return false;
+        }
+
+        setting = m_settingsManager->CreateSetting(settingType, settingId, m_settingsManager);
+        if (setting == NULL)
+          CLog::Log(LOGERROR, "CSettingGroup: unknown setting type \"%s\" of \"%s\"", settingType, settingId.c_str());
+      }
+      
+      if (setting == NULL)
+        CLog::Log(LOGERROR, "CSettingGroup: unable to create new setting \"%s\"", settingId.c_str());
+      else if (!setting->Deserialize(settingElement, update))
+      {
+        CLog::Log(LOGWARNING, "CSettingGroup: unable to read setting \"%s\"", settingId.c_str());
+        if (!update)
+          delete setting;
+      }
+      else if (!update)
+        addISetting(settingElement, setting, m_settings);
+    }
+      
+    settingElement = settingElement->NextSiblingElement(SETTING_XML_ELM_SETTING);
+  }
+    
+  return true;
+}
+
+SettingList CSettingGroup::GetSettings(SettingLevel level) const
+{
+  SettingList settings;
+
+  for (SettingList::const_iterator it = m_settings.begin(); it != m_settings.end(); ++it)
+  {
+    if ((*it)->GetLevel() <= level && (*it)->MeetsRequirements())
+      settings.push_back(*it);
+  }
+
+  return settings;
+}
+
+CSettingCategory::CSettingCategory(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : ISetting(id, settingsManager),
+    m_label(-1), m_help(-1),
+    m_accessCondition(settingsManager)
+{ }
+
+CSettingCategory::~CSettingCategory()
+{
+  for (SettingGroupList::const_iterator it = m_groups.begin(); it != m_groups.end(); ++it)
+    delete *it;
+
+  m_groups.clear();
+}
+
+bool CSettingCategory::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  // handle <visible> conditions
+  if (!ISetting::Deserialize(node, update))
+    return false;
+    
+  const TiXmlElement *element = node->ToElement();
+  if (element == NULL)
+    return false;
+    
+  int tmp = -1;
+  if (element->QueryIntAttribute(SETTING_XML_ATTR_LABEL, &tmp) == TIXML_SUCCESS && tmp > 0)
+    m_label = tmp;
+  if (element->QueryIntAttribute(SETTING_XML_ATTR_HELP, &tmp) == TIXML_SUCCESS && tmp > 0)
+    m_help = tmp;
+
+  const TiXmlNode *accessNode = node->FirstChild(SETTING_XML_ELM_ACCESS);
+  if (accessNode != NULL && !m_accessCondition.Deserialize(accessNode))
+    return false;
+    
+  const TiXmlNode *groupNode = node->FirstChildElement(SETTING_XML_ELM_GROUP);
+  while (groupNode != NULL)
+  {
+    std::string groupId;
+    if (CSettingGroup::DeserializeIdentification(groupNode, groupId))
+    {
+      CSettingGroup *group = NULL;
+      for (SettingGroupList::iterator itGroup = m_groups.begin(); itGroup != m_groups.end(); ++itGroup)
+      {
+        if ((*itGroup)->GetId() == groupId)
+        {
+          group = *itGroup;
+          break;
+        }
+      }
+      
+      update = (group != NULL);
+      if (!update)
+        group = new CSettingGroup(groupId, m_settingsManager);
+
+      if (group->Deserialize(groupNode, update))
+      {
+        if (!update)
+          addISetting(groupNode, group, m_groups);
+      }
+      else
+      {
+        CLog::Log(LOGWARNING, "CSettingCategory: unable to read group \"%s\"", groupId.c_str());
+        if (!update)
+          delete group;
+      }
+    }
+      
+    groupNode = groupNode->NextSibling(SETTING_XML_ELM_GROUP);
+  }
+    
+  return true;
+}
+
+SettingGroupList CSettingCategory::GetGroups(SettingLevel level) const
+{
+  SettingGroupList groups;
+
+  for (SettingGroupList::const_iterator it = m_groups.begin(); it != m_groups.end(); ++it)
+  {
+    if ((*it)->MeetsRequirements() && (*it)->IsVisible() && (*it)->GetSettings(level).size() > 0)
+      groups.push_back(*it);
+  }
+
+  return groups;
+}
+
+bool CSettingCategory::CanAccess() const
+{
+  return m_accessCondition.Check();
+}
+
+CSettingSection::CSettingSection(const std::string &id, CSettingsManager *settingsManager /* = NULL */)
+  : ISetting(id, settingsManager),
+    m_label(-1), m_help(-1)
+{ }
+
+CSettingSection::~CSettingSection()
+{
+  for (SettingCategoryList::const_iterator it = m_categories.begin(); it != m_categories.end(); ++it)
+    delete *it;
+
+  m_categories.clear();
+}
+  
+bool CSettingSection::Deserialize(const TiXmlNode *node, bool update /* = false */)
+{
+  // handle <visible> conditions
+  if (!ISetting::Deserialize(node, update))
+    return false;
+    
+  const TiXmlElement *element = node->ToElement();
+  if (element == NULL)
+    return false;
+
+  int tmp = -1;
+  if (element->QueryIntAttribute(SETTING_XML_ATTR_LABEL, &tmp) == TIXML_SUCCESS && tmp > 0)
+    m_label = tmp;
+  if (element->QueryIntAttribute(SETTING_XML_ATTR_HELP, &tmp) == TIXML_SUCCESS && tmp > 0)
+    m_help = tmp;
+    
+  const TiXmlNode *categoryNode = node->FirstChild(SETTING_XML_ELM_CATEGORY);
+  while (categoryNode != NULL)
+  {
+    std::string categoryId;
+    if (CSettingCategory::DeserializeIdentification(categoryNode, categoryId))
+    {
+      CSettingCategory *category = NULL;
+      for (SettingCategoryList::iterator itCategory = m_categories.begin(); itCategory != m_categories.end(); ++itCategory)
+      {
+        if ((*itCategory)->GetId() == categoryId)
+        {
+          category = *itCategory;
+          break;
+        }
+      }
+      
+      update = (category != NULL);
+      if (!update)
+        category = new CSettingCategory(categoryId, m_settingsManager);
+
+      if (category->Deserialize(categoryNode, update))
+      {
+        if (!update)
+          addISetting(categoryNode, category, m_categories);
+      }
+      else
+      {
+        CLog::Log(LOGWARNING, "CSettingSection: unable to read category \"%s\"", categoryId.c_str());
+        if (!update)
+          delete category;
+      }
+    }
+      
+    categoryNode = categoryNode->NextSibling(SETTING_XML_ELM_CATEGORY);
+  }
+    
+  return true;
+}
+
+SettingCategoryList CSettingSection::GetCategories(SettingLevel level) const
+{
+  SettingCategoryList categories;
+
+  for (SettingCategoryList::const_iterator it = m_categories.begin(); it != m_categories.end(); ++it)
+  {
+    if ((*it)->MeetsRequirements() && (*it)->IsVisible() && (*it)->GetGroups(level).size() > 0)
+      categories.push_back(*it);
+  }
+
+  return categories;
+}
diff --git a/xbmc/settings/lib/SettingSection.h b/xbmc/settings/lib/SettingSection.h
new file mode 100644 (file)
index 0000000..359e5b8
--- /dev/null
@@ -0,0 +1,218 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string>
+#include <vector>
+
+#include "ISetting.h"
+#include "Setting.h"
+#include "SettingCategoryAccess.h"
+
+class CSettingsManager;
+
+/*!
+ \ingroup settings
+ \brief Group of settings being part of a category
+ \sa CSettingCategory
+ \sa CSetting
+ */
+class CSettingGroup : public ISetting
+{
+public:
+  /*!
+   \brief Creates a new setting group with the given identifier.
+
+   \param id Identifier of the setting group
+   \param settingsManager Reference to the settings manager
+   */
+  CSettingGroup(const std::string &id, CSettingsManager *settingsManager = NULL);
+  ~CSettingGroup();
+
+  // implementation of ISetting
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  /*!
+   \brief Gets the full list of settings belonging to the setting group.
+
+   \return Full list of settings belonging to the setting group
+   */
+  const SettingList& GetSettings() const { return m_settings; }
+  /*!
+   \brief Gets the list of settings assigned to the given setting level (or
+   below) and that meet the requirements conditions belonging to the setting
+   group.
+
+   \param level Level the settings should be assigned to
+   \return List of settings belonging to the setting group
+   */
+  SettingList GetSettings(SettingLevel level) const;
+
+private:
+  SettingList m_settings;
+};
+
+typedef std::vector<CSettingGroup *> SettingGroupList;
+
+/*!
+ \ingroup settings
+ \brief Category of groups of settings being part of a section
+ \sa CSettingSection
+ \sa CSettingGroup
+ */
+class CSettingCategory : public ISetting
+{
+public:
+  /*!
+   \brief Creates a new setting category with the given identifier.
+
+   \param id Identifier of the setting category
+   \param settingsManager Reference to the settings manager
+   */
+  CSettingCategory(const std::string &id, CSettingsManager *settingsManager = NULL);
+  ~CSettingCategory();
+
+  // implementation of ISetting
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  /*!
+   \brief Gets the localizeable label ID of the setting category.
+
+   \return Localizeable label ID of the setting category
+   */
+  const int GetLabel() const { return m_label; }
+  /*!
+   \brief Sets the localizeable label ID of the setting category.
+
+   \param label Localizeable label ID of the setting category
+   */
+  void SetLabel(int label) { m_label = label; }
+  /*!
+   \brief Gets the localizeable help ID of the setting category.
+
+   \return Localizeable help ID of the setting category
+   */
+  const int GetHelp() const { return m_help; }
+  /*!
+   \brief Sets the localizeable help ID of the setting category.
+
+   \param label Localizeable help ID of the setting category
+   */
+  void SetHelp(int help) { m_help = help; }
+  /*!
+   \brief Gets the full list of setting groups belonging to the setting
+   category.
+
+   \return Full list of setting groups belonging to the setting category
+   */
+  const SettingGroupList& GetGroups() const { return m_groups; }
+  /*!
+   \brief Gets the list of setting groups belonging to the setting category
+   that contain settings assigned to the given setting level (or below) and
+   that meet the requirements and visibility conditions.
+
+   \param level Level the settings should be assigned to
+   \return List of setting groups belonging to the setting category
+   */
+  SettingGroupList GetGroups(SettingLevel level) const;
+
+  /*!
+   \brief Whether the setting category can be accessed or not.
+
+   \return True if the setting category can be accessed, false otherwise
+   */
+  bool CanAccess() const;
+
+private:
+  int m_label;
+  int m_help;
+  SettingGroupList m_groups;
+  CSettingCategoryAccess m_accessCondition;
+};
+
+typedef std::vector<CSettingCategory *> SettingCategoryList;
+
+/*!
+ \ingroup settings
+ \brief Section of setting categories
+ \sa CSettings
+ \sa CSettingCategory
+ */
+class CSettingSection : public ISetting
+{
+public:
+  /*!
+   \brief Creates a new setting section with the given identifier.
+
+   \param id Identifier of the setting section
+   \param settingsManager Reference to the settings manager
+   */
+  CSettingSection(const std::string &id, CSettingsManager *settingsManager = NULL);
+  ~CSettingSection();
+
+  // implementation of ISetting
+  virtual bool Deserialize(const TiXmlNode *node, bool update = false);
+
+  /*!
+   \brief Gets the localizeable label ID of the setting section.
+
+   \return Localizeable label ID of the setting section
+   */
+  const int GetLabel() const { return m_label; }
+  /*!
+   \brief Sets the localizeable label ID of the setting section.
+
+   \param label Localizeable label ID of the setting section
+   */
+  void SetLabel(int label) { m_label = label; }
+  /*!
+   \brief Gets the localizeable help ID of the setting section.
+
+   \return Localizeable help ID of the setting section
+   */
+  const int GetHelp() const { return m_help; }
+  /*!
+   \brief Sets the localizeable help ID of the setting section.
+
+   \param label Localizeable help ID of the setting section
+   */
+  void SetHelp(int help) { m_help = help; }
+  /*!
+   \brief Gets the full list of setting categories belonging to the setting
+   section.
+
+   \return Full list of setting categories belonging to the setting section
+   */
+  const SettingCategoryList& GetCategories() const { return m_categories; }
+  /*!
+   \brief Gets the list of setting categories belonging to the setting section
+   that contain settings assigned to the given setting level (or below) and
+   that meet the requirements and visibility conditions.
+
+   \param level Level the settings should be assigned to
+   \return List of setting categories belonging to the setting section
+   */
+  SettingCategoryList GetCategories(SettingLevel level) const;
+
+private:
+  int m_label;
+  int m_help;
+  SettingCategoryList m_categories;
+};
diff --git a/xbmc/settings/lib/SettingUpdate.cpp b/xbmc/settings/lib/SettingUpdate.cpp
new file mode 100644 (file)
index 0000000..e1c9513
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "SettingUpdate.h"
+#include "SettingDefinitions.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+#include "utils/XBMCTinyXML.h"
+
+CSettingUpdate::CSettingUpdate()
+  : m_type(SettingUpdateTypeNone)
+{ }
+
+bool CSettingUpdate::operator<(const CSettingUpdate& rhs) const
+{
+  return m_type < rhs.m_type && m_value < rhs.m_value;
+}
+
+bool CSettingUpdate::Deserialize(const TiXmlNode *node)
+{
+  if (node == NULL)
+    return false;
+
+  const TiXmlElement *elem = node->ToElement();
+  if (elem == NULL)
+    return false;
+  
+  const char *strType = elem->Attribute(SETTING_XML_ATTR_TYPE);
+  if (strType == NULL || strlen(strType) <= 0 || !setType(strType))
+  {
+    CLog::Log(LOGWARNING, "CSettingUpdate: missing or unknown update type definition");
+    return false;
+  }
+
+  if (m_type == SettingUpdateTypeRename)
+  {
+    if (node->FirstChild() == NULL || node->FirstChild()->Type() != TiXmlNode::TINYXML_TEXT)
+    {
+      CLog::Log(LOGWARNING, "CSettingUpdate: missing or invalid setting id for rename update definition");
+      return false;
+    }
+
+    m_value = node->FirstChild()->ValueStr();
+  }
+
+  return true;
+}
+
+bool CSettingUpdate::setType(const std::string &type)
+{
+  if (StringUtils::EqualsNoCase(type, "change"))
+    m_type = SettingUpdateTypeChange;
+  else if (StringUtils::EqualsNoCase(type, "rename"))
+    m_type = SettingUpdateTypeRename;
+  else
+    return false;
+
+  return true;
+}
diff --git a/xbmc/settings/lib/SettingUpdate.h b/xbmc/settings/lib/SettingUpdate.h
new file mode 100644 (file)
index 0000000..c8ecba2
--- /dev/null
@@ -0,0 +1,50 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string>
+
+class TiXmlNode;
+
+typedef enum {
+  SettingUpdateTypeNone   = 0,
+  SettingUpdateTypeRename,
+  SettingUpdateTypeChange
+} SettingUpdateType;
+
+class CSettingUpdate
+{
+public:
+  CSettingUpdate();
+  virtual ~CSettingUpdate() { }
+
+  bool operator<(const CSettingUpdate& rhs) const;
+
+  virtual bool Deserialize(const TiXmlNode *node);
+
+  SettingUpdateType GetType() const { return m_type; }
+  const std::string& GetValue() const { return m_value; }
+
+private:
+  bool setType(const std::string &type);
+
+  SettingUpdateType m_type;
+  std::string m_value;
+};
diff --git a/xbmc/settings/lib/SettingsManager.cpp b/xbmc/settings/lib/SettingsManager.cpp
new file mode 100644 (file)
index 0000000..b2255cb
--- /dev/null
@@ -0,0 +1,1049 @@
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "SettingsManager.h"
+#include "SettingDefinitions.h"
+#include "SettingSection.h"
+#include "Setting.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+#include "utils/XBMCTinyXML.h"
+
+
+CSettingsManager::CSettingsManager()
+  : m_initialized(false), m_loaded(false)
+{ }
+
+CSettingsManager::~CSettingsManager()
+{
+  // first clear all registered settings handler and subsettings
+  // implementations because we can't be sure that they are still valid
+  m_settingsHandlers.clear();
+  m_subSettings.clear();
+  m_settingCreators.clear();
+  m_settingControlCreators.clear();
+
+  Clear();
+}
+
+bool CSettingsManager::Initialize(const TiXmlElement *root)
+{
+  CExclusiveLock lock(m_critical);
+  CExclusiveLock settingsLock(m_settingsCritical);
+  if (m_initialized || root == NULL)
+    return false;
+
+  if (!StringUtils::EqualsNoCase(root->ValueStr(), SETTING_XML_ROOT))
+  {
+    CLog::Log(LOGERROR, "CSettingsManager: error reading settings definition: doesn't contain <settings> tag");
+    return false;
+  }
+
+  const TiXmlNode *sectionNode = root->FirstChild(SETTING_XML_ELM_SECTION);
+  while (sectionNode != NULL)
+  {
+    std::string sectionId;
+    if (CSettingSection::DeserializeIdentification(sectionNode, sectionId))
+    {
+      CSettingSection *section = NULL;
+      SettingSectionMap::iterator itSection = m_sections.find(sectionId);
+      bool update = (itSection != m_sections.end());
+      if (!update)
+        section = new CSettingSection(sectionId, this);
+      else
+        section = itSection->second;
+
+      if (section->Deserialize(sectionNode, update))
+      {
+        section->CheckRequirements();
+        if (!update)
+          m_sections[section->GetId()] = section;
+
+        // get all settings and add them to the settings map
+        for (SettingCategoryList::const_iterator categoryIt = section->GetCategories().begin(); categoryIt != section->GetCategories().end(); ++categoryIt)
+        {
+          (*categoryIt)->CheckRequirements();
+          for (SettingGroupList::const_iterator groupIt = (*categoryIt)->GetGroups().begin(); groupIt != (*categoryIt)->GetGroups().end(); ++groupIt)
+          {
+            (*groupIt)->CheckRequirements();
+            for (SettingList::const_iterator settingIt = (*groupIt)->GetSettings().begin(); settingIt != (*groupIt)->GetSettings().end(); ++settingIt)
+            {
+              (*settingIt)->CheckRequirements();
+
+              const std::string &settingId = (*settingIt)->GetId();
+              SettingMap::iterator setting = m_settings.find(settingId);
+              if (setting == m_settings.end())
+              {
+                Setting tmpSetting = { NULL };
+                std::pair<SettingMap::iterator, bool> tmpIt = m_settings.insert(make_pair(settingId, tmpSetting));
+                setting = tmpIt.first;
+              }
+                
+              if (setting->second.setting == NULL)
+              {
+                setting->second.setting = *settingIt;
+                (*settingIt)->m_callback = this;
+              }
+            }
+          }
+        }
+      }
+      else
+      {
+        CLog::Log(LOGWARNING, "CSettingsManager: unable to read section \"%s\"", sectionId.c_str());
+        if (!update)
+          delete section;
+      }
+    }
+      
+    sectionNode = sectionNode->NextSibling(SETTING_XML_ELM_SECTION);
+  }
+
+  for (SettingMap::iterator itSettingDep = m_settings.begin(); itSettingDep != m_settings.end(); ++itSettingDep)
+  {
+    if (itSettingDep->second.setting == NULL)
+      continue;
+
+    const SettingDependencies& deps = itSettingDep->second.setting->GetDependencies();
+    for (SettingDependencies::const_iterator depIt = deps.begin(); depIt != deps.end(); ++depIt)
+    {
+      std::set<std::string> settingIds = depIt->GetSettings();
+      for (std::set<std::string>::const_iterator itSettingId = settingIds.begin(); itSettingId != settingIds.end(); ++itSettingId)
+      {
+        SettingMap::iterator setting = m_settings.find(*itSettingId);
+        if (setting == m_settings.end())
+          continue;
+
+        bool newDep = true;
+        SettingDependencies &settingDeps = setting->second.dependencies[itSettingDep->first];
+        for (SettingDependencies::const_iterator itDeps = settingDeps.begin(); itDeps != settingDeps.end(); ++itDeps)
+        {
+          if (itDeps->GetType() == depIt->GetType())
+          {
+            newDep = false;
+            break;
+          }
+        }
+
+        if (newDep)
+          settingDeps.push_back(*depIt);
+      }
+    }
+  }
+
+  return true;
+}
+
+bool CSettingsManager::Load(const TiXmlElement *root, bool &updated, bool triggerEvents /* = true */, std::map<std::string, CSetting*> *loadedSettings /* = NULL */)
+{
+  CSharedLock lock(m_critical);
+  CExclusiveLock settingsLock(m_settingsCritical);
+  if (m_loaded || root == NULL)
+    return false;
+
+  if (triggerEvents && !OnSettingsLoading())
+    return false;
+
+  if (!Deserialize(root, loadedSettings))
+    return false;
+
+  bool ret = true;
+  // load any ISubSettings implementations
+  if (triggerEvents)
+    ret = Load(root);
+
+  updated = UpdateSettings(root);
+
+  if (triggerEvents)
+    OnSettingsLoaded();
+
+  return ret;
+}
+
+bool CSettingsManager::Save(TiXmlNode *root) const
+{
+  CSharedLock lock(m_critical);
+  CSharedLock settingsLock(m_settingsCritical);
+  if (!m_initialized || root == NULL)
+    return false;
+
+  if (!OnSettingsSaving())
+    return false;
+
+  if (!Serialize(root))
+  {
+    CLog::Log(LOGERROR, "CSettingsManager: failed to save settings");
+    return false;
+  }
+
+  // save any ISubSettings implementations
+  for (std::set<ISubSettings*>::const_iterator it = m_subSettings.begin(); it != m_subSettings.end(); ++it)
+  {
+    if (!(*it)->Save(root))
+      return false;
+  }
+
+  OnSettingsSaved();
+
+  return true;
+}
+
+void CSettingsManager::Unload()
+{
+  CExclusiveLock lock(m_settingsCritical);
+  if (!m_loaded)
+    return;
+
+  // needs to be set before calling CSetting::Reset() to avoid calls to
+  // OnSettingChanging() and OnSettingChanged()
+  m_loaded = false;
+
+  for (SettingMap::iterator setting = m_settings.begin(); setting != m_settings.end(); ++setting)
+    setting->second.setting->Reset();
+
+  OnSettingsUnloaded();
+}
+
+void CSettingsManager::Clear()
+{
+  CExclusiveLock lock(m_critical);
+  Unload();
+
+  m_settings.clear();
+  for (SettingSectionMap::iterator section = m_sections.begin(); section != m_sections.end(); ++section)
+    delete section->second;
+  m_sections.clear();
+
+  OnSettingsCleared();
+
+  for (std::set<ISubSettings*>::const_iterator it = m_subSettings.begin(); it != m_subSettings.end(); ++it)
+    (*it)->Clear();
+
+  m_initialized = false;
+}
+
+bool CSettingsManager::LoadSetting(const TiXmlNode *node, const std::string &settingId)
+{
+  if (node == NULL)
+    return false;
+
+  CSetting *setting = GetSetting(settingId);
+  if (setting == NULL)
+    return false;
+
+  return LoadSetting(node, setting);
+}
+
+void CSettingsManager::SetInitialized()
+{
+  CExclusiveLock lock(m_settingsCritical);
+  if (m_initialized)
+    return;
+
+  m_initialized = true;
+
+  for (SettingMap::iterator setting = m_settings.begin(); setting != m_settings.end(); )
+  {
+    SettingMap::iterator tmpIterator = setting++;
+    if (tmpIterator->second.setting == NULL)
+      m_settings.erase(tmpIterator);
+  }
+}
+
+void CSettingsManager::RegisterCallback(ISettingCallback *callback, const std::set<std::string> &settingList)
+{
+  CExclusiveLock lock(m_settingsCritical);
+  if (callback == NULL)
+    return;
+
+  for (std::set<std::string>::const_iterator settingIt = settingList.begin(); settingIt != settingList.end(); ++settingIt)
+  {
+    std::string id = *settingIt;
+    StringUtils::ToLower(id);
+
+    SettingMap::iterator setting = m_settings.find(id);
+    if (setting == m_settings.end())
+    {
+      if (m_initialized)
+        continue;
+
+      Setting tmpSetting = { NULL };
+      std::pair<SettingMap::iterator, bool> tmpIt = m_settings.insert(make_pair(id, tmpSetting));
+      setting = tmpIt.first;
+    }
+
+    setting->second.callbacks.insert(callback);
+  }
+}
+
+void CSettingsManager::UnregisterCallback(ISettingCallback *callback)
+{
+  CExclusiveLock lock(m_settingsCritical);
+  for (SettingMap::iterator settingIt = m_settings.begin(); settingIt != m_settings.end(); ++settingIt)
+    settingIt->second.callbacks.erase(callback);
+}
+
+void CSettingsManager::RegisterSettingType(const std::string &settingType, ISettingCreator *settingCreator)
+{
+  CExclusiveLock lock(m_critical);
+  if (settingType.empty() || settingCreator == NULL)
+    return;
+
+  SettingCreatorMap::const_iterator creatorIt = m_settingCreators.find(settingType);
+  if (creatorIt == m_settingCreators.end())
+    m_settingCreators.insert(make_pair(settingType, settingCreator));
+}
+
+void CSettingsManager::RegisterSettingControl(const std::string &controlType, ISettingControlCreator *settingControlCreator)
+{
+  if (controlType.empty() || settingControlCreator == NULL)
+    return;
+
+  CExclusiveLock lock(m_critical);
+  SettingControlCreatorMap::const_iterator creatorIt = m_settingControlCreators.find(controlType);
+  if (creatorIt == m_settingControlCreators.end())
+    m_settingControlCreators.insert(make_pair(controlType, settingControlCreator));
+}
+
+void CSettingsManager::RegisterSettingsHandler(ISettingsHandler *settingsHandler)
+{
+  if (settingsHandler == NULL)
+    return;
+
+  CExclusiveLock lock(m_critical);
+  if (find(m_settingsHandlers.begin(), m_settingsHandlers.end(), settingsHandler) == m_settingsHandlers.end())
+    m_settingsHandlers.push_back(settingsHandler);
+}
+
+void CSettingsManager::UnregisterSettingsHandler(ISettingsHandler *settingsHandler)
+{
+  if (settingsHandler == NULL)
+    return;
+
+  CExclusiveLock lock(m_critical);
+  SettingsHandlers::iterator it = find(m_settingsHandlers.begin(), m_settingsHandlers.end(), settingsHandler);
+  if (it != m_settingsHandlers.end())
+    m_settingsHandlers.erase(it);
+}
+
+void CSettingsManager::RegisterSubSettings(ISubSettings *subSettings)
+{
+  CExclusiveLock lock(m_critical);
+  if (subSettings == NULL)
+    return;
+
+  m_subSettings.insert(subSettings);
+}
+
+void CSettingsManager::UnregisterSubSettings(ISubSettings *subSettings)
+{
+  CExclusiveLock lock(m_critical);
+  if (subSettings == NULL)
+    return;
+
+  m_subSettings.erase(subSettings);
+}
+
+void CSettingsManager::RegisterSettingOptionsFiller(const std::string &identifier, IntegerSettingOptionsFiller optionsFiller)
+{
+  if (identifier.empty() || optionsFiller == NULL)
+    return;
+
+  RegisterSettingOptionsFiller(identifier, (void*)optionsFiller, SettingOptionsFillerTypeInteger);
+}
+
+void CSettingsManager::RegisterSettingOptionsFiller(const std::string &identifier, StringSettingOptionsFiller optionsFiller)
+{
+  if (identifier.empty() || optionsFiller == NULL)
+    return;
+
+  RegisterSettingOptionsFiller(identifier, (void*)optionsFiller, SettingOptionsFillerTypeString);
+}
+
+void CSettingsManager::UnregisterSettingOptionsFiller(const std::string &identifier)
+{
+  CExclusiveLock lock(m_critical);
+  m_optionsFillers.erase(identifier);
+}
+
+void* CSettingsManager::GetSettingOptionsFiller(const CSetting *setting)
+{
+  CSharedLock lock(m_critical);
+  if (setting == NULL)
+    return NULL;
+
+  // get the option filler's identifier
+  std::string filler;
+  if (setting->GetType() == SettingTypeInteger)
+    filler = ((const CSettingInt*)setting)->GetOptionsFiller();
+  else if (setting->GetType() == SettingTypeString)
+    filler = ((const CSettingString*)setting)->GetOptionsFiller();
+
+  if (filler.empty())
+    return NULL;
+
+  // check if such an option filler is known
+  SettingOptionsFillerMap::const_iterator fillerIt = m_optionsFillers.find(filler);
+  if (fillerIt == m_optionsFillers.end())
+    return NULL;
+
+  if (fillerIt->second.filler == NULL)
+    return NULL;
+
+  // make sure the option filler's type matches the setting's type
+  switch (fillerIt->second.type)
+  {
+    case SettingOptionsFillerTypeInteger:
+    {
+      if (setting->GetType() != SettingTypeInteger)
+        return NULL;
+
+      break;
+    }
+    
+    case SettingOptionsFillerTypeString:
+    {
+      if (setting->GetType() != SettingTypeString)
+        return NULL;
+
+      break;
+    }
+
+    default:
+      return NULL;
+  }
+
+  return fillerIt->second.filler;
+}
+
+CSetting* CSettingsManager::GetSetting(const std::string &id) const
+{
+  CSharedLock lock(m_settingsCritical);
+  if (id.empty())
+    return NULL;
+
+  std::string settingId = id;
+  StringUtils::ToLower(settingId);
+
+  SettingMap::const_iterator setting = m_settings.find(settingId);
+  if (setting != m_settings.end())
+    return setting->second.setting;
+
+  CLog::Log(LOGDEBUG, "CSettingsManager: requested setting (%s) was not found.", id.c_str());
+  return NULL;
+}
+
+std::vector<CSettingSection*> CSettingsManager::GetSections() const
+{
+  CSharedLock lock(m_critical);
+  std::vector<CSettingSection*> sections;
+  for (SettingSectionMap::const_iterator sectionIt = m_sections.begin(); sectionIt != m_sections.end(); ++sectionIt)
+    sections.push_back(sectionIt->second);
+
+  return sections;
+}
+
+CSettingSection* CSettingsManager::GetSection(const std::string &section) const
+{
+  CSharedLock lock(m_critical);
+  if (section.empty())
+    return NULL;
+
+  std::string sectionId = section;
+  StringUtils::ToLower(sectionId);
+
+  SettingSectionMap::const_iterator sectionIt = m_sections.find(sectionId);
+  if (sectionIt != m_sections.end())
+    return sectionIt->second;
+
+  CLog::Log(LOGDEBUG, "CSettingsManager: requested setting section (%s) was not found.", section.c_str());
+  return NULL;
+}
+
+SettingDependencyMap CSettingsManager::GetDependencies(const std::string &id) const
+{
+  CSharedLock lock(m_settingsCritical);
+  SettingMap::const_iterator setting = m_settings.find(id);
+  if (setting == m_settings.end())
+    return SettingDependencyMap();
+
+  return setting->second.dependencies;
+}
+
+SettingDependencyMap CSettingsManager::GetDependencies(const CSetting *setting) const
+{
+  if (setting == NULL)
+    return SettingDependencyMap();
+
+  return GetDependencies(setting->GetId());
+}
+
+bool CSettingsManager::GetBool(const std::string &id) const
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeBool)
+    return false;
+
+  return ((CSettingBool*)setting)->GetValue();
+}
+
+bool CSettingsManager::SetBool(const std::string &id, bool value)
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeBool)
+    return false;
+
+  return ((CSettingBool*)setting)->SetValue(value);
+}
+
+bool CSettingsManager::ToggleBool(const std::string &id)
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeBool)
+    return false;
+
+  return SetBool(id, !((CSettingBool*)setting)->GetValue());
+}
+
+int CSettingsManager::GetInt(const std::string &id) const
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeInteger)
+    return 0;
+
+  return ((CSettingInt*)setting)->GetValue();
+}
+
+bool CSettingsManager::SetInt(const std::string &id, int value)
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeInteger)
+    return false;
+
+  return ((CSettingInt*)setting)->SetValue(value);
+}
+
+double CSettingsManager::GetNumber(const std::string &id) const
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeNumber)
+    return 0.0;
+
+  return ((CSettingNumber*)setting)->GetValue();
+}
+
+bool CSettingsManager::SetNumber(const std::string &id, double value)
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeNumber)
+    return false;
+
+  return ((CSettingNumber*)setting)->SetValue(value);
+}
+
+std::string CSettingsManager::GetString(const std::string &id) const
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeString)
+    return "";
+
+  return ((CSettingString*)setting)->GetValue();
+}
+
+bool CSettingsManager::SetString(const std::string &id, const std::string &value)
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeString)
+    return false;
+
+  return ((CSettingString*)setting)->SetValue(value);
+}
+
+std::vector< boost::shared_ptr<CSetting> > CSettingsManager::GetList(const std::string &id) const
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeList)
+    return std::vector< boost::shared_ptr<CSetting> >();
+
+  return ((CSettingList*)setting)->GetValue();
+}
+
+bool CSettingsManager::SetList(const std::string &id, const std::vector< boost::shared_ptr<CSetting> > &value)
+{
+  CSharedLock lock(m_settingsCritical);
+  CSetting *setting = GetSetting(id);
+  if (setting == NULL || setting->GetType() != SettingTypeList)
+    return false;
+
+  return ((CSettingList*)setting)->SetValue(value);
+}
+
+void CSettingsManager::AddCondition(const std::string &condition)
+{
+  CExclusiveLock lock(m_critical);
+  if (condition.empty())
+    return;
+
+  m_conditions.AddCondition(condition);
+}
+
+void CSettingsManager::AddCondition(const std::string &identifier, SettingConditionCheck condition)
+{
+  CExclusiveLock lock(m_critical);
+  if (identifier.empty() || condition == NULL)
+    return;
+
+  m_conditions.AddCondition(identifier, condition);
+}
+  
+bool CSettingsManager::Serialize(TiXmlNode *parent) const
+{
+  if (parent == NULL)
+    return false;
+
+  CSharedLock lock(m_settingsCritical);
+
+  for (SettingMap::const_iterator it = m_settings.begin(); it != m_settings.end(); ++it)
+  {
+    if (it->second.setting->GetType() == SettingTypeAction)
+      continue;
+
+    std::vector<std::string> parts = StringUtils::Split(it->first, ".");
+    if (parts.size() != 2 || parts.at(0).empty() || parts.at(1).empty())
+    {
+      CLog::Log(LOGWARNING, "CSettingsManager: unable to save setting \"%s\"", it->first.c_str());
+      continue;
+    }
+      
+    TiXmlNode *sectionNode = parent->FirstChild(parts.at(0));
+    if (sectionNode == NULL)
+    {
+      TiXmlElement sectionElement(parts.at(0));
+      sectionNode = parent->InsertEndChild(sectionElement);
+        
+      if (sectionNode == NULL)
+      {
+        CLog::Log(LOGWARNING, "CSettingsManager: unable to write <%s> tag", parts.at(0).c_str());
+        continue;
+      }
+    }
+      
+    TiXmlElement settingElement(parts.at(1));
+    TiXmlNode *settingNode = sectionNode->InsertEndChild(settingElement);
+    if (settingNode == NULL)
+    {
+      CLog::Log(LOGWARNING, "CSetting: unable to write <%s> tag in <%s>", parts.at(1).c_str(), parts.at(0).c_str());
+      continue;
+    }
+      
+    TiXmlText value(it->second.setting->ToString());
+    settingNode->InsertEndChild(value);
+  }
+
+  return true;
+}
+  
+bool CSettingsManager::Deserialize(const TiXmlNode *node, std::map<std::string, CSetting*> *loadedSettings /* = NULL */)
+{
+  if (node == NULL)
+    return false;
+
+  CSharedLock lock(m_settingsCritical);
+
+  for (SettingMap::iterator it = m_settings.begin(); it != m_settings.end(); ++it)
+  {
+    if (LoadSetting(node, it->second.setting) && loadedSettings != NULL)
+      loadedSettings->insert(make_pair(it->first, it->second.setting));
+  }
+
+  return true;
+}
+
+bool CSettingsManager::OnSettingChanging(const CSetting *setting)
+{
+  if (setting == NULL)
+    return false;
+
+  CSharedLock lock(m_settingsCritical);
+  if (!m_loaded)
+    return true;
+
+  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
+  if (settingIt == m_settings.end())
+    return false;
+
+  Setting settingData = settingIt->second;
+  // now that we have a copy of the setting's data, we can leave the lock
+  lock.Leave();
+
+  for (CallbackSet::iterator callback = settingData.callbacks.begin();
+        callback != settingData.callbacks.end();
+        ++callback)
+  {
+    if (!(*callback)->OnSettingChanging(setting))
+      return false;
+  }
+
+  return true;
+}
+  
+void CSettingsManager::OnSettingChanged(const CSetting *setting)
+{
+  CSharedLock lock(m_settingsCritical);
+  if (!m_loaded || setting == NULL)
+    return;
+    
+  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
+  if (settingIt == m_settings.end())
+    return;
+
+  Setting settingData = settingIt->second;
+  // now that we have a copy of the setting's data, we can leave the lock
+  lock.Leave();
+    
+  for (CallbackSet::iterator callback = settingData.callbacks.begin();
+        callback != settingData.callbacks.end();
+        ++callback)
+    (*callback)->OnSettingChanged(setting);
+
+  // now handle any settings which depend on the changed setting
+  const SettingDependencyMap& deps = GetDependencies(setting);
+  for (SettingDependencyMap::const_iterator depsIt = deps.begin(); depsIt != deps.end(); ++depsIt)
+  {
+    for (SettingDependencies::const_iterator depIt = depsIt->second.begin(); depIt != depsIt->second.end(); ++depIt)
+      UpdateSettingByDependency(depsIt->first, *depIt);
+  }
+}
+
+void CSettingsManager::OnSettingAction(const CSetting *setting)
+{
+  CSharedLock lock(m_settingsCritical);
+  if (!m_loaded || setting == NULL)
+    return;
+
+  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
+  if (settingIt == m_settings.end())
+    return;
+
+  Setting settingData = settingIt->second;
+  // now that we have a copy of the setting's data, we can leave the lock
+  lock.Leave();
+
+  for (CallbackSet::iterator callback = settingData.callbacks.begin();
+        callback != settingData.callbacks.end();
+        ++callback)
+    (*callback)->OnSettingAction(setting);
+}
+
+bool CSettingsManager::OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode)
+{
+  CSharedLock lock(m_settingsCritical);
+  if (setting == NULL)
+    return false;
+
+  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
+  if (settingIt == m_settings.end())
+    return false;
+
+  Setting settingData = settingIt->second;
+  // now that we have a copy of the setting's data, we can leave the lock
+  lock.Leave();
+
+  bool ret = false;
+  for (CallbackSet::iterator callback = settingData.callbacks.begin();
+        callback != settingData.callbacks.end();
+        ++callback)
+    ret |= (*callback)->OnSettingUpdate(setting, oldSettingId, oldSettingNode);
+
+  return ret;
+}
+
+void CSettingsManager::OnSettingPropertyChanged(const CSetting *setting, const char *propertyName)
+{
+  CSharedLock lock(m_settingsCritical);
+  if (!m_loaded || setting == NULL)
+    return;
+
+  SettingMap::const_iterator settingIt = m_settings.find(setting->GetId());
+  if (settingIt == m_settings.end())
+    return;
+
+  Setting settingData = settingIt->second;
+  // now that we have a copy of the setting's data, we can leave the lock
+  lock.Leave();
+
+  for (CallbackSet::iterator callback = settingData.callbacks.begin();
+        callback != settingData.callbacks.end();
+        ++callback)
+    (*callback)->OnSettingPropertyChanged(setting, propertyName);
+}
+
+CSetting* CSettingsManager::CreateSetting(const std::string &settingType, const std::string &settingId, CSettingsManager *settingsManager /* = NULL */) const
+{
+  if (StringUtils::EqualsNoCase(settingType, "boolean"))
+    return new CSettingBool(settingId, const_cast<CSettingsManager*>(this));
+  else if (StringUtils::EqualsNoCase(settingType, "integer"))
+    return new CSettingInt(settingId, const_cast<CSettingsManager*>(this));
+  else if (StringUtils::EqualsNoCase(settingType, "number"))
+    return new CSettingNumber(settingId, const_cast<CSettingsManager*>(this));
+  else if (StringUtils::EqualsNoCase(settingType, "string"))
+    return new CSettingString(settingId, const_cast<CSettingsManager*>(this));
+  else if (StringUtils::EqualsNoCase(settingType, "action"))
+    return new CSettingAction(settingId, const_cast<CSettingsManager*>(this));
+  else if (settingType.size() > 6 &&
+           StringUtils::StartsWith(settingType, "list[") &&
+           StringUtils::EndsWith(settingType, "]"))
+  {
+    std::string elementType = StringUtils::Mid(settingType, 5, settingType.size() - 6);
+    CSetting *elementSetting = CreateSetting(elementType, settingId + ".definition", const_cast<CSettingsManager*>(this));
+    if (elementSetting != NULL)
+      return new CSettingList(settingId, elementSetting, const_cast<CSettingsManager*>(this));
+  }
+
+  CSharedLock lock(m_critical);
+  SettingCreatorMap::const_iterator creator = m_settingCreators.find(settingType);
+  if (creator != m_settingCreators.end())
+    return creator->second->CreateSetting(settingType, settingId, (CSettingsManager*)this);
+
+  return NULL;
+}
+
+ISettingControl* CSettingsManager::CreateControl(const std::string &controlType) const
+{
+  if (controlType.empty())
+    return NULL;
+
+  CSharedLock lock(m_critical);
+  SettingControlCreatorMap::const_iterator creator = m_settingControlCreators.find(controlType);
+  if (creator != m_settingControlCreators.end() && creator->second != NULL)
+    return creator->second->CreateControl(controlType);
+
+  return NULL;
+}
+
+bool CSettingsManager::OnSettingsLoading()
+{
+  CSharedLock lock(m_critical);
+  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
+  {
+    if (!(*it)->OnSettingsLoading())
+      return false;
+  }
+
+  return true;
+}
+
+void CSettingsManager::OnSettingsLoaded()
+{
+  CSharedLock lock(m_critical);
+  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
+    (*it)->OnSettingsLoaded();
+}
+
+bool CSettingsManager::OnSettingsSaving() const
+{
+  CSharedLock lock(m_critical);
+  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
+  {
+    if (!(*it)->OnSettingsSaving())
+      return false;
+  }
+
+  return true;
+}
+
+void CSettingsManager::OnSettingsSaved() const
+{
+  CSharedLock lock(m_critical);
+  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
+    (*it)->OnSettingsSaved();
+}
+
+void CSettingsManager::OnSettingsCleared()
+{
+  CSharedLock lock(m_critical);
+  for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it)
+    (*it)->OnSettingsCleared();
+}
+
+bool CSettingsManager::Load(const TiXmlNode *settings)
+{
+  bool ok = true;
+  CSharedLock lock(m_critical);
+  for (std::set<ISubSettings*>::const_iterator it = m_subSettings.begin(); it != m_subSettings.end(); ++it)
+    ok &= (*it)->Load(settings);
+
+  return ok;
+}
+
+bool CSettingsManager::LoadSetting(const TiXmlNode *node, CSetting *setting)
+{
+  if (node == NULL || setting == NULL)
+    return false;
+
+  if (setting->GetType() == SettingTypeAction)
+    return false;
+
+  const std::string &settingId = setting->GetId();
+
+  std::vector<std::string> parts = StringUtils::Split(settingId, ".");
+  if (parts.size() != 2 || parts.at(0).empty() || parts.at(1).empty())
+  {
+    CLog::Log(LOGWARNING, "CSettingsManager: unable to load setting \"%s\"", settingId.c_str());
+    return false;
+  }
+
+  const TiXmlNode *sectionNode = node->FirstChild(parts.at(0));
+  if (sectionNode == NULL)
+    return false;
+
+  const TiXmlNode *settingNode = sectionNode->FirstChild(parts.at(1));
+  if (settingNode == NULL)
+    return false;
+
+  if (!setting->FromString(settingNode->FirstChild() != NULL ? settingNode->FirstChild()->ValueStr() : StringUtils::Empty))
+  {
+    CLog::Log(LOGWARNING, "CSettingsManager: unable to read value of setting \"%s\"", settingId.c_str());
+    return false;
+  }
+
+  return true;
+}
+
+bool CSettingsManager::UpdateSettings(const TiXmlNode *root)
+{
+  bool updated = false;
+  CSharedLock lock(m_settingsCritical);
+
+  for (SettingMap::iterator setting = m_settings.begin(); setting != m_settings.end(); ++setting)
+  {
+    const std::set<CSettingUpdate>& updates = setting->second.setting->GetUpdates();
+    if (updates.empty())
+      continue;
+
+    for (std::set<CSettingUpdate>::const_iterator update = updates.begin(); update != updates.end(); ++update)
+      updated |= UpdateSetting(root, setting->second.setting, *update);
+  }
+
+  return updated;
+}
+
+bool CSettingsManager::UpdateSetting(const TiXmlNode *node, CSetting *setting, const CSettingUpdate& update)
+{
+  if (node == NULL || setting == NULL || update.GetType() == SettingUpdateTypeNone)
+    return false;
+
+  bool updated = false;
+  const char *oldSetting = NULL;
+  const TiXmlNode *oldSettingNode = NULL;
+  if (update.GetType() == SettingUpdateTypeRename)
+  {
+    if (update.GetValue().empty())
+      return false;
+
+    oldSetting = update.GetValue().c_str();
+    std::vector<std::string> parts = StringUtils::Split(oldSetting, ".");
+    if (parts.size() != 2 || parts.at(0).empty() || parts.at(1).empty())
+      return false;
+
+    const TiXmlNode *sectionNode = node->FirstChild(parts.at(0));
+    if (sectionNode == NULL)
+      return false;
+
+    oldSettingNode = sectionNode->FirstChild(parts.at(1));
+    if (oldSettingNode == NULL)
+      return false;
+
+    if (setting->FromString(oldSettingNode->FirstChild() != NULL ? oldSettingNode->FirstChild()->ValueStr() : StringUtils::Empty))
+      updated = true;
+    else
+      CLog::Log(LOGWARNING, "CSetting: unable to update \"%s\" through automatically renaming from \"%s\"", setting->GetId().c_str(), oldSetting);
+  }
+
+  updated |= OnSettingUpdate(setting, oldSetting, oldSettingNode);
+  return updated;
+}
+
+void CSettingsManager::UpdateSettingByDependency(const std::string &settingId, const CSettingDependency &dependency)
+{
+  CSetting *setting = GetSetting(settingId);
+  if (setting == NULL)
+    return;
+
+  switch (dependency.GetType())
+  {
+    case SettingDependencyTypeEnable:
+      // just trigger the property changed callback and a call to
+      // CSetting::IsEnabled() will automatically determine the new
+      // enabled state
+      OnSettingPropertyChanged(setting, "enabled");
+      break;
+
+    case SettingDependencyTypeUpdate:
+    {
+      SettingType type = (SettingType)setting->GetType();
+      if (type == SettingTypeInteger)
+      {
+        CSettingInt *settingInt = ((CSettingInt*)setting);
+        if (settingInt->GetOptionsType() == SettingOptionsTypeDynamic)
+          settingInt->UpdateDynamicOptions();
+      }
+      else if (type == SettingTypeString)
+      {
+        CSettingString *settingString = ((CSettingString*)setting);
+        if (settingString->GetOptionsType() == SettingOptionsTypeDynamic)
+          settingString->UpdateDynamicOptions();
+      }
+      break;
+    }
+
+    case SettingDependencyTypeVisible:
+      // just trigger the property changed callback and a call to
+      // CSetting::IsVisible() will automatically determine the new
+      // visible state
+      OnSettingPropertyChanged(setting, "visible");
+      break;
+
+    case SettingDependencyTypeNone:
+    default:
+      break;
+  }
+}
+
+void CSettingsManager::RegisterSettingOptionsFiller(const std::string &identifier, void *filler, SettingOptionsFillerType type)
+{
+  CExclusiveLock lock(m_critical);
+  SettingOptionsFillerMap::const_iterator it = m_optionsFillers.find(identifier);
+  if (it != m_optionsFillers.end())
+    return;
+
+  SettingOptionsFiller optionsFiller = { filler, type };
+  m_optionsFillers.insert(make_pair(identifier, optionsFiller));
+}
diff --git a/xbmc/settings/lib/SettingsManager.h b/xbmc/settings/lib/SettingsManager.h
new file mode 100644 (file)
index 0000000..ee6c774
--- /dev/null
@@ -0,0 +1,455 @@
+#pragma once
+/*
+ *      Copyright (C) 2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <map>
+#include <set>
+#include <vector>
+
+#include "ISetting.h"
+#include "ISettingCallback.h"
+#include "ISettingControlCreator.h"
+#include "ISettingCreator.h"
+#include "ISettingsHandler.h"
+#include "ISubSettings.h"
+#include "SettingConditions.h"
+#include "SettingDependency.h"
+#include "threads/SharedSection.h"
+
+class CSettingSection;
+class CSettingUpdate;
+
+class TiXmlElement;
+class TiXmlNode;
+
+typedef void (*IntegerSettingOptionsFiller)(const CSetting *setting, std::vector< std::pair<std::string, int> > &list, int &current);
+typedef void (*StringSettingOptionsFiller)(const CSetting *setting, std::vector< std::pair<std::string, std::string> > &list, std::string &current);
+
+/*!
+ \ingroup settings
+ \brief Settings manager responsible for initializing, loading and handling
+ all settings.
+ */
+class CSettingsManager : public ISettingCreator, public ISettingControlCreator,
+                         private ISettingCallback,
+                         private ISettingsHandler, private ISubSettings
+{
+public:
+  /*!
+   \brief Creates a new (uninitialized) settings manager.
+   */
+  CSettingsManager();
+  virtual ~CSettingsManager();
+
+  // implementation of ISettingCreator
+  virtual CSetting* CreateSetting(const std::string &settingType, const std::string &settingId, CSettingsManager *settingsManager = NULL) const;
+
+  // implementation of ISettingControlCreator
+  virtual ISettingControl* CreateControl(const std::string &controlType) const;
+
+  /*!
+   \brief Initializes the settings manager using the setting definitions
+   represented by the given XML element.
+
+   \param root XML element representing setting definitions
+   \return True if the XML element was successfully deserialized into setting definitions, false otherwise
+   */
+  bool Initialize(const TiXmlElement *root);
+  /*!
+   \brief Loads setting values from the given XML element.
+
+   \param root XML element containing setting values
+   \param updated Whether some settings were automatically updated
+   \param triggerEvents Whether to trigger ISettingCallback methods
+   \param loadedSettings A list to fill with all the successfully loaded settings
+   \return True if the setting values were successfully loaded, false otherwise
+   */
+  bool Load(const TiXmlElement *root, bool &updated, bool triggerEvents = true, std::map<std::string, CSetting*> *loadedSettings = NULL);
+  /*!
+   \brief Saves the setting values to the given XML node.
+
+   \param root XML node
+   \return True if the setting values were successfully saved, false otherwise
+   */
+  virtual bool Save(TiXmlNode *root) const;
+  /*!
+   \brief Unloads the previously loaded setting values.
+
+   The values of all the settings are reset to their default values.
+   */
+  void Unload();
+  /*!
+   \brief Clears the complete settings manager.
+
+   This removes all initialized settings, groups, categories and sections and
+   returns to the uninitialized state. Any registered callbacks or
+   implementations stay registered.
+   */
+  void Clear();
+
+  /*!
+   \brief Loads the setting being represented by the given XML node with the
+   given identifier.
+
+   \param node XML node representing the setting to load
+   \param settingId Setting identifier
+   \return True if the setting was successfully loaded from the given XML node, false otherwise
+   */
+  bool LoadSetting(const TiXmlNode *node, const std::string &settingId);
+
+  /*!
+   \brief Tells the settings system that the initialization is complete.
+
+   Setting values can only be loaded after a complete and successful
+   initialization of the settings system.
+   */
+  void SetInitialized();
+  /*!
+   \brief Tells the settings system that all setting values
+   have been loaded.
+
+   This manual trigger is necessary to enable the ISettingCallback methods
+   being executed.
+   */
+  void SetLoaded() { m_loaded = true; }
+
+  /*!
+   \brief Registers the given ISettingCallback implementation to be triggered
+   for the given list of settings.
+
+   \param settingsHandler ISettingsHandler implementation
+   \param settingList List of settings to trigger the given ISettingCallback implementation
+   */
+  void RegisterCallback(ISettingCallback *callback, const std::set<std::string> &settingList);
+  /*!
+   \brief Unregisters the given ISettingCallback implementation.
+
+   \param callback ISettingCallback implementation
+   */
+  void UnregisterCallback(ISettingCallback *callback);
+
+  /*!
+   \brief Registers a custom setting type and its ISettingCreator
+   implementation.
+
+   When a setting definition for a registered custom setting type is found its
+   ISettingCreator implementation is called to create and deserialize the
+   setting definition.
+
+   \param settingType String representation of the custom setting type
+   \param settingCreator ISettingCreator implementation
+   */
+  void RegisterSettingType(const std::string &settingType, ISettingCreator *settingCreator);
+
+  /*!
+   \brief Registers a custom setting control type and its
+   ISettingControlCreator implementation
+
+   When a setting control definition for a registered custom setting control
+   type is found its ISettingControlCreator implementation is called to create
+   and deserialize the setting control definition.
+   
+   \param controlType String representation of the custom setting control type
+   \param settingControlCreator ISettingControlCreator implementation
+   */
+  void RegisterSettingControl(const std::string &controlType, ISettingControlCreator *settingControlCreator);
+
+  /*!
+   \brief Registers the given ISettingsHandler implementation.
+
+   \param settingsHandler ISettingsHandler implementation
+   */
+  void RegisterSettingsHandler(ISettingsHandler *settingsHandler);
+  /*!
+   \brief Unregisters the given ISettingsHandler implementation.
+
+   \param settingsHandler ISettingsHandler implementation
+   */
+  void UnregisterSettingsHandler(ISettingsHandler *settingsHandler);
+
+  /*!
+   \brief Registers the given ISubSettings implementation.
+
+   \param subSettings ISubSettings implementation
+   */
+  void RegisterSubSettings(ISubSettings *subSettings);
+  /*!
+   \brief Unregisters the given ISubSettings implementation.
+
+   \param subSettings ISubSettings implementation
+   */
+  void UnregisterSubSettings(ISubSettings *subSettings);
+
+  /*!
+   \brief Registers the given integer setting options filler under the given identifier.
+
+   \param identifier Setting options filler identifier
+   \param optionsFiller Integer setting options filler implementation
+   */
+  void RegisterSettingOptionsFiller(const std::string &identifier, IntegerSettingOptionsFiller optionsFiller);
+  /*!
+   \brief Registers the given string setting options filler under the given identifier.
+
+   \param identifier Setting options filler identifier
+   \param optionsFiller String setting options filler implementation
+   */
+  void RegisterSettingOptionsFiller(const std::string &identifier, StringSettingOptionsFiller optionsFiller);
+  /*!
+   \brief Unregisters the setting options filler registered under the given identifier.
+
+   \param identifier Setting options filler identifier
+   */
+  void UnregisterSettingOptionsFiller(const std::string &identifier);
+  /*!
+   \brief Gets the implementation of the setting options filler used by the
+   given setting.
+
+   \param setting Setting object
+   \return Implementation of the setting options filler (either IntegerSettingOptionsFiller or StringSettingOptionsFiller)
+   */
+  void* GetSettingOptionsFiller(const CSetting *setting);
+
+  /*!
+   \brief Gets the setting with the given identifier.
+
+   \param id Setting identifier
+   \return Setting object with the given identifier or NULL if the identifier is unknown
+   */
+  CSetting* GetSetting(const std::string &id) const;
+  /*!
+   \brief Gets the full list of setting sections.
+
+   \return List of setting sections
+   */
+  std::vector<CSettingSection*> GetSections() const;
+  /*!
+   \brief Gets the setting section with the given identifier.
+
+   \param section Setting section identifier
+   \return Setting section with the given identifier or NULL if the identifier is unknown
+   */
+  CSettingSection* GetSection(const std::string &section) const;
+  /*!
+   \brief Gets a map of settings (and their dependencies) which depend on
+   the setting with the given identifier.
+
+   It is important to note that the returned dependencies are not the
+   dependencies of the setting with the given identifier but the settings
+   (and their dependencies) which depend on the setting with the given
+   identifier.
+
+   \param id Setting identifier
+   \return Map of settings (and their dependencies) which depend on the setting with the given identifier
+   */
+  SettingDependencyMap GetDependencies(const std::string &id) const;
+  /*!
+   \brief Gets a map of settings (and their dependencies) which depend on
+   the given setting.
+
+   It is important to note that the returned dependencies are not the
+   dependencies of the given setting but the settings (and their dependencies)
+   which depend on the given setting.
+
+   \param setting Setting object
+   \return Map of settings (and their dependencies) which depend on the given setting
+   */
+  SettingDependencyMap GetDependencies(const CSetting *setting) const;
+
+  /*!
+   \brief Gets the boolean value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \return Boolean value of the setting with the given identifier
+   */
+  bool GetBool(const std::string &id) const;
+  /*!
+   \brief Gets the integer value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \return Integer value of the setting with the given identifier
+   */
+  int GetInt(const std::string &id) const;
+  /*!
+   \brief Gets the real number value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \return Real number value of the setting with the given identifier
+   */
+  double GetNumber(const std::string &id) const;
+  /*!
+   \brief Gets the string value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \return String value of the setting with the given identifier
+   */
+  std::string GetString(const std::string &id) const;
+  /*!
+   \brief Gets the values of the list setting with the given identifier.
+
+   \param id Setting identifier
+   \return List of values of the setting with the given identifier
+   */
+  std::vector< boost::shared_ptr<CSetting> > GetList(const std::string &id) const;
+
+  /*!
+   \brief Sets the boolean value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \param value Boolean value to set
+   \return True if setting the value was successful, false otherwise
+   */
+  bool SetBool(const std::string &id, bool value);
+  /*!
+   \brief Toggles the boolean value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \return True if toggling the boolean value was successful, false otherwise
+   */
+  bool ToggleBool(const std::string &id);
+  /*!
+   \brief Sets the integer value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \param value Integer value to set
+   \return True if setting the value was successful, false otherwise
+   */
+  bool SetInt(const std::string &id, int value);
+  /*!
+   \brief Sets the real number value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \param value Real number value to set
+   \return True if setting the value was successful, false otherwise
+   */
+  bool SetNumber(const std::string &id, double value);
+  /*!
+   \brief Sets the string value of the setting with the given identifier.
+
+   \param id Setting identifier
+   \param value String value to set
+   \return True if setting the value was successful, false otherwise
+   */
+  bool SetString(const std::string &id, const std::string &value);
+  /*!
+   \brief Sets the values of the list setting with the given identifier.
+
+   \param id Setting identifier
+   \param value Values to set
+   \return True if setting the values was successful, false otherwise
+   */
+  bool SetList(const std::string &id, const std::vector< boost::shared_ptr<CSetting> > &value);
+
+  /*!
+   \brief Gets the setting conditions manager used by the settings manager.
+
+   \return Setting conditions manager used by the settings manager.
+   */
+  const CSettingConditionsManager& GetConditions() const { return m_conditions; }
+  /*!
+   \brief Adds the given static condition.
+
+   A static condition is just a string. If a static condition is evaluated,
+   the result depends on whether the condition's value is defined or not.
+
+   \param condition Static condition string/value
+   */
+  void AddCondition(const std::string &condition);
+  /*!
+   \brief Adds the given dynamic condition.
+
+   A dynamic condition has an identifier and an implementation which is
+   triggered when the condition is evaluated.
+
+   \param identifier Identifier of the dynamic condition
+   \param condition Implementation of the dynamic condition
+   */
+  void AddCondition(const std::string &identifier, SettingConditionCheck condition);
+
+private:
+  // implementation of ISettingCallback
+  virtual bool OnSettingChanging(const CSetting *setting);
+  virtual void OnSettingChanged(const CSetting *setting);
+  virtual void OnSettingAction(const CSetting *setting);
+  virtual bool OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode);
+  virtual void OnSettingPropertyChanged(const CSetting *setting, const char *propertyName);
+
+  // implementation of ISettingsHandler
+  virtual bool OnSettingsLoading();
+  virtual void OnSettingsLoaded();
+  virtual bool OnSettingsSaving() const;
+  virtual void OnSettingsSaved() const;
+  virtual void OnSettingsCleared();
+
+  // implementation of ISubSettings
+  virtual bool Load(const TiXmlNode *settings);
+
+  bool Serialize(TiXmlNode *parent) const;
+  bool Deserialize(const TiXmlNode *node, std::map<std::string, CSetting*> *loadedSettings = NULL);
+
+  static bool LoadSetting(const TiXmlNode *node, CSetting *setting);
+  bool UpdateSettings(const TiXmlNode *root);
+  bool UpdateSetting(const TiXmlNode *node, CSetting *setting, const CSettingUpdate& update);
+  void UpdateSettingByDependency(const std::string &settingId, const CSettingDependency &dependency);
+
+  typedef enum {
+    SettingOptionsFillerTypeNone = 0,
+    SettingOptionsFillerTypeInteger,
+    SettingOptionsFillerTypeString
+  } SettingOptionsFillerType;
+
+  void RegisterSettingOptionsFiller(const std::string &identifier, void *filler, SettingOptionsFillerType type);
+
+  typedef std::set<ISettingCallback *> CallbackSet;
+  typedef struct {
+    CSetting *setting;
+    SettingDependencyMap dependencies;
+    CallbackSet callbacks;
+  } Setting;
+
+  bool m_initialized;
+  bool m_loaded;
+
+  typedef std::map<std::string, Setting> SettingMap;
+  SettingMap m_settings;
+  typedef std::map<std::string, CSettingSection*> SettingSectionMap;
+  SettingSectionMap m_sections;
+
+  typedef std::map<std::string, ISettingCreator*> SettingCreatorMap;
+  SettingCreatorMap m_settingCreators;
+
+  typedef std::map<std::string, ISettingControlCreator*> SettingControlCreatorMap;
+  SettingControlCreatorMap m_settingControlCreators;
+
+  std::set<ISubSettings*> m_subSettings;
+  typedef std::vector<ISettingsHandler*> SettingsHandlers;
+  SettingsHandlers m_settingsHandlers;
+
+  CSettingConditionsManager m_conditions;
+
+  typedef struct {
+    void *filler;
+    SettingOptionsFillerType type;
+  } SettingOptionsFiller;
+  typedef std::map<std::string, SettingOptionsFiller> SettingOptionsFillerMap;
+  SettingOptionsFillerMap m_optionsFillers;
+
+  CSharedSection m_critical;
+  CSharedSection m_settingsCritical;
+};
index 15371f1..6165966 100644 (file)
@@ -39,7 +39,7 @@
 #include "settings/SettingPath.h"
 #include "settings/Settings.h"
 #include "settings/MediaSourceSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "storage/MediaManager.h"
 #include "utils/StringUtils.h"
 
@@ -259,34 +259,56 @@ bool CGUIControlListSetting::OnClick()
   CFileItemList options;
   if (!GetItems(m_pSetting, options) || options.Size() <= 1)
     return false;
+
+  const CSettingControlList *control = static_cast<const CSettingControlList*>(m_pSetting->GetControl());
   
   dialog->Reset();
   dialog->SetHeading(g_localizeStrings.Get(m_pSetting->GetLabel()));
   dialog->SetItems(&options);
-  dialog->SetMultiSelection(false);
+  dialog->SetMultiSelection(control->CanMultiSelect());
   dialog->DoModal();
 
   if (!dialog->IsConfirmed())
     return false;
 
-  const CFileItemPtr item = dialog->GetSelectedItem();
-  if (item == NULL || !item->HasProperty("value"))
-    return false;
-  
-  CVariant value = item->GetProperty("value");
+  const CFileItemList &items = dialog->GetSelectedItems();
+  std::vector<CVariant> values;
+  for (int index = 0; index < items.Size(); index++)
+  {
+    const CFileItemPtr item = items[index];
+    if (item == NULL || !item->HasProperty("value"))
+      return false;
+
+    values.push_back(item->GetProperty("value"));
+  }
+
+  bool ret = false;
   switch (m_pSetting->GetType())
   {
     case SettingTypeInteger:
-      return ((CSettingInt *)m_pSetting)->SetValue((int)value.asInteger());
-    
+      if (values.size() > 1)
+        return false;
+      ret = ((CSettingInt *)m_pSetting)->SetValue((int)values.at(0).asInteger());
+      break;
+
     case SettingTypeString:
-      return ((CSettingString *)m_pSetting)->SetValue(value.asString());
+      if (values.size() > 1)
+        return false;
+      ret = ((CSettingString *)m_pSetting)->SetValue(values.at(0).asString());
+      break;
+
+    case SettingTypeList:
+      ret = CSettings::Get().SetList(m_pSetting->GetId(), values);
+      break;
     
     default:
       break;
   }
 
-  return true;
+  if (ret)
+    Update();
+
+  return ret;
 }
 
 void CGUIControlListSetting::Update()
@@ -299,15 +321,15 @@ void CGUIControlListSetting::Update()
   CFileItemList options;
   if (GetItems(m_pSetting, options))
   {
+    std::vector<std::string> labels;
     for (int index = 0; index < options.Size(); index++)
     {
       const CFileItemPtr pItem = options.Get(index);
       if (pItem->IsSelected())
-      {
-        m_pButton->SetLabel2(pItem->GetLabel());
-        break;
-      }
+        labels.push_back(pItem->GetLabel());
     }
+
+    m_pButton->SetLabel2(StringUtils::Join(labels, ", "));
   }
 
   // disable the control if it has less than two items
@@ -323,33 +345,21 @@ static CFileItemPtr GetItem(const std::string &label, const CVariant &value)
   return pItem;
 }
 
-bool CGUIControlListSetting::GetItems(CSetting *setting, CFileItemList &items)
+bool CGUIControlListSetting::GetItems(const CSetting *setting, CFileItemList &items)
 {
   const CSettingControlList *control = static_cast<const CSettingControlList*>(setting->GetControl());
   const std::string &controlFormat = control->GetFormat();
+
   if (controlFormat == "integer")
     return GetIntegerItems(setting, items);
   else if (controlFormat == "string")
   {
-    if (setting->GetType() == SettingTypeInteger)
+    if (setting->GetType() == SettingTypeInteger ||
+       (setting->GetType() == SettingTypeList && ((CSettingList *)setting)->GetElementType() == SettingTypeInteger))
       return GetIntegerItems(setting, items);
-    else if (setting->GetType() == SettingTypeString)
-    {
-      CSettingString *pSettingString = (CSettingString *)setting;
-      if (pSettingString->GetOptionsType() == SettingOptionsTypeDynamic)
-      {
-        DynamicStringSettingOptions options = pSettingString->UpdateDynamicOptions();
-        for (DynamicStringSettingOptions::const_iterator option = options.begin(); option != options.end(); ++option)
-        {
-          CFileItemPtr pItem = GetItem(option->first, option->second);
-
-          if (StringUtils::EqualsNoCase(option->second, pSettingString->GetValue()))
-            pItem->Select(true);
-
-          items.Add(pItem);
-        }
-      }
-    }
+    else if (setting->GetType() == SettingTypeString ||
+            (setting->GetType() == SettingTypeList && ((CSettingList *)setting)->GetElementType() == SettingTypeString))
+      return GetStringItems(setting, items);
   }
   else
     return false;
@@ -357,9 +367,33 @@ bool CGUIControlListSetting::GetItems(CSetting *setting, CFileItemList &items)
   return true;
 }
 
-bool CGUIControlListSetting::GetIntegerItems(CSetting *setting, CFileItemList &items)
+bool CGUIControlListSetting::GetIntegerItems(const CSetting *setting, CFileItemList &items)
 {
-  CSettingInt *pSettingInt = (CSettingInt *)setting;
+  const CSettingInt *pSettingInt = NULL;
+  std::set<int> values;
+  if (setting->GetType() == SettingTypeInteger)
+  {
+    pSettingInt = static_cast<const CSettingInt*>(setting);
+    values.insert(pSettingInt->GetValue());
+  }
+  else if (setting->GetType() == SettingTypeList)
+  {
+    const CSettingList *settingList = static_cast<const CSettingList*>(setting);
+    if (settingList->GetElementType() != SettingTypeInteger)
+      return false;
+
+    pSettingInt = static_cast<const CSettingInt*>(settingList->GetDefinition());
+    std::vector<CVariant> list = CSettings::Get().GetList(settingList->GetId());
+    for (std::vector<CVariant>::const_iterator itValue = list.begin(); itValue != list.end(); ++itValue)
+    {
+      if (!itValue->isInteger())
+        return false;
+      values.insert(itValue->asInteger());
+    }
+  }
+  else
+    return false;
+
   switch (pSettingInt->GetOptionsType())
   {
     case SettingOptionsTypeStatic:
@@ -369,7 +403,7 @@ bool CGUIControlListSetting::GetIntegerItems(CSetting *setting, CFileItemList &i
       {
         CFileItemPtr pItem = GetItem(g_localizeStrings.Get(it->first), it->second);
 
-        if (it->second == pSettingInt->GetValue())
+        if (values.find(it->second) != values.end())
           pItem->Select(true);
 
         items.Add(pItem);
@@ -379,12 +413,12 @@ bool CGUIControlListSetting::GetIntegerItems(CSetting *setting, CFileItemList &i
 
     case SettingOptionsTypeDynamic:
     {
-      DynamicIntegerSettingOptions options = pSettingInt->UpdateDynamicOptions();
+      DynamicIntegerSettingOptions options = const_cast<CSettingInt*>(pSettingInt)->UpdateDynamicOptions();
       for (DynamicIntegerSettingOptions::const_iterator option = options.begin(); option != options.end(); ++option)
       {
         CFileItemPtr pItem = GetItem(option->first, option->second);
 
-        if (option->second == pSettingInt->GetValue())
+        if (values.find(option->second) != values.end())
           pItem->Select(true);
 
         items.Add(pItem);
@@ -400,6 +434,52 @@ bool CGUIControlListSetting::GetIntegerItems(CSetting *setting, CFileItemList &i
   return true;
 }
 
+bool CGUIControlListSetting::GetStringItems(const CSetting *setting, CFileItemList &items)
+{
+  const CSettingString *pSettingString = NULL;
+  std::set<std::string> values;
+  if (setting->GetType() == SettingTypeString)
+  {
+    pSettingString = static_cast<const CSettingString*>(setting);
+    values.insert(pSettingString->GetValue());
+  }
+  else if (setting->GetType() == SettingTypeList)
+  {
+    const CSettingList *settingList = static_cast<const CSettingList*>(setting);
+    if (settingList->GetElementType() != SettingTypeString)
+      return false;
+
+    pSettingString = static_cast<const CSettingString*>(settingList->GetDefinition());
+    std::vector<CVariant> list = CSettings::Get().GetList(settingList->GetId());
+    for (std::vector<CVariant>::const_iterator itValue = list.begin(); itValue != list.end(); ++itValue)
+    {
+      if (!itValue->isString())
+        return false;
+      values.insert(itValue->asString());
+    }
+  }
+  else
+    return false;
+
+  if (pSettingString->GetOptionsType() == SettingOptionsTypeDynamic)
+  {
+    DynamicStringSettingOptions options = const_cast<CSettingString*>(pSettingString)->UpdateDynamicOptions();
+    for (DynamicStringSettingOptions::const_iterator option = options.begin(); option != options.end(); ++option)
+    {
+      CFileItemPtr pItem = GetItem(option->first, option->second);
+
+      if (values.find(option->second) != values.end())
+        pItem->Select(true);
+
+      items.Add(pItem);
+    }
+  }
+  else
+    return false;
+
+  return true;
+}
+
 CGUIControlButtonSetting::CGUIControlButtonSetting(CGUIButtonControl *pButton, int id, CSetting *pSetting)
   : CGUIControlBaseSetting(id, pSetting)
 {
index 912002d..80a7154 100644 (file)
@@ -124,8 +124,9 @@ public:
   virtual void Update();
   virtual void Clear() { m_pButton = NULL; }
 private:
-  static bool GetItems(CSetting *setting, CFileItemList &items);
-  static bool GetIntegerItems(CSetting *setting, CFileItemList &items);
+  static bool GetItems(const CSetting *setting, CFileItemList &items);
+  static bool GetIntegerItems(const CSetting *setting, CFileItemList &items);
+  static bool GetStringItems(const CSetting *setting, CFileItemList &items);
 
   CGUIButtonControl *m_pButton;
 };
index bf66ced..11237b2 100644 (file)
@@ -679,6 +679,9 @@ CGUIControl* CGUIWindowSettingsCategory::AddSetting(CSetting *pSetting, float wi
   }
 
   // create the proper controls
+  if (!pSetting->GetControl())
+    return NULL;
+
   std::string controlType = pSetting->GetControl()->GetType();
   if (controlType == "toggle")
   {
index b1a6d9e..ea72725 100644 (file)
 
 #include "GUIControlSettings.h"
 #include "guilib/GUIWindow.h"
-#include "settings/SettingDependency.h"
-#include "settings/SettingSection.h"
+#include "settings/lib/SettingDependency.h"
+#include "settings/lib/SettingSection.h"
 #include "settings/Settings.h"
-#include "settings/SettingsManager.h"
+#include "settings/lib/SettingsManager.h"
 #include "threads/Timer.h"
 
 typedef boost::shared_ptr<CGUIControlBaseSetting> BaseSettingControlPtr;
index 8b77fec..da46e42 100644 (file)
@@ -1,7 +1,7 @@
 SRCS=  \
        TestBasicEnvironment.cpp \
        TestFileItem.cpp \
-       TestTextureCache.cpp \
+       TestTextureUtils.cpp \
        TestURL.cpp \
        TestUtils.cpp \
        xbmc-test.cpp
diff --git a/xbmc/test/TestTextureCache.cpp b/xbmc/test/TestTextureCache.cpp
deleted file mode 100644 (file)
index e6ec026..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *      Copyright (C) 2012-2013 Team XBMC
- *      http://xbmc.org
- *
- *  This Program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2, or (at your option)
- *  any later version.
- *
- *  This Program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with XBMC; see the file COPYING.  If not, see
- *  <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "URL.h"
-#include "TextureCache.h"
-
-#include "gtest/gtest.h"
-
-TEST(TestTextureCache, GetWrappedImageURL)
-{
-  typedef struct
-  {
-    const char *in;
-    const char *type;
-    const char *options;
-    const char *out;
-  } testfiles;
-
-  const testfiles test_files[] = {{ "/path/to/image/file.jpg", "", "", "image://%2fpath%2fto%2fimage%2ffile.jpg/" },
-                                  { "/path/to/image/file.jpg", "", "size=thumb", "image://%2fpath%2fto%2fimage%2ffile.jpg/transform?size=thumb" },
-                                  { "/path/to/video/file.mkv", "video", "", "image://video@%2fpath%2fto%2fvideo%2ffile.mkv/" },
-                                  { "/path/to/music/file.mp3", "music", "", "image://music@%2fpath%2fto%2fmusic%2ffile.mp3/" },
-                                  { "image://%2fpath%2fto%2fimage%2ffile.jpg/", "", "", "image://%2fpath%2fto%2fimage%2ffile.jpg/" },
-                                  { "image://%2fpath%2fto%2fimage%2ffile.jpg/transform?size=thumb", "", "size=thumb", "image://%2fpath%2fto%2fimage%2ffile.jpg/transform?size=thumb" }};
-
-  for (unsigned int i = 0; i < sizeof(test_files) / sizeof(testfiles); i++)
-  {
-    std::string expected = test_files[i].out;
-    std::string out = CTextureCache::GetWrappedImageURL(test_files[i].in, test_files[i].type, test_files[i].options);
-    EXPECT_EQ(out, expected);
-  }
-}
diff --git a/xbmc/test/TestTextureUtils.cpp b/xbmc/test/TestTextureUtils.cpp
new file mode 100644 (file)
index 0000000..c9764ad
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ *      Copyright (C) 2012-2013 Team XBMC
+ *      http://xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "URL.h"
+#include "TextureDatabase.h"
+
+#include "gtest/gtest.h"
+
+using ::testing::ValuesIn;
+
+namespace
+{
+typedef struct
+{
+  const char *in;
+  const char *type;
+  const char *options;
+  const char *out;
+} TestFiles;
+
+const TestFiles test_files[] = {{ "/path/to/image/file.jpg", "", "", "image://%2fpath%2fto%2fimage%2ffile.jpg/" },
+                                { "/path/to/image/file.jpg", "", "size=thumb", "image://%2fpath%2fto%2fimage%2ffile.jpg/transform?size=thumb" },
+                                { "/path/to/video/file.mkv", "video", "", "image://video@%2fpath%2fto%2fvideo%2ffile.mkv/" },
+                                { "/path/to/music/file.mp3", "music", "", "image://music@%2fpath%2fto%2fmusic%2ffile.mp3/" },
+                                { "image://%2fpath%2fto%2fimage%2ffile.jpg/", "", "", "image://%2fpath%2fto%2fimage%2ffile.jpg/" },
+                                { "image://%2fpath%2fto%2fimage%2ffile.jpg/transform?size=thumb", "", "size=thumb", "image://%2fpath%2fto%2fimage%2ffile.jpg/transform?size=thumb" }};
+
+
+class TestTextureUtils :
+  public ::testing::TestWithParam<TestFiles>
+{
+};
+
+TEST_P(TestTextureUtils, GetWrappedImageURL)
+{
+  const TestFiles &testFiles(GetParam());
+
+  std::string expected = testFiles.out;
+  std::string out = CTextureUtils::GetWrappedImageURL(testFiles.in,
+                                                      testFiles.type,
+                                                      testFiles.options);
+  EXPECT_EQ(expected, out);
+}
+
+INSTANTIATE_TEST_CASE_P(SampleFiles, TestTextureUtils,
+                        ValuesIn(test_files));
+}
index 6104c54..4c0e161 100644 (file)
@@ -97,7 +97,44 @@ bool aml_present()
     if (has_aml)
       CLog::Log(LOGNOTICE, "aml_present, rtn(%d)", rtn);
   }
-  return has_aml;
+  return has_aml == 1;
+}
+
+bool aml_wired_present()
+{
+  static int has_wired = -1;
+  if (has_wired == -1)
+  {
+    char test[64] = {0};
+    if (aml_get_sysfs_str("/sys/class/net/eth0/operstate", test, 63) != -1)
+      has_wired = 1;
+    else
+      has_wired = 0;
+  }
+  return has_wired == 1;
+}
+
+void aml_permissions()
+{
+  // most all aml devices are already rooted.
+  int ret = system("ls /system/xbin/su");
+  if (ret != 0)
+  {
+    CLog::Log(LOGWARNING, "aml_permissions: missing su, playback might fail");
+  }
+  else
+  {
+    // certain aml devices have 664 permission, we need 666.
+    system("su -c chmod 666 /sys/class/video/axis");
+    system("su -c chmod 666 /sys/class/video/screen_mode");
+    system("su -c chmod 666 /sys/class/video/disable_video");
+    system("su -c chmod 666 /sys/class/tsync/pts_pcrscr");
+    system("su -c chmod 666 /sys/class/audiodsp/digital_raw");
+    system("su -c chmod 666 /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq");
+    system("su -c chmod 666 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq");
+    system("su -c chmod 666 /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor");
+    CLog::Log(LOGINFO, "aml_permissions: permissions changed");
+  }
 }
 
 int aml_get_cputype()
@@ -120,19 +157,42 @@ int aml_get_cputype()
   return aml_cputype;
 }
 
-void aml_cpufreq_limit(bool limit)
+void aml_cpufreq_min(bool limit)
+{
+// do not touch scaling_min_freq on android
+#if !defined(TARGET_ANDROID)
+  // only needed for m1/m3 SoCs
+  if (aml_get_cputype() <= 3)
+  {
+    int cpufreq = 300000;
+    if (limit)
+      cpufreq = 600000;
+
+    aml_set_sysfs_int("/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq", cpufreq);
+  }
+#endif
+}
+
+void aml_cpufreq_max(bool limit)
 {
-  int cpufreq = 300000;
-  if (limit)
-    cpufreq = 600000;
+  if (!aml_wired_present() && aml_get_cputype() > 3)
+  {
+    // this is a MX Stick, they cannot substain 1GHz
+    // operation without overheating so limit them to 800MHz.
+    int cpufreq = 1000000;
+    if (limit)
+      cpufreq = 800000;
 
-  aml_set_sysfs_int("/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq", cpufreq);
+    aml_set_sysfs_int("/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq", cpufreq);
+    aml_set_sysfs_str("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor", "ondemand");
+  }
 }
 
 void aml_set_audio_passthrough(bool passthrough)
 {
   if (aml_present())
   {
+    // m1 uses 1, m3 and above uses 2
     int raw = aml_get_cputype() < 3 ? 1:2;
     aml_set_sysfs_int("/sys/class/audiodsp/digital_raw", passthrough ? raw:0);
   }
index d90fd5a..5bb2429 100644 (file)
@@ -25,6 +25,9 @@ int aml_set_sysfs_int(const char *path, const int val);
 int aml_get_sysfs_int(const char *path);
 
 bool aml_present();
+void aml_permissions();
+bool aml_wired_present();
 int  aml_get_cputype();
-void aml_cpufreq_limit(bool limit);
+void aml_cpufreq_min(bool limit);
+void aml_cpufreq_max(bool limit);
 void aml_set_audio_passthrough(bool passthrough);
index 8b5f691..6cc6817 100644 (file)
@@ -901,6 +901,121 @@ uint32_t CBitstreamConverter::get_bits( bits_reader_t *br, int nbits )
   return ret;
 }
 
+////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////
+void CBitstreamConverter::init_bits_writer(bits_writer_t *s, uint8_t *buffer, int buffer_size, int writer_le)
+{
+  if (buffer_size < 0)
+  {
+    buffer_size = 0;
+    buffer      = NULL;
+  }
+
+  s->size_in_bits = 8 * buffer_size;
+  s->buf          = buffer;
+  s->buf_end      = s->buf + buffer_size;
+  s->buf_ptr      = s->buf;
+  s->bit_left     = 32;
+  s->bit_buf      = 0;
+  s->writer_le    = writer_le;
+}
+
+void CBitstreamConverter::write_bits(bits_writer_t *s, int n, unsigned int value)
+{
+  // Write up to 32 bits into a bitstream.
+  unsigned int bit_buf;
+  int bit_left;
+
+  if (n == 32)
+  {
+    // Write exactly 32 bits into a bitstream.
+    // danger, recursion in play.
+    int lo = value & 0xffff;
+    int hi = value >> 16;
+    if (s->writer_le)
+    {
+      write_bits(s, 16, lo);
+      write_bits(s, 16, hi);
+    }
+    else
+    {
+      write_bits(s, 16, hi);
+      write_bits(s, 16, lo);
+    }
+    return;
+  }
+
+  bit_buf  = s->bit_buf;
+  bit_left = s->bit_left;
+
+  if (s->writer_le)
+  {
+    bit_buf |= value << (32 - bit_left);
+    if (n >= bit_left) {
+      BS_WL32(s->buf_ptr, bit_buf);
+      s->buf_ptr += 4;
+      bit_buf     = (bit_left == 32) ? 0 : value >> bit_left;
+      bit_left   += 32;
+    }
+    bit_left -= n;
+  }
+  else
+  {
+    if (n < bit_left) {
+      bit_buf     = (bit_buf << n) | value;
+      bit_left   -= n;
+    } else {
+      bit_buf   <<= bit_left;
+      bit_buf    |= value >> (n - bit_left);
+      BS_WB32(s->buf_ptr, bit_buf);
+      s->buf_ptr += 4;
+      bit_left   += 32 - n;
+      bit_buf     = value;
+    }
+  }
+
+  s->bit_buf  = bit_buf;
+  s->bit_left = bit_left;
+}
+
+void CBitstreamConverter::skip_bits(bits_writer_t *s, int n)
+{
+  // Skip the given number of bits.
+  // Must only be used if the actual values in the bitstream do not matter.
+  // If n is 0 the behavior is undefined.
+  s->bit_left -= n;
+  s->buf_ptr  -= 4 * (s->bit_left >> 5);
+  s->bit_left &= 31;
+}
+
+void CBitstreamConverter::flush_bits(bits_writer_t *s)
+{
+  if (!s->writer_le)
+  {
+    if (s->bit_left < 32)
+      s->bit_buf <<= s->bit_left;
+  }
+  while (s->bit_left < 32)
+  {
+
+    if (s->writer_le)
+    {
+      *s->buf_ptr++ = s->bit_buf;
+      s->bit_buf  >>= 8;
+    }
+    else
+    {
+      *s->buf_ptr++ = s->bit_buf >> 24;
+      s->bit_buf  <<= 8;
+    }
+    s->bit_left  += 8;
+  }
+  s->bit_left = 32;
+  s->bit_buf  = 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////////
 bool CBitstreamConverter::mpeg2_sequence_header(const uint8_t *data, const uint32_t size, mpeg2_sequence *sequence)
 {
   // parse nal's until a sequence_header_code is found
index dc4b24b..d3ad346 100644 (file)
 #include "DllAvCodec.h"
 
 typedef struct {
+  int       writer_le;
+  uint32_t  bit_buf;
+  int       bit_left;
+  uint8_t   *buf, *buf_ptr, *buf_end;
+  int       size_in_bits;
+} bits_writer_t;
+
+typedef struct {
   uint8_t *buffer, *start;
   int      offbits, length, oflow;
 } bits_reader_t;
@@ -61,6 +69,12 @@ typedef struct {
   ((uint8_t*)(p))[1] = (d) >> 16; \
   ((uint8_t*)(p))[0] = (d) >> 24; }
 
+#define BS_WL32(p, d) { \
+  ((uint8_t*)(p))[0] = (d); \
+  ((uint8_t*)(p))[1] = (d) >> 8; \
+  ((uint8_t*)(p))[2] = (d) >> 16; \
+  ((uint8_t*)(p))[3] = (d) >> 24; }
+
 typedef struct
 {
   const uint8_t *data;
@@ -147,6 +161,11 @@ public:
   static void       skip_bits( bits_reader_t *br, int nbits );
   static uint32_t   get_bits( bits_reader_t *br, int nbits );
 
+  static void       init_bits_writer(bits_writer_t *s, uint8_t *buffer, int buffer_size, int writer_le);
+  static void       write_bits(bits_writer_t *s, int n, unsigned int value);
+  static void       skip_bits( bits_writer_t *s, int n);
+  static void       flush_bits(bits_writer_t *s);
+
   static void       parseh264_sps(const uint8_t *sps, const uint32_t sps_size, bool *interlaced, int32_t *max_ref_frames);
   static bool       mpeg2_sequence_header(const uint8_t *data, const uint32_t size, mpeg2_sequence *sequence);
 
index cab6471..ab26fb4 100644 (file)
@@ -24,7 +24,7 @@
 #include <fribidi/fribidi.h>
 #include "LangInfo.h"
 #include "guilib/LocalizeStrings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "threads/SingleLock.h"
 #include "log.h"
index ab88f9c..96c782c 100644 (file)
@@ -21,7 +21,7 @@
  *
  */
 
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "threads/CriticalSection.h"
 #include "utils/GlobalsHandling.h"
 #include "utils/uXstrings.h"
index dcdd4be..b4fd24e 100644 (file)
@@ -25,7 +25,7 @@
 #include "filesystem/File.h"
 #include "interfaces/Builtins.h"
 #include "profiles/ProfilesManager.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "threads/SingleLock.h"
 #include "utils/log.h"
 #include "utils/RssReader.h"
index fe4e4bb..c55f8a8 100644 (file)
@@ -25,8 +25,8 @@
 
 #include "threads/CriticalSection.h"
 
-#include "settings/ISettingCallback.h"
-#include "settings/ISettingsHandler.h"
+#include "settings/lib/ISettingCallback.h"
+#include "settings/lib/ISettingsHandler.h"
 
 class CRssReader;
 class IRssObserver;
index 8935431..a6b3f90 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "md5.h"
 #include "InfoLoader.h"
-#include "settings/ISubSettings.h"
+#include "settings/lib/ISubSettings.h"
 
 #define KB  (1024)          // 1 KiloByte (1KB)   1024 Byte (2^10 Byte)
 #define MB  (1024*KB)       // 1 MegaByte (1MB)   1024 KB (2^10 KB)
index bda6246..66923d3 100644 (file)
@@ -427,7 +427,7 @@ CStdString URIUtils::SubstitutePath(const CStdString& strPath, bool reverse /* =
         if (strPath.size() > i->second.size())
           return URIUtils::AddFileToFolder(i->first, strPath.Mid(i->second.size()));
         else
-          return i->second;
+          return i->first;
       }
     }
   }
index 10e5c58..521a8ce 100644 (file)
@@ -28,7 +28,7 @@
 #include "Temperature.h"
 #include "network/Network.h"
 #include "Application.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 #include "guilib/GUIWindowManager.h"
 #include "GUIUserMessages.h"
index bc59362..2ab8a3b 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "InfoLoader.h"
 #include "StdString.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 #include "utils/GlobalsHandling.h"
 
 #include <map>
index 4100522..c389a55 100644 (file)
 
 #include "gtest/gtest.h"
 
-TEST(TestXMLUtils, HasUTF8Declaration)
-{
-  EXPECT_TRUE(XMLUtils::HasUTF8Declaration(
-    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
-}
-
 TEST(TestXMLUtils, GetHex)
 {
   CXBMCTinyXML a;
@@ -181,18 +175,6 @@ TEST(TestXMLUtils, GetStringArray)
   EXPECT_STREQ("some string5", strarray.at(4).c_str());
 }
 
-TEST(TestXMLUtils, GetEncoding)
-{
-  CXBMCTinyXML a;
-  CStdString ref, val;
-
-  a.Parse("<?xml version=\"1.0\" encoding=\"UTF-16\"?>");
-  EXPECT_TRUE(XMLUtils::GetEncoding(&a, val));
-
-  ref = "UTF-16";
-  EXPECT_STREQ(ref.c_str(), val.c_str());
-}
-
 TEST(TestXMLUtils, GetPath)
 {
   CXBMCTinyXML a, b;
index 72fac3f..eb05b88 100644 (file)
@@ -33,6 +33,7 @@
 #include "video/windows/GUIWindowFullScreen.h"
 #ifdef HAS_VIDEO_PLAYBACK
 #include "cores/VideoRenderers/RenderManager.h"
+#include "cores/VideoRenderers/OverlayRendererGUI.h"
 #endif
 #include "Application.h"
 #include "utils/LangCodeExpander.h"
index 5d0f2ef..3222eb3 100644 (file)
@@ -274,7 +274,7 @@ void CGUIDialogAudioSubtitleSettings::OnSettingChanged(SettingInfo &setting)
   }
   else if (setting.id == AUDIO_SETTINGS_DIGITAL_ANALOG)
   {
-    CSettings::Get().SetBool("audiooutput.passthrough", !m_outputmode);
+    CSettings::Get().SetBool("audiooutput.passthrough", m_outputmode);
 
     EnableSettings(AUDIO_SETTINGS_OUTPUT_TO_ALL_SPEAKERS, true);
     EnableSettings(AUDIO_SETTINGS_VOLUME, !g_application.m_pPlayer->IsPassthrough());
diff --git a/xbmc/video/dialogs/GUIDialogSubtitles.cpp b/xbmc/video/dialogs/GUIDialogSubtitles.cpp
new file mode 100644 (file)
index 0000000..ed228cb
--- /dev/null
@@ -0,0 +1,443 @@
+/*
+ *      Copyright (C) 2005-2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "system.h"
+#include "GUIUserMessages.h"
+#include "Application.h"
+#include "GUIDialogSubtitles.h"
+#include "addons/AddonManager.h"
+#include "cores/IPlayer.h"
+#include "dialogs/GUIDialogKaiToast.h"
+#include "filesystem/AddonsDirectory.h"
+#include "filesystem/File.h"
+#include "filesystem/PluginDirectory.h"
+#include "filesystem/SpecialProtocol.h"
+#include "guilib/GUIImage.h"
+#include "settings/MediaSettings.h"
+#include "settings/Settings.h"
+#include "settings/VideoSettings.h"
+#include "settings/lib/Setting.h"
+#include "utils/JobManager.h"
+#include "utils/LangCodeExpander.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+#include "utils/URIUtils.h"
+#include "URL.h"
+#include "Util.h"
+
+using namespace ADDON;
+using namespace XFILE;
+
+#define CONTROL_NAMELABEL            100
+#define CONTROL_NAMELOGO             110
+#define CONTROL_SUBLIST              120
+#define CONTROL_SUBSEXIST            130
+#define CONTROL_SUBSTATUS            140
+#define CONTROL_SERVICELIST          150
+
+/*! \brief simple job to retrieve a directory and store a string (language)
+ */
+class CSubtitlesJob: public CJob
+{
+public:
+  CSubtitlesJob(const CURL &url, const std::string &language) : m_url(url), m_language(language)
+  {
+    m_items = new CFileItemList;
+  }
+  virtual ~CSubtitlesJob()
+  {
+    delete m_items;
+  }
+  virtual bool DoWork()
+  {
+    CDirectory::GetDirectory(m_url.Get(), *m_items);
+    return true;
+  }
+  virtual bool operator==(const CJob *job) const
+  {
+    if (strcmp(job->GetType(),GetType()) == 0)
+    {
+      const CSubtitlesJob* rjob = dynamic_cast<const CSubtitlesJob*>(job);
+      if (rjob)
+      {
+        return m_url.Get() == rjob->m_url.Get() &&
+               m_language == rjob->m_language;
+      }
+    }
+    return false;
+  }
+  const CFileItemList *GetItems() const { return m_items; }
+  const CURL &GetURL() const { return m_url; }
+  const std::string &GetLanguage() const { return m_language; }
+private:
+  CURL           m_url;
+  CFileItemList *m_items;
+  std::string    m_language;
+};
+
+CGUIDialogSubtitles::CGUIDialogSubtitles(void)
+    : CGUIDialog(WINDOW_DIALOG_SUBTITLES, "DialogSubtitles.xml")
+{
+  m_loadType  = KEEP_IN_MEMORY;
+  m_subtitles = new CFileItemList;
+  m_serviceItems = new CFileItemList;
+  m_pausedOnRun = false;
+  m_updateSubsList = false;
+}
+
+CGUIDialogSubtitles::~CGUIDialogSubtitles(void)
+{
+  CancelJobs();
+  delete m_subtitles;
+  delete m_serviceItems;
+}
+
+bool CGUIDialogSubtitles::OnMessage(CGUIMessage& message)
+{
+  if  (message.GetMessage() == GUI_MSG_CLICKED)
+  {
+    int iControl = message.GetSenderId();
+
+    if (iControl == CONTROL_SUBLIST)
+    {
+      CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_SUBLIST);
+      OnMessage(msg);
+
+      int item = msg.GetParam1();
+      if (item >= 0 && item < m_subtitles->Size())
+        Download(*m_subtitles->Get(item));
+      return true;
+    }
+    else if (iControl == CONTROL_SERVICELIST)
+    {
+      CGUIMessage msg(GUI_MSG_ITEM_SELECTED, GetID(), CONTROL_SERVICELIST);
+      OnMessage(msg);
+
+      int item = msg.GetParam1();
+      if (item >= 0 && item < m_serviceItems->Size() &&
+          SetService(m_serviceItems->Get(item)->GetProperty("Addon.ID").asString()))
+        Search();
+
+      return true;
+    }
+  }
+  else if (message.GetMessage() == GUI_MSG_WINDOW_DEINIT)
+  {
+    // Resume the video if the user has requested it
+    if (g_application.m_pPlayer->IsPaused() && m_pausedOnRun)
+      g_application.m_pPlayer->Pause();
+
+    CGUIDialog::OnMessage(message);
+
+    ClearSubtitles();
+    ClearServices();
+    return true;
+  }
+  return CGUIDialog::OnMessage(message);
+}
+
+void CGUIDialogSubtitles::OnInitWindow()
+{
+  // Pause the video if the user has requested it
+  m_pausedOnRun = false;
+  if (CSettings::Get().GetBool("subtitles.pauseonsearch") && !g_application.m_pPlayer->IsPaused())
+  {
+    g_application.m_pPlayer->Pause();
+    m_pausedOnRun = true;
+  }
+
+  FillServices();
+  CGUIWindow::OnInitWindow();
+  Search();
+}
+
+void CGUIDialogSubtitles::Process(unsigned int currentTime, CDirtyRegionList &dirtyregions)
+{
+  if (m_bInvalidated)
+  {
+    // take copies of our variables to ensure we don't hold the lock for long.
+    std::string status;
+    CFileItemList subs;
+    {
+      CSingleLock lock(m_section);
+      status = m_status;
+      subs.Assign(*m_subtitles);
+    }
+    SET_CONTROL_LABEL(CONTROL_SUBSTATUS, status);
+
+    if (m_updateSubsList)
+    {
+      CGUIMessage message(GUI_MSG_LABEL_BIND, GetID(), CONTROL_SUBLIST, 0, 0, &subs);
+      OnMessage(message);
+      m_updateSubsList = false;
+    }
+
+    if (!m_subtitles->IsEmpty() && !GetFocusedControl())
+    { // set focus to the list
+      CGUIMessage msg(GUI_MSG_SETFOCUS, GetID(), CONTROL_SUBLIST);
+      OnMessage(msg);
+    }
+  }
+  CGUIDialog::Process(currentTime, dirtyregions);
+}
+
+void CGUIDialogSubtitles::FillServices()
+{
+  ClearServices();
+
+  VECADDONS addons;
+  ADDON::CAddonMgr::Get().GetAddons(ADDON_SUBTITLE_MODULE, addons, true);
+
+  if (addons.empty())
+  {
+    UpdateStatus(NO_SERVICES);
+    return;
+  }
+
+  for (VECADDONS::const_iterator addonIt = addons.begin(); addonIt != addons.end(); addonIt++)
+  {
+    CFileItemPtr item(CAddonsDirectory::FileItemFromAddon(*addonIt, "plugin://", false));
+    m_serviceItems->Add(item);
+  }
+
+  // Bind our services to the UI
+  CGUIMessage msg(GUI_MSG_LABEL_BIND, GetID(), CONTROL_SERVICELIST, 0, 0, m_serviceItems);
+  OnMessage(msg);
+
+  // TODO: Default service support will need to check through the items to find the CFileItem in the loop above.
+  SetService(m_serviceItems->Get(0)->GetProperty("Addon.ID").asString());
+}
+
+bool CGUIDialogSubtitles::SetService(const std::string &service)
+{
+  if (service != m_currentService)
+  {
+    m_currentService = service;
+    CLog::Log(LOGDEBUG, "New Service [%s] ", m_currentService.c_str());
+
+    CFileItemPtr currentService = GetService();
+    // highlight this item in the skin
+    for (int i = 0; i < m_serviceItems->Size(); i++)
+    {
+      CFileItemPtr pItem = m_serviceItems->Get(i);
+      pItem->Select(pItem == currentService);
+    }
+
+    SET_CONTROL_LABEL(CONTROL_NAMELABEL, currentService->GetLabel());
+
+    CGUIImage* image = (CGUIImage*)GetControl(CONTROL_NAMELOGO);
+    if (image)
+      image->SetFileName(currentService->GetArt("thumb"));
+
+    if (g_application.m_pPlayer->GetSubtitleCount() == 0)
+      SET_CONTROL_HIDDEN(CONTROL_SUBSEXIST);
+    else
+      SET_CONTROL_VISIBLE(CONTROL_SUBSEXIST);
+
+    return true;
+  }
+  return false;
+}
+
+const CFileItemPtr CGUIDialogSubtitles::GetService() const
+{
+  for (int i = 0; i < m_serviceItems->Size(); i++)
+  {
+    if (m_serviceItems->Get(i)->GetProperty("Addon.ID") == m_currentService)
+      return m_serviceItems->Get(i);
+  }
+  return CFileItemPtr();
+}
+
+void CGUIDialogSubtitles::Search()
+{
+  if (m_currentService.empty())
+    return; // no services available
+
+  UpdateStatus(SEARCHING);
+  ClearSubtitles();
+
+  CURL url("plugin://" + m_currentService + "/");
+  url.SetOption("action", "search");
+
+  const CSetting *setting = CSettings::Get().GetSetting("subtitles.languages");
+  if (setting)
+    url.SetOption("languages", setting->ToString());
+
+  AddJob(new CSubtitlesJob(url, ""));
+}
+
+void CGUIDialogSubtitles::OnJobComplete(unsigned int jobID, bool success, CJob *job)
+{
+  const CURL &url             = ((CSubtitlesJob *)job)->GetURL();
+  const CFileItemList *items  = ((CSubtitlesJob *)job)->GetItems();
+  const std::string &language = ((CSubtitlesJob *)job)->GetLanguage();
+  if (url.GetOption("action") == "search")
+    OnSearchComplete(items);
+  else
+    OnDownloadComplete(items, language);
+  CJobQueue::OnJobComplete(jobID, success, job);
+}
+
+void CGUIDialogSubtitles::OnSearchComplete(const CFileItemList *items)
+{
+  CSingleLock lock(m_section);
+  m_subtitles->Assign(*items);
+  UpdateStatus(SEARCH_COMPLETE);
+  m_updateSubsList = true;
+  SetInvalid();
+}
+
+void CGUIDialogSubtitles::UpdateStatus(STATUS status)
+{
+  CSingleLock lock(m_section);
+  std::string label;
+  switch (status)
+  {
+    case NO_SERVICES:
+      label = g_localizeStrings.Get(24114);
+      break;
+    case SEARCHING:
+      label = g_localizeStrings.Get(24107);
+      break;
+    case SEARCH_COMPLETE:
+      if (!m_subtitles->IsEmpty())
+        label = StringUtils::Format(g_localizeStrings.Get(24108).c_str(), m_subtitles->Size());
+      else
+        label = g_localizeStrings.Get(24109);
+      break;
+    case DOWNLOADING:
+      label = g_localizeStrings.Get(24110);
+      break;
+    default:
+      break;
+  }
+  if (label != m_status)
+  {
+    m_status = label;
+    SetInvalid();
+  }
+}
+
+void CGUIDialogSubtitles::Download(const CFileItem &subtitle)
+{
+  UpdateStatus(DOWNLOADING);
+
+  // subtitle URL should be of the form plugin://<addonid>/?param=foo&param=bar
+  // we just append (if not already present) the action=download parameter.
+  CURL url(subtitle.GetAsUrl());
+  if (url.GetOption("action").empty())
+    url.SetOption("action", "download");
+
+  AddJob(new CSubtitlesJob(url, subtitle.GetLabel()));
+}
+
+void CGUIDialogSubtitles::OnDownloadComplete(const CFileItemList *items, const std::string &language)
+{
+  if (items->IsEmpty())
+  {
+    CFileItemPtr service = GetService();
+    if (service)
+      CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, service->GetLabel(), g_localizeStrings.Get(24113));
+    UpdateStatus(SEARCH_COMPLETE);
+    return;
+  }
+
+  CStdString strFileName;
+  CStdString strDestPath;
+  if (g_application.CurrentFileItem().IsStack())
+  {
+    for (int i = 0; i < items->Size(); i++)
+    {
+//    check for all stack items and match to given subs, item [0] == CD1, item [1] == CD2
+//    CLog::Log(LOGDEBUG, "Stack Subs [%s} Found", vecItems[i]->GetLabel().c_str());
+    }
+  }
+  else if (StringUtils::StartsWith(g_application.CurrentFile(), "http://"))
+  {
+    strFileName = "TemporarySubs";
+    strDestPath = "special://temp/";
+  }
+  else
+  {
+    strFileName = URIUtils::GetFileName(g_application.CurrentFile());
+    if (CSettings::Get().GetBool("subtitles.savetomoviefolder"))
+    {
+      strDestPath = URIUtils::GetDirectory(g_application.CurrentFile());
+      if (!CUtil::SupportsWriteFileOperations(strDestPath))
+        strDestPath.clear();
+    }
+    if (strDestPath.empty())
+    {
+      if (CSpecialProtocol::TranslatePath("special://subtitles").empty())
+        strDestPath = "special://temp";
+      else
+        strDestPath = "special://subtitles";
+    }
+  }
+  // Extract the language and appropriate extension
+  CStdString strSubLang;
+  g_LangCodeExpander.ConvertToTwoCharCode(strSubLang, language);
+  CStdString strUrl = items->Get(0)->GetPath();
+  CStdString strSubExt = URIUtils::GetExtension(strUrl);
+
+  // construct subtitle path
+  URIUtils::RemoveExtension(strFileName);
+  CStdString strSubName;
+  strSubName.Format("%s.%s%s", strFileName.c_str(), strSubLang.c_str(), strSubExt.c_str());
+  CStdString strSubPath = URIUtils::AddFileToFolder(strDestPath, strSubName);
+
+  // and copy the file across
+  CFile::Cache(strUrl, strSubPath);
+  SetSubtitles(strSubPath);
+  // Close the window
+  Close();
+}
+
+void CGUIDialogSubtitles::ClearSubtitles()
+{
+  CGUIMessage msg(GUI_MSG_LABEL_RESET, GetID(), CONTROL_SUBLIST);
+  OnMessage(msg);
+  CSingleLock lock(m_section);
+  m_subtitles->Clear();
+}
+
+void CGUIDialogSubtitles::ClearServices()
+{
+  CGUIMessage msg(GUI_MSG_LABEL_RESET, GetID(), CONTROL_SERVICELIST);
+  OnMessage(msg);
+  m_serviceItems->Clear();
+  m_currentService.clear();
+}
+
+void CGUIDialogSubtitles::SetSubtitles(const std::string &subtitle)
+{
+  if (g_application.m_pPlayer)
+  {
+    int nStream = g_application.m_pPlayer->AddSubtitle(subtitle);
+    if(nStream >= 0)
+    {
+      g_application.m_pPlayer->SetSubtitle(nStream);
+      g_application.m_pPlayer->SetSubtitleVisible(true);
+      CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleDelay = 0.0f;
+      g_application.m_pPlayer->SetSubTitleDelay(0);
+    }
+  }
+}
diff --git a/xbmc/video/dialogs/GUIDialogSubtitles.h b/xbmc/video/dialogs/GUIDialogSubtitles.h
new file mode 100644 (file)
index 0000000..3851854
--- /dev/null
@@ -0,0 +1,67 @@
+#pragma once
+
+/*
+ *      Copyright (C) 2005-2013 Team XBMC
+ *      http://www.xbmc.org
+ *
+ *  This Program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This Program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with XBMC; see the file COPYING.  If not, see
+ *  <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <string>
+#include "guilib/GUIDialog.h"
+#include "threads/CriticalSection.h"
+#include "utils/JobManager.h"
+
+class CFileItem;
+class CFileItemList;
+
+class CGUIDialogSubtitles : public CGUIDialog, CJobQueue
+{
+public:
+  CGUIDialogSubtitles(void);
+  virtual ~CGUIDialogSubtitles(void);
+  virtual bool OnMessage(CGUIMessage& message);
+  virtual void OnInitWindow();
+
+protected:
+  virtual void Process(unsigned int currentTime, CDirtyRegionList &dirtyregions);
+  virtual void OnJobComplete(unsigned int jobID, bool success, CJob *job);
+
+  bool SetService(const std::string &service);
+  const CFileItemPtr GetService() const;
+  void FillServices();
+  void ClearServices();
+  void ClearSubtitles();
+
+  enum STATUS { NO_SERVICES = 0, SEARCHING, SEARCH_COMPLETE, DOWNLOADING };
+  void UpdateStatus(STATUS status);
+
+  void Search();
+  void OnSearchComplete(const CFileItemList *items);
+
+  void Download(const CFileItem &subtitle);
+  void OnDownloadComplete(const CFileItemList *items, const std::string &language);
+
+  void SetSubtitles(const std::string &subtitle);
+
+  CCriticalSection m_section;
+  CFileItemList* m_subtitles;
+  CFileItemList* m_serviceItems;
+  std::string    m_currentService;
+  std::string    m_status;
+  bool           m_pausedOnRun;
+  bool           m_updateSubsList; ///< true if we need to update our subs list
+};
index b080a2a..2db1835 100644 (file)
@@ -1,6 +1,7 @@
 SRCS=GUIDialogAudioSubtitleSettings.cpp \
      GUIDialogFileStacking.cpp \
      GUIDialogFullScreenInfo.cpp \
+     GUIDialogSubtitles.cpp \
      GUIDialogTeletext.cpp \
      GUIDialogVideoBookmarks.cpp \
      GUIDialogVideoInfo.cpp \
index 8fb7c26..8948532 100644 (file)
@@ -88,8 +88,6 @@ using namespace PVR;
 static CLinuxResourceCounter m_resourceCounter;
 #endif
 
-static color_t color[8] = { 0xFFFFFF00, 0xFFFFFFFF, 0xFF0099FF, 0xFF00FF00, 0xFFCCFF00, 0xFF00FFFF, 0xFFE5E5E5, 0xFFC0C0C0 };
-
 CGUIWindowFullScreen::CGUIWindowFullScreen(void)
     : CGUIWindow(WINDOW_FULLSCREEN_VIDEO, "VideoFullScreen.xml")
 {
@@ -100,7 +98,6 @@ CGUIWindowFullScreen::CGUIWindowFullScreen(void)
   m_bShowViewModeInfo = false;
   m_dwShowViewModeTimeout = 0;
   m_bShowCurrentTime = false;
-  m_subsLayout = NULL;
   m_bGroupSelectShow = false;
   m_loadType = KEEP_IN_MEMORY;
   // audio
@@ -401,26 +398,6 @@ bool CGUIWindowFullScreen::OnMessage(CGUIMessage& message)
 
       m_bShowViewModeInfo = false;
 
-      if (CUtil::IsUsingTTFSubtitles())
-      {
-        CSingleLock lock (m_fontLock);
-
-        CStdString fontPath = URIUtils::AddFileToFolder("special://home/media/Fonts/", CSettings::Get().GetString("subtitles.font"));
-        if (!XFILE::CFile::Exists(fontPath))
-          fontPath = URIUtils::AddFileToFolder("special://xbmc/media/Fonts/", CSettings::Get().GetString("subtitles.font"));
-
-        // We scale based on PAL4x3 - this at least ensures all sizing is constant across resolutions.
-        RESOLUTION_INFO pal(720, 576, 0);
-        CGUIFont *subFont = g_fontManager.LoadTTF("__subtitle__", fontPath, color[CSettings::Get().GetInt("subtitles.color")], 0, CSettings::Get().GetInt("subtitles.height"), CSettings::Get().GetInt("subtitles.style"), false, 1.0f, 1.0f, &pal, true);
-        CGUIFont *borderFont = g_fontManager.LoadTTF("__subtitleborder__", fontPath, 0xFF000000, 0, CSettings::Get().GetInt("subtitles.height"), CSettings::Get().GetInt("subtitles.style"), true, 1.0f, 1.0f, &pal, true);
-        if (!subFont || !borderFont)
-          CLog::Log(LOGERROR, "CGUIWindowFullScreen::OnMessage(WINDOW_INIT) - Unable to load subtitle font");
-        else
-          m_subsLayout = new CGUITextLayout(subFont, true, 0, borderFont);
-      }
-      else
-        m_subsLayout = NULL;
-
       return true;
     }
   case GUI_MSG_WINDOW_DEINIT:
@@ -454,16 +431,6 @@ bool CGUIWindowFullScreen::OnMessage(CGUIMessage& message)
       // make sure renderer is uptospeed
       g_renderManager.Update();
 #endif
-
-      CSingleLock lockFont(m_fontLock);
-      if (m_subsLayout)
-      {
-        g_fontManager.Unload("__subtitle__");
-        g_fontManager.Unload("__subtitleborder__");
-        delete m_subsLayout;
-        m_subsLayout = NULL;
-      }
-
       return true;
     }
   case GUI_MSG_CLICKED:
@@ -756,90 +723,9 @@ void CGUIWindowFullScreen::Process(unsigned int currentTime, CDirtyRegionList &d
 
 void CGUIWindowFullScreen::Render()
 {
-  if (g_application.m_pPlayer->HasPlayer())
-    RenderTTFSubtitles();
   CGUIWindow::Render();
 }
 
-void CGUIWindowFullScreen::RenderTTFSubtitles()
-{
-  if ((g_application.GetCurrentPlayer() == EPC_MPLAYER ||
-#if defined(HAS_OMXPLAYER)
-       g_application.GetCurrentPlayer() == EPC_OMXPLAYER ||
-#endif
-       g_application.GetCurrentPlayer() == EPC_DVDPLAYER) &&
-      CUtil::IsUsingTTFSubtitles() && (g_application.m_pPlayer->GetSubtitleVisible()))
-  {
-    CSingleLock lock (m_fontLock);
-
-    if(!m_subsLayout)
-      return;
-
-    CStdString subtitleText = "How now brown cow";
-    if (g_application.m_pPlayer->GetCurrentSubtitle(subtitleText))
-    {
-      // Remove HTML-like tags from the subtitles until
-      subtitleText.Replace("\\r", "");
-      subtitleText.Replace("\r", "");
-      subtitleText.Replace("\\n", "[CR]");
-      subtitleText.Replace("\n", "[CR]");
-      subtitleText.Replace("<br>", "[CR]");
-      subtitleText.Replace("\\N", "[CR]");
-      subtitleText.Replace("<i>", "[I]");
-      subtitleText.Replace("</i>", "[/I]");
-      subtitleText.Replace("<b>", "[B]");
-      subtitleText.Replace("</b>", "[/B]");
-      subtitleText.Replace("<u>", "");
-      subtitleText.Replace("<p>", "");
-      subtitleText.Replace("<P>", "");
-      subtitleText.Replace("&nbsp;", "");
-      subtitleText.Replace("</u>", "");
-      subtitleText.Replace("</i", "[/I]"); // handle tags which aren't closed properly (happens).
-      subtitleText.Replace("</b", "[/B]");
-      subtitleText.Replace("</u", "");
-
-      RESOLUTION_INFO res = g_graphicsContext.GetResInfo();
-      g_graphicsContext.SetRenderingResolution(res, false);
-
-      float maxWidth = (float) res.Overscan.right - res.Overscan.left;
-      m_subsLayout->Update(subtitleText, maxWidth * 0.9f, false, true); // true to force LTR reading order (most Hebrew subs are this format)
-
-      int subalign = CSettings::Get().GetInt("subtitles.align");
-      float textWidth, textHeight;
-      m_subsLayout->GetTextExtent(textWidth, textHeight);
-      float x = maxWidth * 0.5f + res.Overscan.left;
-      float y = (float) res.iSubtitles;
-
-      if (subalign == SUBTITLE_ALIGN_MANUAL)
-        y = (float) res.iSubtitles - textHeight;
-      else
-      {
-        SPlayerVideoStreamInfo info;
-        g_application.m_pPlayer->GetVideoStreamInfo(info);
-
-        if ((subalign == SUBTITLE_ALIGN_TOP_INSIDE) || (subalign == SUBTITLE_ALIGN_TOP_OUTSIDE))
-          y = info.DestRect.y1;
-        else
-          y = info.DestRect.y2;
-
-        // use the manual distance to the screenbottom as an offset to the automatic location
-        if ((subalign == SUBTITLE_ALIGN_BOTTOM_INSIDE) || (subalign == SUBTITLE_ALIGN_TOP_OUTSIDE))
-          y -= textHeight + g_graphicsContext.GetHeight() - res.iSubtitles;
-        else
-          y += g_graphicsContext.GetHeight() - res.iSubtitles;
-
-        y = std::max(y, (float) res.Overscan.top);
-        y = std::min(y, res.Overscan.bottom - textHeight);
-      }
-
-      m_subsLayout->RenderOutline(x, y, 0, 0xFF000000, XBFONT_CENTER_X, maxWidth);
-
-      // reset rendering resolution
-      g_graphicsContext.SetRenderingResolution(m_coordsRes, m_needsScaling);
-    }
-  }
-}
-
 void CGUIWindowFullScreen::ChangetheTimeCode(int remote)
 {
   if (remote >= REMOTE_0 && remote <= REMOTE_9)
index c1381d2..bb8514c 100644 (file)
 #include "guilib/GUIWindow.h"
 #include "threads/CriticalSection.h"
 
-enum SubtitleAlign
-{
-  SUBTITLE_ALIGN_MANUAL         = 0,
-  SUBTITLE_ALIGN_BOTTOM_INSIDE,
-  SUBTITLE_ALIGN_BOTTOM_OUTSIDE,
-  SUBTITLE_ALIGN_TOP_INSIDE,
-  SUBTITLE_ALIGN_TOP_OUTSIDE
-};
-
-class CGUITextLayout; // forward
-
 class CGUIWindowFullScreen : public CGUIWindow
 {
 public:
@@ -52,7 +41,6 @@ protected:
   virtual EVENT_RESULT OnMouseEvent(const CPoint &point, const CMouseEvent &event);
 
 private:
-  void RenderTTFSubtitles();
   void SeekChapter(int iChapter);
   void FillInTVGroups();
   void ToggleOSD();
@@ -81,7 +69,4 @@ private:
   unsigned int m_timeCodeTimeout;
   int m_timeCodeStamp[6];
   int m_timeCodePosition;
-  
-  CCriticalSection m_fontLock;
-  CGUITextLayout* m_subsLayout;
 };
index cc0ca8d..41ae290 100644 (file)
@@ -24,8 +24,8 @@
 
 #include "ViewState.h"
 #include "guilib/GraphicContext.h"
-#include "settings/ISubSettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/ISubSettings.h"
+#include "settings/lib/Setting.h"
 #include "threads/CriticalSection.h"
 
 class TiXmlNode;
index c58b857..9c0b32d 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>visDirectxSpectrum</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">false</LinkIncremental>
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath>
     <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">Spectrum_win32dx</TargetName>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;DIRECTX_SPEKTRUM_EXPORTS;_WIN32PC;TARGET_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <PreprocessorDefinitions>DIRECTX_SPEKTRUM_EXPORTS;_WIN32PC;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>d3dx9.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)Spectrum_win32dx.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)Spectrum_win32dx.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.dxspectrum\$(TargetFileName)"</Command>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">
     <ClCompile>
-      <Optimization>Full</Optimization>
       <AdditionalIncludeDirectories>
       </AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;DIRECTX_SPEKTRUM_EXPORTS;_WIN32PC;_USRDLL;TARGET_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>DIRECTX_SPEKTRUM_EXPORTS;_WIN32PC;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>d3dx9.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)Spectrum_win32dx.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <RandomizedBaseAddress>true</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)Spectrum_win32dx.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.dxspectrum\$(TargetFileName)"</Command>
index 37b085b..4586618 100644 (file)
@@ -16,6 +16,7 @@
     <RootNamespace>visMilkdrop</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath>
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(DXSDK_DIR)Include;$(IncludePath)</IncludePath>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>TARGET_WINDOWS;WIN32;_DEBUG;_WINDOWS;_USRDLL;PLUGIN_EXPORTS;HAS_DX;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <ExceptionHandling>Sync</ExceptionHandling>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_USRDLL;PLUGIN_EXPORTS;HAS_DX;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>D3dx9.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)Plugin.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)Plugin.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.milkdrop\$(TargetFileName)"</Command>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>TARGET_WINDOWS;WIN32;NDEBUG;_WINDOWS;_USRDLL;PLUGIN_EXPORTS;HAS_DX;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PreprocessorDefinitions>_USRDLL;PLUGIN_EXPORTS;HAS_DX;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     </ClCompile>
     <Link>
       <AdditionalDependencies>D3dx9.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)Plugin.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.milkdrop\$(TargetFileName)"</Command>
index fcc99ba..0e88b2d 100644 (file)
@@ -24,6 +24,7 @@
     <RootNamespace>visWaveform</RootNamespace>
     <Keyword>Win32Proj</Keyword>
   </PropertyGroup>
+  <Import Project="$(SolutionDir)\XBMC.core-defaults.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\project\VS2010Express\XBMC for Windows.props" />
+    <Import Project="$(SolutionDir)\XBMC.defaults.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">true</LinkIncremental>
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">$(SolutionDir)libs\$(TargetName)\$(Configuration)\</OutDir>
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">$(SolutionDir)objs\$(TargetName)\$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">false</LinkIncremental>
     <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">.vis</TargetExt>
     <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">.vis</TargetExt>
     <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">.vis</TargetExt>
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug (OpenGL)|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;HAS_SDL_OPENGL;HAS_SDL;WAVEFORM_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PreprocessorDefinitions>HAS_SDL_OPENGL;HAS_SDL;WAVEFORM_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)Waveform.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)Waveform.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.waveform\$(TargetFileName)"</Command>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release (OpenGL)|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;HAS_SDL_OPENGL;HAS_SDL;_USRDLL;WAVEFORM_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>HAS_SDL_OPENGL;HAS_SDL;_USRDLL;WAVEFORM_EXPORTS;_WIN32PC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)Waveform.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.waveform\$(TargetFileName)"</Command>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug (DirectX)|Win32'">
     <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;WAVEFORM_EXPORTS;_WIN32PC;_CRT_NONSTDC_NO_DEPRECATE;TARGET_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>WAVEFORM_EXPORTS;_WIN32PC;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>
       </AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>$(OutDir)Waveform.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)Waveform.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.waveform\$(TargetFileName)"</Command>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release (DirectX)|Win32'">
     <ClCompile>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WAVEFORM_EXPORTS;_WIN32PC;_CRT_NONSTDC_NO_DEPRECATE;TARGET_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <PreprocessorDefinitions>_USRDLL;WAVEFORM_EXPORTS;_WIN32PC;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <AdditionalDependencies>
       </AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <OptimizeReferences>true</OptimizeReferences>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
       <ImportLibrary>$(OutDir)Waveform.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
     </Link>
     <PostBuildEvent>
       <Command>copy "$(TargetPath)" "$(SolutionDir)..\..\addons\visualization.waveform\$(TargetFileName)"</Command>
index b789134..57d6f22 100644 (file)
@@ -21,7 +21,7 @@
 #include "WinSystem.h"
 #include "guilib/GraphicContext.h"
 #include "settings/DisplaySettings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "settings/Settings.h"
 
 using namespace std;
index 7caae9d..6ca2d30 100644 (file)
@@ -26,7 +26,7 @@
 #include "WinSystemX11.h"
 #include "settings/DisplaySettings.h"
 #include "settings/Settings.h"
-#include "settings/Setting.h"
+#include "settings/lib/Setting.h"
 #include "guilib/GraphicContext.h"
 #include "guilib/Texture.h"
 #include "guilib/DispResource.h"
index 2454fb1..b1464d0 100644 (file)
@@ -30,7 +30,7 @@
 #include "windowing/WinSystem.h"
 #include "utils/Stopwatch.h"
 #include "threads/CriticalSection.h"
-#include "settings/ISettingCallback.h"
+#include "settings/lib/ISettingCallback.h"
 
 class IDispResource;
 
index 71e61ef..6523e1b 100644 (file)
@@ -62,12 +62,15 @@ bool CEGLNativeTypeAmlogic::CheckCompatibility()
 
 void CEGLNativeTypeAmlogic::Initialize()
 {
-  aml_cpufreq_limit(true);
+  aml_permissions();
+  aml_cpufreq_min(true);
+  aml_cpufreq_max(true);
   return;
 }
 void CEGLNativeTypeAmlogic::Destroy()
 {
-  aml_cpufreq_limit(false);
+  aml_cpufreq_min(false);
+  aml_cpufreq_max(false);
   return;
 }
 
index 5f68630..20875af 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "system.h"
 #include <EGL/egl.h>
 #include "EGLNativeTypeAndroid.h"
 #include "utils/log.h"
 #include "guilib/gui3d.h"
 #if defined(TARGET_ANDROID)
-#include "android/activity/XBMCApp.h"
+  #include "android/activity/XBMCApp.h"
+  #if defined(HAS_AMLPLAYER) || defined(HAS_LIBAMCODEC)
+    #include "utils/AMLUtils.h"
+  #endif
 #endif
+
 CEGLNativeTypeAndroid::CEGLNativeTypeAndroid()
 {
 }
@@ -43,10 +48,21 @@ bool CEGLNativeTypeAndroid::CheckCompatibility()
 
 void CEGLNativeTypeAndroid::Initialize()
 {
+#if defined(TARGET_ANDROID) && (defined(HAS_AMLPLAYER) || defined(HAS_LIBAMCODEC))
+  aml_permissions();
+  aml_cpufreq_min(true);
+  aml_cpufreq_max(true);
+#endif
+
   return;
 }
 void CEGLNativeTypeAndroid::Destroy()
 {
+#if defined(TARGET_ANDROID) && (defined(HAS_AMLPLAYER) || defined(HAS_LIBAMCODEC))
+  aml_cpufreq_min(false);
+  aml_cpufreq_max(false);
+#endif
+
   return;
 }