views:

28

answers:

1

Is there any way to "reset" all setup settings in Inno Setup into their default values?

I want to add Reset options button into my setup, and clicking that button would set all the options to the same value as if the user never changed anything, but was clicking just Next, Next, Install.

But please note that those values ale slightly different than compile-time default values, as for example AppDir can default to DefaultDirName or wizardForm.PrevAppDir. So I want all the options to default to dynamic defaults, which for AppDir is:

if wizardForm.PrevAppDir <> '' then
    result := wizardForm.PrevAppDir
else
    result := '{#SetupSetting("DefaultDirName")}';

I hope you understand what I want to accomplish. If the application is already installed, then set all options to the last-installation values, if the app is not installed, then set them to default values.

I know the setup does all of this at it's startup, but I want to add a button, which would revert all the changes user made (eg. in wpSelectComponents) to their setup-startup defaults. How can I do that?

A: 

So I've solved this in [Code]. All the information is accessible through WizardForm global object, so when the configuration pages are shown for the first time, you save those values into your variables. Then, whenever you need to reset the configuration, you just restore all the settings through WizardForm again. I won't paste the whole code here, as it's kinda long (172 LOC), but there is just the AppDir part:

[Code]
var storedAppDir : string;
    hasAppDir : boolean;

procedure OnAppDir;
begin
    if not hasAppDir then begin
        storedAppDir := wizardForm.DirEdit.Text;
        hasAppDir := true;
    end;
end;

procedure RestoreAppDir;
begin
    if hasAppDir then begin
        wizardForm.DirEdit.Text := storedAppDir;
    end;
end;

procedure InitializeDefaults;
begin
    //hasUserInfo := false;
    hasAppDir := false;
    //hasComponents := false;
    //hasProgramGroup := false;
    //hasTasks := false;
end;

procedure RestoreDefaults;
begin
    //RestoreUserInfo;
    RestoreAppDir;
    //RestoreComponents;
    //RestoreProgramGroup;
    //RestoreTasks;
end;

procedure DefaultsCurPageChanged(CurPageID : integer);
begin
    case CurPageID of
        //wpUserInfo: OnUserInfo;
        wpSelectDir: OnAppDir;
        //wpSelectComponents: OnComponents;
        //wpSelectProgramGroup: OnProgramGroup;
        //wpSelectTasks: OnTasks;
    end;
end;

procedure InitializeWizard;
begin
    InitializeDefaults;
end;

procedure CurPageChanged(CurPageID : Integer);
begin
    DefaultsCurPageChanged(CurPageID);
end;

And when you need to reset all the configuration, just call RestoreDefaults. Of course, this won't restore any custom wizard options/pages. But you can add additional storing/restoring code easily yourself.

Paja