1 #ifndef FILEZILLA_INTERFACE_OPTIONS_HEADER
2 #define FILEZILLA_INTERFACE_OPTIONS_HEADER
3 
4 #include "../include/local_path.h"
5 #include "../include/engine_options.h"
6 
7 #include <libfilezilla/mutex.hpp>
8 
9 #include <wx/timer.h>
10 
11 enum interfaceOptions
12 {
13 	// Default/internal options
14 	OPTION_DEFAULT_SETTINGSDIR, // guaranteed to be (back)slash-terminated
15 	OPTION_DEFAULT_KIOSKMODE,
16 	OPTION_DEFAULT_CACHE_DIR,
17 
18 	OPTION_NUMTRANSFERS,
19 	OPTION_ASCIIBINARY,
20 	OPTION_ASCIIFILES,
21 	OPTION_ASCIINOEXT,
22 	OPTION_ASCIIDOTFILE,
23 	OPTION_LANGUAGE,
24 	OPTION_CONCURRENTDOWNLOADLIMIT,
25 	OPTION_CONCURRENTUPLOADLIMIT,
26 	OPTION_DEBUG_MENU,
27 	OPTION_FILEEXISTS_DOWNLOAD,
28 	OPTION_FILEEXISTS_UPLOAD,
29 	OPTION_ASCIIRESUME,
30 	OPTION_GREETINGVERSION,
31 	OPTION_GREETINGRESOURCES,
32 	OPTION_ONETIME_DIALOGS,
33 	OPTION_SHOW_TREE_LOCAL,
34 	OPTION_SHOW_TREE_REMOTE,
35 	OPTION_FILEPANE_LAYOUT,
36 	OPTION_FILEPANE_SWAP,
37 	OPTION_FILELIST_DIRSORT,
38 	OPTION_FILELIST_NAMESORT,
39 	OPTION_QUEUE_SUCCESSFUL_AUTOCLEAR,
40 	OPTION_QUEUE_COLUMN_WIDTHS,
41 	OPTION_LOCALFILELIST_COLUMN_WIDTHS,
42 	OPTION_REMOTEFILELIST_COLUMN_WIDTHS,
43 	OPTION_MAINWINDOW_POSITION,
44 	OPTION_MAINWINDOW_SPLITTER_POSITION,
45 	OPTION_LOCALFILELIST_SORTORDER,
46 	OPTION_REMOTEFILELIST_SORTORDER,
47 	OPTION_TIME_FORMAT,
48 	OPTION_DATE_FORMAT,
49 	OPTION_SHOW_MESSAGELOG,
50 	OPTION_SHOW_QUEUE,
51 	OPTION_EDIT_DEFAULTEDITOR,
52 	OPTION_EDIT_ALWAYSDEFAULT,
53 	OPTION_EDIT_CUSTOMASSOCIATIONS,
54 	OPTION_COMPARISONMODE,
55 	OPTION_COMPARISON_THRESHOLD,
56 	OPTION_SITEMANAGER_POSITION,
57 	OPTION_ICONS_THEME,
58 	OPTION_ICONS_SCALE,
59 	OPTION_MESSAGELOG_TIMESTAMP,
60 	OPTION_SITEMANAGER_LASTSELECTED,
61 	OPTION_LOCALFILELIST_COLUMN_SHOWN,
62 	OPTION_REMOTEFILELIST_COLUMN_SHOWN,
63 	OPTION_LOCALFILELIST_COLUMN_ORDER,
64 	OPTION_REMOTEFILELIST_COLUMN_ORDER,
65 	OPTION_FILELIST_STATUSBAR,
66 	OPTION_FILTERTOGGLESTATE,
67 	OPTION_SHOW_QUICKCONNECT,
68 	OPTION_MESSAGELOG_POSITION,
69 	OPTION_DOUBLECLICK_ACTION_FILE,
70 	OPTION_DOUBLECLICK_ACTION_DIRECTORY,
71 	OPTION_MINIMIZE_TRAY,
72 	OPTION_SEARCH_COLUMN_WIDTHS,
73 	OPTION_SEARCH_COLUMN_SHOWN,
74 	OPTION_SEARCH_COLUMN_ORDER,
75 	OPTION_SEARCH_SIZE,
76 	OPTION_COMPARE_HIDEIDENTICAL,
77 	OPTION_SEARCH_SORTORDER,
78 	OPTION_EDIT_TRACK_LOCAL,
79 	OPTION_PREVENT_IDLESLEEP,
80 	OPTION_FILTEREDIT_SIZE,
81 	OPTION_INVALID_CHAR_REPLACE_ENABLE,
82 	OPTION_INVALID_CHAR_REPLACE,
83 	OPTION_ALREADYCONNECTED_CHOICE,
84 	OPTION_EDITSTATUSDIALOG_SIZE,
85 	OPTION_SPEED_DISPLAY,
86 	OPTION_TOOLBAR_HIDDEN,
87 	OPTION_STRIP_VMS_REVISION,
88 	OPTION_STARTUP_ACTION,
89 	OPTION_PROMPTPASSWORDSAVE,
90 	OPTION_PERSISTENT_CHOICES,
91 	OPTION_QUEUE_COMPLETION_ACTION,
92 	OPTION_QUEUE_COMPLETION_COMMAND,
93 	OPTION_DND_DISABLED,
94 	OPTION_DISABLE_UPDATE_FOOTER,
95 	OPTION_MASTERPASSWORDENCRYPTOR,
96 	OPTION_TAB_DATA,
97 	OPTION_SHOWN_OVERLAY,
98 
99 	// Has to be last element
100 	OPTIONS_NUM
101 };
102 
103 unsigned int register_interface_options();
104 
105 optionsIndex mapOption(interfaceOptions opt);
106 
107 class CXmlFile;
108 class COptions final : public wxEvtHandler, public COptionsBase
109 {
110 public:
111 	static COptions* Get();
112 	static void Init();
113 	static void Destroy();
114 
115 	void Import(pugi::xml_node & element);
116 
117 	void Save(bool processChanged = true);
118 
119 	static CLocalPath GetUnadjustedSettingsDir();
120 	CLocalPath GetCacheDirectory();
121 
122 	bool Cleanup(); // Removes all unknown elements from the XML
123 
124 protected:
125 	COptions();
126 	virtual ~COptions();
127 
128 	void Load(pugi::xml_node & settings, bool predefined, bool importing);
129 
130 	pugi::xml_node CreateSettingsXmlElement();
131 
132 	void LoadGlobalDefaultOptions();
133 	CLocalPath InitSettingsDir();
134 
135 	virtual void process_changed(watched_options const& changed) override;
136 	void set_xml_value(pugi::xml_node & settings, size_t opt, bool clean);
137 
138 	virtual void notify_changed() override;
139 
140 	bool dirty_{};
141 	std::unique_ptr<CXmlFile> xmlFile_;
142 
143 	static COptions* m_theOptions;
144 
145 	wxTimer m_save_timer;
146 
147 	DECLARE_EVENT_TABLE()
148 	void OnTimer(wxTimerEvent& event);
149 };
150 
151 #endif
152