📄 setup.cpp
字号:
return 0;
CancelFlag = 0;
return 1;
unguard;
}
const TCHAR* GetBackText()
{
return NULL;
}
void OnCancel()
{
CancelFlag = 1;
}
const TCHAR* GetNextText()
{
return Finished ? WWizardPage::GetNextText() : NULL;
}
};
// Install progess.
class WFilerPageInstallProgress : public WFilerPageProgress
{
DECLARE_WINDOWCLASS(WFilerPageInstallProgress,WFilerPageProgress,Setup)
WFilerPageInstallProgress( WFilerWizard* InOwner )
: WFilerPageProgress( InOwner, TEXT("FilerPageInstallProgress") )
{}
WWizardPage* GetNext()
{
guard(WFilerPageInstallProgress::GetNext);
return NewAutoPlayPage( Owner, 0 );
unguard;
}
void OnCurrent()
{
guard(WFilerPageInstallProgress::OnCurrent);
UpdateWindow( *this );
Manager->DoInstallSteps( this );
Finished = 1;
Owner->OnNext();
unguard;
}
};
// Done.
class WFilerPagePreInstall : public WWizardPage
{
DECLARE_WINDOWCLASS(WFilerPagePreInstall,WWizardPage,Setup)
// Variables.
WFilerWizard* Owner;
USetupDefinition* Manager;
WLabel Message;
// Constructor.
WFilerPagePreInstall( WFilerWizard* InOwner )
: WWizardPage ( TEXT("FilerPagePreInstall"), IDDIALOG_FilerPagePreInstall, InOwner )
, Owner ( InOwner )
, Manager ( InOwner->Manager )
, Message ( this, IDC_Message )
{}
// WWizardPage interface.
WWizardPage* GetNext()
{
return new WFilerPageInstallProgress( Owner );
}
const TCHAR* GetNextText()
{
return LocalizeGeneral("InstallButton",TEXT("Window"));
}
void OnInitDialog()
{
guard(WFilerPagePreInstall::OnInitDialog);
WWizardPage::OnInitDialog();
Message.SetText( *FString::Printf( LineFormat(LocalizeGeneral("Ready")), *Manager->LocalProduct, *Manager->DestPath, *Manager->LocalProduct ) );
unguard;
}
};
// Folder.
class WFilerPageCdFolder : public WWizardPage, public FControlSnoop
{
DECLARE_WINDOWCLASS(WFilerPageCdFolder,WWizardPage,Setup)
// Variables.
WFilerWizard* Owner;
USetupDefinition* Manager;
WLabel FolderDescription;
WLabel SpaceAvailable;
WLabel SpaceAvailableMsg;
WLabel SpaceRequired;
WLabel SpaceRequiredMsg;
WButton FolderHolder;
WCoolButton DefaultButton;
WEdit Folder;
// Constructor.
WFilerPageCdFolder( WFilerWizard* InOwner )
: WWizardPage ( TEXT("FilerPageFolder"), IDDIALOG_FilerPageFolder, InOwner )
, Owner ( InOwner )
, Manager ( InOwner->Manager )
, FolderDescription( this, IDC_FolderDescription )
, FolderHolder ( this, IDC_FolderHolder )
, DefaultButton ( this, IDC_Default, FDelegate(this,(TDelegate)OnReset) )
, Folder ( this, IDC_Folder )
, SpaceAvailable ( this, IDC_SpaceAvailable )
, SpaceAvailableMsg( this, IDC_SpaceAvailableMessage )
, SpaceRequired ( this, IDC_SpaceRequired )
, SpaceRequiredMsg ( this, IDC_SpaceRequiredMessage )
{
guard(WFilerPageCdFolder::WFilerPageCdFolder);
Manager->RefPath = TEXT("");
unguard;
}
// WWizardPage interface.
WWizardPage* GetNext()
{
guard(WFilerPageCdFolder::GetNext);
FString Saved = Manager->RefPath;
Manager->CdOk = TEXT("");
Manager->RefPath = Folder.GetText();
Manager->InstallTree( TEXT("ProcessVerifyCd"), &GNoPoll, USetupDefinition::ProcessVerifyCd );
if( Manager->CdOk!=TEXT("") )
{
MessageBox( *Owner, *FString::Printf(LineFormat(LocalizeError(TEXT("WrongCd"))),*Manager->Product,*Manager->CdOk), LocalizeError(TEXT("WrongCdTitle")), MB_OK );
Manager->RefPath = Saved;
return NULL;
}
return new WFilerPagePreInstall( Owner );
unguard;
}
UBOOL GetShow()
{
guard(WFilerPageCdFolder::GetShow);
// Only show if there are installable files stored as deltas relative to version on CD.
Manager->AnyRef = 0;
Manager->InstallTree( TEXT("ProcessCheckRef"), &GNoPoll, USetupDefinition::ProcessCheckRef );
return Manager->AnyRef;
unguard;
}
void OnInitDialog()
{
guard(WFilerPageCdFolder::OnInitDialog);
WWizardPage::OnInitDialog();
SpaceAvailable.Show(0);
SpaceAvailableMsg.Show(0);
SpaceRequired.Show(0);
SpaceRequiredMsg.Show(0);
FolderHolder.SetText( LocalizeGeneral(TEXT("CdDrive")) );
FolderDescription.SetText( *FString::Printf(LineFormat(LocalizeGeneral(TEXT("CdDescription"))),*Manager->LocalProduct,*Manager->Product,*Manager->LocalProduct) );
OnReset();
unguard;
}
void OnReset()
{
guard(WFilerPageCdFolder::OnReset);
Folder.SetText( TEXT("D:") PATH_SEPARATOR );
TCHAR Str[4] = TEXT("A:") PATH_SEPARATOR;
for( TCHAR Ch='A'; Ch<='Z'; Ch++ )
{
Str[0] = Ch;
if( GetDriveTypeX(Str)==DRIVE_CDROM )
{
Folder.SetText( Str );
break;
}
}
unguard;
}
};
// Components.
class WFilerPageComponents : public WFilerPageComponentsBase
{
DECLARE_WINDOWCLASS(WFilerPageComponents,WFilerPageComponentsBase,Setup)
// Variables.
USetupDefinition* Manager;
WButton DescriptionFrame;
WButton DiskSpaceFrame;
WLabel ComponentsDescription;
WLabel ComponentsPrompt;
WLabel DescriptionText;
WLabel SpaceRequiredMessage;
WLabel SpaceAvailableMessage;
WLabel SpaceRequired;
WLabel SpaceAvailable;
WComponentProperties Components;
// Constructor.
WFilerPageComponents( WFilerWizard* InOwner )
: WFilerPageComponentsBase( TEXT("FilerPageComponents"), IDDIALOG_FilerPageComponents, InOwner )
, Manager ( InOwner->Manager )
, ComponentsDescription( this, IDC_ComponentsDescription )
, ComponentsPrompt ( this, IDC_ComponentsPrompt )
, DiskSpaceFrame ( this, IDC_DiskSpaceFrame )
, DescriptionFrame ( this, IDC_DescriptionFrame )
, DescriptionText ( this, IDC_DescriptionText )
, SpaceRequiredMessage ( this, IDC_SpaceRequiredMessage )
, SpaceAvailableMessage( this, IDC_SpaceAvailableMessage )
, SpaceRequired ( this, IDC_SpaceRequired )
, SpaceAvailable ( this, IDC_SpaceAvailable )
, Components ( this )
{
Components.ShowTreeLines = 0;
}
// Functions.
void OnGroupChange( class FComponentItem* Group )
{
guard(WFilerPageComponents::OnGroupChange);
// Update space required.
Manager->RequiredSpace = PER_INSTALL_OVERHEAD + Manager->RootGroup->SpaceRequired();
SpaceAvailable.SetText( *FString::Printf(LocalizeGeneral("Space"), FreeSpace(*Manager->DestPath)/(1024*1024) ) );
SpaceRequired .SetText( *FString::Printf(LocalizeGeneral("Space"), Manager->RequiredSpace/(1024*1024) ) );
// Update description text.
DescriptionText.SetText( Group ? *Group->SetupGroup->Description : TEXT("") );
unguard;
}
// WWizardPage interface.
WWizardPage* GetNext()
{
guard(WFilerPageComponents::GetNext);
if( FreeSpace(*Manager->DestPath) < Manager->RequiredSpace )
{
TCHAR Root[]=TEXT("C:") PATH_SEPARATOR;
Root[0] = (*Manager->DestPath)[0];
MessageBox( *Owner, *FString::Printf(LineFormat(LocalizeGeneral("NotEnoughSpace")),Root,*Manager->LocalProduct), LocalizeGeneral("NotEnoughSpaceTitle"), MB_OK );
return NULL;
}
return new WFilerPageCdFolder(Owner);
unguard;
}
void OnInitDialog()
{
guard(WFilerPageComponents::OnInitDialog);
WWizardPage::OnInitDialog();
Components.OpenChildWindow( IDC_ComponentsHolder );
OnGroupChange( NULL );
Components.GetRoot()->Expand();
Components.ResizeList();
Components.List.SetCurrent( 0, 1 );
Components.SetItemFocus( 1 );
unguard;
}
UBOOL GetShow()
{
return Components.Root.SetupGroup->Visible;
}
};
// Folder.
class WFilerPageFolder : public WWizardPage, public FControlSnoop
{
DECLARE_WINDOWCLASS(WFilerPageFolder,WWizardPage,Setup)
// Variables.
WFilerWizard* Owner;
USetupDefinition* Manager;
WLabel FolderDescription;
WLabel SpaceAvailable;
WLabel SpaceRequired;
WButton FolderHolder;
WCoolButton DefaultButton;
WEdit Folder;
// Constructor.
WFilerPageFolder( WFilerWizard* InOwner )
: WWizardPage ( TEXT("FilerPageFolder"), IDDIALOG_FilerPageFolder, InOwner )
, Owner ( InOwner )
, Manager ( InOwner->Manager )
, FolderDescription( this, IDC_FolderDescription )
, FolderHolder ( this, IDC_FolderHolder )
, DefaultButton ( this, IDC_Default, FDelegate(this,(TDelegate)OnReset) )
, Folder ( this, IDC_Folder )
, SpaceAvailable ( this, IDC_SpaceAvailable )
, SpaceRequired ( this, IDC_SpaceRequired )
{
guard(WFilerPageFolder::WFilerPageFolder);
Manager->DestPath = Manager->RegistryFolder;
unguard;
}
// WWizardPage interface.
void Update()
{
guard(WFilerPageFolder::Update);
SpaceAvailable.SetText( *FString::Printf(LocalizeGeneral("Space"), FreeSpace(*Folder.GetText())/(1024*1024) ) );
SpaceRequired .SetText( *FString::Printf(LocalizeGeneral("Space"), Manager->RequiredSpace/(1024*1024) ) );
unguard;
}
WWizardPage* GetNext()
{
guard(WFilerPageFolder::GetNext);
// Get folder name.
FString NewFolder = Folder.GetText();
if( NewFolder.Right(1)==PATH_SEPARATOR )
NewFolder = NewFolder.LeftChop(1);
// Make sure all requirements are met.
USetupProduct* RequiredProduct=NULL;
FString FailMessage;
if( !Manager->CheckAllRequirements(Folder.GetText(),RequiredProduct,FailMessage) )
{
FString Title = FString::Printf( LocalizeError(TEXT("MissingProductTitle")), *Manager->LocalProduct, Manager->Patch ? LocalizeError(TEXT("MissingProductPatched")) : LocalizeError(TEXT("MissingProductInstalled")) );
WFailedRequirement( OwnerWindow, Manager, RequiredProduct, *Title, *FailMessage ).DoModal();
return NULL;
}
// Try to create folder.
if
( NewFolder.Len()>=4
&& appIsAlpha((*NewFolder)[0])
&& (*NewFolder)[1]==':'
&& (*NewFolder)[2]==PATH_SEPARATOR[0] )
{
// Attempt to create the folder.
if( NewFolder.Right(1)==PATH_SEPARATOR )
NewFolder = NewFolder.LeftChop(1);
if( GFileManager->MakeDirectory( *NewFolder, 1 ) )
{
Manager->DestPath = NewFolder;
Manager->CreateRootGroup();
return new WFilerPageComponents( Owner );
}
}
FString Title = FString::Printf( LocalizeError("FolderTitle" ), *NewFolder );
FString Msg = FString::Printf( LocalizeError("FolderFormat"), *NewFolder );
MessageBox( *Owner, *Msg, *Title, MB_OK );
OnReset();
return NULL;
unguard;
}
void OnInitDialog()
{
guard(WFilerPageFolder::OnInitDialog);
WWizardPage::OnInitDialog();
FolderDescription.SetText( *FString::Printf(LineFormat(Localize("IDDIALOG_FilerPageFolder",Manager->Patch ? "IDC_FolderDescriptionPatch" : "IDC_FolderDescription")), Manager->LocalProduct ) );
OnReset();
Folder.ChangeDelegate=FDelegate(this,(TDelegate)OnChange);
unguard;
}
void OnChange()
{
guard(WFilerPageFolder::OnChange);
Update();
unguard;
}
void OnReset()
{
guard(WFilerPageFolder::OnReset);
Folder.SetText( *Manager->RegistryFolder );
Update();
unguard;
}
};
// License.
class WFilerPageLicense : public WWizardPage
{
DECLARE_WINDOWCLASS(WFilerPageLicense,WWizardPage,Setup)
// Variables.
WFilerWizard* Owner;
USetupDefinition* Manager;
WLabel LicenseText;
WLabel LicenseQuestion;
WEdit LicenseEdit;
// Constructor.
WFilerPageLicense( WFilerWizard* InOwner )
: WWizardPage ( TEXT("FilerPageLicense"), IDDIALOG_FilerPageLicense, InOwner )
, Owner ( InOwner )
, Manager ( InOwner->Manager )
, LicenseText ( this, IDC_LicenseText )
, LicenseQuestion( this, IDC_LicenseQuestion )
, LicenseEdit ( this, IDC_LicenseEdit )
{}
// WWizardPage interface.
const TCHAR* GetNextText()
{
return LocalizeGeneral("AgreeButton",TEXT("Window"));
}
WWizardPage* GetNext()
{
return new WFilerPageFolder( Owner );
}
void OnInitDialog()
{
guard(WFilerPageLicense::OnInitDialog);
WWizardPage::OnInitDialog();
FString Str;
if( **Manager->License && appLoadFileToString(Str,*Manager->License) )
LicenseEdit.SetText( *Str );
unguard;
}
UBOOL GetShow()
{
return LicenseEdit.GetText()!=TEXT("");
}
};
// Progess.
class WFilerPageUninstallProgress : public WFilerPageProgress
{
DECLARE_WINDOWCLASS(WFilerPageUninstallProgress,WFilerPageProgress,Setup)
WFilerPageUninstallProgress ( WFilerWizard* InOwner )
: WFilerPageProgress( InOwner, TEXT("FilerPageUninstallProgress") )
{}
WWizardPage* GetNext()
{
guard(WFilerPageUninstallProgress::GetNext);
Owner->OnFinish();
return NULL;
unguard;
}
void OnCurrent()
{
guard(WFilerPageProgress::OnCurrent);
UpdateWindow( *this );
Progress.Show(0);
ProgressText.Show(0);
Manager->DoUninstallSteps( this );
Finished = 1;
Owner->OnNext();
unguard;
}
};
// Uninstall screen.
class WFilerPageUninstall : public WWizardPage
{
DECLARE_WINDOWCLASS(WFilerPageUninstall,WWizardPage,Setup)
WFilerWizard* Owner;
USetupDefinition* Manager;
TArray<USetupGroup*>& Dependencies;
WLabel Prompt;
WButton YesButton, NoButton;
WEdit List;
WFilerPageUninstall( WFilerWizard* InOwner )
: WWizardPage ( TEXT("FilerPageUninstall"), IDDIALOG_FilerPageUninstall, InOwner )
, Owner ( InOwner )
, Manager ( InOwner->Manager )
, Dependencies ( InOwner->Manager->UninstallComponents )
, YesButton ( this, IDC_Yes, FDelegate() )
, NoButton ( this, IDC_No, FDelegate() )
, Prompt ( this, IDC_UninstallPrompt )
, List ( this, IDC_UninstallListEdit )
{}
void OnInitDialog()
{
guard(WFilerPageUninstall::OnInitDialog);
WWizardPage::OnInitDialog();
SendMessageX( YesButton, BM_SETCHECK, 1, 0 );
YesButton.SetText( LocalizeGeneral(TEXT("Yes"),TEXT("Core")) );
NoButton .SetText( LocalizeGeneral(TEXT("No" ),TEXT("Core")) );
Prompt .SetText( *FString::Printf(*Prompt.GetText(),Manager->Product) );//!!LocalProduct isn't accessible
FString Str;
for( INT i=0; i<Dependencies.Num(); i++ )
Str += Dependencies(i)->Caption + TEXT("\r\n");
List.SetText( *Str );
unguard;
}
WWizardPage* GetNext()
{
guard(WFilerPageAutoPlay::GetNext);
if( SendMessageX( YesButton, BM_GETCHECK, 0, 0 )!=BST_CHECKED )
{
Owner->OnFinish();
return NULL;
}
else return new WFilerPageUninstallProgress( Owner );
unguard;
}
};
// Welcome.
class WFilerPageWelcome : public WWizardPage
{
DECLARE_WINDOWCLASS(WFilerPageWelcome,WWizardPage,Setup)
// Variables.
WFilerWizard* Owner;
USetupDefinition* Manager;
WLabel WelcomePrompt;
WLabel LanguagePrompt;
WProductInfo ProductInfo;
WListBox LanguageList;
TArray<FString> LanguageNames;
TArray<FRegistryObjectInfo> Results;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -