Config.cpp

Zbigniew Rebacz, 05/16/2014 04:17 PM

Download (5.69 KB)

 
1
#include "ide.h"
2

    
3
void Ide::SerializeWorkspace(Stream& s) {
4
        int i;
5
        int version = 12;
6
        s / version;
7
        s.Magic(0x12354);
8
        if(s.IsStoring()) {
9
                for(i = 0; i < filedata.GetCount(); i++) {
10
                        String fn = filedata.GetKey(i);
11
                        if(!fn.IsEmpty() && FileExists(fn)) {
12
                                s % fn;
13
                                s % filedata[i].editpos;
14
                                if(version >= 1)
15
                                        s % filedata[i].columnline;
16
                        }
17
                }
18
                String h;
19
                s % h;
20
        }
21
        else {
22
                String fn;
23
                filedata.Clear();
24
                for(;;) {
25
                        s % fn;
26
                        if(fn.IsEmpty()) break;
27
                        FileData& fd = filedata.GetAdd(fn);
28
                        fd.Clear();
29
                        s % fd.editpos;
30
                        if(version >= 1)
31
                                s % fd.columnline;
32
                }
33
        }
34
        String pk = GetActivePackage();
35
        s % pk;
36
        package.FindSetCursor(pk);
37
        s % tablru;
38
        s % mainconfigname;
39
        s % mainconfigparam;
40
        s % console.verbosebuild;
41
        s % stoponerrors;
42
        byte dummy;
43
        s % dummy;
44
        s % runarg;
45
        s % recent_runarg;
46
        s % rundir;
47
        s % stdout_file % recent_stdout_file / runmode;
48
        if(version >= 1)
49
                s % runexternal;
50
        if(version >= 11)
51
                s % forceconsole;
52
        s % editfile;
53
        for(i = 0; i < 10; i++)
54
                s % bookmark[i];
55
        editor.Serialize(s);
56
        if(version >= 5)
57
                s % editorsplit;
58
        if(version == 6) {
59
                String n;
60
                int v;
61
                s / v;
62
                for(int i = 0; i < 10; i++) {
63
                        s % n;
64
                        s / v;
65
                }
66
        }
67
        if(version >= 8) {
68
                bool dummyb;
69
                String dummy;
70
                s % dummyb;
71
                s % dummy;
72
        }
73
        SerializeFindInFiles(s);
74
        String om;
75
        s % om;
76
        s % recentoutput;
77
        s % recentflags;
78
        s / editortabsize / indent_amount % indent_spaces;
79
        for(int j = 0; j < GetIdeModuleCount(); j++)
80
                GetIdeModule(j).Serialize(s); // -> Workspace
81
        SerializeWorkspaceConfigs(s);
82
        SerializeOutputMode(s);
83
        SerializeClosed(s);
84
        if(version >= 10) {
85
                if(tabs_serialize) {
86
                        s % tabs;
87
                }
88
        }
89
        if(version >= 11) {
90
                s % find_file_search_string;
91
        }
92
        if(version >= 12)
93
                SerializePlacement(s);
94

    
95
}
96

    
97
void Ide::SerializeLastMain(Stream& s)
98
{
99
        s % main;
100
        String varsname = GetVarsName();
101
        s % varsname;
102
        s % pocfg;
103
        if(s.IsLoading())
104
                LoadVars(varsname);
105
}
106

    
107
void Ide::SaveLastMain()
108
{
109
        StoreToFile(THISBACK(SerializeLastMain), ConfigFile("lastmain.cfg"));
110
}
111

    
112
void Ide::LoadLastMain()
113
{
114
        LoadFromFile(THISBACK(SerializeLastMain), ConfigFile("lastmain.cfg"));
115
}
116

    
117
void Sentinel(Stream& s, const char *txt)
118
{
119
        String h;
120
        h << "<123456789:" << txt << ":123456789>";
121
        Buffer<char> hh(h.GetLength());
122
        memcpy(hh, h, h.GetLength());
123
        s.SerializeRaw((byte *)~hh, h.GetLength());
124
}
125

    
126
void Ide::Serialize(Stream& s)
127
{
128
        int version = 3;
129
        Sentinel(s, "before 12341234");
130
        s.Magic(0x12341234);
131
        Sentinel(s, "after magic");
132
        s / version;
133
        Sentinel(s, "before first FileSel");
134
        s % AnySourceFs();
135
        Sentinel(s, "after AnySourceFs");
136
        s % BasedSourceFs();
137
        Sentinel(s, "after BasedSourceFs");
138
        s % AnyPackageFs();
139
        Sentinel(s, "after AnyPackageFs");
140
        s % pfsplit;
141
        s % wesplit;
142
        package.SerializeSettings(s);
143
        filelist.SerializeSettings(s);
144
        s % editorfont;
145
        s % tfont;
146
        s % veditorfont;
147
        s % consolefont;
148
        s % font1;
149
        s % font2;
150
        s % show_status_bar;
151
        s % toolbar_in_row;
152
        s % filetabs;
153
        s % auto_enclose;
154
        s % persistent_find_replace;
155
        s % show_tabs;
156
        s % tabs_icons;
157
        s % tabs_crosses;
158
        s % tabs_grouping;
159
        s % tabs_serialize;
160
        s % tabs_stacking;
161
        bool dummy_force_crlf = false;
162
        s % dummy_force_crlf;
163
        if(version >= 1)
164
                s % line_endings;
165
        s % no_parenthesis_indent;
166
        s % hilite_scope;
167
        s % hilite_if_endif;
168
        s % hilite_bracket;
169
        s % hilite_ifdef;
170
        if(version >= 3)
171
                s % thousands_separator;
172
        s % barline;
173
        s % qtfsel;
174
        s % wrap_console_text;
175
        s % mute_sounds;
176
        s % line_numbers;
177
        s % bookmark_pos;
178
        s % use_target;
179
        s % default_charset;
180
        s % header_guards;
181
        s % insert_include;
182
        SerializeGlobalConfigs(s);
183
        doc.Serialize(s);
184
        s % right_split;
185
        s % splash_screen;
186
        s % editor.auto_assist;
187
        s % editor.commentdp;
188
        s % bordercolumn;
189
        s % bordercolor;
190
        s % hydra1_threads;
191
        if(s.IsLoading())
192
                console.SetSlots(hydra1_threads);
193
        s % gdbSelector;
194
        s % doc;
195
        s % chstyle;
196
        s % astyle_BracketIndent;
197
        s % astyle_NamespaceIndent;
198
        s % astyle_BlockIndent;
199
        s % astyle_CaseIndent;
200
        s % astyle_ClassIndent;
201
        s % astyle_LabelIndent;
202
        s % astyle_SwitchIndent;
203
        s % astyle_PreprocessorIndent;
204
        s % astyle_MinInStatementIndentLength;
205
        s % astyle_MaxInStatementIndentLength;
206
        s % astyle_BreakClosingHeaderBracketsMode;
207
        s % astyle_BreakElseIfsMode;
208
        s % astyle_BreakOneLineBlocksMode;
209
        s % astyle_SingleStatementsMode;
210
        s % astyle_BreakBlocksMode;
211
        s % astyle_BreakClosingHeaderBlocksMode;
212
        s % astyle_BracketFormatMode;
213
        s % astyle_ParensPaddingMode;
214
        s % astyle_ParensUnPaddingMode;
215
        s % astyle_OperatorPaddingMode;
216
        s % astyle_EmptyLineFill;
217
        s % astyle_TabSpaceConversionMode;
218
        s % astyle_TestBox;
219
        s % LinuxHostConsole;
220
        editor.SerializeNavigator(s);
221
        s % showtime;
222
        s % DiffFs();
223
        s % sort;
224
        s % debug_console_apps_in_console;
225
        s % output_per_assembly;
226
        s.Magic();
227
}
228

    
229
Time Ide::ConfigTime()
230
{
231
        return FileGetTime(ConfigFile());
232
}
233

    
234
void Ide::SaveConfig()
235
{
236
        SaveChangedFile(ConfigFile(), StoreAsString(*this));
237
        if(GetIniKey("DebugClipboard") == "1") {
238
                SaveChangedFile(ConfigFile() + ".bak", StoreAsString(*this));
239
                StoreToFile(*this, ConfigFile() + ".bak1");
240
        }
241
        SaveChangedFile(ConfigFile("ide.key"), StoreKeys());
242
        SaveChangedFile(ConfigFile("ide.colors"), editor.StoreHlStyles());
243
        config_time = ConfigTime();
244
}
245

    
246
void Ide::SaveConfigOnTime()
247
{
248
        if(ConfigTime() == config_time)
249
                SaveConfig();
250
}
251

    
252
void Ide::LoadConfig()
253
{
254
        if(!LoadFromFile(*this) && GetIniKey("DebugClipboard") == "1") {
255
                Exclamation("LoadConfig has failed!");
256
                if(!LoadFromFile(*this, ConfigFile() + ".bak")) {
257
                        Exclamation("LoadConfig .bak has failed!");
258
                        if(!LoadFromFile(*this, ConfigFile() + ".bak1"))
259
                                Exclamation("LoadConfig .bak1 has failed!");
260
                }
261
        }
262
        RestoreKeys(LoadFile(ConfigFile("ide.key")));
263
        editor.LoadHlStyles(LoadFile(ConfigFile("ide.colors")));
264
        config_time = FileGetTime(ConfigFile());
265
        UpdateFormat();
266
        if(filelist.IsCursor()) {
267
                FlushFile();
268
                FileCursor();
269
        }
270
        SaveLoadPackage();
271
        SyncCh();
272
}