1//
2// This file is part of the aMule Project.
3//
4// Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org )
5// Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net )
6//
7// Any parts of this program derived from the xMule, lMule or eMule project,
8// or contributed by third-party developers are copyrighted by their
9// respective authors.
10//
11// This program is free software; you can redistribute it and/or modify
12// it under the terms of the GNU General Public License as published by
13// the Free Software Foundation; either version 2 of the License, or
14// (at your option) any later version.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
24//
25
26#ifndef PREFERENCES_H
27#define PREFERENCES_H
28
29#include "MD4Hash.h"			// Needed for CMD4Hash
30
31#include <wx/arrstr.h>			// Needed for wxArrayString
32
33#include <map>
34
35#include "Proxy.h"
36#include "OtherStructs.h"
37
38#include <common/ClientVersion.h>	// Needed for __SVN__
39
40class CPreferences;
41class wxConfigBase;
42class wxWindow;
43
44enum EViewSharedFilesAccess {
45	vsfaEverybody = 0,
46	vsfaFriends = 1,
47	vsfaNobody = 2
48};
49
50enum AllCategoryFilter {
51	acfAll = 0,
52	acfAllOthers,
53	acfIncomplete,
54	acfCompleted,
55	acfWaiting,
56	acfDownloading,
57	acfErroneous,
58	acfPaused,
59	acfStopped,
60	acfVideo,
61	acfAudio,
62	acfArchive,
63	acfCDImages,
64	acfPictures,
65	acfText,
66	acfActive
67};
68
69/**
70 * Base-class for automatically loading and saving of preferences.
71 *
72 * The purpose of this class is to perform two tasks:
73 * 1) To load and save a variable using wxConfig
74 * 2) If nescecarry, to syncronize it with a widget
75 *
76 * This pure-virtual class servers as the base of all the Cfg types
77 * defined below, and exposes the entire interface.
78 *
79 * Please note that for reasons of simplicity these classes dont provide
80 * direct access to the variables they maintain, as there is no real need
81 * for this.
82 *
83 * To create a sub-class you need only provide the Load/Save functionality,
84 * as it is given that not all variables have a widget assosiated.
85 */
86class Cfg_Base
87{
88public:
89	/**
90	 * Constructor.
91	 *
92	 * @param keyname This is the keyname under which the variable is to be saved.
93	 */
94	Cfg_Base( const wxString& keyname )
95	 : m_key( keyname ),
96	   m_changed( false )
97	{}
98
99	/**
100	 * Destructor.
101	 */
102	virtual ~Cfg_Base() {}
103
104	/**
105	 * This function loads the assosiated variable from the provided config object.
106	 */
107	virtual void LoadFromFile(wxConfigBase* cfg) = 0;
108	/**
109	 * This function saves the assosiated variable to the provided config object.
110	 */
111	virtual void SaveToFile(wxConfigBase* cfg) = 0;
112
113	/**
114	 * Syncs the variable with the contents of the widget.
115	 *
116	 * @return True of success, false otherwise.
117	 */
118	virtual bool TransferFromWindow()	{ return false; }
119	/**
120	 * Syncs the widget with the contents of the variable.
121	 *
122	 * @return True of success, false otherwise.
123	 */
124	virtual bool TransferToWindow()		{ return false; }
125
126	/**
127	 * Connects a widget with the specified ID to the Cfg object.
128	 *
129	 * @param id The ID of the widget.
130	 * @param parent A pointer to the widgets parent, to speed up searches.
131	 * @return True on success, false otherwise.
132	 *
133	 * This function only makes sense for Cfg-classes that have the capability
134	 * to interact with a widget, see Cfg_Tmpl::ConnectToWidget().
135	 */
136	virtual	bool ConnectToWidget( int WXUNUSED(id), wxWindow* WXUNUSED(parent) = NULL )	{ return false; }
137
138	/**
139	 * Gets the key assosiated with Cfg object.
140	 *
141	 * @return The config-key of this object.
142	 */
143	virtual const wxString& GetKey()	{ return m_key; }
144
145
146	/**
147	 * Specifies if the variable has changed since the TransferFromWindow() call.
148	 *
149	 * @return True if the variable has changed, false otherwise.
150	 */
151	virtual bool HasChanged() 			{ return m_changed; }
152
153
154protected:
155	/**
156	 * Sets the changed status.
157	 *
158	 * @param changed The new status.
159	 */
160	virtual void SetChanged( bool changed )
161	{
162		m_changed = changed;
163	};
164
165private:
166
167	//! The Config-key under which to save the variable
168	wxString	m_key;
169
170	//! The changed-status of the variable
171	bool		m_changed;
172};
173
174
175class Cfg_Lang_Base {
176public:
177	virtual void UpdateChoice(int pos);
178};
179
180const int cntStatColors = 15;
181
182
183//! This typedef is a shortcut similar to the theApp shortcut, but uses :: instead of .
184//! It only allows access to static preference functions, however this is to be desired anyway.
185typedef CPreferences thePrefs;
186
187
188class CPreferences
189{
190public:
191	friend class PrefsUnifiedDlg;
192
193	CPreferences();
194	~CPreferences();
195
196	void			Save();
197	void			SaveCats();
198	void			ReloadSharedFolders();
199
200	static bool		Score()				{ return s_scorsystem; }
201	static void		SetScoreSystem(bool val)	{ s_scorsystem = val; }
202	static bool		Reconnect()			{ return s_reconnect; }
203	static void		SetReconnect(bool val)		{ s_reconnect = val; }
204	static bool		DeadServer()			{ return s_deadserver; }
205	static void		SetDeadServer(bool val)		{ s_deadserver = val; }
206	static const wxString&	GetUserNick()			{ return s_nick; }
207	static void		SetUserNick(const wxString& nick) { s_nick = nick; }
208	static Cfg_Lang_Base * GetCfgLang()		{ return s_cfgLang; }
209
210	static const wxString&	GetAddress()			{ return s_Addr; }
211	static uint16		GetPort()			{ return s_port; }
212	static void		SetPort(uint16 val);
213	static uint16		GetUDPPort()			{ return s_udpport; }
214	static uint16		GetEffectiveUDPPort()	{ return s_UDPEnable ? s_udpport : 0; }
215	static void		SetUDPPort(uint16 val)		{ s_udpport = val; }
216	static bool		IsUDPDisabled()			{ return !s_UDPEnable; }
217	static void		SetUDPDisable(bool val)		{ s_UDPEnable = !val; }
218	static const CPath&	GetIncomingDir()		{ return s_incomingdir; }
219	static void		SetIncomingDir(const CPath& dir){ s_incomingdir = dir; }
220	static const CPath&	GetTempDir()			{ return s_tempdir; }
221	static void		SetTempDir(const CPath& dir)	{ s_tempdir = dir; }
222	static const CMD4Hash&	GetUserHash()			{ return s_userhash; }
223	static void		SetUserHash(const CMD4Hash& h)	{ s_userhash = h; }
224	static uint16		GetMaxUpload()			{ return s_maxupload; }
225	static uint16		GetSlotAllocation()		{ return s_slotallocation; }
226	static bool		IsICHEnabled()			{ return s_ICH; }
227	static void		SetICHEnabled(bool val)		{ s_ICH = val; }
228	static bool		IsTrustingEveryHash()		{ return s_AICHTrustEveryHash; }
229	static void		SetTrustingEveryHash(bool val)	{ s_AICHTrustEveryHash = val; }
230	static bool		AutoServerlist()		{ return s_autoserverlist; }
231	static void		SetAutoServerlist(bool val)	{ s_autoserverlist = val; }
232	static bool		DoMinToTray()			{ return s_mintotray; }
233	static void		SetMinToTray(bool val)		{ s_mintotray = val; }
234	static bool		UseTrayIcon()			{ return s_trayiconenabled; }
235	static void		SetUseTrayIcon(bool val)	{ s_trayiconenabled = val; }
236	static bool		HideOnClose()			{ return s_hideonclose; }
237	static void		SetHideOnClose(bool val)	{ s_hideonclose = val; }
238	static bool		DoAutoConnect()			{ return s_autoconnect; }
239	static void		SetAutoConnect(bool inautoconnect)
240       					{s_autoconnect = inautoconnect; }
241	static bool		AddServersFromServer()		{ return s_addserversfromserver; }
242	static void		SetAddServersFromServer(bool val) { s_addserversfromserver = val; }
243	static bool		AddServersFromClient()		{ return s_addserversfromclient; }
244	static void		SetAddServersFromClient(bool val) { s_addserversfromclient = val; }
245	static uint16		GetTrafficOMeterInterval()	{ return s_trafficOMeterInterval; }
246	static void		SetTrafficOMeterInterval(uint16 in)
247       					{ s_trafficOMeterInterval = in; }
248	static uint16		GetStatsInterval()		{ return s_statsInterval;}
249	static void		SetStatsInterval(uint16 in)	{ s_statsInterval = in; }
250	static bool		IsConfirmExitEnabled()		{ return s_confirmExit; }
251	static bool		FilterLanIPs()			{ return s_filterLanIP; }
252	static void		SetFilterLanIPs(bool val)	{ s_filterLanIP = val; }
253	static bool		ParanoidFilter()			{ return s_paranoidfilter; }
254	static void		SetParanoidFilter(bool val)	{ s_paranoidfilter = val; }
255	static bool		IsOnlineSignatureEnabled()	{ return s_onlineSig; }
256	static void		SetOnlineSignatureEnabled(bool val) { s_onlineSig = val; }
257	static uint32		GetMaxGraphUploadRate()		{ return s_maxGraphUploadRate; }
258	static uint32		GetMaxGraphDownloadRate()	{ return s_maxGraphDownloadRate; }
259	static void		SetMaxGraphUploadRate(uint32 in){ s_maxGraphUploadRate=in; }
260	static void		SetMaxGraphDownloadRate(uint32 in)
261       					{ s_maxGraphDownloadRate = in; }
262
263	static uint16		GetMaxDownload()		{ return s_maxdownload; }
264	static uint16		GetMaxConnections()		{ return s_maxconnections; }
265	static uint16		GetMaxSourcePerFile()		{ return s_maxsourceperfile; }
266	static uint16		GetMaxSourcePerFileSoft() {
267					uint16 temp = (uint16)(s_maxsourceperfile*0.9);
268					if( temp > 1000 ) return 1000;
269                                        return temp; }
270	static uint16		GetMaxSourcePerFileUDP() {
271					uint16 temp = (uint16)(s_maxsourceperfile*0.75);
272					if( temp > 100 ) return 100;
273                                        return temp; }
274	static uint16		GetDeadserverRetries()		{ return s_deadserverretries; }
275	static void		SetDeadserverRetries(uint16 val) { s_deadserverretries = val; }
276	static uint32		GetServerKeepAliveTimeout()	{ return s_dwServerKeepAliveTimeoutMins*60000; }
277	static void		SetServerKeepAliveTimeout(uint32 val)	{ s_dwServerKeepAliveTimeoutMins = val/60000; }
278
279	static const wxString&	GetLanguageID()			{ return s_languageID; }
280	static void		SetLanguageID(const wxString& new_id)	{ s_languageID = new_id; }
281	static uint8		CanSeeShares()			{ return s_iSeeShares; }
282	static void		SetCanSeeShares(uint8 val)	{ s_iSeeShares = val; }
283
284	static uint8		GetStatsMax()			{ return s_statsMax; }
285	static bool		UseFlatBar()			{ return (s_depth3D==0); }
286	static uint8		GetStatsAverageMinutes()	{ return s_statsAverageMinutes; }
287	static void		SetStatsAverageMinutes(uint8 in){ s_statsAverageMinutes = in; }
288
289	static bool		GetStartMinimized()		{ return s_startMinimized; }
290	static void		SetStartMinimized(bool instartMinimized)
291					{ s_startMinimized = instartMinimized;}
292	static bool		GetSmartIdCheck()		{ return s_smartidcheck; }
293	static void		SetSmartIdCheck( bool in_smartidcheck )
294       					{ s_smartidcheck = in_smartidcheck; }
295	static uint8		GetSmartIdState()		{ return s_smartidstate; }
296	static void		SetSmartIdState( uint8 in_smartidstate )
297       					{ s_smartidstate = in_smartidstate; }
298	static bool		GetVerbose()			{ return s_bVerbose; }
299	static void		SetVerbose(bool val)		{ s_bVerbose = val; }
300	static bool		GetPreviewPrio()		{ return s_bpreviewprio; }
301	static void		SetPreviewPrio(bool in)		{ s_bpreviewprio = in; }
302	static bool		StartNextFile()			{ return s_bstartnextfile; }
303	static bool		StartNextFileSame()		{ return s_bstartnextfilesame; }
304	static bool		StartNextFileAlpha()		{ return s_bstartnextfilealpha; }
305	static void		SetStartNextFile(bool val)	{ s_bstartnextfile = val; }
306	static void		SetStartNextFileSame(bool val)	{ s_bstartnextfilesame = val; }
307	static void		SetStartNextFileAlpha(bool val)	{ s_bstartnextfilealpha = val; }
308	static bool		ShowOverhead()			{ return s_bshowoverhead; }
309	static void		SetNewAutoUp(bool m_bInUAP) 	{ s_bUAP = m_bInUAP; }
310	static bool		GetNewAutoUp() 			{ return s_bUAP; }
311	static void		SetNewAutoDown(bool m_bInDAP) 	{ s_bDAP = m_bInDAP; }
312	static bool		GetNewAutoDown() 		{ return s_bDAP; }
313
314	static const wxString&	GetVideoPlayer()		{ return s_VideoPlayer; }
315
316	static uint32		GetFileBufferSize() 		{ return s_iFileBufferSize*15000; }
317	static void		SetFileBufferSize(uint32 val)	{ s_iFileBufferSize = val/15000; }
318	static uint32		GetQueueSize() 			{ return s_iQueueSize*100; }
319	static void		SetQueueSize(uint32 val)	{ s_iQueueSize = val/100; }
320
321	static uint8		Get3DDepth() 			{ return s_depth3D;}
322	static bool		AddNewFilesPaused()		{ return s_addnewfilespaused; }
323	static void		SetAddNewFilesPaused(bool val)	{ s_addnewfilespaused = val; }
324
325	static void		SetMaxConsPerFive(int in)	{ s_MaxConperFive=in; }
326
327	static uint16		GetMaxConperFive()		{ return s_MaxConperFive; }
328	static uint16		GetDefaultMaxConperFive();
329
330	static bool		IsSafeServerConnectEnabled()	{ return s_safeServerConnect; }
331	static void		SetSafeServerConnectEnabled(bool val) { s_safeServerConnect = val; }
332
333	static bool		IsCheckDiskspaceEnabled()			{ return s_checkDiskspace; }
334	static void		SetCheckDiskspaceEnabled(bool val)	{ s_checkDiskspace = val; }
335	static uint32	GetMinFreeDiskSpaceMB()				{ return s_uMinFreeDiskSpace; }
336	static uint64	GetMinFreeDiskSpace()				{ return s_uMinFreeDiskSpace * 1048576ull; }
337	static void		SetMinFreeDiskSpaceMB(uint32 val)	{ s_uMinFreeDiskSpace = val; }
338
339	static const wxString&	GetYourHostname() 		{ return s_yourHostname; }
340	static void		SetYourHostname(const wxString& s)	{ s_yourHostname = s; }
341
342	static void		SetMaxUpload(uint16 in);
343	static void		SetMaxDownload(uint16 in);
344	static void		SetSlotAllocation(uint16 in) 	{ s_slotallocation = (in >= 1) ? in : 1; };
345
346	typedef std::vector<CPath> PathList;
347	PathList shareddir_list;
348
349	wxArrayString adresses_list;
350
351	static bool	 	AutoConnectStaticOnly() 	{ return s_autoconnectstaticonly; }
352	static void		SetAutoConnectStaticOnly(bool val) { s_autoconnectstaticonly = val; }
353	static bool		GetUPnPEnabled()		{ return s_UPnPEnabled; }
354	static void		SetUPnPEnabled(bool val)	{ s_UPnPEnabled = val; }
355	static bool		GetUPnPECEnabled()		{ return s_UPnPECEnabled; }
356	static void		SetUPnPECEnabled(bool val)	{ s_UPnPECEnabled = val; }
357	static bool		GetUPnPWebServerEnabled() 	{ return s_UPnPWebServerEnabled; }
358	static void		SetUPnPWebServerEnabled(bool val){ s_UPnPWebServerEnabled = val; }
359	static uint16		GetUPnPTCPPort()		{ return s_UPnPTCPPort; }
360	static void		SetUPnPTCPPort(uint16 val)	{ s_UPnPTCPPort = val; }
361	static bool		IsManualHighPrio() 		{ return s_bmanualhighprio; }
362	static void		SetManualHighPrio(bool val)	{ s_bmanualhighprio = val; }
363	void			LoadCats();
364	static const wxString&	GetDateTimeFormat() 		{ return s_datetimeformat; }
365	// Download Categories
366	uint32			AddCat(Category_Struct* cat);
367	void			RemoveCat(size_t index);
368	uint32			GetCatCount();
369	Category_Struct* GetCategory(size_t index);
370	const CPath&	GetCatPath(uint8 index);
371	uint32			GetCatColor(size_t index);
372	bool			CreateCategory(Category_Struct *& category, const wxString& name, const CPath& path,
373						const wxString& comment, uint32 color, uint8 prio);
374	bool			UpdateCategory(uint8 cat, const wxString& name, const CPath& path,
375						const wxString& comment, uint32 color, uint8 prio);
376
377	static AllCategoryFilter	GetAllcatFilter() 		{ return s_allcatFilter; }
378	static void		SetAllcatFilter(AllCategoryFilter in)	{ s_allcatFilter = in; }
379
380	static bool		ShowAllNotCats() 		{ return s_showAllNotCats; }
381
382	// WebServer
383	static uint16 		GetWSPort() 			{ return s_nWebPort; }
384	static void		SetWSPort(uint16 uPort) 	{ s_nWebPort=uPort; }
385	static uint16		GetWebUPnPTCPPort()		{ return s_nWebUPnPTCPPort; }
386	static void		SetWebUPnPTCPPort(uint16 val)	{ s_nWebUPnPTCPPort = val; }
387	static const wxString&	GetWSPass() 			{ return s_sWebPassword; }
388	static void		SetWSPass(const wxString& pass)	{ s_sWebPassword = pass; }
389	static const wxString&	GetWSPath() 			{ return s_sWebPath; }
390	static void		SetWSPath(const wxString& path)	{ s_sWebPath = path; }
391	static bool		GetWSIsEnabled() 		{ return s_bWebEnabled; }
392	static void		SetWSIsEnabled(bool bEnable) 	{ s_bWebEnabled=bEnable; }
393	static bool		GetWebUseGzip() 		{ return s_bWebUseGzip; }
394	static void		SetWebUseGzip(bool bUse) 	{ s_bWebUseGzip=bUse; }
395	static uint32 		GetWebPageRefresh() 		{ return s_nWebPageRefresh; }
396	static void		SetWebPageRefresh(uint32 nRefresh) { s_nWebPageRefresh=nRefresh; }
397	static bool		GetWSIsLowUserEnabled() 	{ return s_bWebLowEnabled; }
398	static void		SetWSIsLowUserEnabled(bool in) 	{ s_bWebLowEnabled=in; }
399	static const wxString&	GetWSLowPass() 			{ return s_sWebLowPassword; }
400	static void		SetWSLowPass(const wxString& pass)	{ s_sWebLowPassword = pass; }
401	static const wxString&	GetWebTemplate()		{ return s_WebTemplate; }
402	static void		SetWebTemplate(const wxString& val) { s_WebTemplate = val; }
403
404	static void		SetMaxSourcesPerFile(uint16 in) { s_maxsourceperfile=in;}
405	static void		SetMaxConnections(uint16 in) 	{ s_maxconnections =in;}
406
407	static bool		ShowCatTabInfos() 		{ return s_showCatTabInfos; }
408	static void		ShowCatTabInfos(bool in) 	{ s_showCatTabInfos=in; }
409
410	// Sources Dropping Tweaks
411	static bool		DropNoNeededSources() 		{ return s_NoNeededSources > 0; }
412	static bool		SwapNoNeededSources() 		{ return s_NoNeededSources == 2; }
413	static uint8		GetNoNeededSources()		{ return s_NoNeededSources; }
414	static void		SetNoNeededSources(uint8 val)	{ s_NoNeededSources = val; }
415	static bool		DropFullQueueSources() 		{ return s_DropFullQueueSources; }
416	static void		SetDropFullQueueSources(bool val) { s_DropFullQueueSources = val; }
417	static bool		DropHighQueueRankingSources() 	{ return s_DropHighQueueRankingSources; }
418	static void		SetDropHighQueueRankingSources(bool val) { s_DropHighQueueRankingSources = val; }
419	static uint32		HighQueueRanking() 		{ return s_HighQueueRanking; }
420	static void		SetHighQueueRanking(uint32 val)	{ s_HighQueueRanking = val; }
421	static uint32		GetAutoDropTimer() 		{ return s_AutoDropTimer; }
422	static void		SetAutoDropTimer(uint32 val)	{ s_AutoDropTimer = val; }
423
424	// External Connections
425	static bool 		AcceptExternalConnections()	{ return s_AcceptExternalConnections; }
426	static void			EnableExternalConnections( bool val ) { s_AcceptExternalConnections = val; }
427	static const wxString&	GetECAddress()			{ return s_ECAddr; }
428	static uint32 		ECPort()			{ return s_ECPort; }
429	static void			SetECPort(uint32 val) { s_ECPort = val; }
430	static const wxString&	ECPassword()			{ return s_ECPassword; }
431	static void		SetECPass(const wxString& pass)	{ s_ECPassword = pass; }
432	static bool		IsTransmitOnlyUploadingClients() { return s_TransmitOnlyUploadingClients; }
433
434	// Fast ED2K Links Handler Toggling
435	static bool 		GetFED2KLH()			{ return s_FastED2KLinksHandler; }
436
437	// Ip filter
438	static bool		IsFilteringClients()		{ return s_IPFilterClients; }
439	static void		SetFilteringClients(bool val);
440	static bool		IsFilteringServers()		{ return s_IPFilterServers; }
441	static void		SetFilteringServers(bool val);
442	static uint8		GetIPFilterLevel()		{ return s_filterlevel;}
443	static void		SetIPFilterLevel(uint8 level);
444	static bool		IPFilterAutoLoad()		{ return s_IPFilterAutoLoad; }
445	static void		SetIPFilterAutoLoad(bool val)	{ s_IPFilterAutoLoad = val; }
446	static const wxString&	IPFilterURL()			{ return s_IPFilterURL; }
447	static void		SetIPFilterURL(const wxString& url)	{ s_IPFilterURL = url; }
448	static bool		UseIPFilterSystem()		{ return s_IPFilterSys; }
449	static void		SetIPFilterSystem(bool val)	{ s_IPFilterSys = val; }
450
451	// Source seeds On/Off
452	static bool		GetSrcSeedsOn() 			{ return s_UseSrcSeeds; }
453	static void		SetSrcSeedsOn(bool val)		{ s_UseSrcSeeds = val; }
454
455	static bool		IsSecureIdentEnabled()			{ return s_SecIdent; }
456	static void		SetSecureIdentEnabled(bool val)	{ s_SecIdent = val; }
457
458	static bool		GetExtractMetaData()			{ return s_ExtractMetaData; }
459	static void		SetExtractMetaData(bool val)	{ s_ExtractMetaData = val; }
460
461	static bool		ShowProgBar()			{ return s_ProgBar; }
462	static bool		ShowPercent()			{ return s_Percent; }
463
464	static bool		GetAllocFullFile()		{ return s_allocFullFile; };
465	static void		SetAllocFullFile(bool val)	{ s_allocFullFile = val; }
466
467	static wxString 	GetBrowser();
468
469	static const wxString&	GetSkin()			{ return s_Skin; }
470
471	static bool		VerticalToolbar()		{ return s_ToolbarOrientation; }
472
473	static const CPath&	GetOSDir()			{ return s_OSDirectory; }
474	static uint16		GetOSUpdate()			{ return s_OSUpdate; }
475
476	static uint8		GetToolTipDelay()		{ return s_iToolDelayTime; }
477
478	static void		UnsetAutoServerStart();
479	static void		CheckUlDlRatio();
480
481	static void BuildItemList( const wxString& appdir );
482	static void EraseItemList();
483
484	static void LoadAllItems(wxConfigBase* cfg);
485	static void SaveAllItems(wxConfigBase* cfg);
486
487#ifndef __SVN__
488	static bool		ShowVersionOnTitle()		{ return s_showVersionOnTitle; }
489#else
490	static bool		ShowVersionOnTitle()		{ return true; }
491#endif
492	static uint8_t		GetShowRatesOnTitle()		{ return s_showRatesOnTitle; }
493	static void		SetShowRatesOnTitle(uint8_t val) { s_showRatesOnTitle = val; }
494
495	// Message Filters
496
497	static bool		MustFilterMessages()		{ return s_MustFilterMessages; }
498	static void		SetMustFilterMessages(bool val)	{ s_MustFilterMessages = val; }
499	static bool		IsFilterAllMessages()		{ return s_FilterAllMessages; }
500	static void		SetFilterAllMessages(bool val)	{ s_FilterAllMessages = val; }
501	static bool		MsgOnlyFriends() 		{ return s_msgonlyfriends;}
502	static void		SetMsgOnlyFriends(bool val)	{ s_msgonlyfriends = val; }
503	static bool		MsgOnlySecure() 		{ return s_msgsecure;}
504	static void		SetMsgOnlySecure(bool val)	{ s_msgsecure = val; }
505	static bool		IsFilterByKeywords()		{ return s_FilterSomeMessages; }
506	static void		SetFilterByKeywords(bool val)	{ s_FilterSomeMessages = val; }
507	static const wxString&	GetMessageFilterString()	{ return s_MessageFilterString; }
508	static void		SetMessageFilterString(const wxString& val) { s_MessageFilterString = val; }
509	static bool		IsMessageFiltered(const wxString& message);
510	static bool		ShowMessagesInLog()		{ return s_ShowMessagesInLog; }
511	static bool		IsAdvancedSpamfilterEnabled()	{ return s_IsAdvancedSpamfilterEnabled;}
512	static bool		IsChatCaptchaEnabled()	{ return IsAdvancedSpamfilterEnabled() && s_IsChatCaptchaEnabled; }
513
514	static bool		FilterComments()		{ return s_FilterComments; }
515	static void		SetFilterComments(bool val)	{ s_FilterComments = val; }
516	static const wxString&	GetCommentFilterString()	{ return s_CommentFilterString; }
517	static void		SetCommentFilterString(const wxString& val) { s_CommentFilterString = val; }
518	static bool		IsCommentFiltered(const wxString& comment);
519
520	// Can't have it return a reference, will need a pointer later.
521	static const CProxyData *GetProxyData()			{ return &s_ProxyData; }
522
523	// Hidden files
524
525	static bool ShareHiddenFiles() { return s_ShareHiddenFiles; }
526	static void SetShareHiddenFiles(bool val) { s_ShareHiddenFiles = val; }
527
528	static bool AutoSortDownload()		{ return s_AutoSortDownload; }
529	static bool AutoSortDownload(bool val)	{ bool tmp = s_AutoSortDownload; s_AutoSortDownload = val; return tmp; }
530
531	// Version check
532
533	static bool GetCheckNewVersion() { return s_NewVersionCheck; }
534	static void SetCheckNewVersion(bool val) { s_NewVersionCheck = val; }
535
536	// Networks
537	static bool GetNetworkKademlia()		{ return s_ConnectToKad; }
538	static void SetNetworkKademlia(bool val)	{ s_ConnectToKad = val; }
539	static bool GetNetworkED2K()			{ return s_ConnectToED2K; }
540	static void SetNetworkED2K(bool val)		{ s_ConnectToED2K = val; }
541
542	// Statistics
543	static unsigned		GetMaxClientVersions()		{ return s_maxClientVersions; }
544
545	// Dropping slow sources
546	static bool GetDropSlowSources()					{ return s_DropSlowSources; }
547
548	// server.met and nodes.dat urls
549	static const wxString& GetKadNodesUrl() { return s_KadURL; }
550	static void SetKadNodesUrl(const wxString& url) { s_KadURL = url; }
551
552	static const wxString& GetEd2kServersUrl() { return s_Ed2kURL; }
553	static void SetEd2kServersUrl(const wxString& url) { s_Ed2kURL = url; }
554
555	// Crypt
556	static bool		IsClientCryptLayerSupported()		{return s_IsClientCryptLayerSupported;}
557	static bool		IsClientCryptLayerRequested()		{return IsClientCryptLayerSupported() && s_bCryptLayerRequested;}
558	static bool		IsClientCryptLayerRequired()		{return IsClientCryptLayerRequested() && s_IsClientCryptLayerRequired;}
559	static bool		IsClientCryptLayerRequiredStrict()	{return false;} // not even incoming test connections will be answered
560	static bool		IsServerCryptLayerUDPEnabled()		{return IsClientCryptLayerSupported();}
561	static bool		IsServerCryptLayerTCPRequested()	{return IsClientCryptLayerRequested();}
562	static bool		IsServerCryptLayerTCPRequired()		{return IsClientCryptLayerRequired();}
563	static uint32	GetKadUDPKey()						{return s_dwKadUDPKey;}
564	static uint8	GetCryptTCPPaddingLength()			{return s_byCryptTCPPaddingLength;}
565
566	static void		SetClientCryptLayerSupported(bool v)	{s_IsClientCryptLayerSupported = v;}
567	static void		SetClientCryptLayerRequested(bool v)	{s_bCryptLayerRequested = v; }
568	static void		SetClientCryptLayerRequired(bool v)		{s_IsClientCryptLayerRequired = v;}
569
570	// GeoIP
571	static bool				IsGeoIPEnabled()		{return s_GeoIPEnabled;}
572	static void				SetGeoIPEnabled(bool v)	{s_GeoIPEnabled = v;}
573	static const wxString&	GetGeoIPUpdateUrl()		{return s_GeoIPUpdateUrl;}
574
575	// Stats server
576	static const wxString&	GetStatsServerName()		{return s_StatsServerName;}
577	static const wxString&	GetStatsServerURL()		{return s_StatsServerURL;}
578
579	// HTTP download
580	static wxString	GetLastHTTPDownloadURL(uint8 t);
581	static void		SetLastHTTPDownloadURL(uint8 t, const wxString& val);
582
583	// Sleep
584	static bool		GetPreventSleepWhileDownloading() { return s_preventSleepWhileDownloading; }
585	static void		SetPreventSleepWhileDownloading(bool status) { s_preventSleepWhileDownloading = status; }
586protected:
587	static	int32 GetRecommendedMaxConnections();
588
589	//! Temporary storage for statistic-colors.
590	static unsigned long	s_colors[cntStatColors];
591	//! Reference for checking if the colors has changed.
592	static unsigned long	s_colors_ref[cntStatColors];
593
594	typedef std::vector<Cfg_Base*>			CFGList;
595	typedef std::map<int, Cfg_Base*>		CFGMap;
596	typedef std::vector<Category_Struct*>	CatList;
597
598
599	static CFGMap	s_CfgList;
600	static CFGList	s_MiscList;
601	CatList			m_CatList;
602
603private:
604	void LoadPreferences();
605	void SavePreferences();
606
607protected:
608////////////// USER
609	static wxString	s_nick;
610
611	static CMD4Hash s_userhash;
612
613	static Cfg_Lang_Base * s_cfgLang;
614
615////////////// CONNECTION
616	static uint16	s_maxupload;
617	static uint16	s_maxdownload;
618	static uint16	s_slotallocation;
619	static wxString s_Addr;
620	static uint16	s_port;
621	static uint16	s_udpport;
622	static bool	s_UDPEnable;
623	static uint16	s_maxconnections;
624	static bool	s_reconnect;
625	static bool	s_autoconnect;
626	static bool	s_autoconnectstaticonly;
627	static bool	s_UPnPEnabled;
628	static bool	s_UPnPECEnabled;
629	static bool	s_UPnPWebServerEnabled;
630	static uint16	s_UPnPTCPPort;
631
632////////////// PROXY
633	static CProxyData s_ProxyData;
634
635////////////// SERVERS
636	static bool	s_autoserverlist;
637	static bool	s_deadserver;
638
639////////////// FILES
640	static CPath	s_incomingdir;
641	static CPath	s_tempdir;
642	static bool	s_ICH;
643	static bool	s_AICHTrustEveryHash;
644
645////////////// GUI
646	static uint8	s_depth3D;
647
648	static bool	s_scorsystem;
649	static bool	s_hideonclose;
650	static bool	s_mintotray;
651	static bool	s_trayiconenabled;
652	static bool	s_addnewfilespaused;
653	static bool	s_addserversfromserver;
654	static bool	s_addserversfromclient;
655	static uint16	s_maxsourceperfile;
656	static uint16	s_trafficOMeterInterval;
657	static uint16	s_statsInterval;
658	static uint32	s_maxGraphDownloadRate;
659	static uint32	s_maxGraphUploadRate;
660	static bool	s_confirmExit;
661
662
663	static bool	s_filterLanIP;
664	static bool	s_paranoidfilter;
665	static bool	s_onlineSig;
666
667	static wxString	s_languageID;
668	static uint8	s_iSeeShares;		// 0=everybody 1=friends only 2=noone
669	static uint8	s_iToolDelayTime;	// tooltip delay time in seconds
670	static uint8	s_splitterbarPosition;
671	static uint16	s_deadserverretries;
672	static uint32	s_dwServerKeepAliveTimeoutMins;
673
674	static uint8	s_statsMax;
675	static uint8	s_statsAverageMinutes;
676
677	static bool	s_bpreviewprio;
678	static bool	s_smartidcheck;
679	static uint8	s_smartidstate;
680	static bool	s_safeServerConnect;
681	static bool	s_startMinimized;
682	static uint16	s_MaxConperFive;
683	static bool	s_checkDiskspace;
684	static uint32 	s_uMinFreeDiskSpace;
685	static wxString	s_yourHostname;
686	static bool	s_bVerbose;
687	static bool	s_bmanualhighprio;
688	static bool	s_bstartnextfile;
689	static bool	s_bstartnextfilesame;
690	static bool	s_bstartnextfilealpha;
691	static bool	s_bshowoverhead;
692	static bool	s_bDAP;
693	static bool	s_bUAP;
694
695#ifndef __SVN__
696	static bool	s_showVersionOnTitle;
697#endif
698	static uint8_t	s_showRatesOnTitle;	// 0=no, 1=after app name, 2=before app name
699
700	static wxString	s_VideoPlayer;
701	static bool	s_showAllNotCats;
702
703	static bool	s_msgonlyfriends;
704	static bool	s_msgsecure;
705
706	static uint8	s_iFileBufferSize;
707	static uint8	s_iQueueSize;
708
709	static wxString	s_datetimeformat;
710
711	static bool	s_ToolbarOrientation;
712
713	// Web Server [kuchin]
714	static wxString	s_sWebPassword;
715	static wxString	s_sWebPath;
716	static wxString	s_sWebLowPassword;
717	static uint16	s_nWebPort;
718	static uint16	s_nWebUPnPTCPPort;
719	static bool	s_bWebEnabled;
720	static bool	s_bWebUseGzip;
721	static uint32	s_nWebPageRefresh;
722	static bool	s_bWebLowEnabled;
723	static wxString s_WebTemplate;
724
725	static bool	s_showCatTabInfos;
726	static AllCategoryFilter s_allcatFilter;
727
728	// Madcat - Sources Dropping Tweaks
729	static uint8	s_NoNeededSources; // 0: Keep, 1: Drop, 2:Swap
730	static bool	s_DropFullQueueSources;
731	static bool	s_DropHighQueueRankingSources;
732	static uint32	s_HighQueueRanking;
733	static uint32	s_AutoDropTimer;
734
735	// Kry - external connections
736	static bool 	s_AcceptExternalConnections;
737	static wxString s_ECAddr;
738	static uint32	s_ECPort;
739	static wxString	s_ECPassword;
740	static bool		s_TransmitOnlyUploadingClients;
741
742	// Kry - IPFilter
743	static bool	s_IPFilterClients;
744	static bool	s_IPFilterServers;
745	static uint8	s_filterlevel;
746	static bool	s_IPFilterAutoLoad;
747	static wxString s_IPFilterURL;
748	static bool	s_IPFilterSys;
749
750	// Kry - Source seeds on/off
751	static bool	s_UseSrcSeeds;
752
753	static bool	s_ProgBar;
754	static bool	s_Percent;
755
756	static bool s_SecIdent;
757
758	static bool	s_ExtractMetaData;
759
760	static bool	s_allocFullFile;
761
762	static wxString	s_CustomBrowser;
763	static bool	s_BrowserTab;     // Jacobo221 - Open in tabs if possible
764
765	static CPath	s_OSDirectory;
766	static uint16	s_OSUpdate;
767
768	static wxString	s_Skin;
769
770	static bool	s_FastED2KLinksHandler;	// Madcat - Toggle Fast ED2K Links Handler
771
772	// Message Filtering
773	static bool 		s_MustFilterMessages;
774	static wxString 	s_MessageFilterString;
775	static bool		s_FilterAllMessages;
776	static bool		s_FilterSomeMessages;
777	static bool		s_ShowMessagesInLog;
778	static bool		s_IsAdvancedSpamfilterEnabled;
779	static bool		s_IsChatCaptchaEnabled;
780
781	static bool 		s_FilterComments;
782	static wxString 	s_CommentFilterString;
783
784
785	// Hidden files sharing
786	static bool	s_ShareHiddenFiles;
787
788	static bool s_AutoSortDownload;
789
790	// Version check
791	static bool s_NewVersionCheck;
792
793	// Kad
794	static bool s_ConnectToKad;
795	static bool s_ConnectToED2K;
796
797	// Statistics
798	static	unsigned	s_maxClientVersions;	// 0 = unlimited
799
800	// Drop slow sources if needed
801	static bool s_DropSlowSources;
802
803	static wxString s_Ed2kURL;
804	static wxString s_KadURL;
805
806	// Crypt
807	static bool s_IsClientCryptLayerSupported;
808	static bool s_IsClientCryptLayerRequired;
809	static bool s_bCryptLayerRequested;
810	static uint32	s_dwKadUDPKey;
811	static uint8 s_byCryptTCPPaddingLength;
812
813	// GeoIP
814	static bool s_GeoIPEnabled;
815	static wxString s_GeoIPUpdateUrl;
816
817	// Sleep vetoing
818	static bool s_preventSleepWhileDownloading;
819
820	// Stats server
821	static wxString s_StatsServerName;
822	static wxString s_StatsServerURL;
823};
824
825
826#endif // PREFERENCES_H
827// File_checked_for_headers
828