This source file includes following definitions.
- Load
- Clear
- Load
- SavePanel
- Save
- WriteVar
- WriteVar
- VarUnpack
- Save
- StylesStrToInt
- MakeFont
- CalcVars
- Load
- Save
- InitDefault
- SetColor
- MainStyle
- FPanelFullStyle
- FPanelColsStyle
- SetMainStyle
- UpdateFrom
- CopyTo
- WriteStyle
- IsLineVar
- ReadLine
- VarTo
- ReadColor
- Save_Colors
- Save_Fonts
- Load
- Save
- LoadPalete
- LoadColors
- ColorIndexByCode
- SetColorByCode
- SavePalete
1 #include <stdlib.h>
2 #include <stdio.h>
3
4 #include "BF_Dict.h"
5 #include "BL_Tools.h"
6 #include "BF_GUI_Setup.h"
7
8 #include "BF_Roster.h"
9 #include "BF_GUI_DlgViews.h"
10 #include "BF_GUI_WinMain.h"
11 #include "BF_GUI_NodePanel.h"
12
13 BF_GUI_Setup *poSysSetup = NULL;
14
15
16
17 #define VARS_FILE "vars.settings"
18
19 BF_GUI_Setup_Vars_Panel::BF_GUI_Setup_Vars_Panel()
20 {
21 iModeFullStyles = 0;
22 iModeColsStyles = 0;
23 iMode = 0;
24 sPath = "";
25 }
26
27 void
28 BF_GUI_Setup_Vars_Panel::Load(BF_ConfigFile &o_File)
29 {
30 Clear();
31
32 BL_String s,sValue,sName;
33 while(B_OK==o_File.ReadString(&s)){
34 if(s=="}") break;else
35 if(s=="full_styles{"){
36 iModeFullStyles = 0;
37 while(B_OK==o_File.ReadString(&s)){
38 if(s=="name") iModeFullStyles = iModeFullStyles|BF_NODEPANEL_FULL_NAME;else
39 if(s=="date") iModeFullStyles = iModeFullStyles|BF_NODEPANEL_FULL_DATE;else
40 if(s=="size") iModeFullStyles = iModeFullStyles|BF_NODEPANEL_FULL_SIZE;else
41 if(s=="type") iModeFullStyles = iModeFullStyles|BF_NODEPANEL_FULL_TYPE;else
42 if(s=="sicon") iModeFullStyles = iModeFullStyles|BF_NODEPANEL_FULL_SICON;else
43 if(s=="}") break;
44 }
45 }else
46 if(s=="cols_styles{"){
47 iModeColsStyles = 0;
48 while(B_OK==o_File.ReadString(&s)){
49 if(s=="name") iModeColsStyles = iModeColsStyles|BF_NODEPANEL_COLS_NAME;else
50 if(s=="sicon") iModeColsStyles = iModeColsStyles|BF_NODEPANEL_COLS_SICON;else
51 if(s=="}") break;
52 }
53 }else
54 {
55 o_File.VarUnpack(s,sName,sValue);
56 if(sName=="path") sPath = sValue;else
57 if(sName=="mode"){
58 if(sValue == "full") iMode = BF_NODEPANEL_MODE_FULL;else
59 if(sValue == "cols") iMode = BF_NODEPANEL_MODE_COLS;else
60 {}
61 }else
62 {}
63 sName = "";
64 }
65 }
66 }
67
68 void
69 BF_GUI_Setup_Vars_Panel::Clear()
70 {
71 iModeFullStyles = 0;
72 iModeColsStyles = 0;
73 iMode = 0;
74 sPath = "";
75 }
76
77 BF_GUI_Setup_Vars::BF_GUI_Setup_Vars()
78 {
79 bLoaded = false;
80 }
81
82 status_t
83 BF_GUI_Setup_Vars::Load()
84 {
85 bLoaded = false;
86
87 BL_String s,s1;
88 s = BEFAR_SETTINGS_DIR;
89 s<<VARS_FILE;
90
91 BF_ConfigFile oFile(s.String(),B_READ_WRITE);
92 status_t uRes = oFile.InitCheck();
93
94 if(uRes!=B_OK) return uRes;
95
96 BL_String sName,sValue;
97
98 while(B_OK==oFile.ReadString(&s)){
99 if(s=="left_panel{") oLPanel.Load(oFile);else
100 if(s=="right_panel{") oRPanel.Load(oFile);else
101 {
102 if(B_OK!=oFile.VarUnpack(s,sName,sValue)) continue;
103 if(sName=="win_x") oWinFrame.left = sValue.Float();else
104 if(sName=="win_y") oWinFrame.top = sValue.Float();else
105 if(sName=="win_x1") oWinFrame.right = sValue.Float();else
106 if(sName=="win_y1") oWinFrame.bottom = sValue.Float();else
107 {}
108 }
109 }
110
111 if(oLPanel.sPath=="" || oRPanel.sPath=="") return B_ERROR;
112
113 bLoaded = true;
114 return B_OK;
115
116 }
117 void
118 BF_GUI_Setup_Vars::SavePanel(BF_ConfigFile &o_File,const BF_GUI_Setup_Vars_Panel & o_Panel,bool b_LeftPanel)
119 {
120 o_File.WriteString(b_LeftPanel?"left_panel{":"right_panel{");
121 o_File.WriteVar("path",o_Panel.sPath.String());
122
123 o_File.WriteString("full_styles{");
124 o_File.WriteStyle(o_Panel.iModeFullStyles,BF_NODEPANEL_FULL_NAME,"name");
125 o_File.WriteStyle(o_Panel.iModeFullStyles,BF_NODEPANEL_FULL_DATE,"date");
126 o_File.WriteStyle(o_Panel.iModeFullStyles,BF_NODEPANEL_FULL_SIZE,"size");
127 o_File.WriteStyle(o_Panel.iModeFullStyles,BF_NODEPANEL_FULL_TYPE,"type");
128 o_File.WriteStyle(o_Panel.iModeFullStyles,BF_NODEPANEL_FULL_SICON,"sicon");
129 o_File.WriteString("}");
130
131 o_File.WriteString("cols_styles{");
132 o_File.WriteStyle(o_Panel.iModeColsStyles,BF_NODEPANEL_COLS_NAME,"name");
133 o_File.WriteStyle(o_Panel.iModeColsStyles,BF_NODEPANEL_COLS_SICON,"sicon");
134 o_File.WriteString("}");
135
136 if(o_Panel.iMode==BF_NODEPANEL_MODE_FULL) o_File.WriteVar("mode","full");else
137 if(o_Panel.iMode==BF_NODEPANEL_MODE_COLS) o_File.WriteVar("mode","cols");
138
139 o_File.WriteString("}");
140 }
141
142 void
143 BF_GUI_Setup_Vars::Save()
144 {
145 oLPanel.Clear();
146 oRPanel.Clear();
147
148
149 {
150 ASSERT(poWin);
151 oWinFrame = poWin->Frame();
152
153 BF_GUI_NodePanel *po = (BF_GUI_NodePanel*)poWinView->PanelByIndex(BF_PANEL_WINPOS_LEFT,0);
154 if(po) po->StoreVars(oLPanel);
155
156 po = (BF_GUI_NodePanel*)poWinView->PanelByIndex(BF_PANEL_WINPOS_RIGHT,0);
157 if(po) po->StoreVars(oRPanel);
158 }
159
160 BL_String sFilePath(BEFAR_SETTINGS_DIR);
161 sFilePath<<VARS_FILE;
162
163 BF_ConfigFile oFile(sFilePath.String(),B_READ_WRITE|B_CREATE_FILE|B_ERASE_FILE);
164 status_t uErr = oFile.InitCheck();
165
166 if(uErr!=B_OK){
167 BL_String s(BF_DictAt(BF_DICT_SETUP_ERR1)),s1;
168 BL_System_TranslError(uErr,s1);
169 s<<s1;
170 BF_Dialog_Alert_Sep(s1.String(),"",NULL,poWin->CurrentFocus());
171 return;
172 }
173
174 oFile.WriteVar("win_x",oWinFrame.left);
175 oFile.WriteVar("win_y",oWinFrame.top);
176 oFile.WriteVar("win_x1",oWinFrame.right);
177 oFile.WriteVar("win_y1",oWinFrame.bottom);
178
179
180 SavePanel(oFile,oLPanel,true);
181 SavePanel(oFile,oRPanel,false);
182 }
183
184
185
186
187 status_t
188 BF_ConfigFile::WriteVar(const char *pc_Name,float f_Value)
189 {
190 BL_String s(pc_Name);
191 s<<"=";
192 s<<f_Value;
193 return WriteString(s);
194 }
195
196 status_t
197 BF_ConfigFile::WriteVar(const char *pc_Name,const char *pc_Value)
198 {
199 BString s(pc_Name);
200 s<<"=";
201 s<<pc_Value;
202 return WriteString(s);
203 }
204
205 status_t
206 BF_ConfigFile::VarUnpack(BL_String & s_Var,BL_String & s_Name,BL_String & s_Value)
207 {
208 int iPos = s_Var.FindFirst('=');
209 if(iPos<=0) return B_ERROR;
210 s_Var.CopyInto(s_Name,0,iPos);
211 s_Var.CopyInto(s_Value,iPos+1,s_Var.Length()-iPos-1);
212 return B_OK;
213 }
214
215
216 void
217 BF_GUI_Setup_Color::operator = (BF_GUI_Setup_Color & o_From)
218 {
219 rgb = o_From.rgb;
220 }
221
222 void
223 BF_GUI_Setup_Color::Save(BF_ConfigFile & o_File)
224 {
225 BL_String s;
226 s<<sCode;
227 s<<"=";
228 s<<(uint32)rgb.red;
229 s<<",";
230 s<<(uint32)rgb.green;
231 s<<",";
232 s<<(uint32)rgb.blue;
233 o_File.WriteString(&s);
234 }
235
236 void
237 BF_GUI_Setup_Font::Set(const char *pc_Name,int i_Styles,int i_Flags,float f_Size)
238 {
239 sName = pc_Name;
240 iStyles = i_Styles;
241 iFlags = i_Flags;
242 fSize = f_Size;
243 MakeFont();
244 }
245
246 int
247 BF_GUI_Setup_Font::StylesStrToInt(const char *pc_Styles)
248 {
249 ASSERT(pc_Styles);
250
251 int iStyles=0;
252
253 if(strstr(pc_Styles,"Bold")!=NULL) iStyles = iStyles | B_BOLD_FACE;
254 if(strstr(pc_Styles,"Regular")!=NULL) iStyles = iStyles | B_REGULAR_FACE;
255 if(strstr(pc_Styles,"Italic")!=NULL) iStyles = iStyles | B_ITALIC_FACE;
256
257 return iStyles;
258 }
259
260 void
261 BF_GUI_Setup_Font::MakeFont()
262 {
263 oFont.SetFamilyAndFace(sName.String(),iStyles);
264
265 {
266 font_family oFamily;
267 font_style oStyle;
268 oFont.GetFamilyAndStyle(&oFamily,&oStyle);
269 if(sName!=oFamily) sName = oFamily;
270 iStyles = StylesStrToInt(oStyle);
271 }
272 oFont.SetSize(fSize);
273 oFont.SetFlags( iFlags );
274 CalcVars();
275 }
276
277 void
278 BF_GUI_Setup_Font::CalcVars()
279 {
280 font_height oFontHeight;
281
282 oFont.GetHeight(&oFontHeight);
283
284 fAscent = oFontHeight.ascent;
285 fDescent = oFontHeight.descent;
286 fHeight = (float)(int)(oFontHeight.ascent + oFontHeight.descent);
287 if(fHeight<(oFontHeight.ascent + oFontHeight.descent)) fHeight+=1.0;
288 }
289
290 void
291 BF_GUI_Setup_Font::operator = (BF_GUI_Setup_Font & o_From)
292 {
293 oFont = o_From.oFont;
294 fSize = o_From.fSize;
295 iStyles = o_From.iStyles;
296 iFlags = o_From.iFlags;
297 sName = o_From.sName;
298
299 fHeight = o_From.fHeight;
300 fAscent = o_From.fAscent;
301 fDescent = o_From.fDescent;
302 }
303
304 void
305 BF_GUI_Setup_Font::Load(BF_ConfigFile & o_File)
306 {
307 BL_String s,sVarName,sVarValue;
308 iStyles = 0;
309 iFlags = 0;
310 while(B_OK==o_File.ReadString(&s)){
311 if(s=="}") break;
312 if(B_OK!=o_File.VarUnpack(s,sVarName,sVarValue)) break;
313
314 if(sVarName=="name"){
315 sName = sVarValue;
316 }else
317 if(sVarName=="size"){
318 fSize = sVarValue.Float();
319 }else
320 if(sVarName=="style"){
321 if(sVarValue=="bold") iStyles = iStyles | B_BOLD_FACE;else
322 if(sVarValue=="regular") iStyles = iStyles | B_REGULAR_FACE;else
323 if(sVarValue=="italic") iStyles = iStyles | B_ITALIC_FACE;else
324 {}
325 }else
326 if(sVarName=="flag"){
327 if(sVarValue=="force_antialising") iFlags = iFlags | B_FORCE_ANTIALIASING;else
328 if(sVarValue=="disable_antialising") iFlags = iFlags | B_DISABLE_ANTIALIASING;else
329 {}
330 }else
331 {}
332 }
333
334 if( !(iFlags & B_FORCE_ANTIALIASING) && !(iFlags & B_DISABLE_ANTIALIASING)) iFlags = iFlags | B_FORCE_ANTIALIASING;
335 MakeFont();
336 }
337
338 void
339 BF_GUI_Setup_Font::Save(const char *pc_Type,BF_ConfigFile & o_File)
340 {
341 o_File.WriteChar("font{");
342 o_File.WriteChar(pc_Type);
343
344 BL_String s;
345 s="name=";
346 s<<sName;
347 o_File.WriteString(&s);
348 s="size=";
349 s<<fSize;
350 o_File.WriteString(&s);
351
352 printf("iStyles=%i\n",iStyles);
353 if(iStyles & B_BOLD_FACE) o_File.WriteChar("style=bold");
354 if(iStyles & B_REGULAR_FACE) o_File.WriteChar("style=regular");
355 if(iStyles & B_ITALIC_FACE) o_File.WriteChar("style=italic");
356
357 if(iFlags & B_FORCE_ANTIALIASING) o_File.WriteChar("flag=force_antialising");
358 if(iFlags & B_DISABLE_ANTIALIASING) o_File.WriteChar("flag=disable_antialising");
359
360
361 o_File.WriteChar("}");
362 }
363
364 BF_GUI_Setup::BF_GUI_Setup()
365 {
366 InitDefault();
367 if(!poSysSetup) poSysSetup = this;
368 }
369
370 void
371 BF_GUI_Setup::InitDefault()
372 {
373 iCmdLineHistorySize = 20;
374
375 sDictFile = "BeFar_Dict_Eng.dict";
376
377
378 oPathSysTrash.SetTo("/boot/home/Desktop/Trash");
379
380 iPathHistorySize = 100;
381 iFPanelFullStyle = 0;
382 iFPanelFullStyle = iFPanelFullStyle | BF_SETUP_FPANELMODE_FULL_DRAWLINES;
383 iFPanelColsStyle = 0;
384 iFPanelColsStyle = iFPanelColsStyle | BF_SETUP_FPANELMODE_COLS_DRAWLINES;
385 iMainStyle = 0;
386 iMainStyle = iMainStyle | BF_SETUP_MAIN_RETURN_REMEMBER;
387 iMainStyle = iMainStyle | BF_SETUP_MAIN_ASK_DELETE;
388 iMainStyle = iMainStyle | BF_SETUP_MAIN_SELECTVOL_SHOWSICON;
389 iMainStyle = iMainStyle | BF_SETUP_MAIN_SELECTVOL_SHOWSPEC;
390 iMainStyle = iMainStyle | BF_SETUP_MAIN_SELECTVOL_SHOWSTACK;
391 iMainStyle = iMainStyle | BF_SETUP_MAIN_FP_HEADERICON;
392 iMainStyle = iMainStyle | BF_SETUP_MAIN_ASK_EXIT;
393 iMainStyle = iMainStyle | BF_SETUP_MAIN_ASK_COPY;
394 iMainStyle = iMainStyle | BF_SETUP_NODEPANEL_DESELECT_AFTER_COPY;
395 iMainStyle = iMainStyle | BF_SETUP_NODEPANEL_DESELECT_AFTER_MOVE;
396 iMainStyle = iMainStyle | BF_SETUP_OPERROSTER_DEFDIALOG;
397 iMainStyle = iMainStyle | BF_SETUP_CMDLINE_SHOWPATH;
398 iMainStyle = iMainStyle | BF_SETUP_FILESPANEL_TRACKERADDONS_SHOWICONS;
399 iMainStyle = iMainStyle | BF_SETUP_SEARCH_SETUP_VOLICONS;
400 iMainStyle = iMainStyle | BF_SETUP_AUTOSAVE;
401
402
403
404 SetColor(BF_COLOR_BACK,BF_DICT_SETUPCOLOR_PANELBACK,"back",0,0,200);
405 SetColor(BF_COLOR_FRAME,BF_DICT_SETUPCOLOR_PANELFRAME,"frame",82,255,255);
406 SetColor(BF_COLOR_NODE,BF_DICT_SETUPCOLOR_PANELNODE,"node",82,255,255);
407 SetColor(BF_COLOR_NODE_LINK,BF_DICT_SETUPCOLOR_PANELNODELINK,"node_link",255,200,200);
408 SetColor(BF_COLOR_NODE_DIR,BF_DICT_SETUPCOLOR_PANELNODEDIR,"node_dir",255,255,255);
409 SetColor(BF_COLOR_NODE_DIR_LINK,BF_DICT_SETUPCOLOR_PANELNODEDIRLINK,"node_dir_link",255,200,200);
410 SetColor(BF_COLOR_PANEL_INFO_TEXT,BF_DICT_SETUPCOLOR_PANELINFOTEXT,"panel_info_text",82,255,255);
411 SetColor(BF_COLOR_CURSOR_BACK,BF_DICT_SETUPCOLOR_PANELCURSORBACK,"cursor_back",0,170,189);
412 SetColor(BF_COLOR_CURSOR_TEXT,BF_DICT_SETUPCOLOR_PANELCURSORTEXT,"cursor_text",0,0,0);
413 SetColor(BF_COLOR_HEADER_TEXT,BF_DICT_SETUPCOLOR_PANELHEADERSTEXT,"header_text",0,170,189);
414 SetColor(BF_COLOR_PATH_FOCUSTEXT,BF_DICT_SETUPCOLOR_PANELFOCUSPATHTEXT,"focuspath_text",0,0,0);
415 SetColor(BF_COLOR_PATH_FOCUSBACK,BF_DICT_SETUPCOLOR_PANELFOCUSPATHBACK,"focuspath_back",0,170,189);
416 SetColor(BF_COLOR_PATH_TEXT,BF_DICT_SETUPCOLOR_PANELPATHTEXT,"path_text",82,255,255);
417 SetColor(BF_COLOR_PATH_BACK,BF_DICT_SETUPCOLOR_PANELPATHBACK,"path_back",0,0,200);
418 SetColor(BF_COLOR_NODE_SELECT,BF_DICT_SETUPCOLOR_PANELNODESELECTING,"node_select",255,255,0);
419 SetColor(BF_COLOR_NODE_FOCUSSELECT,BF_DICT_SETUPCOLOR_PANELNODEFOCUSSELECTING,"node_focusselect",255,255,0);
420
421 SetColor(BF_COLOR_DIALOG_VIEWBORDER_FOCUSED,BF_DICT_SETUPCOLOR_DIALOGFOCUSEDBORDER,"viewwborder_focused",200,0,0);
422 SetColor(BF_COLOR_DIALOG_VIEWBORDER_UNFOCUSED,BF_DICT_SETUPCOLOR_DIALOGUNFOCUSEDBAR,"viewwborder_unfocused",0,0,0);
423
424 SetColor(BF_COLOR_DIALOG_BACK,BF_DICT_SETUPCOLOR_DIALOGBACK,"dialog_back",170,170,170);
425 SetColor(BF_COLOR_DIALOG_TEXT,BF_DICT_SETUPCOLOR_DIALOGTEXT,"dialog_text",0,0,0);
426 SetColor(BF_COLOR_DIALOG_MENU_ITEMSELECTED,BF_DICT_SETUPCOLOR_DIALOGMENU,"dialog_menu_itemselected",0,255,0);
427 SetColor(BF_COLOR_DIALOG_EDIT_TEXT,BF_DICT_SETUPCOLOR_DIALOGEDITTEXT,"dialog_edit_text",0,0,0);
428 SetColor(BF_COLOR_DIALOG_EDIT_BACK,BF_DICT_SETUPCOLOR_DIALOGEDITBACK,"dialog_edit_back",0,170,189);
429 SetColor(BF_COLOR_DIALOG_BUTTON_FOCUS,BF_DICT_SETUPCOLOR_DIALOGBUTTONFOCUS,"dialog_button_focus",0,170,189);
430 SetColor(BF_COLOR_DIALOG_BUTTON_TEXT,BF_DICT_SETUPCOLOR_DIALOGBUTTONTEXT,"dialog_button_text",0,0,0);
431 SetColor(BF_COLOR_DIALOG_PROGRESS_EMPTY,BF_DICT_SETUPCOLOR_DIALOGPROGRESSBARE,"dialog_progress_empty",150,150,150);
432 SetColor(BF_COLOR_DIALOG_PROGRESS_FILLED,BF_DICT_SETUPCOLOR_DIALOGPROGRESSBARF,"dialog_progress_filled",100,100,100);
433
434 SetColor(BF_COLOR_RED,BF_DICT_SETUPCOLOR_DIALOGRED,"red_color",255,0,0);
435
436 SetColor(BF_COLOR_CMDLINE_BACK,BF_DICT_SETUPCOLOR_COMMANDLINE_BACK,"cmdline_back",0,0,0);
437 SetColor(BF_COLOR_CMDLINE_TEXT,BF_DICT_SETUPCOLOR_COMMANDLINE_TEXT,"cmdline_text",82,255,255);
438
439 SetColor(BF_COLOR_TEXTVIEWER_STATUS_TEXT,BF_DICT_SETUPCOLOR_TEXTVIEWER1,"textviewer_statusbar_text",0,0,0);
440 SetColor(BF_COLOR_TEXTVIEWER_STATUS_BACK,BF_DICT_SETUPCOLOR_TEXTVIEWER2,"textviewer_statusbar_back",0,170,189);
441 SetColor(BF_COLOR_TEXTVIEWER_TEXT,BF_DICT_SETUPCOLOR_TEXTVIEWER3,"textviewer_text",255,255,255);
442 SetColor(BF_COLOR_TEXTVIEWER_BACK,BF_DICT_SETUPCOLOR_TEXTVIEWER4,"textviewer_back",0,0,200);
443
444
445 {
446 oFontNode.Set("Tahoma",B_REGULAR_FACE,B_FORCE_ANTIALIASING,11.0);
447 oFontMono.Set("Courier New",B_REGULAR_FACE,B_FORCE_ANTIALIASING,11.0);
448 oFontToolView = oFontNode;
449 oFontCMDLine = oFontNode;
450 }
451
452 }
453
454 void
455 BF_GUI_Setup::SetColor(int i_Index,int32 i_DictCode,const char *pc_Code,uint8 i_R,uint8 i_G,uint8 i_B,uint8 i_A)
456 {
457 RGBA_SET(aoColor[i_Index].rgb,i_R,i_G,i_B,i_A);
458 aoColor[i_Index].iDictCode = i_DictCode;
459 aoColor[i_Index].sCode = pc_Code;
460 }
461
462 uint32
463 BF_GUI_Setup::MainStyle()
464 { return iMainStyle; }
465
466 uint32
467 BF_GUI_Setup::FPanelFullStyle()
468 { return iFPanelFullStyle;}
469 uint32
470 BF_GUI_Setup::FPanelColsStyle()
471 { return iFPanelColsStyle;}
472
473 void
474 BF_GUI_Setup::SetMainStyle(uint32 i_Style)
475 {
476 iMainStyle = i_Style;
477 }
478
479 void
480 BF_GUI_Setup::UpdateFrom(BF_GUI_Setup & o_Src)
481 {
482 o_Src.CopyTo(*this);
483 }
484
485 void
486 BF_GUI_Setup::CopyTo(BF_GUI_Setup & o_Res)
487 {
488
489 o_Res.iFPanelFullStyle = iFPanelFullStyle;
490 o_Res.iFPanelColsStyle = iFPanelColsStyle;
491 o_Res.iMainStyle = iMainStyle;
492
493 for(int iCol=0;iCol<BF_COLOR_END;iCol++){
494 o_Res.aoColor[iCol] = aoColor[iCol];
495 }
496
497 o_Res.oPathSysTrash = oPathSysTrash;
498
499 o_Res.oFontNode = oFontNode;
500 o_Res.oFontToolView = oFontToolView;
501 o_Res.oFontMono = oFontMono;
502 o_Res.oFontCMDLine = oFontCMDLine;
503
504 o_Res.iPathHistorySize = iPathHistorySize;
505 }
506
507 BF_ConfigFile::BF_ConfigFile(const char *pc_Path, uint32 i_OpenMode)
508 :BL_File(pc_Path,i_OpenMode)
509 {}
510
511 status_t
512 BF_ConfigFile::WriteStyle(uint32 i_Styles,uint32 i_Style,const char *pc_Text)
513 {
514 if(!(i_Styles & i_Style)) return B_OK;
515 return WriteChar(pc_Text);
516 }
517
518 bool
519 BF_ConfigFile::IsLineVar(const char *pc_VarName)
520 {
521 ASSERT(pc_VarName);
522 return sLine.FindFirst(pc_VarName)==0;
523 }
524
525 status_t
526 BF_ConfigFile::ReadLine()
527 {
528 return ReadString(&sLine);
529 }
530
531 bool
532 BF_ConfigFile::VarTo(BL_String & s_Var)
533 {
534 int i=sLine.FindFirst("=");
535 if(i<0) return false;
536 sLine.CopyInto(s_Var,i+1,sLine.Length()-i);
537 return true;
538 }
539
540 status_t
541 BF_ConfigFile::ReadColor(BF_GUI_Setup_Color &o_Color)
542 {
543 BL_String s,s1;
544 status_t uRes = ReadString(&s);
545 if(B_OK!=uRes) return uRes;
546 if(s=="}") return B_ERROR;
547
548
549 int i=s.FindFirst("=");
550 if(i<0) return B_ERROR;
551 s.CopyInto(o_Color.sCode,0,i);
552 i++;
553
554
555 int i1=s.FindFirst(",",i);
556 if(i1<0) return B_ERROR;
557 s.CopyInto(s1,i,i1-i);
558 o_Color.rgb.red=s1.Int32();
559 i = i1+1;
560
561
562 i1=s.FindFirst(",",i);
563 if(i1<0) return B_ERROR;
564 s.CopyInto(s1,i,i1-i);
565 o_Color.rgb.green=s1.Int32();
566 i = i1+1;
567
568
569 if(i1<0) return B_ERROR;
570 s.CopyInto(s1,i,s.Length()-i);
571 o_Color.rgb.blue=s1.Int32();
572
573 return B_OK;
574 }
575
576 void
577 BF_GUI_Setup::Save_Colors(BF_ConfigFile & o_File)
578 {
579 o_File.WriteChar("colors{");
580 for(int iColor=0;iColor<BF_COLOR_END;iColor++){
581 aoColor[iColor].Save(o_File);
582 }
583 o_File.WriteChar("}");
584 }
585
586 void
587 BF_GUI_Setup::Save_Fonts(BF_ConfigFile & o_File)
588 {
589 oFontNode.Save("node",o_File);
590 oFontToolView.Save("tool",o_File);
591 oFontMono.Save("mono",o_File);
592 oFontCMDLine.Save("cmdline",o_File);
593 }
594
595 void
596 BF_GUI_Setup::Load(bool b_ShowErrors)
597 {
598 BL_String s,s1;
599
600
601 s="";
602 s<<BEFAR_SETTINGS_DIR;
603 s<<"main.settings";
604
605 BF_ConfigFile oFile(s.String(),B_READ_ONLY);
606 status_t uErr = oFile.InitCheck();
607
608 if(B_OK==uErr){
609 while(B_OK==oFile.ReadLine()){
610
611 if(oFile.IsLineVar("settings_version")) continue;else
612
613 if(oFile.IsLineVar("dict_file=")){
614 oFile.VarTo(sDictFile);
615 }else
616
617 if(oFile.IsLineVar("main_style")){
618 iMainStyle=0;
619 while(B_OK==oFile.ReadLine() && oFile.sLine!="}"){
620 s = oFile.sLine;
621 if(s=="RETURN_REMEMBER") iMainStyle = iMainStyle | BF_SETUP_MAIN_RETURN_REMEMBER;else
622 if(s=="ASK_DELETE") iMainStyle = iMainStyle | BF_SETUP_MAIN_ASK_DELETE;else
623 if(s=="ASK_COPY") iMainStyle = iMainStyle | BF_SETUP_MAIN_ASK_COPY;else
624 if(s=="ASK_EXIT") iMainStyle = iMainStyle | BF_SETUP_MAIN_ASK_EXIT;else
625 if(s=="SELECTVOL_SHOWSICON") iMainStyle = iMainStyle | BF_SETUP_MAIN_SELECTVOL_SHOWSICON;else
626 if(s=="SELECTVOL_SHOWSPEC") iMainStyle = iMainStyle | BF_SETUP_MAIN_SELECTVOL_SHOWSPEC;else
627 if(s=="SELECTVOL_SHOWSTACK") iMainStyle = iMainStyle | BF_SETUP_MAIN_SELECTVOL_SHOWSTACK;else
628 if(s=="FP_HEADERICON") iMainStyle = iMainStyle | BF_SETUP_MAIN_FP_HEADERICON;else
629 if(s=="NODEPANEL_DESELECT_AFTER_COPY") iMainStyle = iMainStyle | BF_SETUP_NODEPANEL_DESELECT_AFTER_COPY;else
630 if(s=="NODEPANEL_DESELECT_AFTER_MOVE") iMainStyle = iMainStyle | BF_SETUP_NODEPANEL_DESELECT_AFTER_MOVE;else
631 if(s=="NODEPANEL_USE_BACKSPACE") iMainStyle = iMainStyle | BF_SETUP_NODEPANEL_USE_BACKSPACE;else
632 if(s=="OPERROSTER_DEFDIALOG") iMainStyle = iMainStyle | BF_SETUP_OPERROSTER_DEFDIALOG;else
633 if(s=="CMDLINE_SHOWPATH") iMainStyle = iMainStyle | BF_SETUP_CMDLINE_SHOWPATH;else
634 if(s=="FILESPANEL_TRACKERADDONS_SHOWICONS") iMainStyle = iMainStyle | BF_SETUP_FILESPANEL_TRACKERADDONS_SHOWICONS;else
635 if(s=="SETUP_SEARCH_SETUP_VOLICONS") iMainStyle = iMainStyle | BF_SETUP_SEARCH_SETUP_VOLICONS;else
636 if(s=="SETUP_AUTOSAVE") iMainStyle = iMainStyle | BF_SETUP_AUTOSAVE; else
637
638 if(s=="SETUP_DEB_NOMONITORING") iMainStyle = iMainStyle | BF_SETUP_DEB_NOMONITORING; else
639 if(s=="BF_SETUP_DEB_NOSORTING") iMainStyle = iMainStyle | BF_SETUP_DEB_NOSORTING; else
640 {}
641 }
642 }else
643
644 if(oFile.IsLineVar("colors{")){
645 LoadColors(oFile);
646 }else
647
648 if(oFile.IsLineVar("font{")){
649 if(B_OK!=oFile.ReadString(&s)) break;
650 if(s=="node") oFontNode.Load(oFile);else
651 if(s=="tool") oFontToolView.Load(oFile);else
652 if(s=="mono") oFontMono.Load(oFile);else
653 if(s=="cmdline")oFontCMDLine.Load(oFile);else
654 {}
655 }else
656 {}
657 }
658 }
659
660
661 oVars.Load();
662 }
663
664 void
665 BF_GUI_Setup::Save()
666 {
667 if(B_OK!=BF_Roster_MakeDir(BEFAR_SETTINGS_DIR)){
668 BF_Dialog_Alert_Sep(BF_DictAt(BF_DICT_SETUP_ERR2),"",NULL,poWin->CurrentFocus());
669 return;
670 }
671
672 BL_String s,s1;
673 status_t uErr;
674 s = BEFAR_SETTINGS_DIR;
675 s<<"main.settings";
676
677 BF_ConfigFile oFile(s.String(),B_READ_WRITE|B_CREATE_FILE|B_ERASE_FILE);
678 uErr = oFile.InitCheck();
679
680 if(uErr!=B_OK){
681 s = BF_DictAt( BF_DICT_SETUP_ERR2 );
682 BL_System_TranslError(uErr,s1);
683 s<<s1;
684 BF_Dialog_Alert_Sep(s1.String(),"",NULL,poWin->CurrentFocus());
685 return;
686 }
687
688 oFile.WriteChar("settings_version=1");
689
690 oFile.WriteVar("dict_file",sDictFile.String());
691
692
693 oFile.WriteChar("main_style{");
694 oFile.WriteStyle(iMainStyle,BF_SETUP_MAIN_RETURN_REMEMBER,"RETURN_REMEMBER");
695 oFile.WriteStyle(iMainStyle,BF_SETUP_MAIN_ASK_DELETE,"ASK_DELETE");
696 oFile.WriteStyle(iMainStyle,BF_SETUP_MAIN_ASK_EXIT,"ASK_EXIT");
697 oFile.WriteStyle(iMainStyle,BF_SETUP_MAIN_ASK_COPY,"ASK_COPY");
698 oFile.WriteStyle(iMainStyle,BF_SETUP_MAIN_SELECTVOL_SHOWSICON,"SELECTVOL_SHOWSICON");
699 oFile.WriteStyle(iMainStyle,BF_SETUP_MAIN_SELECTVOL_SHOWSPEC,"SELECTVOL_SHOWSPEC");
700 oFile.WriteStyle(iMainStyle,BF_SETUP_MAIN_SELECTVOL_SHOWSTACK,"SELECTVOL_SHOWSTACK");
701 oFile.WriteStyle(iMainStyle,BF_SETUP_MAIN_FP_HEADERICON,"FP_HEADERICON");
702 oFile.WriteStyle(iMainStyle,BF_SETUP_NODEPANEL_DESELECT_AFTER_COPY,"NODEPANEL_DESELECT_AFTER_COPY");
703 oFile.WriteStyle(iMainStyle,BF_SETUP_NODEPANEL_DESELECT_AFTER_MOVE,"NODEPANEL_DESELECT_AFTER_MOVE");
704 oFile.WriteStyle(iMainStyle,BF_SETUP_NODEPANEL_USE_BACKSPACE,"NODEPANEL_USE_BACKSPACE");
705 oFile.WriteStyle(iMainStyle,BF_SETUP_OPERROSTER_DEFDIALOG,"OPERROSTER_DEFDIALOG");
706 oFile.WriteStyle(iMainStyle,BF_SETUP_CMDLINE_SHOWPATH,"CMDLINE_SHOWPATH");
707 oFile.WriteStyle(iMainStyle,BF_SETUP_FILESPANEL_TRACKERADDONS_SHOWICONS,"FILESPANEL_TRACKERADDONS_SHOWICONS");
708 oFile.WriteStyle(iMainStyle,BF_SETUP_SEARCH_SETUP_VOLICONS,"SETUP_SEARCH_SETUP_VOLICONS");
709 oFile.WriteStyle(iMainStyle,BF_SETUP_AUTOSAVE,"SETUP_AUTOSAVE");
710
711 oFile.WriteStyle(iMainStyle,BF_SETUP_DEB_NOMONITORING,"SETUP_DEB_NOMONITORING");
712 oFile.WriteStyle(iMainStyle,BF_SETUP_DEB_NOSORTING,"SETUP_DEB_NOSORTING");
713
714 oFile.WriteChar("}");
715
716 Save_Colors(oFile);
717
718 Save_Fonts(oFile);
719
720 oVars.Save();
721 }
722
723
724 void
725 BF_GUI_Setup::LoadPalete(const char *pc_FileName)
726 {
727 ASSERT(pc_FileName);
728
729 BL_String s,s1;
730 s = BEFAR_SETTINGS_DIR;
731 s<<"paletes/";
732 s<<pc_FileName;
733
734 BF_ConfigFile oFile(s.String(),B_READ_WRITE);
735 status_t uErr = oFile.InitCheck();
736
737 if(uErr!=B_OK){
738 s = BF_DictAt(BF_DICT_SETUP_ERR4);
739 BL_System_TranslError(uErr,s1);
740 s<<s1;
741 BF_Dialog_Alert_Sep(s1.String(),"",NULL,poWin->CurrentFocus());
742 return;
743 }
744
745 oFile.ReadString(&s);
746 if(s!="colors{") return;
747
748 LoadColors(oFile);
749
750 }
751
752 void
753 BF_GUI_Setup::LoadColors(BF_ConfigFile & o_File)
754 {
755 BF_GUI_Setup_Color oCol;
756 while(B_OK==o_File.ReadColor(oCol)){
757 SetColorByCode(oCol);
758 }
759 }
760
761 int32
762 BF_GUI_Setup::ColorIndexByCode(const char *pc_Code)
763 {
764 ASSERT(pc_Code);
765 for(int iCol=0;iCol<BF_COLOR_END;iCol++){
766 if(aoColor[iCol].sCode==pc_Code) return iCol;
767 }
768 return -1;
769 }
770
771 void
772 BF_GUI_Setup::SetColorByCode(BF_GUI_Setup_Color & o_ColFrom)
773 {
774 int32 iColIndex = ColorIndexByCode(o_ColFrom.sCode.String());
775 if(iColIndex<0) return;
776 aoColor[iColIndex] = o_ColFrom;
777
778 }
779
780 void
781 BF_GUI_Setup::SavePalete(const char *pc_FileName)
782 {
783
784 BL_String s,s1;
785 s = BEFAR_SETTINGS_DIR;
786 s<<"paletes";
787 if(B_OK!=BF_Roster_MakeDir(s.String())){
788 BF_Dialog_Alert_Sep(BF_DictAt(BF_DICT_SETUP_ERR2),"",NULL,poWin->CurrentFocus());
789 return;
790 }
791
792 status_t uErr;
793 s<<"/";
794 s<<pc_FileName;
795
796 BF_ConfigFile oFile(s.String(),B_READ_WRITE|B_CREATE_FILE|B_ERASE_FILE);
797 uErr = oFile.InitCheck();
798
799 if(uErr!=B_OK){
800 s = BF_DictAt(BF_DICT_SETUP_ERR5);
801 BL_System_TranslError(uErr,s1);
802 s<<s1;
803 BF_Dialog_Alert_Sep(s1.String(),"",NULL,poWin->CurrentFocus());
804 return;
805 }
806
807 Save_Colors(oFile);