79 {
80#ifdef _DEBUG
81 wxSizerFlags::DisableConsistencyChecks();
82#endif
83
84
85 wxFileName fn(Paths::GetDocumentsPath() + "/PSP-UFU/config.ini");
86 if (!fn.DirExists()) {
87 fn.Mkdir();
88 }
89
90 wxTextFile file(fn.GetFullPath());
91 auto data = propertiesData->GetGeneralPropertiesData();
92
93 if (!file.Create()) {
94 if (!file.Open()) return false;
95
96 wxString line;
97 for (line = file.GetFirstLine(); !file.Eof(); line = file.GetNextLine()) {
98 wxString tag = "";
99 wxString tagValue = "";
100 bool parseValue = false;
101 for (unsigned int i = 0; i < line.Len(); ++i) {
102 if (line[i] == '=') {
103 parseValue = true;
104 }
105 else {
106 if (parseValue)
107 tagValue += line[i];
108 else
109 tag += line[i];
110 }
111 }
112
113 if (tag == "lang") {
114 if (tagValue == "pt-br" || tagValue == "pt") {
115 data.language = wxLANGUAGE_PORTUGUESE_BRAZILIAN;
116 }
117 else if (tagValue == "en" || tagValue == "en-us" || tagValue == "en-uk") {
118 data.language = wxLANGUAGE_ENGLISH;
119 }
120 }
121 if (tag == "theme") {
122 if (tagValue == "light") {
123 data.theme = THEME_LIGHT;
124 }
125 else if (tagValue == "dark") {
126 data.theme = THEME_DARK;
127 }
128 }
129 if (tag == "plotlib") {
130 if (tagValue == "chartdir") {
131 data.plotLib = PlotLib::wxCHART_DIR;
132 }
133 else if (tagValue == "mathplot") {
134 data.plotLib = PlotLib::wxMATH_PLOT;
135 }
136 }
137
138
139
140
141
142
143
144
145 if (tag == "labelfont") {
146 data.labelFont = tagValue;
147 }
148 if (tag == "labelfontsize") {
149 long size = 10;
150 tagValue.ToLong(&size);
151 data.labelFontSize = static_cast<int>(size);
152 }
153 if (tag == "atpfile") {
154 data.atpPath = wxFileName(tagValue);
155 }
156 if (tag == "elementstoolbar") {
157 if (tagValue == "none") {
158 data.elementsToolbar = NONE;
159 }
160 else if (tagValue == "vertical") {
161 data.elementsToolbar = VERTICAL;
162 }
163 else if (tagValue == "horizontal") {
164 data.elementsToolbar = HORIZONTAL;
165 }
166 else
167 {
168 data.elementsToolbar = VERTICAL;
169 }
170 }
171 if (tag == "usevoltagebuscolours") {
172 if (tagValue == "yes" || tagValue == "true" || tagValue == "1") {
173 data.useBusVoltageColours = true;
174 }
175 else if (tagValue == "no" || tagValue == "false" || tagValue == "0") {
176 data.useBusVoltageColours = false;
177 }
178 }
179 if (tag == "voltage_levels") {
180 data.voltageLevels.clear();
181 wxStringTokenizer tkz(tagValue, ";");
182 while (tkz.HasMoreTokens()) {
183 wxString token = tkz.GetNextToken().Trim().Trim(false);
184 if (token.IsEmpty()) continue;
185 wxString vStr = token.BeforeFirst(':');
186 wxString cStr = token.AfterFirst(':');
187 double v = 0.0;
188 if (vStr.ToCDouble(&v) || vStr.ToDouble(&v)) {
189 wxColour col(cStr);
190 if (!col.IsOk()) col = *wxBLACK;
191 data.voltageLevels.push_back({ v, col });
192 }
193 }
194 }
195 }
196 file.Close();
197 }
198 else {
199 if (!file.Open()) return false;
200
201 wxString plotLibProp = "plotlib=chartdir";
202#ifdef __WXGTK__
203 plotLibProp = "plotlib=mathplot";
204#endif
205
206
207 file.AddLine("lang=en");
208 file.AddLine(plotLibProp);
209 file.AddLine("theme=light");
210 file.AddLine("labelfont=Arial");
211 file.AddLine("labelfontsize=10");
212 file.AddLine("atpfile=");
213 file.AddLine("elementstoolbar=no");
214 file.AddLine("usevoltagebuscolours=no");
215
216
217 wxString vlProp = "voltage_levels=";
218 for (size_t i = 0; i < data.voltageLevels.size(); ++i) {
219 if (i > 0) vlProp += ";";
220 vlProp += wxString::Format("%s:%s", wxString::FromCDouble(data.voltageLevels[i].voltage), data.voltageLevels[i].colour.GetAsString(wxC2S_HTML_SYNTAX));
221 }
222 file.AddLine(vlProp);
223
224 file.Write();
225 file.Close();
226
227 data.language = wxLANGUAGE_ENGLISH;
228 data.theme = THEME_LIGHT;
229 data.plotLib = PlotLib::wxCHART_DIR;
230#ifdef __WXGTK__
231 data.plotLib = PlotLib::wxMATH_PLOT;
232#endif
233 data.elementsToolbar = VERTICAL;
234 data.useBusVoltageColours = true;
235
236 propertiesData->SetGeneralPropertiesData(data);
237 }
238
239
240 wxString atpFolder = Paths::GetDocumentsPath() + "/PSP-UFU/atp";
241 if (!wxDir::Exists(atpFolder)) wxDir::Make(atpFolder);
242 data.atpWorkFolder = atpFolder;
243
244 propertiesData->SetGeneralPropertiesData(data);
245 return true;
246 }