using System.Linq; using System.Windows.Media.Imaging; using Caliburn.Micro; using WixSharp; using WixSharp.UI.Forms; using WixSharp.UI.WPF; namespace Sai.RvKits_Setup { /// /// The standard SetupTypeDialog. /// Follows the design of the canonical Caliburn.Micro View (MVVM). /// See https://caliburnmicro.com/documentation/cheat-sheet /// /// /// /// public partial class SetupTypeDialog : WpfDialog, IWpfDialog { /// /// Initializes a new instance of the class. /// public SetupTypeDialog() { InitializeComponent(); } /// /// This method is invoked by WixSHarp runtime when the custom dialog content is internally fully initialized. /// This is a convenient place to do further initialization activities (e.g. localization). /// public void Init() { ViewModelBinder.Bind(new SetupTypeDialogModel { Host = ManagedFormHost, }, this, null); } } /// /// ViewModel for standard SetupTypeDialog. /// Follows the design of the canonical Caliburn.Micro ViewModel (MVVM). /// See https://caliburnmicro.com/documentation/cheat-sheet /// /// internal class SetupTypeDialogModel : Caliburn.Micro.Screen { public ManagedForm Host; ISession session => Host?.Runtime.Session; IManagedUIShell shell => Host?.Shell; public BitmapImage Banner => session?.GetResourceBitmap("WixSharpUI_Bmp_Banner").ToImageSource(); /// /// Initializes a new instance of the class. /// void JumpToProgressDialog() { int index = shell.Dialogs.IndexOfDialogImplementing(); if (index != -1) shell.GoTo(index); else shell.GoNext(); // if user did not supply progress dialog then simply go next } public void DoTypical() { if (shell != null) JumpToProgressDialog(); } public void DoComplete() { if (shell != null) { // mark all features to be installed string[] names = session.Features.Select(x => x.Name).ToArray(); session["ADDLOCAL"] = names.JoinBy(","); JumpToProgressDialog(); } } public void DoCustom() => shell?.GoNext(); // let the dialog flow through public void GoPrev() => shell?.GoPrev(); public void GoNext() => shell?.GoNext(); public void Cancel() => shell?.Cancel(); } }