{ Apophysis Copyright (C) 2001-2004 Mark Townsend Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne Apophysis AV "Phoenix Edition" Copyright (C) 2021-2022 Alice V. Koryagina This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit Settings; interface uses Graphics; function ReadPluginDir: string; procedure ReadSettings; procedure SaveSettings; implementation uses Windows, Classes, SysUtils, StrUtils, Forms, Registry, Global, Dialogs, XFormMan; (* function ReadPluginDir: string; var settingFileName: string; sl : TStringList; begin sl := TStringList.Create; settingFileName := ExtractFilePath(Application.ExeName) + 'ApoPluginSrc.dat'; if FileExists(settingFileName) then sl.LoadFromFile(settingFileName) else begin settingFileName := GetEnvVarValue('APPDATA') + '\ApoPluginSrc.dat'; if FileExists(settingFileName) then sl.LoadFromFile(settingFileName) else sl.Text := ExtractFilePath(Application.ExeName) + 'Plugins\'; end; if Trim(sl.Text) = '' then sl.Text := ExtractFilePath(Application.ExeName) + 'Plugins\'; Result := Trim(sl.Text); if (RightStr(Result, 1) <> '\') and (Result <> '') then Result := Result + '\'; sl.Free; end; procedure SavePluginDir(data: string); var settingFileName: string; sl : TStringList; begin settingFileName := ExtractFilePath(Application.ExeName) + 'ApoPluginSrc.dat'; sl := TStringList.Create; sl.Text := PluginPath; try sl.SaveToFile(settingFileName); sl.Destroy; except // not elevated? settingFileName := GetEnvVarValue('APPDATA') + '\ApoPluginSrc.dat'; try sl.SaveToFile(settingFileName); except MessageBox(0, PCHAR(TextByKey('main-status-pluginpath-ioerror')), PCHAR('Apophysis'), MB_ICONWARNING); end; sl.Free; end; end; *) // AV: rewrote to save the plugin directory in the Windows registry // because this 'ApoPluginSrc.dat' always resets my settings! function ReadPluginDir: string; var Registry: TRegistry; plugdir: string; begin plugdir := ExtractFilePath(Application.ExeName) + 'Plugins\'; Result := plugdir; Registry := TRegistry.Create; try Registry.RootKey := HKEY_CURRENT_USER; if Registry.OpenKey('Software\' + APP_NAME + '\Defaults', False) then begin if Registry.ValueExists('PluginPath') then begin Result := Trim(Registry.ReadString('PluginPath')); if (RightStr(Result, 1) <> '\') and (Result <> '') then Result := Result + '\'; end else Result := plugdir; Registry.CloseKey; end else Result := plugdir; finally Registry.Free; if (Result = '') or (not DirectoryExists(Result)) then Result := ExtractFilePath(Application.ExeName); // AV end; end; procedure ReadSettings; var Registry: TRegistry; DefaultPath: string; i: integer; VarUsed: byte; begin // DefaultPath := GetEnvVarValue('USERPROFILE'); DefaultPath := AppPath; // AV: backward compatibility is more convenient PluginPath := ReadPluginDir; // AV Registry := TRegistry.Create; try Registry.RootKey := HKEY_CURRENT_USER; { Defaults } if Registry.OpenKey('Software\' + APP_NAME + '\Defaults', False) then begin if Registry.ValueExists('DefaultFlameFile3D') then defFlameFile := Registry.ReadString('DefaultFlameFile3D') else defFlameFile := ''; if Registry.ValueExists('AlwaysCreateBlankFlame') then AlwaysCreateBlankFlame := Registry.ReadBool('AlwaysCreateBlankFlame') else AlwaysCreateBlankFlame := false; if Registry.ValueExists('GradientFile') then GradientFile := Registry.ReadString('GradientFile') else GradientFile := ''; if Registry.ValueExists('SavePath3D') then SavePath := Registry.ReadString('SavePath3D') else SavePath := DefaultPath + 'Flames.flame'; if Registry.ValueExists('RandomizeTemplates') then RandomizeTemplates := Registry.ReadBool('RandomizeTemplates') else RandomizeTemplates := True; if Registry.ValueExists('WarnOnMissingPlugin') then WarnOnMissingPlugin := Registry.ReadBool('WarnOnMissingPlugin') else WarnOnMissingPlugin := true; if Registry.ValueExists('SetEnglishLayout') then SetEngLayout := Registry.ReadBool('SetEnglishLayout') else SetEngLayout := false; if Registry.ValueExists('ApplyFlatten') then ApplyFlatten := Registry.ReadBool('ApplyFlatten') else ApplyFlatten := true; if Registry.ValueExists('LanguageFile') then LanguageFile := Registry.ReadString('LanguageFile') else LanguageFile := ''; if Registry.ValueExists('SmoothPaletteFile') then defSmoothPaletteFile := Registry.ReadString('SmoothPaletteFIle') else defSmoothPaletteFile := DefaultPath + 'Gradients\SmoothPalette.ugr'; if Registry.ValueExists('PlaySoundOnRenderComplete') then PlaySoundOnRenderComplete := Registry.ReadBool('PlaySoundOnRenderComplete') else PlaySoundOnRenderComplete := false; if Registry.ValueExists('RenderCompleteSoundFile') then RenderCompleteSoundFile := Registry.ReadString('RenderCompleteSoundFile') else RenderCompleteSoundFile := ''; if Registry.ValueExists('ConfirmDelete') then ConfirmDelete := Registry.ReadBool('ConfirmDelete') else ConfirmDelete := True; if Registry.ValueExists('OldPaletteFormat') then OldPaletteFormat := Registry.ReadBool('OldPaletteFormat') else OldPaletteFormat := false; if Registry.ValueExists('ConfirmExit') then ConfirmExit := Registry.ReadBool('ConfirmExit') else ConfirmExit := True; if Registry.ValueExists('ConfirmClearScript') then // AV ConfirmClearScript := Registry.ReadBool('ConfirmClearScript') else ConfirmClearScript := False; if Registry.ValueExists('ConfirmResetUndo') then // AV ConfirmResetUndo := Registry.ReadBool('ConfirmResetUndo') else ConfirmResetUndo := False; if Registry.ValueExists('PreserveQuality') then PreserveQuality := Registry.ReadBool('PreserveQuality') else PreserveQuality := true; if Registry.ValueExists('KeepBackground') then KeepBackground := Registry.ReadBool('KeepBackground') else KeepBackground := False; if Registry.ValueExists('NumTries') then NumTries := Registry.ReadInteger('NumTries') else NumTries := 10; if Registry.ValueExists('TryLength') then TryLength := Registry.ReadInteger('TryLength') else TryLength := 100000; if Registry.ValueExists('MinTransforms') then begin randMinTransforms := Registry.ReadInteger('MinTransforms'); if randMinTransforms < 2 then randMinTransforms := 2; end else randMinTransforms := 2; if Registry.ValueExists('MaxTransforms') then begin randMaxTransforms := Registry.ReadInteger('MaxTransforms'); if randMaxTransforms < randMinTransforms then randMaxTransforms := randMinTransforms; end else randMaxTransforms := randMinTransforms + 1; if Registry.ValueExists('MutationMinTransforms') then begin mutantMinTransforms := Registry.ReadInteger('MutationMinTransforms'); if mutantMinTransforms < 2 then mutantMinTransforms := 2; end else mutantMinTransforms := 2; if Registry.ValueExists('MutationMaxTransforms') then begin mutantMaxTransforms := Registry.ReadInteger('MutationMaxTransforms'); if mutantMaxTransforms < mutantMinTransforms then mutantMinTransforms := mutantMinTransforms; end else mutantMaxTransforms := mutantMinTransforms + 1; if Registry.ValueExists('RandomGradient') then randGradient := Registry.ReadInteger('RandomGradient') else randGradient := 0; if Registry.ValueExists('ParameterFolder3D') then ParamFolder := Registry.ReadString('ParameterFolder3D') else ParamFolder := DefaultPath; if Registry.ValueExists('UPRPath') then UPRPath := Registry.ReadString('UPRPath') else UPRPath := DefaultPath + 'ApophysisAV_export.upr'; // AV if Registry.ValueExists('ImageFolder') then ImageFolder := Registry.ReadString('ImageFolder') else ImageFolder := GetEnvVarValue('USERPROFILE') + '\Pictures\'; // AV if Registry.ValueExists('ScreenshotsFolder') then // AV ScreenShotPath := Registry.ReadString('ScreenshotsFolder') else ScreenShotPath := DefaultPath + 'ScreenShots\'; if Registry.ValueExists('DefaultScript') then // AV defScriptFile := Registry.ReadString('DefaultScript') else defScriptFile := ''; if Registry.ValueExists('AutoSaveXML') then // AV AutoSaveXML := Registry.ReadBool('AutoSaveXML') else AutoSaveXML := true; if Registry.ValueExists('UPRWidth') then UPRWidth := Registry.ReadInteger('UPRWidth') else UPRWidth := 640; if Registry.ValueExists('UPRHeight') then UPRHeight := Registry.ReadInteger('UPRHeight') else UPRHeight := 480; if Registry.ValueExists('BrowserPath') then BrowserPath := Registry.ReadString('BrowserPath') else BrowserPath := DefaultPath; if Registry.ValueExists('EditPreviewQaulity') then EditPrevQual := Registry.ReadInteger('EditPreviewQaulity') else EditPrevQual := 1; if Registry.ValueExists('MutatePreviewQaulity') then MutatePrevQual := Registry.ReadInteger('MutatePreviewQaulity') else MutatePrevQual := 0; // AV: hack, to speed up the calculations if Registry.ValueExists('AdjustPreviewQaulity') then AdjustPrevQual := Registry.ReadInteger('AdjustPreviewQaulity') else AdjustPrevQual := 1; if Registry.ValueExists('ThumbPrevQuality') then // AV ThumbPrevQual := Registry.ReadInteger('ThumbPrevQuality') else ThumbPrevQual := 1; if Registry.ValueExists('AnimPrevQuality') then // AV AnimPrevQual := Registry.ReadInteger('AnimPrevQuality') else AnimPrevQual := 1; if Registry.ValueExists('RandomPrefix') then RandomPrefix := Registry.ReadString('RandomPrefix') else RandomPrefix := 'ApoAV-'; if Registry.ValueExists('RandomDate') then RandomDate := Registry.ReadString('RandomDate') else RandomDate := ''; if Registry.ValueExists('RandomIndex') then RandomIndex := Registry.ReadInteger('RandomIndex') else RandomIndex := 0; if Registry.ValueExists('SymmetryType') then SymmetryType := Registry.ReadInteger('SymmetryType') else SymmetryType := 0; if Registry.ValueExists('SymmetryOrder') then SymmetryOrder := Registry.ReadInteger('SymmetryOrder') else SymmetryOrder := 4; if Registry.ValueExists('SymmetryNVars') then SymmetryNVars := Registry.ReadInteger('SymmetryNVars') else SymmetryNVars := 12; if Registry.ValueExists('RandBackColor') then RandBackColor := Registry.ReadInteger('RandBackColor') else RandBackColor := $000000; if Registry.ValueExists('MinNodes') then begin MinNodes := Registry.ReadInteger('MinNodes'); if MinNodes < 2 then MinNodes := 2; end else MinNodes := 2; if Registry.ValueExists('MinHue') then MinHue := Registry.ReadInteger('MinHue') else MinHue := 0; if Registry.ValueExists('MinSat') then MinSat := Registry.ReadInteger('MinSat') else MinSat := 0; if Registry.ValueExists('MinLum') then MinLum := Registry.ReadInteger('MinLum') else MinLum := 0; if Registry.ValueExists('MaxNodes') then begin MaxNodes := Registry.ReadInteger('MaxNodes'); if MaxNodes < MinNodes then MaxNodes := MinNodes; end else MaxNodes := 10; if Registry.ValueExists('MaxHue') then begin MaxHue := Registry.ReadInteger('MaxHue'); if MaxHue < 0 then MaxHue := 0; end else MaxHue := 600; if Registry.ValueExists('MaxSat') then begin MaxSat := Registry.ReadInteger('MaxSat'); if MaxSat < 0 then MaxSat := 0; end else MaxSat := 100; if Registry.ValueExists('EqualStripes') then // AV EqualStripes := Registry.ReadBool('EqualStripes') else EqualStripes := True; // gradient color stripes' width if Registry.ValueExists('ColorBlendType') then // AV randColorBlend := Registry.ReadInteger('ColorBlendType') else randColorBlend := 0; // RGB-blending if Registry.ValueExists('RandomGradientFile') then randGradientFile := Registry.ReadString('RandomGradientFile') else randGradientFile := ''; if Registry.ValueExists('RotationMode') then MainForm_RotationMode := Registry.ReadInteger('RotationMode') else MainForm_RotationMode := 0; if Registry.ValueExists('EnumerationMode') then // AV FlameEnumMode := Registry.ReadInteger('EnumerationMode') else FlameEnumMode := 0; if Registry.ValueExists('MaxLum') then begin MaxLum := Registry.ReadInteger('MaxLum'); if MaxLum <= 0 then MaxLum := 100; end else MaxLum := 100; if Registry.ValueExists('BatchSize') then begin BatchSize := Registry.ReadInteger('BatchSize'); if BatchSize <= 0 then BatchSize := 10; end else BatchSize := 10; if Registry.ValueExists('ScriptPath') then ScriptPath := Registry.ReadString('ScriptPath') else ScriptPath := DefaultPath + 'Scripts\'; if Registry.ValueExists('FunctionLibrary') then defLibrary := Registry.ReadString('FunctionLibrary') else // AV: moved back into the scripting folder defLibrary := DefaultPath + 'Scripts\Functions.asc'; if Registry.ValueExists('ExportFileFormat') then ExportFileFormat := Registry.ReadInteger('ExportFileFormat') else ExportFileFormat := 1; if Registry.ValueExists('ExportWidth') then begin ExportWidth := Registry.ReadInteger('ExportWidth'); if ExportWidth <= 0 then ExportWidth := 640; end else ExportWidth := 640; if Registry.ValueExists('ExportHeight') then begin ExportHeight := Registry.ReadInteger('ExportHeight'); if ExportHeight <= 0 then ExportHeight := 480; end else ExportHeight := 480; if Registry.ValueExists('ExportDensity') then begin ExportDensity := Registry.ReadFloat('ExportDensity'); if ExportDensity <= 0 then ExportDensity := 100; end else ExportDensity := 100; if Registry.ValueExists('ExportOversample') then begin ExportOversample := Registry.ReadInteger('ExportOversample'); if ExportOversample <= 0 then ExportOversample := 2; end else ExportOversample := 2; if Registry.ValueExists('ExportFilter') then begin ExportFilter := Registry.ReadFloat('ExportFilter'); if ExportFilter <= 0 then ExportFilter := 0.6; end else ExportFilter := 0.6; // AV: don't need to waste our time for these properties (* if Registry.ValueExists('ExportBatches') then begin ExportBatches := Registry.ReadInteger('ExportBatches'); if ExportBatches <= 0 then ExportBatches := 3; end else ExportBatches := 3; if Registry.ValueExists('Nick') then begin SheepNick := Registry.ReadString('Nick'); end else begin SheepNick := ''; end; if Registry.ValueExists('URL') then begin SheepURL := Registry.ReadString('URL'); end else begin SheepURL := ''; end; if Registry.ValueExists('Pass') then begin SheepPW := Registry.ReadString('Pass'); end else begin SheepPW := ''; end; if Registry.ValueExists('Server') then begin SheepServer := Registry.ReadString('Server'); end else begin SheepServer := 'http://v2d5.sheepserver.net/'; end; *) if Registry.ValueExists('Renderer') then flam3Path := Registry.ReadString('Renderer') else flam3Path := GetEnvVarValue('PROGRAMFILES') + '\flam3-3.0.1\flam3-render.exe'; // AV if Registry.ValueExists('ShowProgress') then ShowProgress := Registry.ReadBool('ShowProgress') else ShowProgress := true; if Registry.ValueExists('LineCenterColor') then LineCenterColor := Registry.ReadInteger('LineCenterColor') else LineCenterColor := $FFFFFF; if Registry.ValueExists('LineThirdsColor') then LineThirdsColor := Registry.ReadInteger('LineThirdsColor') else LineThirdsColor := $0000FF; if Registry.ValueExists('LineGRColor') then LineGRColor := Registry.ReadInteger('LineGRColor') else LineGRColor := $00FF00; if Registry.ValueExists('EnableGuides') then EnableGuides := Registry.ReadBool('EnableGuides') else EnableGuides := false; { FormRender } if Registry.ValueExists('SaveIncompleteRenders') then SaveIncompleteRenders := Registry.ReadBool('SaveIncompleteRenders') else SaveIncompleteRenders := false; if Registry.ValueExists('ShowRenderStats') then ShowRenderStats := Registry.ReadBool('ShowRenderStats') else ShowRenderStats := false; if Registry.ValueExists('ShowRenderImage') then // AV ShowRenderImage := Registry.ReadBool('ShowRenderImage') else ShowRenderImage := false; if Registry.ValueExists('LowerRenderPriority') then LowerRenderPriority := Registry.ReadBool('LowerRenderPriority') else LowerRenderPriority := false; if Registry.ValueExists('PNGTransparency') then begin PNGTransparency := Registry.ReadInteger('PNGTransparency'); if PNGTransparency > 1 then PNGTransparency := 1; // tmp end else PNGTransparency := 0; if Registry.ValueExists('ShowTransparency') then ShowTransparency := Registry.ReadBool('ShowTransparency') else ShowTransparency := False; if Registry.ValueExists('ExtendMainPreview') then ExtendMainPreview := Registry.ReadBool('ExtendMainPreview') else ExtendMainPreview := true; if Registry.ValueExists('MainPreviewScale') then begin MainPreviewScale := Registry.ReadFloat('MainPreviewScale'); if MainPreviewScale < 1 then MainPreviewScale := 1 else if MainPreviewScale > 3 then MainPreviewScale := 3; end else MainPreviewScale := 1.2; if Registry.ValueExists('NrTreads') then begin NrTreads := Registry.ReadInteger('NrTreads'); if NrTreads < 1 then NrTreads := 1; // AV end else NrTreads := 1; if Registry.ValueExists('UseNrThreads') then begin UseNrThreads := Registry.ReadInteger('UseNrThreads'); if UseNrThreads < 1 then UseNrThreads := 1; end else UseNrThreads := 1; (* if Registry.ValueExists('StartupCheckForUpdates') then begin StartupCheckForUpdates := Registry.ReadBool('StartupCheckForUpdates'); end else begin StartupCheckForUpdates := true; end; *) // AV: animation defaults if Registry.ValueExists('AnimPrefix') then defAnimPrefix := Registry.ReadString('AnimPrefix') else defAnimPrefix := 'animate-'; if Registry.ValueExists('AnimFPS') then AnimFPS := Registry.ReadInteger('AnimFPS') else AnimFPS := 25; if Registry.ValueExists('FrameExt') then defFrameExt := Registry.ReadInteger('FrameExt') else defFrameExt := 1; if Registry.ValueExists('CreateAnimFolder') then CreateAnimFolder := Registry.ReadBool('CreateAnimFolder') else CreateAnimFolder := True; if Registry.ValueExists('AutoOpenLog') then AutoOpenLog := Registry.ReadBool('AutoOpenLog') else AutoOpenLog := false; if Registry.ValueExists('ClassicListMode') then ClassicListMode := Registry.ReadBool('ClassicListMode') else ClassicListMode := true; if Registry.ValueExists('LastOpenFile') then LastOpenFile := Registry.ReadString('LastOpenFile') else LastOpenFile := ''; if Registry.ValueExists('LastOpenFileEntry') then LastOpenFileEntry := Registry.ReadInteger('LastOpenFileEntry') else LastOpenFileEntry := 1; if Registry.ValueExists('RememberLastOpenFile') then RememberLastOpenFile := Registry.ReadBool('RememberLastOpenFile') else RememberLastOpenFile := false; if Registry.ValueExists('UseSmallThumbnails') then UseSmallThumbnails := Registry.ReadBool('UseSmallThumbnails') else UseSmallThumbnails := true; if Registry.ValueExists('HelpPath') then HelpPath := Registry.ReadString('HelpPath') else HelpPath := DefaultPath + 'Apophysis AV.chm'; // TODO if Registry.ValueExists('ChaoticaPath') then ChaoticaPath := Registry.ReadString('ChaoticaPath') else ChaoticaPath := ''; { if Registry.ValueExists('UseX64IfPossible') then UseX64IfPossible := Registry.ReadBool('UseX64IfPossible') else UseX64IfPossible := false; } end else begin // StartupCheckForUpdates := true; AlwaysCreateBlankFlame := false; MainForm_RotationMode := 0; FlameEnumMode := 0; // AV EditPrevQual := 1; MutatePrevQual := 0; // AV: hack, to speed up the calculations AdjustPrevQual := 1; ThumbPrevQual := 1; // AV AnimPrevQual := 1; // AV GradientFile := ''; defFlameFile := ''; SavePath := DefaultPath + 'Flames.flame'; WarnOnMissingPlugin := true; SetEngLayout := false; ApplyFlatten := true; LanguageFile := ''; HelpPath := DefaultPath + 'Apophysis AV.chm'; defSmoothPaletteFile := DefaultPath + 'Gradients\SmoothPalette.ugr'; ConfirmDelete := True; ConfirmExit := True; ConfirmClearScript := False; // AV ConfirmResetUndo := False; // AV OldPaletteFormat := false; NumTries := 10; TryLength := 100000; randMinTransforms := 2; randMaxTransforms := 3; mutantMinTransforms := 2; mutantMaxTransforms := 6; randGradient := 0; PreserveQuality := false; KeepBackground := False; RandBackColor := $000000; RandomizeTemplates := True; UPRPath := DefaultPath + 'ApophysisAV_export.upr'; // AV ImageFolder := GetEnvVarValue('USERPROFILE') + '\Pictures\'; // AV ParamFolder := DefaultPath; ScreenShotPath := DefaultPath + 'ScreenShots\'; // AV defScriptFile := ''; // AV AutoSaveXML := True; // AV UPRWidth := 640; UPRHeight := 480; AnimFPS := 25; defFrameExt := 1; defAnimPrefix := 'animate-'; CreateAnimFolder := True; RandomPrefix := 'ApoAV-'; RandomIndex := 0; RandomDate := ''; SymmetryType := 0; SymmetryOrder := 4; SymmetryNVars := 12; MinNodes := 2; MaxNodes := 10; MinHue := 0; MinSat := 0; MinLum := 0; MaxHue := 600; MaxSat := 100; MaxLum := 100; randGradientFile := ''; randColorBlend := 0; // AV EqualStripes := True; // AV BatchSize := 10; ScriptPath := DefaultPath + 'Scripts\'; defLibrary := DefaultPath + 'Scripts\Functions.asc'; // AV ExportFileFormat := 1; ExportWidth := 640; ExportHeight := 480; ExportDensity := 100; ExportOversample := 2; ExportFilter := 0.6; (* ExportBatches := 3; SheepNick := ''; SheepURL := ''; SheepPW := ''; SheepServer := 'http://v2d5.sheepserver.net/'; *) flam3Path := GetEnvVarValue('PROGRAMFILES') + '\flam3-3.0.1\flam3-render.exe'; // AV ShowProgress := true; SaveIncompleteRenders := false; LowerRenderPriority := false; ShowRenderStats := false; ShowRenderImage := false; PNGTransparency := 0; ShowTransparency := False; MainPreviewScale := 1.2; ExtendMainPreview := true; NrTreads := 1; UseNrThreads := 1; AutoOpenLog := false; ClassicListMode := true; LastOpenFile := ''; LastOpenFileEntry := 1; RememberLastOpenFile := false; UseSmallThumbnails := true; LineCenterColor := $FFFFFF; LineThirdsColor := $0000FF; LineGRColor := $00FF00; EnableGuides := false; ChaoticaPath := ''; //UseX64IfPossible := false; end; Registry.CloseKey; SetLength(Variations, NRVAR); SetLength(FavouriteVariations, NRVAR); // AV if Registry.OpenKey('Software\' + APP_NAME + '\Variations', False) then begin for i := 0 to NRVAR-1 do begin if Registry.ValueExists(Varnames(i)) then begin VarUsed := Registry.ReadInteger(Varnames(i)); Variations[i] := (VarUsed and 1) <> 0; FavouriteVariations[i] := (VarUsed and 2) <> 0; end else Variations[i] := false; end; end else begin // AV: we dont't need multiple z- and pre_ variations by default... Variations[0] := True; // linear Variations[3] := True; // spherical for i := 10 to 14 do Variations[i] := True; Variations[46] := True; // pdj Variations[47] := True; // julian end; Registry.CloseKey; { Editor } // --Z-- moved from EditForm if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Editor', False) then begin if Registry.ValueExists('UseTransformColors') then UseTransformColors := Registry.ReadBool('UseTransformColors') else UseTransformColors := False; if Registry.ValueExists('HelpersEnabled') then HelpersEnabled := Registry.ReadBool('HelpersEnabled') else HelpersEnabled := true; if Registry.ValueExists('ShowAllXforms') then ShowAllXforms := Registry.ReadBool('ShowAllXforms') else ShowAllXforms := true; if Registry.ValueExists('AllowResetCoefs') then // AV AllowResetCoefs := Registry.ReadBool('AllowResetCoefs') else AllowResetCoefs := false; if Registry.ValueExists('AllowResetLinear') then // AV AllowResetLinear := Registry.ReadBool('AllowResetLinear') else AllowResetLinear := true; if Registry.ValueExists('SyncTriangles') then // AV UseTriangleSync := Registry.ReadBool('SyncTriangles') else UseTriangleSync := false; if Registry.ValueExists('EnableEditorPreview') then EnableEditorPreview := Registry.ReadBool('EnableEditorPreview') else EnableEditorPreview := false; if Registry.ValueExists('EditorPreviewTransparency') then EditorPreviewTransparency := Registry.ReadInteger('EditorPreviewTransparency') else EditorPreviewTransparency := 192; if Registry.ValueExists('BackgroundColor') then EditorBkgColor := Registry.ReadInteger('BackgroundColor') else EditorBkgColor := integer(clBlack); if Registry.ValueExists('GridColor1') then GridColor1 := Registry.ReadInteger('GridColor1') else GridColor1 := $444444; if Registry.ValueExists('GridColor2') then GridColor2 := Registry.ReadInteger('GridColor2') else GridColor2 := $333333; if Registry.ValueExists('HelpersColor') then HelpersColor := Registry.ReadInteger('HelpersColor') else HelpersColor := $808080; if Registry.ValueExists('ReferenceTriangleColor') then ReferenceTriangleColor := Registry.ReadInteger('ReferenceTriangleColor') else ReferenceTriangleColor := $7f7f7f; if Registry.ValueExists('FlipColor') then FlipColor := Registry.ReadInteger('FlipColor') else FlipColor := $808080; if Registry.ValueExists('ExtendedEdit') then ExtEditEnabled := Registry.ReadBool('ExtendedEdit') else ExtEditEnabled := true; if Registry.ValueExists('LockTransformAxis') then TransformAxisLock := Registry.ReadBool('LockTransformAxis') else TransformAxisLock := true; if Registry.ValueExists('RebuildXaosLinks') then RebuildXaosLinks := Registry.ReadBool('RebuildXaosLinks') else RebuildXaosLinks := true; end else begin UseTransformColors := false; HelpersEnabled := true; ShowAllXforms := true; EnableEditorPreview := false; EditorPreviewTransparency := 192; EditorBkgColor := $000000; GridColor1 := $444444; GridColor2 := $333333; HelpersColor := $808080; FlipColor := $808080; ReferenceTriangleColor := integer(clGray); ExtEditEnabled := true; TransformAxisLock := true; RebuildXaosLinks := true; AllowResetCoefs := false; // AV AllowResetLinear := true; // AV UseTriangleSync := false; // AV end; Registry.CloseKey; { Render } if Registry.OpenKey('Software\' + APP_NAME + '\Render', False) then begin if Registry.ValueExists('Path') then RenderPath := Registry.ReadString('Path') else RenderPath := DefaultPath; if Registry.ValueExists('SampleDensity') then renderDensity := Registry.ReadFloat('SampleDensity') else renderDensity := 200; if Registry.ValueExists('FilterRadius') then renderFilterRadius := Registry.ReadFloat('FilterRadius') else renderFilterRadius := 0.4; if Registry.ValueExists('Oversample') then renderOversample := Registry.ReadInteger('Oversample') else renderOversample := 2; if Registry.ValueExists('Width') then renderWidth := Registry.ReadInteger('Width') else renderWidth := 1024; if Registry.ValueExists('Height') then renderHeight := Registry.ReadInteger('Height') else renderHeight := 768; if Registry.ValueExists('JPEGQuality') then JPEGQuality := Registry.ReadInteger('JPEGQuality') else JPEGQuality := 100; if Registry.ValueExists('FileFormat') then renderFileFormat := Registry.ReadInteger('FileFormat') else renderFileFormat := 3; if Registry.ValueExists('EmbedFlame') then // AV EmbedFlame := Registry.ReadBool('EmbedFlame') else EmbedFlame := True; if Registry.ValueExists('SaveInFlame') then // AV SaveInFlame := Registry.ReadBool('SaveInFlame') else SaveInFlame := True; { if Registry.ValueExists('BitsPerSample') then renderBitsPerSample := Registry.ReadInteger('BitsPerSample') else renderBitsPerSample := 0; if Registry.ValueExists('StoreEXIF') then begin StoreEXIF := Registry.ReadBool('StoreEXIF'); end else begin StoreEXIF := false; end; if Registry.ValueExists('StoreParamsEXIF') then begin StoreParamsEXIF := Registry.ReadBool('StoreParamsEXIF'); end else begin StoreParamsEXIF := false; end; if Registry.ValueExists('ExifAuthor') then begin ExifAuthor := Registry.ReadString('ExifAuthor'); end else begin ExifAuthor := ''; end; } end else begin renderFileFormat := 2; JPEGQuality := 100; renderPath := DefaultPath; renderDensity := 200; renderOversample := 2; renderFilterRadius := 0.4; renderWidth := 1024; renderHeight := 768; EmbedFlame := True; // AV SaveInFlame := True; // AV { renderBitsPerSample := 0; StoreEXIF := false; ExifAuthor := ''; StoreParamsEXIF := false; } end; Registry.CloseKey; {UPR} if Registry.OpenKey('Software\' + APP_NAME + '\UPR', False) then begin if Registry.ValueExists('FlameColoringFile') then UPRColoringFile := Registry.ReadString('FlameColoringFile') else UPRColoringFile := 'apophysis.ucl'; if Registry.ValueExists('FlameColoringIdent') then UPRColoringIdent := Registry.ReadString('FlameColoringIdent') else UPRColoringIdent := 'apophysis-205'; // AV: fixed if Registry.ValueExists('FlameFormulaFile') then UPRFormulaFile := Registry.ReadString('FlameFormulaFile') else UPRFormulaFile := 'mt.ufm'; if Registry.ValueExists('FlameFormulaIdent') then UPRFormulaIdent := Registry.ReadString('FlameFormulaIdent') else UPRFormulaIdent := 'mt-pixel'; if Registry.ValueExists('FlameIterDensity') then UPRSampleDensity := Registry.ReadInteger('FlameIterDensity') else UPRSampleDensity := 35; if Registry.ValueExists('FlameFilterRadius') then UPRFilterRadius := Registry.ReadFloat('FlameFilterRadius') else UPRFilterRadius := 0.7; if Registry.ValueExists('FlameOversample') then UPROversample := Registry.ReadInteger('FlameOversample') else UPROversample := 3; if Registry.ValueExists('FlameAdjustDensity') then UPRAdjustDensity := Registry.ReadBool('FlameAdjustDensity') else UPRAdjustDensity := true; end else begin UPRColoringFile := 'apophysis.ucl'; UPRColoringIdent := 'apophysis-205'; UPRFormulaFile := 'mt.ufm'; UPRFormulaIdent := 'mt-pixel'; UPRSampleDensity := 35; UPRFilterRadius := 0.7; UPROversample := 3; UPRAdjustDensity := True; ; end; Registry.CloseKey; if Registry.OpenKey('Software\' + APP_NAME + '\Display', False) then begin if Registry.ValueExists('SampleDensity') then defSampleDensity := Registry.ReadFloat('SampleDensity') else defSampleDensity := 5; if Registry.ValueExists('Gamma') then defGamma := Registry.ReadFloat('Gamma') else defGamma := 4; if Registry.ValueExists('Brightness') then defBrightness := Registry.ReadFloat('Brightness') else defBrightness := 4; if Registry.ValueExists('Contrast') then // AV defContrast := Registry.ReadFloat('Contrast') else defContrast := 1; // AV if Registry.ValueExists('Vibrancy') then defVibrancy := Registry.ReadFloat('Vibrancy') else defVibrancy := 1; if Registry.ValueExists('FilterRadius') then defFilterRadius := Registry.ReadFloat('FilterRadius') else defFilterRadius := 0.2; if Registry.ValueExists('GammaThreshold') then defGammaThreshold := Registry.ReadFloat('GammaThreshold') else defGammaThreshold := 0.01; if Registry.ValueExists('Oversample') then defOversample := Registry.ReadInteger('Oversample') else defOversample := 1; if Registry.ValueExists('Fuse') then // AV Fuse := Registry.ReadInteger('Fuse') else Fuse := 15; if Registry.ValueExists('RhombicTileRadius') then // AV RhombTR := Registry.ReadFloat('RhombicTileRadius') else RhombTR := 1; if Registry.ValueExists('SquareTileRadius') then // AV SquareTR := Registry.ReadFloat('SquareTileRadius') else SquareTR := 1.414214; //Round6(sqrt(2)); if Registry.ValueExists('HexagonalTileRadius') then // AV HexTR := Registry.ReadFloat('HexagonalTileRadius') else HexTR := 2; if Registry.ValueExists('PreviewLowQuality') then prevLowQuality := Registry.ReadFloat('PreviewLowQuality') else prevLowQuality := 0.1; if Registry.ValueExists('PreviewMediumQuality') then prevMediumQuality := Registry.ReadFloat('PreviewMediumQuality') else prevMediumQuality := 1; if Registry.ValueExists('PreviewHighQuality') then prevHighQuality := Registry.ReadFloat('PreviewHighQuality') else prevHighQuality := 5; end else begin defSampleDensity := 5; defGamma := 4; defBrightness := 4; defVibrancy := 1; defContrast := 1; // AV defFilterRadius := 0.2; defOversample := 1; defGammaThreshold := 0.01; prevLowQuality := 0.1; prevMediumQuality := 1; prevHighQuality := 5; Fuse := 15; RhombTR := 1; HexTR := 2; SquareTR := 1.414214; //Round6(sqrt(2)); end; Registry.CloseKey; if Registry.OpenKey('Software\' + APP_NAME + '\Autosave', False) then begin if Registry.ValueExists('AutoSaveEnabled') then AutoSaveEnabled := Registry.ReadBool('AutoSaveEnabled') else AutoSaveEnabled := false; if Registry.ValueExists('AutoSaveFreq') then AutoSaveFreq := Registry.ReadInteger('AutoSaveFreq') else AutoSaveFreq := 2; if Registry.ValueExists('AutoSavePath') then AutoSavePath := Registry.ReadString('AutoSavePath') else AutoSavePath := DefaultPath + 'autosave.flame'; end else begin AutoSaveEnabled := false; AutoSaveFreq := 2; AutoSavePath := DefaultPath + 'autosave.flame'; end; Registry.CloseKey; finally Registry.Free; end; PluginPath := ReadPluginDir; // AV: create a folder for Apophysis temp files AppData := GetEnvVarValue('APPDATA') + '\Apophysis AV\'; if not DirectoryExists(AppData) then // AV if not CreateDir(AppData) then AppData := AppPath; UseX64IfPossible := CheckX64; end; procedure SaveSettings; var Registry: TRegistry; i: integer; VarUsed: byte; function VarState(const a, b: boolean): byte; inline; begin Result := 0; if a and b then Exit(3) else if a then Exit(1) else if b then Exit(2); end; begin // SavePluginDir(PluginPath); // AV: moved into main procedure Registry := TRegistry.Create; try Registry.RootKey := HKEY_CURRENT_USER; { Defaults } if Registry.OpenKey('\Software\' + APP_NAME + '\Defaults', True) then begin // Registry.WriteBool('StartupCheckForUpdates', StartupCheckForUpdates); Registry.WriteBool('AlwaysCreateBlankFlame', AlwaysCreateBlankFlame); Registry.WriteString('GradientFile', GradientFile); Registry.WriteString('PluginPath', PluginPath); // AV Registry.WriteString('HelpPath', HelpPath); Registry.WriteString('SmoothPaletteFile', SmoothPaletteFile); Registry.WriteString('DefaultScript', defScriptFile); // AV Registry.WriteBool('PlaySoundOnRenderComplete', PlaySoundOnRenderComplete); Registry.WriteString('RenderCompleteSoundFile', RenderCompleteSoundFile); Registry.WriteBool('AutoOpenLog', AutoOpenLog); Registry.WriteBool('ClassicListMode', ClassicListMode); Registry.WriteBool('WarnOnMissingPlugin', WarnOnMissingPlugin); Registry.WriteBool('SetEnglishLayout', SetEngLayout); Registry.WriteBool('RandomizeTemplates', RandomizeTemplates); Registry.WriteBool('ConfirmClearScript', ConfirmClearScript); Registry.WriteBool('ConfirmResetUndo', ConfirmResetUndo); Registry.WriteBool('AutoSaveXML', AutoSaveXML); Registry.WriteBool('ApplyFlatten', ApplyFlatten); Registry.WriteString('LanguageFile', LanguageFile); Registry.WriteString('LastOpenFile', LastOpenFile); Registry.WriteInteger('LastOpenFileEntry', LastOpenFileEntry); Registry.WriteBool('RememberLastOpenFile', RememberLastOpenFile); Registry.WriteBool('UseSmallThumbnails', UseSmallThumbnails); Registry.WriteInteger('LineCenterColor', LineCenterColor); Registry.WriteInteger('LineThirdsColor', LineThirdsColor); Registry.WriteInteger('LineGRColor', LineGRColor); Registry.WriteBool('EnableGuides', EnableGuides); Registry.WriteString('ChaoticaPath', ChaoticaPath); //Registry.WriteBool('UseX64IfPossible', UseX64IfPossible); Registry.WriteBool('ConfirmDelete', ConfirmDelete); Registry.WriteBool('OldPaletteFormat', OldPaletteFormat); Registry.WriteBool('ConfirmExit', ConfirmExit); Registry.WriteInteger('NumTries', NumTries); Registry.WriteInteger('TryLength', TryLength); Registry.WriteInteger('MinTransforms', randMinTransforms); Registry.WriteInteger('MaxTransforms', randMaxTransforms); Registry.WriteInteger('MutationMinTransforms', mutantMinTransforms); Registry.WriteInteger('MutationMaxTransforms', mutantMaxTransforms); Registry.WriteInteger('RandomGradient', randGradient); Registry.WriteString('ParameterFolder3D', ParamFolder); Registry.WriteString('UPRPath', UPRPath); Registry.WriteString('ImageFolder', ImageFolder); Registry.WriteString('SavePath3D', SavePath); Registry.WriteInteger('UPRWidth', UPRWidth); Registry.WriteInteger('UPRHeight', UPRHeight); Registry.WriteString('BrowserPath', BrowserPath); Registry.WriteInteger('EditPreviewQaulity', EditPrevQual); Registry.WriteInteger('MutatePreviewQaulity', MutatePrevQual); Registry.WriteInteger('AdjustPreviewQaulity', AdjustPrevQual); Registry.WriteInteger('ThumbPrevQuality', ThumbPrevQual); // AV Registry.WriteInteger('AnimPrevQuality', AnimPrevQual); // AV Registry.WriteString('RandomPrefix', RandomPrefix); Registry.WriteString('RandomDate', RandomDate); Registry.WriteInteger('RandomIndex', RandomIndex); Registry.WriteString('DefaultFlameFile3D', defFlameFile); Registry.WriteString('SmoothPalettePath', SmoothPalettePath); Registry.WriteString('GradientFile', GradientFile); Registry.WriteInteger('TryLength', TryLength); Registry.WriteInteger('NumTries', NumTries); Registry.WriteString('SmoothPaletteFile', defSmoothPaletteFile); Registry.WriteInteger('SymmetryType', SymmetryType); Registry.WriteInteger('SymmetryOrder', SymmetryOrder); Registry.WriteInteger('SymmetryNVars', SymmetryNVars); Registry.WriteInteger('RotationMode', MainForm_RotationMode); Registry.WriteInteger('EnumerationMode', FlameEnumMode); // AV Registry.WriteInteger('MinNodes', MinNodes); Registry.WriteInteger('MinHue', MinHue); Registry.WriteInteger('MinSat', MinSat); Registry.WriteInteger('MinLum', MinLum); Registry.WriteInteger('MaxNodes', MaxNodes); Registry.WriteInteger('MaxHue', MaxHue); Registry.WriteInteger('MaxSat', MaxSat); Registry.WriteInteger('MaxLum', MaxLum); Registry.WriteString('RandomGradientFile', randGradientFile); Registry.WriteInteger('ColorBlendType', randColorBlend); //AV Registry.WriteBool('EqualStripes', EqualStripes); // AV Registry.WriteInteger('BatchSize', BatchSize); Registry.WriteString('ScriptPath', ScriptPath); Registry.WriteInteger('ExportFileFormat', ExportFileFormat); Registry.WriteInteger('ExportWidth', ExportWidth); Registry.WriteInteger('ExportHeight', ExportHeight); Registry.WriteFloat('ExportDensity', ExportDensity); Registry.WriteFloat('ExportFilter', ExportFilter); Registry.WriteInteger('ExportOversample', ExportOversample); (* Registry.WriteInteger('ExportBatches', ExportBatches); Registry.WriteString('Nick', SheepNick); Registry.WriteString('URL', SheepURL); Registry.WriteString('Server', SheepServer); Registry.WriteString('Pass', SheepPW); *) Registry.WriteString('Renderer', flam3Path); Registry.WriteBool('ShowProgress', ShowProgress); Registry.WriteBool('KeepBackground', KeepBackground); Registry.WriteInteger('RandBackColor', RandBackColor); Registry.WriteBool('PreserveQuality', PreserveQuality); Registry.WriteString('FunctionLibrary', defLibrary); Registry.WriteString('ScreenshotsFolder', ScreenShotPath); // AV Registry.WriteBool('ShowTransparency', ShowTransparency); Registry.WriteInteger('PNGTransparency', PNGTransparency); Registry.WriteBool('ExtendMainPreview', ExtendMainPreview); Registry.WriteFloat('MainPreviewScale', MainPreviewScale); Registry.WriteBool('SaveIncompleteRenders', SaveIncompleteRenders); Registry.WriteBool('ShowRenderStats', ShowRenderStats); Registry.WriteBool('ShowRenderImage', ShowRenderImage); Registry.WriteBool('LowerRenderPriority', LowerRenderPriority); // AV: for animation Registry.WriteInteger('AnimFPS', AnimFPS); Registry.WriteString('AnimPrefix', defAnimPrefix); Registry.WriteInteger('FrameExt', defFrameExt); Registry.WriteBool('CreateAnimFolder', CreateAnimFolder); Registry.WriteInteger('NrTreads', NrTreads); Registry.WriteInteger('UseNrThreads', UseNrThreads); end; Registry.CloseKey; if Registry.OpenKey('\Software\' + APP_NAME + '\Variations', True) then begin for i := 0 to NRVAR-1 do begin VarUsed := 0; if Registry.ValueExists(Varnames(i)) then begin VarUsed := VarState(Variations[i], FavouriteVariations[i]); if Registry.ReadInteger(Varnames(i)) = VarUsed then continue; //? end; Registry.WriteInteger(Varnames(i), VarUsed); end; end; Registry.CloseKey; { Editor } if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Editor', True) then begin Registry.WriteBool('UseTransformColors', UseTransformColors); Registry.WriteBool('HelpersEnabled', HelpersEnabled); Registry.WriteBool('ShowAllXforms', ShowAllXforms); Registry.WriteBool('EnableEditorPreview', EnableEditorPreview); Registry.WriteInteger('EditorPreviewTransparency', EditorPreviewTransparency); Registry.WriteInteger('BackgroundColor', EditorBkgColor); Registry.WriteInteger('GridColor1', GridColor1); Registry.WriteInteger('GridColor2', GridColor2); Registry.WriteInteger('HelpersColor', HelpersColor); Registry.WriteInteger('FlipColor', FlipColor); Registry.WriteInteger('ReferenceTriangleColor', ReferenceTriangleColor); Registry.WriteBool('ExtendedEdit', ExtEditEnabled); Registry.WriteBool('LockTransformAxis', TransformAxisLock); Registry.WriteBool('RebuildXaosLinks', RebuildXaosLinks); Registry.WriteBool('AllowResetCoefs', AllowResetCoefs); // AV Registry.WriteBool('AllowResetLinear', AllowResetLinear); // AV Registry.WriteBool('SyncTriangles', UseTriangleSync); // AV end; Registry.CloseKey; { Display } if Registry.OpenKey('\Software\' + APP_NAME + '\Display', True) then begin Registry.WriteFloat('SampleDensity', defSampleDensity); Registry.WriteFloat('Gamma', defGamma); Registry.WriteFloat('Brightness', defBrightness); Registry.WriteFloat('Contrast', defContrast); Registry.WriteFloat('Vibrancy', defVibrancy); Registry.WriteFloat('FilterRadius', defFilterRadius); Registry.WriteInteger('Oversample', defOversample); Registry.WriteInteger('Fuse', Fuse); Registry.WriteFloat('GammaThreshold', defGammaThreshold); Registry.WriteFloat('PreviewLowQuality', prevLowQuality); Registry.WriteFloat('PreviewMediumQuality', prevMediumQuality); Registry.WriteFloat('PreviewHighQuality', prevHighQuality); Registry.WriteFloat('HexagonalTileRadius', HexTR); Registry.WriteFloat('SquareTileRadius', SquareTR); Registry.WriteFloat('RhombicTileRadius', RhombTR); end; Registry.CloseKey; { UPR } if Registry.OpenKey('\Software\' + APP_NAME + '\UPR', True) then begin Registry.WriteString('FlameColoringFile', UPRColoringFile); Registry.WriteString('FlameColoringIdent', UPRColoringIdent); Registry.WriteString('FlameFormulaFile', UPRFormulaFile); Registry.WriteString('FlameFormulaIdent', UPRFormulaIdent); Registry.WriteInteger('FlameIterDensity', UPRSampleDensity); Registry.WriteFloat('FlameFilterRadius', UPRFilterRadius); Registry.WriteInteger('FlameOversample', UPROversample); Registry.WriteBool('FlameAdjustDensity', UPRAdjustDensity); end; Registry.CloseKey; if Registry.OpenKey('\Software\' + APP_NAME + '\Render', True) then begin Registry.WriteString('Path', renderPath); Registry.WriteFloat('SampleDensity', renderDensity); Registry.WriteInteger('Oversample', renderOversample); Registry.WriteFloat('FilterRadius', renderFilterRadius); Registry.WriteInteger('Width', renderWidth); Registry.WriteInteger('Height', renderHeight); Registry.WriteInteger('JPEGQuality', JPEGQuality); Registry.WriteInteger('FileFormat', renderFileFormat); Registry.WriteBool('EmbedFlame', EmbedFlame); // AV Registry.WriteBool('SaveInFlame', SaveInFlame); // AV { Registry.WriteBool('StoreEXIF', StoreEXIF); Registry.WriteBool('StoreParamsEXIF', StoreParamsEXIF); Registry.WriteString('ExifAuthor', ExifAuthor); } end; Registry.CloseKey; if Registry.OpenKey('\Software\' + APP_NAME + '\Autosave', True) then begin Registry.WriteBool('AutoSaveEnabled', AutoSaveEnabled); Registry.WriteInteger('AutoSaveFreq', AutoSaveFreq); Registry.WriteString('AutoSavePath', AutoSavePath); end; Registry.CloseKey; finally Registry.Free; end; end; end.