source: filezilla/trunk/fuentes/src/interface/Options.h @ 3185

Last change on this file since 3185 was 3185, checked in by jrpelegrina, 2 years ago

Update new version: 3.15.02

File size: 4.9 KB
Line 
1#ifndef __OPTIONS_H__
2#define __OPTIONS_H__
3
4#include "local_path.h"
5
6#include <option_change_event_handler.h>
7
8#include <libfilezilla/mutex.hpp>
9
10#include <wx/timer.h>
11
12#include "xmlfunctions.h"
13
14enum interfaceOptions
15{
16        OPTION_NUMTRANSFERS = OPTIONS_ENGINE_NUM,
17        OPTION_ASCIIBINARY,
18        OPTION_ASCIIFILES,
19        OPTION_ASCIINOEXT,
20        OPTION_ASCIIDOTFILE,
21        OPTION_THEME,
22        OPTION_LANGUAGE,
23        OPTION_LASTSERVERPATH,
24        OPTION_CONCURRENTDOWNLOADLIMIT,
25        OPTION_CONCURRENTUPLOADLIMIT,
26        OPTION_UPDATECHECK,
27        OPTION_UPDATECHECK_INTERVAL,
28        OPTION_UPDATECHECK_LASTDATE,
29        OPTION_UPDATECHECK_NEWVERSION,
30        OPTION_UPDATECHECK_CHECKBETA,
31        OPTION_DEBUG_MENU,
32        OPTION_FILEEXISTS_DOWNLOAD,
33        OPTION_FILEEXISTS_UPLOAD,
34        OPTION_ASCIIRESUME,
35        OPTION_GREETINGVERSION,
36        OPTION_ONETIME_DIALOGS,
37        OPTION_SHOW_TREE_LOCAL,
38        OPTION_SHOW_TREE_REMOTE,
39        OPTION_FILEPANE_LAYOUT,
40        OPTION_FILEPANE_SWAP,
41        OPTION_LASTLOCALDIR,
42        OPTION_FILELIST_DIRSORT,
43        OPTION_FILELIST_NAMESORT,
44        OPTION_QUEUE_SUCCESSFUL_AUTOCLEAR,
45        OPTION_QUEUE_COLUMN_WIDTHS,
46        OPTION_LOCALFILELIST_COLUMN_WIDTHS,
47        OPTION_REMOTEFILELIST_COLUMN_WIDTHS,
48        OPTION_MAINWINDOW_POSITION,
49        OPTION_MAINWINDOW_SPLITTER_POSITION,
50        OPTION_LOCALFILELIST_SORTORDER,
51        OPTION_REMOTEFILELIST_SORTORDER,
52        OPTION_TIME_FORMAT,
53        OPTION_DATE_FORMAT,
54        OPTION_SHOW_MESSAGELOG,
55        OPTION_SHOW_QUEUE,
56        OPTION_EDIT_DEFAULTEDITOR,
57        OPTION_EDIT_ALWAYSDEFAULT,
58        OPTION_EDIT_INHERITASSOCIATIONS,
59        OPTION_EDIT_CUSTOMASSOCIATIONS,
60        OPTION_COMPARISONMODE,
61        OPTION_COMPARISON_THRESHOLD,
62        OPTION_SITEMANAGER_POSITION,
63        OPTION_THEME_ICONSIZE,
64        OPTION_MESSAGELOG_TIMESTAMP,
65        OPTION_SITEMANAGER_LASTSELECTED,
66        OPTION_LOCALFILELIST_COLUMN_SHOWN,
67        OPTION_REMOTEFILELIST_COLUMN_SHOWN,
68        OPTION_LOCALFILELIST_COLUMN_ORDER,
69        OPTION_REMOTEFILELIST_COLUMN_ORDER,
70        OPTION_FILELIST_STATUSBAR,
71        OPTION_FILTERTOGGLESTATE,
72        OPTION_SHOW_QUICKCONNECT,
73        OPTION_MESSAGELOG_POSITION,
74        OPTION_LAST_CONNECTED_SITE,
75        OPTION_DOUBLECLICK_ACTION_FILE,
76        OPTION_DOUBLECLICK_ACTION_DIRECTORY,
77        OPTION_MINIMIZE_TRAY,
78        OPTION_SEARCH_COLUMN_WIDTHS,
79        OPTION_SEARCH_COLUMN_SHOWN,
80        OPTION_SEARCH_COLUMN_ORDER,
81        OPTION_SEARCH_SIZE,
82        OPTION_COMPARE_HIDEIDENTICAL,
83        OPTION_SEARCH_SORTORDER,
84        OPTION_EDIT_TRACK_LOCAL,
85        OPTION_PREVENT_IDLESLEEP,
86        OPTION_FILTEREDIT_SIZE,
87        OPTION_INVALID_CHAR_REPLACE_ENABLE,
88        OPTION_INVALID_CHAR_REPLACE,
89        OPTION_ALREADYCONNECTED_CHOICE,
90        OPTION_EDITSTATUSDIALOG_SIZE,
91        OPTION_SPEED_DISPLAY,
92        OPTION_TOOLBAR_HIDDEN,
93        OPTION_STRIP_VMS_REVISION,
94        OPTION_INTERFACE_SITEMANAGER_ON_STARTUP,
95        OPTION_PROMPTPASSWORDSAVE,
96        OPTION_PERSISTENT_CHOICES,
97        OPTION_SHOW_NOTIFICATION_BUBBLE,
98
99        // Default/internal options
100        OPTION_DEFAULT_SETTINGSDIR, // guaranteed to be (back)slash-terminated
101        OPTION_DEFAULT_KIOSKMODE,
102        OPTION_DEFAULT_DISABLEUPDATECHECK,
103
104        // Has to be last element
105        OPTIONS_NUM
106};
107
108struct t_OptionsCache
109{
110        bool operator==(wxString const& v) const { return strValue == v; }
111        bool operator==(int v) const { return numValue == v; }
112        t_OptionsCache& operator=(wxString const& v);
113        t_OptionsCache& operator=(int v);
114
115        bool from_default;
116        int numValue;
117        wxString strValue;
118};
119
120class CXmlFile;
121class COptions : public wxEvtHandler, public COptionsBase
122{
123public:
124        virtual int GetOptionVal(unsigned int nID);
125        virtual wxString GetOption(unsigned int nID);
126
127        virtual bool SetOption(unsigned int nID, int value);
128        virtual bool SetOption(unsigned int nID, wxString const& value);
129
130        bool OptionFromFzDefaultsXml(unsigned int nID);
131
132        void SetLastServer(const CServer& server);
133        bool GetLastServer(CServer& server);
134
135        static COptions* Get();
136        static void Init();
137        static void Destroy();
138
139        void Import(pugi::xml_node element);
140
141        void SaveIfNeeded();
142
143        static CLocalPath GetUnadjustedSettingsDir();
144
145protected:
146        COptions();
147        virtual ~COptions();
148
149        int Validate(unsigned int nID, int value);
150        wxString Validate(unsigned int nID, wxString const& value);
151
152        template<typename T> void ContinueSetOption(unsigned int nID, T const& value);
153        void SetXmlValue(unsigned int nID, int value);
154        void SetXmlValue(unsigned int nID, wxString const& value);
155
156        // path is element path below document root, separated by slashes
157        void SetServer(wxString path, const CServer& server);
158        bool GetServer(wxString path, CServer& server);
159
160        pugi::xml_node CreateSettingsXmlElement();
161
162        std::map<std::string, unsigned int> GetNameOptionMap() const;
163        void LoadOptions(std::map<std::string, unsigned int> const& nameOptionMap, pugi::xml_node settings = pugi::xml_node());
164        void LoadGlobalDefaultOptions(std::map<std::string, unsigned int> const& nameOptionMap);
165        void LoadOptionFromElement(pugi::xml_node option, std::map<std::string, unsigned int> const& nameOptionMap, bool allowDefault);
166        CLocalPath InitSettingsDir();
167        void SetDefaultValues();
168
169        void Save();
170
171        void NotifyChangedOptions();
172
173        CXmlFile* m_pXmlFile;
174
175        t_OptionsCache m_optionsCache[OPTIONS_NUM];
176
177        CServer* m_pLastServer;
178
179        static COptions* m_theOptions;
180
181        wxTimer m_save_timer;
182
183        DECLARE_EVENT_TABLE()
184        void OnTimer(wxTimerEvent& event);
185
186        fz::mutex m_sync_;
187
188        changed_options_t changedOptions_;
189};
190
191#endif //__OPTIONS_H__
Note: See TracBrowser for help on using the repository browser.