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

Last change on this file since 130 was 130, checked in by jrpelegrina, 4 years ago

First release to xenial

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 <mutex.h>
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
98        // Default/internal options
99        OPTION_DEFAULT_SETTINGSDIR, // guaranteed to be (back)slash-terminated
100        OPTION_DEFAULT_KIOSKMODE,
101        OPTION_DEFAULT_DISABLEUPDATECHECK,
102
103        // Has to be last element
104        OPTIONS_NUM
105};
106
107struct t_OptionsCache
108{
109        bool operator==(wxString const& v) const { return strValue == v; }
110        bool operator==(int v) const { return numValue == v; }
111        t_OptionsCache& operator=(wxString const& v);
112        t_OptionsCache& operator=(int v);
113
114        bool from_default;
115        int numValue;
116        wxString strValue;
117};
118
119class CXmlFile;
120class COptions : public wxEvtHandler, public COptionsBase
121{
122public:
123        virtual int GetOptionVal(unsigned int nID);
124        virtual wxString GetOption(unsigned int nID);
125
126        virtual bool SetOption(unsigned int nID, int value);
127        virtual bool SetOption(unsigned int nID, wxString const& value);
128
129        bool OptionFromFzDefaultsXml(unsigned int nID);
130
131        void SetLastServer(const CServer& server);
132        bool GetLastServer(CServer& server);
133
134        static COptions* Get();
135        static void Init();
136        static void Destroy();
137
138        void Import(pugi::xml_node element);
139
140        void SaveIfNeeded();
141
142        static CLocalPath GetUnadjustedSettingsDir();
143
144protected:
145        COptions();
146        virtual ~COptions();
147
148        int Validate(unsigned int nID, int value);
149        wxString Validate(unsigned int nID, wxString const& value);
150
151        template<typename T> void ContinueSetOption(unsigned int nID, T const& value);
152        void SetXmlValue(unsigned int nID, int value);
153        void SetXmlValue(unsigned int nID, wxString const& value);
154
155        // path is element path below document root, separated by slashes
156        void SetServer(wxString path, const CServer& server);
157        bool GetServer(wxString path, CServer& server);
158
159        pugi::xml_node CreateSettingsXmlElement();
160
161        std::map<std::string, unsigned int> GetNameOptionMap() const;
162        void LoadOptions(std::map<std::string, unsigned int> const& nameOptionMap, pugi::xml_node settings = pugi::xml_node());
163        void LoadGlobalDefaultOptions(std::map<std::string, unsigned int> const& nameOptionMap);
164        void LoadOptionFromElement(pugi::xml_node option, std::map<std::string, unsigned int> const& nameOptionMap, bool allowDefault);
165        CLocalPath InitSettingsDir();
166        void SetDefaultValues();
167
168        void Save();
169
170        void NotifyChangedOptions();
171
172        CXmlFile* m_pXmlFile;
173
174        t_OptionsCache m_optionsCache[OPTIONS_NUM];
175
176        CServer* m_pLastServer;
177
178        static COptions* m_theOptions;
179
180        wxTimer m_save_timer;
181
182        DECLARE_EVENT_TABLE()
183        void OnTimer(wxTimerEvent& event);
184
185        mutex m_sync_;
186
187        changed_options_t changedOptions_;
188};
189
190#endif //__OPTIONS_H__
Note: See TracBrowser for help on using the repository browser.