From d7faf345b54fe1f4350d06a9533eac20fa988c46 Mon Sep 17 00:00:00 2001 From: cpicanco Date: Mon, 26 Dec 2016 18:35:09 -0300 Subject: [PATCH] experiment designer - improve cross plataform file handle --- experiment_designer/form_main.pas | 56 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/experiment_designer/form_main.pas b/experiment_designer/form_main.pas index a63d069..6d133ae 100644 --- a/experiment_designer/form_main.pas +++ b/experiment_designer/form_main.pas @@ -176,6 +176,9 @@ type procedure SpinEditOnConditionBeginAEditingDone(Sender: TObject); procedure SpinEditTurnValueEditingDone(Sender: TObject); procedure XMLPropStorageRestoreProperties(Sender: TObject); + {$IFDEF WINDOWS} + procedure XMLPropStorageSaveProperties(Sender: TObject); + {$ENDIF} procedure XMLPropStorageSavingProperties(Sender: TObject); procedure XMLPropStorageStoredValuesFileNameRestore(Sender: TStoredValue; var Value: TStoredType); @@ -213,6 +216,7 @@ type procedure IncContingencyName(var AContingency : string; N : integer = 1); procedure ReadContingencyNames(ASection, AContingency, AKeySuffix:string; S:TStrings); procedure ReadContingencyValuesInSection(LS, LC : string; Keys:TStrings); + procedure SetPropstorageFilename; public { public declarations } end; @@ -222,7 +226,12 @@ var implementation -uses game_resources, game_actors, game_actors_point, string_methods, strutils; +uses game_resources, game_actors, game_actors_point, string_methods, strutils + {$IFDEF WINDOWS} + , Dos + {$ENDIF} + , Dos + ; const SV_FILENAME : string = 'Filename'; @@ -240,7 +249,7 @@ begin FExperiment.Free; FExperiment := TIniFile.Create(OpenDialog.FileName); XMLPropStorage.StoredValue[SV_FILENAME] := FExperiment.FileName; - XMLPropStorage.FileName := ExtractFilePath(FExperiment.FileName)+'persistence.xml'; + SetPropstorageFilename; LoadExperiment; OpenDialog.InitialDir:=ExtractFilePath(FExperiment.FileName); @@ -262,9 +271,7 @@ begin CopyFile(LOldExperimentPath,SaveDialog.FileName); FExperiment := TIniFile.Create(SaveDialog.FileName); XMLPropStorage.StoredValue[SV_FILENAME] := FExperiment.FileName; - - XMLPropStorage.FileName := ExtractFilePath(FExperiment.FileName)+'persistence.xml'; - + SetPropstorageFilename; OpenDialog.InitialDir:=ExtractFilePath(FExperiment.FileName); SaveDialog.InitialDir:=ExtractFilePath(FExperiment.FileName); end; @@ -603,6 +610,20 @@ begin TabSheetContingencies.Enabled := ComboCurrentCondition.Items.Count > 0; end; +{$IFDEF WINDOWS} +procedure TFormDesigner.XMLPropStorageSaveProperties(Sender: TObject); +var + F : TextFile; +begin + if FileExists(XMLPropStorage.FileName) then + begin + AssignFile(F, XMLPropStorage.FileName); + SetFAttr(F,Hidden); + CloseFile(F); + end; +end; +{$ENDIF} + procedure TFormDesigner.XMLPropStorageSavingProperties(Sender: TObject); procedure SavePropStorageFilename; var @@ -959,6 +980,24 @@ begin end; end; +procedure TFormDesigner.SetPropstorageFilename; +var + LRootPath : string; +begin + if FExperiment.FileName = '' then + LRootPath := ExtractFilePath(Application.ExeName) + else + LRootPath := ExtractFilePath(FExperiment.FileName); + + {$IFDEF WINDOWS} + XMLPropStorage.FileName := LRootPath+'persistence.xml'; + {$ENDIF} + + {$IFDEF LINUX} + XMLPropStorage.FileName := LRootPath+'.persistence'; + {$ENDIF} +end; + procedure TFormDesigner.SaveSectionExperiment; begin with FExperiment do @@ -1335,12 +1374,15 @@ var end end; begin + {$IFDEF WINDOWS} + XMLPropStorage.OnSaveProperties := @XMLPropStorageSaveProperties; + {$ENDIF} + // TRadioGroup OnClick events are triggered programmatically by LCL code, not by us // FLoading is a temporary workaround to avoid // calls for SaveProcedures while loading FExperiment FLoading := True; - LRootPath := ExtractFilePath(Application.ExeName); // FPersistentTXTFilename must not change during runtime. @@ -1349,7 +1391,7 @@ begin // XMLPropStorage.FileName may change during runtime XMLPropStorage.FileName := ReadLnFromFile(FPersistentTXTFilename,0); if XMLPropStorage.FileName = '' then - XMLPropStorage.FileName := LRootPath+'persistence.xml'; + SetPropstorageFilename; // XMLPropStorage.StoredValue[SV_FILENAME] may change during runtime XMLPropStorage.StoredValue[SV_FILENAME] := LRootPath+'persistence.ini'; -- libgit2 0.21.2