{ 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 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, Messages, Translation; function ReadPluginDir: string; procedure ReadSettings; procedure SaveSettings; implementation uses Windows, Classes, SysUtils, StrUtils, Forms, Registry, Global, Dialogs, XFormMan; (* procedure UnpackVariations(v: int64); { Unpacks the variation options form an integer } var i: integer; begin for i := 0 to NRVAR - 1 do Variations[i] := boolean(v shr i and 1); end; *) 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.Destroy; 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.Destroy; end; end; procedure ReadSettings; var Registry: TRegistry; DefaultPath: string; i, maxVars: integer; VariationOptions: int64; begin DefaultPath := GetEnvVarValue('USERPROFILE');///ExtractFilePath(Application.Exename); 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 begin defFlameFile := Registry.ReadString('DefaultFlameFile3D'); end else begin if Registry.ValueExists('DefaultFlameFile') then defFlameFile := Registry.ReadString('DefaultFlameFile') else defFlameFile := ''; end; if Registry.ValueExists('AlwaysCreateBlankFlame') then begin AlwaysCreateBlankFlame := Registry.ReadBool('AlwaysCreateBlankFlame'); end else begin AlwaysCreateBlankFlame := false; end; if Registry.ValueExists('GradientFile') then begin GradientFile := Registry.ReadString('GradientFile'); end else begin GradientFile := '' end; if Registry.ValueExists('SavePath3D') then begin SavePath := Registry.ReadString('SavePath3D'); end else begin if Registry.ValueExists('SavePath') then SavePath := Registry.ReadString('SavePath') else SavePath := DefaultPath + '\Flames.flame'; end; if Registry.ValueExists('EmbedThumbnails') then begin EmbedThumbnails := Registry.ReadBool('EmbedThumbnails'); end else EmbedThumbnails := false; if Registry.ValueExists('WarnOnMissingPlugin') then begin WarnOnMissingPlugin := Registry.ReadBool('WarnOnMissingPlugin'); end else WarnOnMissingPlugin := true; if Registry.ValueExists('LanguageFile') then begin LanguageFile := Registry.ReadString('LanguageFile'); end else LanguageFile := ''; if Registry.ValueExists('SmoothPaletteFile') then begin defSmoothPaletteFile := Registry.ReadString('SmoothPaletteFIle'); end else begin defSmoothPaletteFile := DefaultPath + '\SmoothPalette.ugr'; end; 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('PreserveQuality') then begin PreserveQuality := Registry.ReadBool('PreserveQuality'); end else begin PreserveQuality := true; end; if Registry.ValueExists('KeepBackground') then begin KeepBackground := Registry.ReadBool('KeepBackground'); end else begin KeepBackground := False; end; if Registry.ValueExists('NumTries') then begin NumTries := Registry.ReadInteger('NumTries'); end else begin NumTries := 10; end; if Registry.ValueExists('TryLength') then begin TryLength := Registry.ReadInteger('TryLength'); end else begin TryLength := 100000; end; if Registry.ValueExists('MinTransforms') then begin randMinTransforms := Registry.ReadInteger('MinTransforms'); if randMinTransforms <= 0 then randMinTransforms := 2; end else begin randMinTransforms := 2; end; if Registry.ValueExists('MaxTransforms') then begin randMaxTransforms := Registry.ReadInteger('MaxTransforms'); if randMaxTransforms < randMinTransforms then randMaxTransforms := randMinTransforms; end else begin randMaxTransforms := randMinTransforms + 1; end; if Registry.ValueExists('MutationMinTransforms') then begin mutantMinTransforms := Registry.ReadInteger('MutationMinTransforms'); if mutantMinTransforms <= 0 then mutantMinTransforms := 2; end else begin mutantMinTransforms := 2; end; if Registry.ValueExists('MutationMaxTransforms') then begin mutantMaxTransforms := Registry.ReadInteger('MutationMaxTransforms'); if mutantMaxTransforms < mutantMinTransforms then mutantMinTransforms := mutantMinTransforms; end else begin mutantMaxTransforms := mutantMinTransforms + 1; end; if Registry.ValueExists('RandomGradient') then begin randGradient := Registry.ReadInteger('RandomGradient'); end else begin randGradient := 0; end; if Registry.ValueExists('ParameterFolder3D') then begin ParamFolder := Registry.ReadString('ParameterFolder3D'); end else if Registry.ValueExists('ParameterFolder') then begin ParamFolder := Registry.ReadString('ParameterFolder'); end else begin ParamFolder := DefaultPath + '\'; end; if Registry.ValueExists('UPRPath') then begin UPRPath := Registry.ReadString('UPRPath'); end else begin UPRPath := DefaultPath + '\'; end; if Registry.ValueExists('ImageFolder') then begin ImageFolder := Registry.ReadString('ImageFolder'); end else begin ImageFolder := DefaultPath + '\'; end; if Registry.ValueExists('UPRWidth') then begin UPRWidth := Registry.ReadInteger('UPRWidth'); end else begin UPRWidth := 640; end; if Registry.ValueExists('UPRHeight') then begin UPRHeight := Registry.ReadInteger('UPRHeight'); end else begin UPRHeight := 480; end; if Registry.ValueExists('BrowserPath') then begin BrowserPath := Registry.ReadString('BrowserPath'); end else begin BrowserPath := DefaultPath + '\'; end; if Registry.ValueExists('EditPreviewQaulity') then begin EditPrevQual := Registry.ReadInteger('EditPreviewQaulity'); end else begin EditPrevQual := 1; end; if Registry.ValueExists('MutatePreviewQaulity') then begin MutatePrevQual := Registry.ReadInteger('MutatePreviewQaulity'); if MutatePrevQual <= 0 then MutatePrevQual := 1; end else begin MutatePrevQual := 1; end; if Registry.ValueExists('AdjustPreviewQaulity') then begin AdjustPrevQual := Registry.ReadInteger('AdjustPreviewQaulity'); if AdjustPrevQual <= 0 then AdjustPrevQual := 1; end else begin AdjustPrevQual := 1; end; if Registry.ValueExists('RandomPrefix') then begin RandomPrefix := Registry.ReadString('RandomPrefix'); end else begin RandomPrefix := 'Apo3D-' end; if Registry.ValueExists('RandomDate') then begin RandomDate := Registry.ReadString('RandomDate'); end else begin RandomDate := '' end; if Registry.ValueExists('RandomIndex') then begin RandomIndex := Registry.ReadInteger('RandomIndex'); end else begin RandomIndex := 0; end; if Registry.ValueExists('SymmetryType') then begin SymmetryType := Registry.ReadInteger('SymmetryType'); end else begin SymmetryType := 0; end; if Registry.ValueExists('SymmetryOrder') then begin SymmetryOrder := Registry.ReadInteger('SymmetryOrder'); end else begin SymmetryOrder := 4; end; if Registry.ValueExists('SymmetryNVars') then begin SymmetryNVars := Registry.ReadInteger('SymmetryNVars'); end else begin SymmetryNVars := 12; end; if Registry.ValueExists('VariationOptions') then begin VariationOptions := Registry.ReadInteger('VariationOptions'); end else begin VariationOptions := 262143; end; if Registry.ValueExists('VariationOptions2') then begin VariationOptions := VariationOptions or (int64(Registry.ReadInteger('VariationOptions2')) shl 32); end; // UnpackVariations(VariationOptions); if Registry.ValueExists('MinNodes') then begin MinNodes := Registry.ReadInteger('MinNodes'); if MinNodes < 2 then MinNodes := 2; end else begin MinNodes := 2; end; if Registry.ValueExists('MinHue') then begin MinHue := Registry.ReadInteger('MinHue'); end else begin MinHue := 0; end; if Registry.ValueExists('MinSat') then begin MinSat := Registry.ReadInteger('MinSat'); end else begin MinSat := 0; end; if Registry.ValueExists('MinLum') then begin MinLum := Registry.ReadInteger('MinLum'); end else begin MinLum := 0; end; if Registry.ValueExists('MaxNodes') then begin MaxNodes := Registry.ReadInteger('MaxNodes'); if MaxNodes < MinNodes then MaxNodes := MinNodes; end else begin MaxNodes := 10; end; if Registry.ValueExists('MaxHue') then begin MaxHue := Registry.ReadInteger('MaxHue'); if MaxHue < 0 then MaxHue := 0; end else begin MaxHue := 600; end; if Registry.ValueExists('MaxSat') then begin MaxSat := Registry.ReadInteger('MaxSat'); if MaxSat < 0 then MaxSat := 0; end else begin MaxSat := 100; end; if Registry.ValueExists('RandomGradientFile') then begin randGradientFile := Registry.ReadString('RandomGradientFile'); end else begin randGradientFile := '' end; // if Registry.ValueExists('ReferenceMode') then // ReferenceMode := Registry.ReadInteger('ReferenceMode') // else ReferenceMode := 0; if Registry.ValueExists('RotationMode') then MainForm_RotationMode := Registry.ReadInteger('RotationMode') else MainForm_RotationMode := 0; if Registry.ValueExists('MaxLum') then begin MaxLum := Registry.ReadInteger('MaxLum'); if MaxLum <= 0 then MaxLum := 100; end else begin MaxLum := 100; end; if Registry.ValueExists('BatchSize') then begin BatchSize := Registry.ReadInteger('BatchSize'); if BatchSize <= 0 then BatchSize := 10; end else begin BatchSize := 100; end; if Registry.ValueExists('ScriptPath') then begin ScriptPath := Registry.ReadString('ScriptPath'); end else begin ScriptPath := DefaultPath + '\Scripts\'; end; if Registry.ValueExists('FunctionLibrary') then begin defLibrary := Registry.ReadString('FunctionLibrary'); end else begin defLibrary := ExtractFilePath(Application.ExeName) + 'Functions.asc'; end; if Registry.ValueExists('ExportFileFormat') then begin ExportFileFormat := Registry.ReadInteger('ExportFileFormat'); end else begin ExportFileFormat := 1; end; if Registry.ValueExists('ExportWidth') then begin ExportWidth := Registry.ReadInteger('ExportWidth'); if ExportWidth <= 0 then ExportWidth := 640; end else begin ExportWidth := 640; end; if Registry.ValueExists('ExportHeight') then begin ExportHeight := Registry.ReadInteger('ExportHeight'); if ExportHeight <= 0 then ExportHeight := 480; end else begin ExportHeight := 480; end; if Registry.ValueExists('ExportDensity') then begin ExportDensity := Registry.ReadFloat('ExportDensity'); if ExportDensity <= 0 then ExportDensity := 100; end else begin ExportDensity := 100; end; if Registry.ValueExists('ExportOversample') then begin ExportOversample := Registry.ReadInteger('ExportOversample'); if ExportOversample <= 0 then ExportOversample := 2; end else begin ExportOversample := 2; end; if Registry.ValueExists('ExportFilter') then begin ExportFilter := Registry.ReadFloat('ExportFilter'); if ExportFilter <= 0 then ExportFilter := 0.6; end else begin ExportFilter := 0.6; end; if Registry.ValueExists('ExportBatches') then begin ExportBatches := Registry.ReadInteger('ExportBatches'); if ExportBatches <= 0 then ExportBatches := 3; end else begin ExportBatches := 3; end; 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('Renderer') then begin flam3Path := Registry.ReadString('Renderer'); end else begin flam3Path := ExtractFilePath(Application.ExeName) + 'flam3.exe'; end; if Registry.ValueExists('Server') then begin SheepServer := Registry.ReadString('Server'); end else begin SheepServer := 'http://v2d5.sheepserver.net/'; end; if Registry.ValueExists('ShowProgress') then begin ShowProgress := Registry.ReadBool('ShowProgress'); end else begin ShowProgress := true; end; if Registry.ValueExists('ToolBarWidth1') then begin TBWidth1 := Registry.ReadInteger('ToolBarWidth1'); end else begin TBWidth1 := 0; end; if Registry.ValueExists('ToolBarWidth2') then begin TBWidth2 := Registry.ReadInteger('ToolBarWidth2'); end else begin TBWidth2 := 0; end; if Registry.ValueExists('ToolBarWidth3') then begin TBWidth3 := Registry.ReadInteger('ToolBarWidth3'); end else begin TBWidth3 := 0; end; if Registry.ValueExists('ToolBarWidth4') then begin TBWidth4 := Registry.ReadInteger('ToolBarWidth4'); end else begin TBWidth4 := 0; end; if Registry.ValueExists('ToolBarWidth5') then begin TBWidth5 := Registry.ReadInteger('ToolBarWidth5'); end else begin TBWidth5 := 0; end; if Registry.ValueExists('LineCenterColor') then begin LineCenterColor := Registry.ReadInteger('LineCenterColor'); end else begin LineCenterColor := $FFFFFF; end; if Registry.ValueExists('LineThirdsColor') then begin LineThirdsColor := Registry.ReadInteger('LineThirdsColor'); end else begin LineThirdsColor := $0000FF; end; if Registry.ValueExists('LineGRColor') then begin LineGRColor := Registry.ReadInteger('LineGRColor'); end else begin LineGRColor := $00FF00; end; if Registry.ValueExists('EnableGuides') then begin EnableGuides := Registry.ReadBool('EnableGuides'); end else begin EnableGuides := false; end; { FormRender } if Registry.ValueExists('SaveIncompleteRenders') then begin SaveIncompleteRenders := Registry.ReadBool('SaveIncompleteRenders'); end else begin SaveIncompleteRenders := false; end; if Registry.ValueExists('ShowRenderStats') then begin ShowRenderStats := Registry.ReadBool('ShowRenderStats'); end else begin ShowRenderStats := false; end; if Registry.ValueExists('LowerRenderPriority') then begin LowerRenderPriority := Registry.ReadBool('LowerRenderPriority'); end else begin LowerRenderPriority := false; end; if Registry.ValueExists('PNGTransparency') then begin PNGTransparency := Registry.ReadInteger('PNGTransparency'); if PNGTransparency > 1 then PNGTransparency := 1; // tmp end else begin PNGTransparency := 1 end; if Registry.ValueExists('ShowTransparency') then begin ShowTransparency := Registry.ReadBool('ShowTransparency'); end else begin ShowTransparency := False; end; if Registry.ValueExists('ExtendMainPreview') then begin ExtendMainPreview := Registry.ReadBool('ExtendMainPreview'); end else begin ExtendMainPreview := true; end; 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 begin MainPreviewScale := 1.2; end; if Registry.ValueExists('NrTreads') then begin NrTreads := Registry.ReadInteger('NrTreads'); if NrTreads <= 0 then NrTreads := 1; end else begin NrTreads := 1; end; if Registry.ValueExists('UseNrThreads') then begin UseNrThreads := Registry.ReadInteger('UseNrThreads'); if UseNrThreads <= 0 then UseNrThreads := 1; end else begin UseNrThreads := 1; end; if Registry.ValueExists('InternalBitsPerSample') then begin InternalBitsPerSample := Registry.ReadInteger('InternalBitsPerSample'); end else begin InternalBitsPerSample := 0; end; if Registry.ValueExists('AutoOpenLog') then begin AutoOpenLog := Registry.ReadBool('AutoOpenLog'); end else begin AutoOpenLog := false; end; if Registry.ValueExists('StartupCheckForUpdates') then begin StartupCheckForUpdates := Registry.ReadBool('StartupCheckForUpdates'); end else begin StartupCheckForUpdates := true; end; if Registry.ValueExists('ClassicListMode') then begin ClassicListMode := Registry.ReadBool('ClassicListMode'); end else begin ClassicListMode := true; end; if Registry.ValueExists('LastOpenFile') then begin LastOpenFile := Registry.ReadString('LastOpenFile'); end else begin LastOpenFile := ''; end; if Registry.ValueExists('LastOpenFileEntry') then begin LastOpenFileEntry := Registry.ReadInteger('LastOpenFileEntry'); end else begin LastOpenFileEntry := 1; end; if Registry.ValueExists('RememberLastOpenFile') then begin RememberLastOpenFile := Registry.ReadBool('RememberLastOpenFile'); end else begin RememberLastOpenFile := false; end; if Registry.ValueExists('UseSmallThumbnails') then begin UseSmallThumbnails := Registry.ReadBool('UseSmallThumbnails'); end else begin UseSmallThumbnails := true; end; if Registry.ValueExists('HelpPath') then begin HelpPath := Registry.ReadString('HelpPath'); end else begin HelpPath := ExtractFilePath(Application.ExeName) + 'Apophysis 7X.chm'; end; end else begin StartupCheckForUpdates := true; AlwaysCreateBlankFlame := false; MainForm_RotationMode := 0; EditPrevQual := 1; MutatePrevQual := 1; AdjustPrevQual := 1; GradientFile := ''; defFlameFile := ''; SavePath := DefaultPath + '\Flames.flame'; EmbedThumbnails := false; WarnOnMissingPlugin := true; LanguageFile := ''; HelpPath := ExtractFilePath(Application.ExeName) + 'Apophysis 7X.chm'; defSmoothPaletteFile := DefaultPath + '\SmoothPalette.ugr'; ConfirmDelete := True; ConfirmExit := True; OldPaletteFormat := false; NumTries := 10; TryLength := 100000; randMinTransforms := 2; randMaxTransforms := 3; mutantMinTransforms := 2; mutantMaxTransforms := 6; randGradient := 0; PreserveQuality := false; KeepBackground := False; UPRPath := DefaultPath + '\'; ImageFolder := DefaultPath + '\'; ParamFolder := DefaultPath + '\'; UPRWidth := 640; UPRHeight := 480; RandomPrefix := 'Apo7X-'; RandomIndex := 0; RandomDate := ''; SymmetryType := 0; SymmetryOrder := 4; SymmetryNVars := 12; VariationOptions := 262143; // UnpackVariations(VariationOptions); MinNodes := 2; MaxNodes := 10; MinHue := 0; MinSat := 0; MinLum := 0; MaxHue := 600; MaxSat := 100; MaxLum := 100; randGradientFile := ''; BatchSize := 100; ScriptPath := DefaultPath + '\'; defLibrary := ExtractFilePath(Application.ExeName) + 'Functions.asc'; ExportFileFormat := 1; ExportWidth := 640; ExportHeight := 480; ExportDensity := 100; ExportOversample := 2; ExportFilter := 0.6; ExportBatches := 3; SheepNick := ''; SheepURL := ''; SheepPW := ''; flam3Path := ExtractFilePath(Application.ExeName) + 'flam3.exe'; SheepServer := 'http://v2d5.sheepserver.net/'; ShowProgress := true; SaveIncompleteRenders := false; LowerRenderPriority := false; ShowRenderStats := false; PNGTransparency := 1; ShowTransparency := False; MainPreviewScale := 1.2; ExtendMainPreview := true; NrTreads := 1; UseNrThreads := 1; InternalBitsPerSample := 0; AutoOpenLog := false; ClassicListMode := true; LastOpenFile := ''; LastOpenFileEntry := 1; RememberLastOpenFile := false; UseSmallThumbnails := true; TBWidth1 := 0; TBWidth2 := 0; TBWidth3 := 0; TBWidth4 := 0; TBWidth5 := 0; LineCenterColor := $FFFFFF; LineThirdsColor := $0000FF; LineGRColor := $00FF00; EnableGuides := false; end; Registry.CloseKey; SetLength(Variations, NRVAR); if Registry.OpenKey('Software\' + APP_NAME + '\Variations', False) then begin for i := 0 to NRVAR-1 do begin if Registry.ValueExists(Varnames(i)) then Variations[i] := Registry.ReadBool(Varnames(i)) else Variations[i] := false; end; end else begin if NRVAR >= 64 then maxVars := 63 else maxVars := NRVAR-1; for i := 0 to maxVars do Variations[i] := boolean(VariationOptions shr i and 1); 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('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('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; ReferenceTriangleColor := integer(clGray); ExtEditEnabled := true; TransformAxisLock := true; RebuildXaosLinks := true; end; Registry.CloseKey; { Render } if Registry.OpenKey('Software\' + APP_NAME + '\Render', False) then begin if Registry.ValueExists('Path') then begin RenderPath := Registry.ReadString('Path'); end else begin RenderPath := DefaultPath + '\'; end; if Registry.ValueExists('SampleDensity') then begin renderDensity := Registry.ReadFloat('SampleDensity'); end else begin renderDensity := 200; end; if Registry.ValueExists('FilterRadius') then begin renderFilterRadius := Registry.ReadFloat('FilterRadius'); end else begin renderFilterRadius := 0.4; end; if Registry.ValueExists('Oversample') then begin renderOversample := Registry.ReadInteger('Oversample'); end else begin renderOversample := 2; end; if Registry.ValueExists('Width') then begin renderWidth := Registry.ReadInteger('Width'); end else begin renderWidth := 1024; end; if Registry.ValueExists('Height') then begin renderHeight := Registry.ReadInteger('Height'); end else begin renderHeight := 768; end; if Registry.ValueExists('JPEGQuality') then begin JPEGQuality := Registry.ReadInteger('JPEGQuality'); end else begin JPEGQuality := 100; end; if Registry.ValueExists('FileFormat') then begin renderFileFormat := Registry.ReadInteger('FileFormat'); end else begin renderFileFormat := 3; end; if Registry.ValueExists('BitsPerSample') then begin renderBitsPerSample := Registry.ReadInteger('BitsPerSample'); end else begin renderBitsPerSample := 0; end; 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; 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 begin UPRColoringFile := Registry.ReadString('FlameColoringFile'); end else begin UPRColoringFile := 'apophysis.ucl'; end; if Registry.ValueExists('FlameColoringIdent') then begin UPRColoringIdent := Registry.ReadString('FlameColoringIdent'); end else begin UPRColoringIdent := 'enr-flame-a'; end; if Registry.ValueExists('FlameFormulaFile') then begin UPRFormulaFile := Registry.ReadString('FlameFormulaFile'); end else begin UPRFormulaFile := 'mt.ufm'; end; if Registry.ValueExists('FlameFormulaIdent') then begin UPRFormulaIdent := Registry.ReadString('FlameFormulaIdent'); end else begin UPRFormulaIdent := 'mt-pixel'; end; if Registry.ValueExists('FlameIterDensity') then begin UPRSampleDensity := Registry.ReadInteger('FlameIterDensity'); end else begin UPRSampleDensity := 35; end; if Registry.ValueExists('FlameFilterRadius') then begin UPRFilterRadius := Registry.ReadFloat('FlameFilterRadius'); end else begin UPRFilterRadius := 0.7; end; if Registry.ValueExists('FlameOversample') then begin UPROversample := Registry.ReadInteger('FlameOversample'); end else begin UPROversample := 3; end; if Registry.ValueExists('FlameAdjustDensity') then begin UPRAdjustDensity := Registry.ReadBool('FlameAdjustDensity'); end else begin UPRAdjustDensity := true; end; end else begin UPRColoringFile := 'apophysis.ucl'; UPRColoringIdent := 'enr-flame-a'; 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 begin defSampleDensity := Registry.ReadFloat('SampleDensity'); end else begin defSampleDensity := 5; end; if Registry.ValueExists('Gamma') then begin defGamma := Registry.ReadFloat('Gamma'); end else begin defGamma := 4; end; if Registry.ValueExists('Brightness') then begin defBrightness := Registry.ReadFloat('Brightness'); end else begin defBrightness := 4; end; if Registry.ValueExists('Vibrancy') then begin defVibrancy := Registry.ReadFloat('Vibrancy'); end else begin defVibrancy := 1; end; if Registry.ValueExists('FilterRadius') then begin defFilterRadius := Registry.ReadFloat('FilterRadius'); end else begin defFilterRadius := 0.2; end; if Registry.ValueExists('GammaThreshold') then begin defGammaThreshold := Registry.ReadFloat('GammaThreshold'); end else begin defGammaThreshold := 0.01; end; if Registry.ValueExists('Oversample') then begin defOversample := Registry.ReadInteger('Oversample'); end else begin defOversample := 1; end; if Registry.ValueExists('PreviewDensity') then begin defPreviewDensity := Registry.ReadFloat('PreviewDensity'); end else begin defPreviewDensity := 0.5; end; if Registry.ValueExists('PreviewLowQuality') then begin prevLowQuality := Registry.ReadFloat('PreviewLowQuality'); end else begin prevLowQuality := 0.1; end; if Registry.ValueExists('PreviewMediumQuality') then begin prevMediumQuality := Registry.ReadFloat('PreviewMediumQuality'); end else begin prevMediumQuality := 1; end; if Registry.ValueExists('PreviewHighQuality') then begin prevHighQuality := Registry.ReadFloat('PreviewHighQuality'); end else begin prevHighQuality := 5; end; end else begin defSampleDensity := 5; defGamma := 4; defBrightness := 4; defVibrancy := 1; defFilterRadius := 0.2; defOversample := 1; defGammaThreshold := 0.01; defPreviewDensity := 0.5; prevLowQuality := 0.1; prevMediumQuality := 1; prevHighQuality := 5; end; Registry.CloseKey; if Registry.OpenKey('Software\' + APP_NAME + '\Autosave', False) then begin if Registry.ValueExists('AutoSaveEnabled') then begin AutoSaveEnabled := Registry.ReadBool('AutoSaveEnabled'); end else begin AutoSaveEnabled := false; end; if Registry.ValueExists('AutoSaveFreq') then begin AutoSaveFreq := Registry.ReadInteger('AutoSaveFreq'); end else begin AutoSaveFreq := 2; end; if Registry.ValueExists('AutoSavePath') then begin AutoSavePath := Registry.ReadString('AutoSavePath'); end else begin AutoSavePath := GetEnvVarValue('USERPROFILE') + '\autosave.flame'; end; end else begin AutoSaveEnabled := false; AutoSaveFreq := 2; AutoSavePath := GetEnvVarValue('USERPROFILE') + '\autosave.flame'; end; Registry.CloseKey; finally Registry.Free; end; PluginPath := ReadPluginDir; end; procedure SaveSettings; var Registry: TRegistry; i: integer; begin SavePluginDir(PluginPath); 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('HelpPath', HelpPath); Registry.WriteString('SmoothPaletteFile', SmoothPaletteFile); Registry.WriteBool('PlaySoundOnRenderComplete', PlaySoundOnRenderComplete); Registry.WriteString('RenderCompleteSoundFile', RenderCompleteSoundFile); Registry.WriteBool('AutoOpenLog', AutoOpenLog); Registry.WriteBool('ClassicListMode', ClassicListMode); Registry.WriteBool('EmbedThumbnails', EmbedThumbnails); Registry.WriteBool('WarnOnMissingPlugin', WarnOnMissingPlugin); Registry.WriteString('LanguageFile', LanguageFile); Registry.WriteString('LastOpenFile', LastOpenFile); Registry.WriteInteger('LastOpenFileEntry', LastOpenFileEntry); Registry.WriteBool('RememberLastOpenFile', RememberLastOpenFile); Registry.WriteBool('UseSmallThumbnails', UseSmallThumbnails); Registry.WriteInteger('ToolBarWidth1', TBWidth1); Registry.WriteInteger('ToolBarWidth2', TBWidth2); Registry.WriteInteger('ToolBarWidth3', TBWidth3); Registry.WriteInteger('ToolBarWidth4', TBWidth4); Registry.WriteInteger('ToolBarWidth5', TBWidth5); Registry.WriteInteger('LineCenterColor', LineCenterColor); Registry.WriteInteger('LineThirdsColor', LineThirdsColor); Registry.WriteInteger('LineGRColor', LineGRColor); Registry.WriteBool('EnableGuides', EnableGuides); 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.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('VariationOptions', VariationOptions); // Registry.WriteInteger('VariationOptions2', VariationOptions shr 32); // Registry.WriteInteger('ReferenceMode', ReferenceMode); Registry.WriteInteger('RotationMode', MainForm_RotationMode); 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('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('Renderer', flam3Path); Registry.WriteString('Server', SheepServer); Registry.WriteString('Pass', SheepPW); Registry.WriteBool('ShowProgress', ShowProgress); Registry.WriteBool('KeepBackground', KeepBackground); Registry.WriteBool('PreserveQuality', PreserveQuality); Registry.WriteString('FunctionLibrary', defLibrary); 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('LowerRenderPriority', LowerRenderPriority); Registry.WriteInteger('NrTreads', NrTreads); Registry.WriteInteger('UseNrThreads', UseNrThreads); Registry.WriteInteger('InternalBitsPerSample', InternalBitsPerSample); end; Registry.CloseKey; if Registry.OpenKey('\Software\' + APP_NAME + '\Variations', True) then begin for i := 0 to NRVAR-1 do begin if Registry.ValueExists(Varnames(i)) then if Registry.ReadBool(Varnames(i)) = Variations[i] then continue; Registry.WriteBool(Varnames(i), Variations[i]); 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('ReferenceTriangleColor', ReferenceTriangleColor); Registry.WriteBool('ExtendedEdit', ExtEditEnabled); Registry.WriteBool('LockTransformAxis', TransformAxisLock); Registry.WriteBool('RebuildXaosLinks', RebuildXaosLinks); 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('Vibrancy', defVibrancy); Registry.WriteFloat('FilterRadius', defFilterRadius); Registry.WriteInteger('Oversample', defOversample); Registry.WriteFloat('GammaThreshold', defGammaThreshold); Registry.WriteFloat('PreviewDensity', defPreviewDensity); Registry.WriteFloat('PreviewLowQuality', prevLowQuality); Registry.WriteFloat('PreviewMediumQuality', prevMediumQuality); Registry.WriteFloat('PreviewHighQuality', prevHighQuality); 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.WriteInteger('BitsPerSample', renderBitsPerSample); 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.