[OSX] expose gl_osx_fullscreen in advancedsettings.xml, this switches between fullscr...
[xbmc:xbmc-antiquated.git] / XBMC / xbmc / Settings.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2008 Team XBMC
4  *      http://xbmc.org
5  *
6  *  This Program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2, or (at your option)
9  *  any later version.
10  *
11  *  This Program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with XBMC; see the file COPYING.  If not, write to
18  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19  *  http://www.gnu.org/copyleft/gpl.html
20  *
21  */
22
23 // REMOVE ME WHEN WE SWITCH TO SKIN VERSION 2.1
24 #define PRE_SKIN_VERSION_2_1_COMPATIBILITY 1
25 // REMOVE ME WHEN WE SWITCH TO SKIN VERSION 2.1
26
27 #define DEFAULT_SKIN "PM3.HD"
28
29 #include "settings/VideoSettings.h"
30 #include "StringUtils.h"
31 #include "GUISettings.h"
32 #include "Profile.h"
33 #include "MediaSource.h"
34 #include "XBVideoConfig.h"
35 #include "ViewState.h"
36
37 #include <vector>
38 #include <map>
39
40 #define CACHE_AUDIO 0
41 #define CACHE_VIDEO 1
42 #define CACHE_VOB   2
43
44 #define VOLUME_MINIMUM -6000  // -60dB
45 #define VOLUME_MAXIMUM 0      // 0dB
46 #define VOLUME_DRC_MINIMUM 0    // 0dB
47 #define VOLUME_DRC_MAXIMUM 3000 // 30dB
48
49 #define VIEW_MODE_NORMAL        0
50 #define VIEW_MODE_ZOOM          1
51 #define VIEW_MODE_STRETCH_4x3   2
52 #define VIEW_MODE_STRETCH_14x9  3
53 #define VIEW_MODE_STRETCH_16x9  4
54 #define VIEW_MODE_ORIGINAL      5
55 #define VIEW_MODE_CUSTOM        6
56
57 #define STACK_NONE          0
58 #define STACK_SIMPLE        1
59
60 #define VIDEO_SHOW_ALL 0
61 #define VIDEO_SHOW_UNWATCHED 1
62 #define VIDEO_SHOW_WATCHED 2
63
64 /* FIXME: eventually the profile should dictate where t:\ is but for now it
65    makes sense to leave all the profile settings in a user writeable location
66    like t:\ */
67 #define PROFILES_FILE "t:\\profiles.xml"
68
69 class CSkinString
70 {
71 public:
72   CStdString name;
73   CStdString value;
74 };
75
76 class CSkinBool
77 {
78 public:
79   CStdString name;
80   bool value;
81 };
82
83 struct VOICE_MASK {
84   float energy;
85   float pitch;
86   float robotic;
87   float whisper;
88 };
89
90 class CSettings
91 {
92 public:
93   CSettings(void);
94   virtual ~CSettings(void);
95
96   void Initialize();
97
98   bool Load(bool& bXboxMediacenter, bool& bSettings);
99   void Save() const;
100   bool Reset();
101
102   void Clear();
103
104   bool LoadProfile(int index);
105   bool SaveSettingsToProfile(int index);
106   bool DeleteProfile(int index);
107   void CreateProfileFolders();
108
109   VECSOURCES *GetSourcesFromType(const CStdString &type);
110   CStdString GetDefaultSourceFromType(const CStdString &type);
111
112   bool UpdateSource(const CStdString &strType, const CStdString strOldName, const CStdString &strUpdateChild, const CStdString &strUpdateValue);
113   bool DeleteSource(const CStdString &strType, const CStdString strName, const CStdString strPath);
114   bool UpdateShare(const CStdString &type, const CStdString oldName, const CMediaSource &share);
115   bool AddShare(const CStdString &type, const CMediaSource &share);
116
117   int TranslateSkinString(const CStdString &setting);
118   const CStdString &GetSkinString(int setting) const;
119   void SetSkinString(int setting, const CStdString &label);
120
121   int TranslateSkinBool(const CStdString &setting);
122   bool GetSkinBool(int setting) const;
123   void SetSkinBool(int setting, bool set);
124
125   void ResetSkinSetting(const CStdString &setting);
126   void ResetSkinSettings();
127
128   struct AdvancedSettings
129   {
130 public:
131     // multipath testing
132     bool m_useMultipaths;
133     bool m_DisableModChipDetection;
134
135     int m_audioHeadRoom;
136     float m_karaokeSyncDelay;
137
138     float m_videoSubsDelayRange;
139     float m_videoAudioDelayRange;
140     int m_videoSmallStepBackSeconds;
141     int m_videoSmallStepBackTries;
142     int m_videoSmallStepBackDelay;
143     bool m_videoUseTimeSeeking;
144     int m_videoTimeSeekForward;
145     int m_videoTimeSeekBackward;
146     int m_videoTimeSeekForwardBig;
147     int m_videoTimeSeekBackwardBig;
148     int m_videoPercentSeekForward;
149     int m_videoPercentSeekBackward;
150     int m_videoPercentSeekForwardBig;
151     int m_videoPercentSeekBackwardBig;
152     int m_videoBlackBarColour;
153
154     float m_slideshowBlackBarCompensation;
155     float m_slideshowZoomAmount;
156     float m_slideshowPanAmount;
157
158     int m_lcdRows;
159     int m_lcdColumns;
160     int m_lcdAddress1;
161     int m_lcdAddress2;
162     int m_lcdAddress3;
163     int m_lcdAddress4;
164     bool m_lcdHeartbeat;
165
166     int m_autoDetectPingTime;
167     float m_playCountMinimumPercent;
168
169     int m_songInfoDuration;
170     int m_busyDialogDelay;
171     int m_logLevel;
172     CStdString m_cddbAddress;
173 #ifdef HAS_HAL
174     bool m_useHalMount;
175     bool m_useSystemPowerManagement;
176 #endif
177     bool m_fullScreenOnMovieStart;
178     bool m_noDVDROM;
179     CStdString m_cachePath;
180     bool m_displayRemoteCodes;
181     CStdStringArray m_videoExcludeRegExps;
182     CStdStringArray m_videoStackRegExps;
183     CStdStringArray m_tvshowStackRegExps;
184     CStdString m_tvshowMultiPartStackRegExp;
185     CStdStringArray m_pathSubstitutions;
186     int m_remoteRepeat;
187     float m_controllerDeadzone;
188     bool m_FTPShowCache;
189
190     bool m_playlistAsFolders;
191     bool m_detectAsUdf;
192
193     int m_thumbSize;
194
195     int m_sambaclienttimeout;
196     CStdString m_sambadoscodepage;
197     CStdString m_musicThumbs;
198     CStdString m_dvdThumbs;
199
200     bool m_bMusicLibraryHideAllItems;
201     bool m_bMusicLibraryAllItemsOnBottom;
202     bool m_bMusicLibraryAlbumsSortByArtistThenYear;
203     CStdString m_strMusicLibraryAlbumFormat;
204     CStdString m_strMusicLibraryAlbumFormatRight;
205     bool m_prioritiseAPEv2tags;
206     CStdString m_musicItemSeparator;
207     CStdString m_videoItemSeparator;
208     std::vector<CStdString> m_musicTagsFromFileFilters;
209
210     bool m_bVideoLibraryHideAllItems;
211     bool m_bVideoLibraryAllItemsOnBottom;
212     bool m_bVideoLibraryHideRecentlyAddedItems;
213     bool m_bVideoLibraryHideEmptySeries;
214     bool m_bVideoLibraryCleanOnUpdate;
215
216     bool m_bUseEvilB;
217     std::vector<CStdString> m_vecTokens; // cleaning strings tied to language
218     //TuxBox
219     bool m_bTuxBoxSubMenuSelection;
220     int m_iTuxBoxDefaultSubMenu;
221     int m_iTuxBoxDefaultRootMenu;
222     bool m_bTuxBoxAudioChannelSelection;
223     bool m_bTuxBoxPictureIcon;
224     int m_iTuxBoxEpgRequestTime;
225     int m_iTuxBoxZapWaitTime;
226     bool m_bTuxBoxSendAllAPids;
227
228     int m_curlclienttimeout;
229
230 #ifdef HAS_SDL
231     bool m_fullScreen;
232     bool m_startFullScreen;
233 #endif
234     int m_playlistRetries;
235     int m_playlistTimeout;
236     bool m_GLRectangleHack;
237     int m_iSkipLoopFilter;
238     float m_ForcedSwapTime; /* if nonzero, set's the explicit time in ms to allocate for buffer swap */
239     bool m_osx_GLFullScreen;
240   };
241
242   struct stSettings
243   {
244 public:
245     CStdString m_pictureExtensions;
246     CStdString m_musicExtensions;
247     CStdString m_videoExtensions;
248
249     CStdString m_defaultMusicScraper;
250
251     CStdString m_logFolder;
252
253     bool m_bMyMusicSongInfoInVis;
254     bool m_bMyMusicSongThumbInVis;
255
256     CViewState m_viewStateMusicNavArtists;
257     CViewState m_viewStateMusicNavAlbums;
258     CViewState m_viewStateMusicNavSongs;
259     CViewState m_viewStateMusicShoutcast;
260     CViewState m_viewStateMusicLastFM;
261     CViewState m_viewStateVideoNavActors;
262     CViewState m_viewStateVideoNavYears;
263     CViewState m_viewStateVideoNavGenres;
264     CViewState m_viewStateVideoNavTitles;
265     CViewState m_viewStateVideoNavEpisodes;
266     CViewState m_viewStateVideoNavSeasons;
267     CViewState m_viewStateVideoNavTvShows;
268     CViewState m_viewStateVideoNavMusicVideos;
269
270     CViewState m_viewStatePrograms;
271     CViewState m_viewStatePictures;
272     CViewState m_viewStateMusicFiles;
273     CViewState m_viewStateVideoFiles;
274
275     bool m_bMyMusicPlaylistRepeat;
276     bool m_bMyMusicPlaylistShuffle;
277     int m_iMyMusicStartWindow;
278
279     // for scanning
280     bool m_bMyMusicIsScanning;
281
282     CVideoSettings m_defaultVideoSettings;
283     CVideoSettings m_currentVideoSettings;
284
285     float m_fZoomAmount;      // current zoom amount
286     float m_fPixelRatio;      // current pixel ratio
287
288     int m_iMyVideoWatchMode;
289
290     bool m_bMyVideoPlaylistRepeat;
291     bool m_bMyVideoPlaylistShuffle;
292     bool m_bMyVideoNavFlatten;
293
294     int m_iVideoStartWindow;
295
296     int m_iMyVideoStack;
297     char m_szMyVideoCleanTokens[256];
298     char m_szMyVideoCleanSeparators[32];
299
300     int iAdditionalSubtitleDirectoryChecked;
301
302     char szOnlineArenaPassword[32]; // private arena password
303     char szOnlineArenaDescription[64]; // private arena description
304
305     int m_HttpApiBroadcastPort;
306     int m_HttpApiBroadcastLevel;
307     int m_nVolumeLevel;                     // measured in milliBels -60dB -> 0dB range.
308     int m_dynamicRangeCompressionLevel;     // measured in milliBels  0dB -> 30dB range.
309     int m_iPreMuteVolumeLevel;    // save the m_nVolumeLevel for proper restore
310     bool m_bMute;
311     int m_iSystemTimeTotalUp;    // Uptime in minutes!
312
313     VOICE_MASK m_karaokeVoiceMask[4];
314   };
315
316   std::map<int,std::pair<std::vector<int>,std::vector<std::string> > > m_mapRssUrls;
317   std::map<int, CSkinString> m_skinStrings;
318   std::map<int, CSkinBool> m_skinBools;
319
320   // cache copies of these parsed values, to avoid re-parsing over and over
321   CStdString m_szMyVideoStackSeparatorsString;
322   CStdStringArray m_szMyVideoStackTokensArray;
323   CStdString m_szMyVideoCleanSeparatorsString;
324   CStdStringArray m_szMyVideoCleanTokensArray;
325
326   VECSOURCES m_programSources;
327   VECSOURCES m_pictureSources;
328   VECSOURCES m_fileSources;
329   VECSOURCES m_musicSources;
330   VECSOURCES m_videoSources;
331
332   CStdString m_defaultProgramSource;
333   CStdString m_defaultMusicSource;
334   CStdString m_defaultPictureSource;
335   CStdString m_defaultFileSource;
336   CStdString m_defaultVideoSource;
337   CStdString m_defaultMusicLibSource;
338   CStdString m_defaultVideoLibSource;
339
340   VECSOURCES m_UPnPMusicSources;
341   VECSOURCES m_UPnPVideoSources;
342   VECSOURCES m_UPnPPictureSources;
343
344   CStdString m_UPnPUUID;
345   CStdString m_UPnPUUIDRenderer;
346
347   //VECFILETYPEICONS m_vecIcons;
348   VECPROFILES m_vecProfiles;
349   int m_iLastLoadedProfileIndex;
350   int m_iLastUsedProfileIndex;
351   bool bUseLoginScreen;
352   RESOLUTION_INFO m_ResInfo[CUSTOM+MAX_RESOLUTIONS];
353
354   // utility functions for user data folders
355   CStdString GetUserDataItem(const CStdString& strFile) const;
356   CStdString GetProfileUserDataFolder() const;
357   CStdString GetUserDataFolder() const;
358   CStdString GetDatabaseFolder() const;
359   CStdString GetCDDBFolder() const;
360   CStdString GetThumbnailsFolder() const;
361   CStdString GetMusicThumbFolder() const;
362   CStdString GetLastFMThumbFolder() const;
363   CStdString GetMusicArtistThumbFolder() const;
364   CStdString GetVideoThumbFolder() const;
365   CStdString GetBookmarksThumbFolder() const;
366   CStdString GetPicturesThumbFolder() const;
367   CStdString GetProgramsThumbFolder() const;
368   CStdString GetGameSaveThumbFolder() const;
369   CStdString GetProfilesThumbFolder() const;
370   CStdString GetSourcesFile() const;
371   CStdString GetSkinFolder() const;
372   CStdString GetSkinFolder(const CStdString& skinName) const;
373   CStdString GetScriptsFolder() const;
374   CStdString GetVideoFanartFolder() const;
375
376   CStdString GetSettingsFile() const;
377
378   bool LoadUPnPXml(const CStdString& strSettingsFile);
379   bool SaveUPnPXml(const CStdString& strSettingsFile) const;
380
381   bool LoadProfiles(const CStdString& strSettingsFile);
382   bool SaveProfiles(const CStdString& strSettingsFile) const;
383
384   bool SaveSettings(const CStdString& strSettingsFile, CGUISettings *localSettings = NULL) const;
385
386   bool SaveSources();
387
388 protected:
389   // these 3 don't have a default - used for advancedsettings.xml
390   bool GetInteger(const TiXmlElement* pRootElement, const char *strTagName, int& iValue, const int iMin, const int iMax);
391   bool GetFloat(const TiXmlElement* pRootElement, const char *strTagName, float& fValue, const float fMin, const float fMax);
392   bool GetString(const TiXmlElement* pRootElement, const char *strTagName, CStdString& strValue);
393
394   void GetCustomRegexps(TiXmlElement *pRootElement, CStdStringArray& settings);
395
396   bool GetInteger(const TiXmlElement* pRootElement, const char *strTagName, int& iValue, const int iDefault, const int iMin, const int iMax);
397   bool GetFloat(const TiXmlElement* pRootElement, const char *strTagName, float& fValue, const float fDefault, const float fMin, const float fMax);
398   bool GetString(const TiXmlElement* pRootElement, const char *strTagName, CStdString& strValue, const CStdString& strDefaultValue);
399   bool GetString(const TiXmlElement* pRootElement, const char *strTagName, char *szValue, const CStdString& strDefaultValue);
400   bool GetSource(const CStdString &category, const TiXmlNode *source, CMediaSource &share);
401   void GetSources(const TiXmlElement* pRootElement, const CStdString& strTagName, VECSOURCES& items, CStdString& strDefault);
402   bool SetSources(TiXmlNode *root, const char *section, const VECSOURCES &shares, const char *defaultPath);
403   void GetViewState(const TiXmlElement* pRootElement, const CStdString& strTagName, CViewState &viewState, SORT_METHOD defaultSort = SORT_METHOD_LABEL, int defaultView = DEFAULT_VIEW_LIST);
404
405   void ConvertHomeVar(CStdString& strText);
406   // functions for writing xml files
407   void SetString(TiXmlNode* pRootNode, const CStdString& strTagName, const CStdString& strValue) const;
408   void SetInteger(TiXmlNode* pRootNode, const CStdString& strTagName, int iValue) const;
409   void SetFloat(TiXmlNode* pRootNode, const CStdString& strTagName, float fValue) const;
410   void SetBoolean(TiXmlNode* pRootNode, const CStdString& strTagName, bool bValue) const;
411   void SetHex(TiXmlNode* pRootNode, const CStdString& strTagName, DWORD dwHexValue) const;
412   void SetViewState(TiXmlNode* pRootNode, const CStdString& strTagName, const CViewState &viewState) const;
413
414   bool LoadCalibration(const TiXmlElement* pElement, const CStdString& strSettingsFile);
415   bool SaveCalibration(TiXmlNode* pRootNode) const;
416
417   bool LoadSettings(const CStdString& strSettingsFile);
418 //  bool SaveSettings(const CStdString& strSettingsFile) const;
419
420   // skin activated settings
421   void LoadSkinSettings(const TiXmlElement* pElement);
422   void SaveSkinSettings(TiXmlNode *pElement) const;
423
424   // Advanced settings
425   void LoadAdvancedSettings();
426
427   void LoadUserFolderLayout();
428
429   void LoadRSSFeeds();
430 };
431
432 extern class CSettings g_settings;
433 extern struct CSettings::stSettings g_stSettings;
434 extern struct CSettings::AdvancedSettings g_advancedSettings;