1 ///////////////////////////////////////////////////////////////////////////////
2 // File: steprefs.cpp
3 // Purpose: wxSTEditor Preferences/Styles/Languages initialization
4 // Maintainer:
5 // Created: 2003-04-04
6 // Copyright: (c) John Labenski, Otto Wyss
7 // Licence: wxWidgets licence
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #include "precomp.h"
11
12 #include "wx/stedit/steprefs.h"
13 #include "wx/stedit/stedit.h"
14
15 extern wxSTEditorPrefs s_wxSTEditorPrefs;
16
17 //----------------------------------------------------------------------------
18 // wxSTEditorPrefBase
19 //----------------------------------------------------------------------------
IMPLEMENT_ABSTRACT_CLASS(wxSTEditorPrefBase,wxObject)20 IMPLEMENT_ABSTRACT_CLASS(wxSTEditorPrefBase, wxObject)
21
22 #define M_BASEDATA ((wxSTEditorPrefBase_RefData *)m_refData)
23
24 size_t wxSTEditorPrefBase::GetEditorCount() const
25 {
26 wxCHECK_MSG(IsOk(), 0, wxT("wxSTEditorPrefBase not created"));
27 return M_BASEDATA->m_editors.GetCount();
28 }
29
FindEditor(wxSTEditor * editor) const30 int wxSTEditorPrefBase::FindEditor(wxSTEditor* editor) const
31 {
32 wxCHECK_MSG(IsOk(), wxNOT_FOUND, wxT("wxSTEditorPrefBase not created"));
33 return M_BASEDATA->m_editors.Index(editor);
34 }
35
GetEditor(size_t n) const36 wxSTEditor *wxSTEditorPrefBase::GetEditor(size_t n) const
37 {
38 wxCHECK_MSG(IsOk(), NULL, wxT("wxSTEditorPrefBase not created"));
39 return (wxSTEditor*)M_BASEDATA->m_editors[n];
40 }
41
UpdateAllEditors()42 void wxSTEditorPrefBase::UpdateAllEditors()
43 {
44 wxCHECK_RET(IsOk(), wxT("wxSTEditorPrefBase not created"));
45 size_t n, count = GetEditorCount();
46 for (n = 0; n < count; n++)
47 {
48 //wxPrintf(wxT("wxSTEditorPrefBase::UpdateAllEditors %ld editor %ld\n"), (long)this, (long)M_BASEDATA->m_editors[n]);
49 UpdateEditor((wxSTEditor*)M_BASEDATA->m_editors[n]);
50 }
51 }
52
RegisterEditor(wxSTEditor * editor,bool update_now)53 void wxSTEditorPrefBase::RegisterEditor(wxSTEditor *editor, bool update_now)
54 {
55 wxCHECK_RET(IsOk(), wxT("wxSTEditorPrefBase not created"));
56 wxCHECK_RET(editor, wxT("Invalid editor"));
57
58 // not an error, just let them do it to avoid having to check
59 if (!HasEditor(editor))
60 M_BASEDATA->m_editors.Add(editor);
61
62 if (update_now)
63 UpdateEditor(editor);
64 }
RemoveEditor(wxSTEditor * editor)65 void wxSTEditorPrefBase::RemoveEditor(wxSTEditor *editor)
66 {
67 wxCHECK_RET(IsOk(), wxT("wxSTEditorPrefBase not created"));
68 wxCHECK_RET(editor, wxT("Invalid editor"));
69
70 // not an error, if not found allows for this to be called in destructor
71 int index = FindEditor(editor);
72 if (index != wxNOT_FOUND)
73 M_BASEDATA->m_editors.RemoveAt(index);
74 }
75
76 //----------------------------------------------------------------------------
77 // wxSTEditorPref_RefData
78 //----------------------------------------------------------------------------
79
80 static wxArrayString s_STE_PrefNames;
81 static wxArrayString s_STE_PrefValues;
82 static wxArrayInt s_STE_PrefFlags;
83
84 class wxSTEditorPref_RefData : public wxSTEditorPrefBase_RefData
85 {
86 public:
wxSTEditorPref_RefData()87 wxSTEditorPref_RefData()
88 {
89 m_prefs = s_STE_PrefValues;
90 m_lineNumberAutoWidth = -1;
91 }
92
93 wxArrayString m_prefs;
94 wxString m_lineNumberStyle;
95 int m_lineNumberAutoWidth;
96 };
97
98 #define M_PREFDATA ((wxSTEditorPref_RefData *)m_refData)
99
100 //----------------------------------------------------------------------------
101 // wxSTEditorPrefs
102 //----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxSTEditorPrefs,wxSTEditorPrefBase)103 IMPLEMENT_DYNAMIC_CLASS(wxSTEditorPrefs, wxSTEditorPrefBase)
104
105 wxSTEditorPrefs& wxSTEditorPrefs::GetGlobalEditorPrefs()
106 {
107 return s_wxSTEditorPrefs;
108 }
109
Init()110 void wxSTEditorPrefs::Init()
111 {
112 if (s_STE_PrefNames.GetCount() != 0) return; // only add once
113
114 // sanity check, run in debug mode only
115 wxASSERT_MSG(ID_STE_PREF__LAST-ID_STE_PREF__FIRST == STE_PREF__MAX - 1,
116 wxT("The ID_STE_PREF_XXX count != STE_PREF_XXX count"));
117
118 s_STE_PrefNames.Alloc(STE_PREF__MAX);
119 s_STE_PrefValues.Alloc(STE_PREF__MAX);
120 s_STE_PrefFlags.Alloc(STE_PREF__MAX);
121
122 AddInitPref(wxT("Highlight Syntax"), 1, STE_PREF_FLAG_BOOL);
123 AddInitPref(wxT("Highlight Preprocessor"), 1, STE_PREF_FLAG_BOOL);
124 AddInitPref(wxT("Highlight Braces"), 1, STE_PREF_FLAG_BOOL);
125 AddInitPref(wxT("Load Init Language"), 1, STE_PREF_FLAG_BOOL);
126 AddInitPref(wxT("Load Unicode"), STE_LOAD_DEFAULT, STE_PREF_FLAG_INT);
127 AddInitPref(wxT("Wrap Mode"), wxSTC_WRAP_NONE, STE_PREF_FLAG_INT);
128 AddInitPref(wxT("Wrap Visual Flags"), wxSTC_WRAPVISUALFLAG_END, STE_PREF_FLAG_INT);
129 AddInitPref(wxT("Wrap Visual Flags Location"), wxSTC_WRAPVISUALFLAGLOC_DEFAULT, STE_PREF_FLAG_INT);
130 AddInitPref(wxT("Wrap Start Indent"), 0, STE_PREF_FLAG_INT);
131 AddInitPref(wxT("Zoom"), 0, STE_PREF_FLAG_INT);
132 AddInitPref(wxT("View EOL"), 0, STE_PREF_FLAG_BOOL);
133 AddInitPref(wxT("View Whitespace"), wxSTC_WS_INVISIBLE, STE_PREF_FLAG_INT);
134 AddInitPref(wxT("Indent Guides"), 1, STE_PREF_FLAG_BOOL);
135 AddInitPref(wxT("Edge Mode"), wxSTC_EDGE_LINE, STE_PREF_FLAG_INT);
136 AddInitPref(wxT("Edge Column"), 80, STE_PREF_FLAG_INT);
137 AddInitPref(wxT("View Line Margin"), 0, STE_PREF_FLAG_BOOL);
138 AddInitPref(wxT("View Marker Margin"), 0, STE_PREF_FLAG_BOOL);
139 AddInitPref(wxT("View Fold Margin"), 1, STE_PREF_FLAG_BOOL);
140 AddInitPref(wxT("Use Tabs"), 0, STE_PREF_FLAG_BOOL);
141 AddInitPref(wxT("Tab Indents"), 1, STE_PREF_FLAG_BOOL);
142 AddInitPref(wxT("Tab Width"), 4, STE_PREF_FLAG_INT);
143 AddInitPref(wxT("Indent Width"), 4, STE_PREF_FLAG_INT);
144 AddInitPref(wxT("BackSpace Unindents"), 1, STE_PREF_FLAG_BOOL);
145 AddInitPref(wxT("Auto Indent"), 1, STE_PREF_FLAG_BOOL);
146 AddInitPref(wxT("Caret Line Visible"), 1, STE_PREF_FLAG_BOOL);
147 AddInitPref(wxT("Caret Width"), 1, STE_PREF_FLAG_INT);
148 AddInitPref(wxT("Caret Period"), 500, STE_PREF_FLAG_INT);
149 AddInitPref(wxT("Caret Policy X"), wxSTC_CARET_EVEN|wxSTC_VISIBLE_STRICT|wxSTC_CARET_SLOP, STE_PREF_FLAG_INT);
150 AddInitPref(wxT("Caret Policy Y"), wxSTC_CARET_EVEN|wxSTC_VISIBLE_STRICT|wxSTC_CARET_SLOP, STE_PREF_FLAG_INT);
151 AddInitPref(wxT("Caret Slop X"), 1, STE_PREF_FLAG_INT);
152 AddInitPref(wxT("Caret Slop Y"), 1, STE_PREF_FLAG_INT);
153 AddInitPref(wxT("Visible Policy"), wxSTC_VISIBLE_STRICT|wxSTC_VISIBLE_SLOP, STE_PREF_FLAG_INT);
154 AddInitPref(wxT("Visible Slop"), 1, STE_PREF_FLAG_INT);
155 AddInitPref(wxT("EOL Mode"),
156 #if defined(__WXMSW__) || defined(__WXPM__)
157 wxSTC_EOL_CRLF, STE_PREF_FLAG_INT);
158 #elif defined(__WXMAC__) && !defined(__DARWIN__)
159 wxSTC_EOL_CR, STE_PREF_FLAG_INT);
160 #else
161 wxSTC_EOL_LF, STE_PREF_FLAG_INT);
162 #endif
163 AddInitPref(wxT("Selection mode"), -1, STE_PREF_FLAG_INT);
164 AddInitPref(wxT("Print Magnification"), -2, STE_PREF_FLAG_INT);
165 AddInitPref(wxT("Print Colour Mode"), wxSTC_PRINT_COLOURONWHITE, STE_PREF_FLAG_INT);
166 AddInitPref(wxT("Print Wrap Mode"), wxSTC_WRAP_WORD, STE_PREF_FLAG_INT);
167 AddInitPref(wxT("Print Linenumbers"), STE_PRINT_LINENUMBERS_DEFAULT, STE_PREF_FLAG_INT);
168 AddInitPref(wxT("Fold Flags"), wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED|wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED, STE_PREF_FLAG_INT); //wxSTC_FOLDFLAG_LEVELNUMBERS
169 AddInitPref(wxT("Fold Styles"), STE_FOLD_STYLE_DEFAULT, STE_PREF_FLAG_INT);
170 AddInitPref(wxT("Fold Margin Style"), STE_FOLDMARGIN_STYLE_SQUARES, STE_PREF_FLAG_INT);
171 AddInitPref(wxT("Buffered Draw"), 1, STE_PREF_FLAG_BOOL);
172 AddInitPref(wxT("Two Phase Draw"), 0, STE_PREF_FLAG_BOOL);
173 // DO NOT USE page cache in wxWidgets < 2.5.4, leads to a crash eventually Need Scintilla 1.61
174 AddInitPref(wxT("Layout Cache"),
175 wxSTC_CACHE_PAGE, STE_PREF_FLAG_INT);
176 AddInitPref(wxT("Use Antialiasing"), 1, STE_PREF_FLAG_BOOL);
177
178 AddInitPref(wxT("Save Remove Trailing Whitespace"), 0, STE_PREF_FLAG_BOOL);
179 AddInitPref(wxT("Save Convert EOL"), 0, STE_PREF_FLAG_BOOL);
180
181
182 AddInitPref(wxT("Horizontal Scrollbar"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
183 AddInitPref(wxT("Vertical Scrollbar"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
184 AddInitPref(wxT("Margin0 Type"), wxSTC_MARGIN_NUMBER, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
185 AddInitPref(wxT("Margin1 Type"), wxSTC_MARGIN_SYMBOL, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
186 AddInitPref(wxT("Margin2 Type"), wxSTC_MARGIN_SYMBOL, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
187 AddInitPref(wxT("Margin0 Width"), -1, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
188 AddInitPref(wxT("Margin1 Width"), 16, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
189 AddInitPref(wxT("Margin2 Width"), 16, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
190 AddInitPref(wxT("Margin0 Mask"), 0, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
191 AddInitPref(wxT("Margin1 Mask"), ~wxSTC_MASK_FOLDERS, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
192 AddInitPref(wxT("Margin2 Mask"), wxSTC_MASK_FOLDERS, STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
193 AddInitPref(wxT("Margin0 Sensitive"), 0, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
194 AddInitPref(wxT("Margin1 Sensitive"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
195 AddInitPref(wxT("Margin2 Sensitive"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
196
197 AddInitPref(wxT("Bookmark Margin1 DClick"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
198
199 AddInitPref(wxT("Auto Completion Stops"), wxT(" ()[]{}<>:;.?"), STE_PREF_FLAG_STRING|STE_PREF_FLAG_NOCONFIG);
200 AddInitPref(wxT("Auto Completion Separator"), int(' '), STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
201 AddInitPref(wxT("Auto Completion FillUps"), wxEmptyString, STE_PREF_FLAG_STRING|STE_PREF_FLAG_NOCONFIG);
202 AddInitPref(wxT("Auto Completion Cancel at Start"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
203 AddInitPref(wxT("Auto Completion Choose Single"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
204 AddInitPref(wxT("Auto Completion Ignore Case"), 0, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
205 AddInitPref(wxT("Auto Completion Auto Hide"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
206 AddInitPref(wxT("Auto Completion Drop Rest of Word"), 1, STE_PREF_FLAG_BOOL|STE_PREF_FLAG_NOCONFIG);
207 AddInitPref(wxT("Auto Completion Type Separator"), int('?'), STE_PREF_FLAG_INT|STE_PREF_FLAG_NOCONFIG);
208
209 wxASSERT(s_STE_PrefNames.GetCount() == STE_PREF__MAX);
210 }
211
GetPrefName(size_t pref_n) const212 wxString wxSTEditorPrefs::GetPrefName(size_t pref_n) const
213 {
214 wxCHECK_MSG(pref_n < GetInitPrefCount(), wxEmptyString,
215 wxT("Invalid pref id in wxSTEditorPrefs::GetPrefName"));
216 return s_STE_PrefNames[pref_n];
217 }
SetPrefName(size_t pref_n,const wxString & prefName)218 void wxSTEditorPrefs::SetPrefName(size_t pref_n, const wxString& prefName)
219 {
220 wxCHECK_RET(pref_n < GetInitPrefCount(),
221 wxT("Invalid pref id in wxSTEditorPrefs::SetPrefName"));
222 s_STE_PrefNames[pref_n] = prefName;
223 }
224
GetPrefFlags(size_t pref_n) const225 int wxSTEditorPrefs::GetPrefFlags(size_t pref_n) const
226 {
227 wxCHECK_MSG(pref_n < GetInitPrefCount(), 0,
228 wxT("Invalid pref id in wxSTEditorPrefs::GetPrefFlags"));
229 return s_STE_PrefFlags[pref_n];
230 }
SetPrefFlags(size_t pref_n,int flags)231 void wxSTEditorPrefs::SetPrefFlags(size_t pref_n, int flags)
232 {
233 wxCHECK_RET(pref_n < GetInitPrefCount(),
234 wxT("Invalid pref id in wxSTEditorPrefs::SetPrefFlags"));
235 s_STE_PrefFlags[pref_n] = flags;
236 }
237
GetInitPrefValue(size_t pref_n) const238 wxString wxSTEditorPrefs::GetInitPrefValue(size_t pref_n) const
239 {
240 wxCHECK_MSG(pref_n < GetInitPrefCount(), wxEmptyString,
241 wxT("Invalid pref id in wxSTEditorPrefs::GetInitPrefValue"));
242 return s_STE_PrefValues[pref_n];
243 }
SetInitPrefValue(size_t pref_n,const wxString & value) const244 void wxSTEditorPrefs::SetInitPrefValue(size_t pref_n, const wxString& value) const
245 {
246 wxCHECK_RET(pref_n < GetInitPrefCount(),
247 wxT("Invalid pref id in wxSTEditorPrefs::SetInitPrefValue"));
248 s_STE_PrefValues[pref_n] = value;
249 }
250
AddInitPref(const wxString & prefName,const wxString & value,int flags) const251 size_t wxSTEditorPrefs::AddInitPref(const wxString& prefName,
252 const wxString& value, int flags) const
253 {
254 s_STE_PrefNames.Add(prefName);
255 s_STE_PrefValues.Add(value);
256 s_STE_PrefFlags.Add(flags);
257 return s_STE_PrefValues.GetCount() - 1;
258 }
AddInitPref(const wxString & prefName,int value,int flags) const259 size_t wxSTEditorPrefs::AddInitPref(const wxString& prefName, int value, int flags) const
260 {
261 return AddInitPref(prefName, wxString::Format(wxT("%d"), value), flags);
262 }
GetInitPrefCount() const263 size_t wxSTEditorPrefs::GetInitPrefCount() const
264 {
265 return s_STE_PrefValues.GetCount();
266 }
267
Create()268 bool wxSTEditorPrefs::Create()
269 {
270 UnRef();
271 m_refData = new wxSTEditorPref_RefData();
272 return true;
273 }
274
Create(const wxSTEditorPrefs & prefs)275 bool wxSTEditorPrefs::Create(const wxSTEditorPrefs &prefs)
276 {
277 Ref(prefs);
278 return true;
279 }
280
Create(wxSTEditor * editor)281 bool wxSTEditorPrefs::Create(wxSTEditor *editor)
282 {
283 wxCHECK_MSG(editor, false, wxT("Invalid editor in wxSTEditorPrefs::Create"));
284
285 UnRef();
286 m_refData = new wxSTEditorPref_RefData();
287
288 // STE_PREF_HIGHLIGHT_SYNTAX
289 // STE_PREF_HIGHLIGHT_PREPROC
290 // STE_PREF_HIGHLIGHT_BRACES
291 // STE_PREF_LOAD_INIT_LANG
292 // STE_PREF_LOAD_UNICODE
293
294 SetPrefInt(STE_PREF_WRAP_MODE, editor->GetWrapMode(), false);
295 SetPrefInt(STE_PREF_WRAP_VISUALFLAGS, editor->GetWrapVisualFlags(), false);
296 SetPrefInt(STE_PREF_WRAP_VISUALFLAGSLOC, editor->GetWrapVisualFlagsLocation(), false);
297 SetPrefInt(STE_PREF_WRAP_STARTINDENT, editor->GetWrapStartIndent(), false);
298
299 SetPrefInt(STE_PREF_ZOOM, editor->GetZoom(), false);
300
301 SetPrefBool(STE_PREF_VIEW_EOL, editor->GetViewEOL(), false);
302 SetPrefInt(STE_PREF_VIEW_WHITESPACE, editor->GetViewWhiteSpace(), false);
303
304
305 SetPrefBool(STE_PREF_INDENT_GUIDES, editor->GetIndentationGuides() ? true : false, false);
306 SetPrefInt(STE_PREF_EDGE_MODE, editor->GetEdgeMode(), false);
307 SetPrefInt(STE_PREF_EDGE_COLUMN, editor->GetEdgeColumn(), false);
308
309 bool view;
310 view = (editor->GetMarginType(STE_MARGIN_NUMBER) == wxSTC_MARGIN_NUMBER) &&
311 (editor->GetMarginWidth(STE_MARGIN_NUMBER) > 0);
312 SetPrefBool(STE_PREF_VIEW_LINEMARGIN, view, false);
313 view = (editor->GetMarginType(STE_MARGIN_MARKER) == wxSTC_MARGIN_SYMBOL) &&
314 (editor->GetMarginWidth(STE_MARGIN_MARKER) > 0);
315 SetPrefBool(STE_PREF_VIEW_MARKERMARGIN, view, false);
316 view = (editor->GetMarginType(STE_MARGIN_FOLD) == wxSTC_MARGIN_SYMBOL) &&
317 (editor->GetMarginMask(STE_MARGIN_FOLD) == (int)wxSTC_MASK_FOLDERS) &&
318 (editor->GetMarginWidth(STE_MARGIN_FOLD) > 0);
319 SetPrefBool(STE_PREF_VIEW_FOLDMARGIN, view, false);
320
321 SetPrefBool(STE_PREF_USE_TABS, editor->GetUseTabs(), false);
322 SetPrefBool(STE_PREF_TAB_INDENTS, editor->GetTabIndents(), false);
323 SetPrefInt(STE_PREF_TAB_WIDTH, editor->GetTabWidth(), false);
324 SetPrefInt(STE_PREF_INDENT_WIDTH, editor->GetIndent(), false);
325 SetPrefBool(STE_PREF_BACKSPACE_UNINDENTS, editor->GetBackSpaceUnIndents(), false);
326
327 SetPrefBool(STE_PREF_CARET_LINE_VISIBLE, editor->GetCaretLineVisible(), false);
328 SetPrefInt(STE_PREF_CARET_WIDTH, editor->GetCaretWidth(), false);
329 SetPrefInt(STE_PREF_CARET_PERIOD, editor->GetCaretPeriod(), false);
330 //STE_PREF_CARET_POLICY_X - can't get these values from editor
331 //STE_PREF_CARET_POLICY_Y
332 //STE_PREF_CARET_SLOP_X
333 //STE_PREF_CARET_SLOP_Y
334
335 SetPrefInt(STE_PREF_EOL_MODE, editor->GetEOLMode(), false);
336
337 SetPrefInt(STE_PREF_SELECTION_MODE, editor->GetSelectionMode(), false);
338
339 SetPrefInt(STE_PREF_PRINT_MAGNIFICATION, editor->GetPrintMagnification(), false);
340 SetPrefInt(STE_PREF_PRINT_COLOURMODE, editor->GetPrintColourMode(), false);
341 SetPrefInt(STE_PREF_PRINT_WRAPMODE, editor->GetPrintWrapMode(), false);
342
343 // STE_PREF_FOLD_FLAGS - can't get these values from editor
344 // STE_PREF_FOLD_STYLE
345 // STE_PREF_FOLDMARGIN_STYLE
346
347 SetPrefBool(STE_PREF_BUFFERED_DRAW, editor->GetBufferedDraw(), false);
348 SetPrefBool(STE_PREF_TWOPHASE_DRAW, editor->GetTwoPhaseDraw(), false);
349 SetPrefInt(STE_PREF_LAYOUT_CACHE, editor->GetLayoutCache(), false);
350 SetPrefInt(STE_PREF_USEANTIALIASING, editor->GetUseAntiAliasing(), false);
351
352 // STE_PREF_SAVE_REMOVE_WHITESP
353 // STE_PREF_SAVE_CONVERT_EOL
354
355 SetPrefBool(STE_PREF_HORIZ_SCROLLBAR, editor->GetUseHorizontalScrollBar(), false);
356 SetPrefBool(STE_PREF_VERT_SCROLLBAR, editor->GetUseVerticalScrollBar(), false);
357
358 SetPrefInt(STE_PREF_MARGIN0_TYPE, editor->GetMarginType(0), false);
359 SetPrefInt(STE_PREF_MARGIN1_TYPE, editor->GetMarginType(1), false);
360 SetPrefInt(STE_PREF_MARGIN2_TYPE, editor->GetMarginType(2), false);
361 SetPrefInt(STE_PREF_MARGIN0_WIDTH, editor->GetMarginWidth(0), false);
362 SetPrefInt(STE_PREF_MARGIN1_WIDTH, editor->GetMarginWidth(1), false);
363 SetPrefInt(STE_PREF_MARGIN2_WIDTH, editor->GetMarginWidth(2), false);
364 SetPrefInt(STE_PREF_MARGIN0_MASK, editor->GetMarginMask(0), false);
365 SetPrefInt(STE_PREF_MARGIN1_MASK, editor->GetMarginMask(1), false);
366 SetPrefInt(STE_PREF_MARGIN2_MASK, editor->GetMarginMask(2), false);
367 SetPrefBool(STE_PREF_MARGIN0_SENSITIVE, editor->GetMarginSensitive(0), false);
368 SetPrefBool(STE_PREF_MARGIN1_SENSITIVE, editor->GetMarginSensitive(1), false);
369 SetPrefBool(STE_PREF_MARGIN2_SENSITIVE, editor->GetMarginSensitive(2), false);
370
371 //STE_PREF_AUTOC_STOPS - can't get this from the editor
372 SetPrefInt(STE_PREF_AUTOC_SEPARATOR, editor->AutoCompGetSeparator(), false);
373 //STE_PREF_AUTOC_FILLUPS - can't get this from the editor
374 SetPrefBool(STE_PREF_AUTOC_CANCELATSTART, editor->AutoCompGetCancelAtStart(), false);
375 SetPrefBool(STE_PREF_AUTOC_CHOOSESINGLE, editor->AutoCompGetChooseSingle(), false);
376 SetPrefBool(STE_PREF_AUTOC_IGNORECASE, editor->AutoCompGetIgnoreCase(), false);
377 SetPrefBool(STE_PREF_AUTOC_AUTOHIDE, editor->AutoCompGetAutoHide(), false);
378 SetPrefBool(STE_PREF_AUTOC_DROPRESTOFWORD, editor->AutoCompGetDropRestOfWord(), false);
379 SetPrefInt(STE_PREF_AUTOC_TYPESEPARATOR, editor->AutoCompGetTypeSeparator(), false);
380
381 return true;
382 }
383
Copy(const wxSTEditorPrefs & other)384 void wxSTEditorPrefs::Copy(const wxSTEditorPrefs &other)
385 {
386 wxCHECK_RET(other.IsOk(), wxT("Prefs not created"));
387 if (!IsOk()) Create();
388 if (*this == other) return;
389 wxSTEditorPref_RefData *otherPrefData = (wxSTEditorPref_RefData*)other.GetRefData();
390 M_PREFDATA->m_prefs = otherPrefData->m_prefs;
391 }
392
Reset()393 void wxSTEditorPrefs::Reset()
394 {
395 wxCHECK_RET(IsOk(), wxT("Prefs not created"));
396 Create();
397 }
398
IsEqualTo(const wxSTEditorPrefs & prefs) const399 bool wxSTEditorPrefs::IsEqualTo(const wxSTEditorPrefs &prefs) const
400 {
401 wxCHECK_MSG(IsOk() && prefs.IsOk(), false, wxT("Prefs not created"));
402 const wxArrayString& prefArray = M_PREFDATA->m_prefs;
403 const wxArrayString& otherPrefArray = ((wxSTEditorPref_RefData*)prefs.GetRefData())->m_prefs;
404 if (prefArray.GetCount() != otherPrefArray.GetCount()) return false;
405 size_t n, count = prefArray.GetCount();
406 for (n = 0; n < count; n++)
407 {
408 if (prefArray[n] != otherPrefArray[n]) return false;
409 }
410
411 return true;
412 }
413
GetPrefCount() const414 size_t wxSTEditorPrefs::GetPrefCount() const
415 {
416 wxCHECK_MSG(IsOk(), 0, wxT("Prefs not created"));
417 return M_PREFDATA->m_prefs.GetCount();
418 }
419
GetPref(size_t pref_n) const420 wxString wxSTEditorPrefs::GetPref(size_t pref_n) const
421 {
422 wxCHECK_MSG(IsOk(), wxEmptyString, wxT("Prefs not created"));
423 wxCHECK_MSG(pref_n < GetPrefCount(), wxEmptyString,
424 wxT("Invalid pref id in wxSTEditorPrefs::GetPrefInt"));
425 return M_PREFDATA->m_prefs[pref_n];
426 }
SetPref(size_t pref_n,const wxString & value,bool update)427 bool wxSTEditorPrefs::SetPref(size_t pref_n, const wxString& value, bool update)
428 {
429 wxCHECK_MSG(IsOk(), false, wxT("Prefs not created"));
430 wxCHECK_MSG(pref_n < GetPrefCount(), false,
431 wxT("Invalid pref id in wxSTEditorPrefs::SetPref"));
432 M_PREFDATA->m_prefs[pref_n] = value;
433
434 if (update)
435 UpdateAllEditors();
436
437 return true;
438 }
GetPrefInt(size_t pref_n) const439 int wxSTEditorPrefs::GetPrefInt(size_t pref_n) const
440 {
441 return wxAtoi(GetPref(pref_n));
442 }
SetPrefInt(size_t pref_n,int value,bool update)443 bool wxSTEditorPrefs::SetPrefInt(size_t pref_n, int value, bool update)
444 {
445 return SetPref(pref_n, wxString::Format(wxT("%d"), value), update);
446 }
447
448 // Note: The define generates this code for:
449 // UPEDIT(STE_PREF_WRAP_MODE, GetWrapMode, SetWrapMode, GetPrefInt)
450 // if (!HasPrefFlag(STE_PREF_WRAP_MODE, STE_PREF_FLAG_IGNORE) &&
451 // (editor->GetWrapMode() != GetPrefInt(STE_PREF_WRAP_MODE)))
452 // editor->SetWrapMode(GetPrefInt(STE_PREF_WRAP_MODE));
453
454 #define UPEDIT(pref_n, editGetFn, editSetFn, getPrefFn) \
455 if (!HasPrefFlag(pref_n, STE_PREF_FLAG_IGNORE) && \
456 (editor->editGetFn() != getPrefFn(pref_n))) \
457 editor->editSetFn(getPrefFn(pref_n));
458
459 #define UPEDIT_PARAM(pref_n, param, editGetFn, editSetFn, getPrefFn) \
460 if (!HasPrefFlag(pref_n, STE_PREF_FLAG_IGNORE) && \
461 (editor->editGetFn(param) != getPrefFn(pref_n))) \
462 editor->editSetFn(param, getPrefFn(pref_n));
463
UpdateEditor(wxSTEditor * editor)464 void wxSTEditorPrefs::UpdateEditor(wxSTEditor *editor)
465 {
466 wxCHECK_RET(IsOk(), wxT("Prefs not created"));
467 wxCHECK_RET(editor, wxT("Invalid wxSTEditor"));
468
469 // STE_PREF_SYNTAXHILIGHT done in langs
470
471 if (!HasPrefFlag(STE_PREF_HIGHLIGHT_PREPROC, STE_PREF_FLAG_IGNORE))
472 editor->SetProperty(wxT("styling.within.preprocessor"),
473 GetPrefBool(STE_PREF_HIGHLIGHT_PREPROC) ? wxT("1") : wxT("0"));
474
475 // STE_PREF_HIGHLIGHT_BRACES nothing to set, see wxSTEditor::OnSTCUpdateUI
476 // STE_PREF_LOAD_INIT_LANG nothing to set, see wxSTEditor::LoadFile
477 // STE_PREF_LOAD_UNICODE nothing to set, see wxSTEditor::LoadFile
478
479 UPEDIT(STE_PREF_WRAP_MODE, GetWrapMode, SetWrapMode, GetPrefInt)
480 UPEDIT(STE_PREF_WRAP_VISUALFLAGS, GetWrapVisualFlags, SetWrapVisualFlags, GetPrefInt)
481 UPEDIT(STE_PREF_WRAP_VISUALFLAGSLOC, GetWrapVisualFlagsLocation, SetWrapVisualFlagsLocation, GetPrefInt)
482 UPEDIT(STE_PREF_WRAP_STARTINDENT, GetWrapStartIndent, SetWrapStartIndent, GetPrefInt)
483
484 UPEDIT(STE_PREF_ZOOM, GetZoom, SetZoom, GetPrefInt)
485
486 UPEDIT(STE_PREF_VIEW_EOL, GetViewEOL, SetViewEOL, GetPrefBool)
487 UPEDIT(STE_PREF_VIEW_WHITESPACE, GetViewWhiteSpace, SetViewWhiteSpace, GetPrefInt)
488
489 UPEDIT(STE_PREF_INDENT_GUIDES, GetIndentationGuides, SetIndentationGuides, GetPrefBool)
490 UPEDIT(STE_PREF_EDGE_MODE, GetEdgeMode, SetEdgeMode, GetPrefInt)
491 UPEDIT(STE_PREF_EDGE_COLUMN, GetEdgeColumn, SetEdgeColumn, GetPrefInt)
492
493 // STE_PREF_VIEW_LINEMARGIN see below
494 // STE_PREF_VIEW_MARKERMARGIN see below
495 // STE_PREF_VIEW_FOLDMARGIN see below
496
497 UPEDIT(STE_PREF_USE_TABS, GetUseTabs, SetUseTabs, GetPrefBool)
498 UPEDIT(STE_PREF_TAB_INDENTS, GetTabIndents, SetTabIndents, GetPrefBool)
499 UPEDIT(STE_PREF_TAB_WIDTH, GetTabWidth, SetTabWidth, GetPrefInt)
500 UPEDIT(STE_PREF_INDENT_WIDTH, GetIndent, SetIndent, GetPrefInt)
501 UPEDIT(STE_PREF_BACKSPACE_UNINDENTS, GetBackSpaceUnIndents, SetBackSpaceUnIndents, GetPrefBool)
502 // STE_PREF_AUTOINDENT - doesn't require changing the editor
503
504 UPEDIT(STE_PREF_CARET_LINE_VISIBLE, GetCaretLineVisible, SetCaretLineVisible, GetPrefBool)
505 UPEDIT(STE_PREF_CARET_WIDTH, GetCaretWidth, SetCaretWidth, GetPrefInt)
506 UPEDIT(STE_PREF_CARET_PERIOD, GetCaretPeriod, SetCaretPeriod, GetPrefInt)
507 if (!HasPrefFlag(STE_PREF_CARET_POLICY_X, STE_PREF_FLAG_IGNORE))
508 editor->SetXCaretPolicy(GetPrefInt(STE_PREF_CARET_POLICY_X), GetPrefInt(STE_PREF_CARET_SLOP_X));
509 if (!HasPrefFlag(STE_PREF_CARET_POLICY_Y, STE_PREF_FLAG_IGNORE))
510 editor->SetYCaretPolicy(GetPrefInt(STE_PREF_CARET_POLICY_Y), GetPrefInt(STE_PREF_CARET_SLOP_Y));
511 if (!HasPrefFlag(STE_PREF_VISIBLE_POLICY, STE_PREF_FLAG_IGNORE))
512 editor->SetVisiblePolicy(GetPrefInt(STE_PREF_VISIBLE_POLICY), GetPrefInt(STE_PREF_VISIBLE_SLOP));
513
514 UPEDIT(STE_PREF_EOL_MODE, GetEOLMode, SetEOLMode, GetPrefInt)
515
516 UPEDIT(STE_PREF_SELECTION_MODE, GetSelectionMode, SetSelectionMode, GetPrefInt)
517
518 UPEDIT(STE_PREF_PRINT_MAGNIFICATION, GetPrintMagnification, SetPrintMagnification, GetPrefInt)
519 UPEDIT(STE_PREF_PRINT_COLOURMODE, GetPrintColourMode, SetPrintColourMode, GetPrefInt)
520 UPEDIT(STE_PREF_PRINT_WRAPMODE, GetPrintWrapMode, SetPrintWrapMode, GetPrefInt)
521
522 if (!HasPrefFlag(STE_PREF_FOLD_FLAGS, STE_PREF_FLAG_IGNORE))
523 editor->SetFoldFlags(GetPrefInt(STE_PREF_FOLD_FLAGS));
524 if (!HasPrefFlag(STE_PREF_FOLD_STYLES, STE_PREF_FLAG_IGNORE))
525 {
526 int fold_style = GetPrefInt(STE_PREF_FOLD_STYLES);
527 editor->SetProperty(wxT("fold.compact"), STE_HASBIT(fold_style, STE_FOLD_COMPACT) ? wxT("1") : wxT("0"));
528 editor->SetProperty(wxT("fold.comment"), STE_HASBIT(fold_style, STE_FOLD_COMMENT) ? wxT("1") : wxT("0"));
529 editor->SetProperty(wxT("fold.preprocessor"), STE_HASBIT(fold_style, STE_FOLD_PREPROC) ? wxT("1") : wxT("0"));
530 editor->SetProperty(wxT("fold.at.else"), STE_HASBIT(fold_style, STE_FOLD_ATELSE) ? wxT("1") : wxT("0"));
531 editor->SetProperty(wxT("fold.html"), STE_HASBIT(fold_style, STE_FOLD_HTML) ? wxT("1") : wxT("0"));
532 editor->SetProperty(wxT("fold.html.preprocessor"), STE_HASBIT(fold_style, STE_FOLD_HTMLPREP) ? wxT("1") : wxT("0"));
533 editor->SetProperty(wxT("fold.directive"), STE_HASBIT(fold_style, STE_FOLD_DIRECTIVE) ? wxT("1") : wxT("0"));
534 editor->SetProperty(wxT("fold.comment.python"), STE_HASBIT(fold_style, STE_FOLD_COMMENTPY) ? wxT("1") : wxT("0"));
535 editor->SetProperty(wxT("fold.quotes.python"), STE_HASBIT(fold_style, STE_FOLD_QUOTESPY) ? wxT("1") : wxT("0"));
536 editor->SetProperty(wxT("tab.timmy.whinge.level"), STE_HASBIT(fold_style, STE_FOLD_TABTIMMY) ? wxT("1") : wxT("0"));
537 }
538
539 // try to set fold margin styles, the styles will try as well
540 if (!HasPrefFlag(STE_PREF_FOLDMARGIN_STYLE, STE_PREF_FLAG_IGNORE) && editor->GetEditorStyles().IsOk())
541 editor->GetEditorStyles().SetFoldMarkerStyle(GetPrefInt(STE_PREF_FOLDMARGIN_STYLE));
542
543 UPEDIT(STE_PREF_BUFFERED_DRAW, GetBufferedDraw, SetBufferedDraw, GetPrefBool)
544 UPEDIT(STE_PREF_TWOPHASE_DRAW, GetTwoPhaseDraw, SetTwoPhaseDraw, GetPrefBool)
545 UPEDIT(STE_PREF_LAYOUT_CACHE, GetLayoutCache, SetLayoutCache, GetPrefInt)
546 UPEDIT(STE_PREF_USEANTIALIASING, GetUseAntiAliasing, SetUseAntiAliasing, GetPrefBool)
547
548 // STE_PREF_SAVE_REMOVE_WHITESP nothing to set
549 // STE_PREF_SAVE_CONVERT_EOL nothing to set
550
551 // -----------------------------------------
552 UPEDIT(STE_PREF_HORIZ_SCROLLBAR, GetUseHorizontalScrollBar, SetUseHorizontalScrollBar, GetPrefBool)
553 UPEDIT(STE_PREF_VERT_SCROLLBAR, GetUseVerticalScrollBar, SetUseVerticalScrollBar, GetPrefBool)
554
555 UPEDIT_PARAM(STE_PREF_MARGIN0_TYPE, STE_MARGIN_0, GetMarginType, SetMarginType, GetPrefInt)
556 UPEDIT_PARAM(STE_PREF_MARGIN1_TYPE, STE_MARGIN_1, GetMarginType, SetMarginType, GetPrefInt)
557 UPEDIT_PARAM(STE_PREF_MARGIN2_TYPE, STE_MARGIN_2, GetMarginType, SetMarginType, GetPrefInt)
558
559 UPEDIT_PARAM(STE_PREF_MARGIN0_MASK, STE_MARGIN_0, GetMarginMask, SetMarginMask, GetPrefInt)
560 UPEDIT_PARAM(STE_PREF_MARGIN1_MASK, STE_MARGIN_1, GetMarginMask, SetMarginMask, GetPrefInt)
561 UPEDIT_PARAM(STE_PREF_MARGIN2_MASK, STE_MARGIN_2, GetMarginMask, SetMarginMask, GetPrefInt)
562
563 UPEDIT_PARAM(STE_PREF_MARGIN0_SENSITIVE, STE_MARGIN_0, GetMarginSensitive, SetMarginSensitive, GetPrefBool)
564 UPEDIT_PARAM(STE_PREF_MARGIN1_SENSITIVE, STE_MARGIN_1, GetMarginSensitive, SetMarginSensitive, GetPrefBool)
565 UPEDIT_PARAM(STE_PREF_MARGIN2_SENSITIVE, STE_MARGIN_2, GetMarginSensitive, SetMarginSensitive, GetPrefBool)
566
567 int margin0_width = GetPrefBool(STE_PREF_VIEW_LINEMARGIN) ? GetPrefInt(STE_PREF_MARGIN0_WIDTH) : 0;
568 int margin1_width = GetPrefBool(STE_PREF_VIEW_MARKERMARGIN) ? GetPrefInt(STE_PREF_MARGIN1_WIDTH) : 0;
569 int margin2_width = GetPrefBool(STE_PREF_VIEW_FOLDMARGIN) ? GetPrefInt(STE_PREF_MARGIN2_WIDTH) : 0;
570
571 // The wxSTC::TextWidth is a very expensive operation. Avoid if possible.
572 if ((margin0_width < 0) || (margin1_width < 0) || (margin2_width < 0))
573 {
574 if ((M_PREFDATA->m_lineNumberAutoWidth < 1) ||
575 !editor->GetEditorStyles().IsOk() ||
576 (editor->GetEditorStyles().CreateConfigLine(STE_STYLE_LINENUMBER) !=
577 M_PREFDATA->m_lineNumberStyle))
578 {
579 M_PREFDATA->m_lineNumberStyle = editor->GetEditorStyles().CreateConfigLine(STE_STYLE_LINENUMBER);
580 M_PREFDATA->m_lineNumberAutoWidth = editor->TextWidth(wxSTC_STYLE_LINENUMBER, wxT("_999999"));
581 }
582
583 if (margin0_width < 0) margin0_width = M_PREFDATA->m_lineNumberAutoWidth;
584 if (margin1_width < 0) margin1_width = M_PREFDATA->m_lineNumberAutoWidth;
585 if (margin2_width < 0) margin2_width = M_PREFDATA->m_lineNumberAutoWidth;
586 }
587
588 if (!HasPrefFlag(STE_PREF_MARGIN0_WIDTH, STE_PREF_FLAG_IGNORE) &&
589 (editor->GetMarginWidth(STE_MARGIN_0) != margin0_width))
590 editor->SetMarginWidth(STE_MARGIN_0, margin0_width);
591 if (!HasPrefFlag(STE_PREF_MARGIN1_WIDTH, STE_PREF_FLAG_IGNORE) &&
592 (editor->GetMarginWidth(STE_MARGIN_1) != margin1_width))
593 editor->SetMarginWidth(STE_MARGIN_1, margin1_width);
594 if (!HasPrefFlag(STE_PREF_MARGIN2_WIDTH, STE_PREF_FLAG_IGNORE) &&
595 (editor->GetMarginWidth(STE_MARGIN_2) != margin2_width))
596 editor->SetMarginWidth(STE_MARGIN_2, margin2_width);
597
598 if (!HasPrefFlag(STE_PREF_AUTOC_STOPS, STE_PREF_FLAG_IGNORE))
599 editor->AutoCompStops(GetPref(STE_PREF_AUTOC_STOPS));
600 UPEDIT(STE_PREF_AUTOC_SEPARATOR, AutoCompGetSeparator, AutoCompSetSeparator, GetPrefInt)
601 if (!HasPrefFlag(STE_PREF_AUTOC_FILLUPS, STE_PREF_FLAG_IGNORE))
602 editor->AutoCompSetFillUps(GetPref(STE_PREF_AUTOC_FILLUPS));
603 UPEDIT(STE_PREF_AUTOC_CANCELATSTART, AutoCompGetCancelAtStart, AutoCompSetCancelAtStart, GetPrefBool)
604 UPEDIT(STE_PREF_AUTOC_CHOOSESINGLE, AutoCompGetChooseSingle, AutoCompSetChooseSingle, GetPrefBool)
605 UPEDIT(STE_PREF_AUTOC_IGNORECASE, AutoCompGetIgnoreCase, AutoCompSetIgnoreCase, GetPrefBool)
606 UPEDIT(STE_PREF_AUTOC_AUTOHIDE, AutoCompGetAutoHide, AutoCompSetAutoHide, GetPrefBool)
607 UPEDIT(STE_PREF_AUTOC_DROPRESTOFWORD, AutoCompGetDropRestOfWord, AutoCompSetDropRestOfWord, GetPrefBool)
608 UPEDIT(STE_PREF_AUTOC_TYPESEPARATOR, AutoCompGetTypeSeparator, AutoCompSetTypeSeparator, GetPrefInt)
609 }
610
611 #define MENU_IDVAL(menu_id) menu_id, GetPrefBoolByID(menu_id)
612 #define MENU_FIND_CHECK_ENABLE(menu_id, enabled) \
613 { wxMenuItem *item = menu->FindItem(menu_id); \
614 if (item) { item->Check(GetPrefBoolByID(menu_id)); item->Enable(enabled); } }
615
UpdateMenuToolItems(wxMenu * menu,wxMenuBar * menuBar,wxToolBar * toolBar)616 void wxSTEditorPrefs::UpdateMenuToolItems(wxMenu *menu, wxMenuBar *menuBar,
617 wxToolBar *toolBar)
618 {
619 wxCHECK_RET(IsOk(), wxT("Prefs not created"));
620 if (!menu && !menuBar && !toolBar) return;
621
622 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_VIEW_EOL));
623 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_EDGE_MODE));
624 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_VIEW_LINEMARGIN));
625 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_VIEW_FOLDMARGIN));
626 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_VIEW_MARKERMARGIN));
627 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_VIEW_WHITESPACE));
628 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_WRAP_MODE));
629 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_USE_TABS));
630 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_TAB_INDENTS));
631 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_BACKSPACE_UNINDENTS));
632 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_AUTOINDENT));
633 STE_MM::DoCheckItem(menu, menuBar, toolBar, MENU_IDVAL(ID_STE_PREF_INDENT_GUIDES));
634 }
635
LoadConfig(wxConfigBase & config,const wxString & configPath)636 void wxSTEditorPrefs::LoadConfig( wxConfigBase &config,
637 const wxString &configPath )
638 {
639 wxCHECK_RET(IsOk(), wxT("Prefs not created"));
640 wxString key = wxSTEditorOptions::FixConfigPath(configPath, true);
641
642 long val = 0;
643 wxString strVal;
644 size_t pref_n, pref_count = GetPrefCount();
645 for (pref_n = 0; pref_n < pref_count; pref_n++)
646 {
647 wxString name = GetPrefName(pref_n);
648 name.Replace(wxT(" "), wxT("_"), true);
649
650 if (HasPrefFlag(pref_n, STE_PREF_FLAG_INT|STE_PREF_FLAG_BOOL))
651 {
652 if (config.Read(key + name, &val))
653 SetPrefInt(pref_n, val, false);
654 }
655 else if (config.Read(key + name, &strVal))
656 SetPref(pref_n, strVal, false);
657 }
658
659 UpdateAllEditors();
660 }
661
SaveConfig(wxConfigBase & config,const wxString & configPath,int flags) const662 void wxSTEditorPrefs::SaveConfig( wxConfigBase &config,
663 const wxString &configPath,
664 int flags ) const
665 {
666 wxCHECK_RET(IsOk(), wxT("Prefs not created"));
667 wxString key = wxSTEditorOptions::FixConfigPath(configPath, true);
668
669 size_t pref_n, pref_count = GetPrefCount();
670 for (pref_n = 0; pref_n < pref_count; pref_n++)
671 {
672 wxString name = GetPrefName(pref_n);
673 name.Replace(wxT(" "), wxT("_"), true);
674
675 if (!HasPrefFlag(pref_n, STE_PREF_FLAG_NOCONFIG))
676 {
677 if (((flags && STE_CONFIG_SAVE_DIFFS) == 0) ||
678 (M_PREFDATA->m_prefs[pref_n] != GetInitPrefValue(pref_n)))
679 {
680 if (HasPrefFlag(pref_n, STE_PREF_FLAG_INT|STE_PREF_FLAG_BOOL))
681 config.Write(key + name, GetPrefInt(pref_n));
682 else
683 config.Write(key + name, M_PREFDATA->m_prefs[pref_n]);
684 }
685 }
686 }
687 }
688
689 // global precreated wxSTEditorPrefs
690 wxSTEditorPrefs s_wxSTEditorPrefs(true);
691