public WritableLaunchSettings(ILaunchSettings settings)
        {
            if (settings.Profiles != null)
            {
                foreach (ILaunchProfile profile in settings.Profiles)
                {
                    // Make a mutable/writable copy of each profile
                    Profiles.Add(new WritableLaunchProfile(profile));
                }
            }

            foreach ((string key, object value) in LaunchSettings.CloneGlobalSettingsValues(settings.GlobalSettings))
            {
                GlobalSettings.Add(key, value);
            }

            if (settings.ActiveProfile != null)
            {
                ActiveProfile = Profiles.Find(profile => LaunchProfile.IsSameProfileName(profile.Name, settings.ActiveProfile.Name));
            }
        }
        internal virtual void InitializeDebugTargetsCore(ILaunchSettings profiles)
        {
            IWritableLaunchSettings newSettings = profiles.ToWritableLaunchSettings();

            // Since this get's reentered if the user saves or the user switches active profiles.
            if (CurrentLaunchSettings != null && !CurrentLaunchSettings.SettingsDiffer(newSettings))
            {
                return;
            }

            try
            {
                // This should never change the dirty state when loading the dialog
                PushIgnoreEvents();

                // Remember the current selection
                string curProfileName = SelectedDebugProfile?.Name;

                // Update the set of settings and generate a property change so the list of profiles gets updated. Note that we always
                // clear the active profile on the CurrentLaunchSettings so that when we do set one and property changed event is set
                CurrentLaunchSettings = newSettings;
                CurrentLaunchSettings.ActiveProfile = null;

                // Reload the launch profiles collection
                LaunchProfiles.Clear();
                foreach (IWritableLaunchProfile profile in CurrentLaunchSettings.Profiles)
                {
                    LaunchProfiles.Add(profile);
                }

                // When loading new profiles we need to clear the launch type. This is so the external changes cause the current
                // active provider to be refreshed
                _selectedLaunchType = null;
                NotifyProfileCollectionChanged();

                // If we have a selection, we want to leave it as is
                if (curProfileName == null || newSettings.Profiles.Find(p => LaunchProfile.IsSameProfileName(p.Name, curProfileName)) == null)
                {
                    // Note that we have to be careful since the collection can be empty.
                    if (profiles.ActiveProfile != null && !string.IsNullOrEmpty(profiles.ActiveProfile.Name))
                    {
                        SelectedDebugProfile = LaunchProfiles.Single(p => LaunchProfile.IsSameProfileName(p.Name, profiles.ActiveProfile.Name));
                    }
                    else
                    {
                        if (LaunchProfiles.Count > 0)
                        {
                            SelectedDebugProfile = LaunchProfiles[0];
                        }
                        else
                        {
                            SetEnvironmentGrid(null);
                        }
                    }
                }
                else
                {
                    SelectedDebugProfile = LaunchProfiles.Single(p => LaunchProfile.IsSameProfileName(p.Name, curProfileName));
                }
            }
            finally
            {
                PopIgnoreEvents();
                _firstSnapshotCompleteSource?.TrySetResult();
                _debugTargetsCoreInitialized = true;
            }
        }
 internal bool IsNewProfileNameValid(string name)
 {
     return(!LaunchProfiles.Any(
                profile => LaunchProfile.IsSameProfileName(profile.Name, name)));
 }
 internal bool IsNewProfileNameValid(string name)
 {
     return(DebugProfiles.Where(
                profile => LaunchProfile.IsSameProfileName(profile.Name, name)).Count() == 0);
 }
        /// <summary>
        /// Called whenever the debug targets change. Note that after a save this function will be
        /// called. It looks for changes and applies them to the UI as needed. Switching profiles
        /// will also cause this to change as the active profile is stored in profiles snaphost.
        /// </summary>
        internal virtual void InitializeDebugTargetsCore(ILaunchSettings profiles)
        {
            bool profilesChanged    = true;
            bool IISSettingsChanged = true;

            // Since this get's reentered if the user saves or the user switches active profiles.
            if (DebugProfiles != null)
            {
                profilesChanged = profiles.ProfilesAreDifferent(DebugProfiles.Select(p => (ILaunchProfile)p).ToList());
                if (!profilesChanged && !IISSettingsChanged)
                {
                    return;
                }
            }

            try
            {
                // This should never change the dirty state
                PushIgnoreEvents();

                if (profilesChanged)
                {
                    // Remember the current selection
                    string curProfileName = SelectedDebugProfile == null ? null : SelectedDebugProfile.Name;

                    // Load debug profiles
                    var debugProfiles = new ObservableCollection <LaunchProfile>();

                    foreach (var profile in profiles.Profiles)
                    {
                        // Don't show the dummy NoAction profile
                        if (profile.CommandName != ProfileCommandNames.NoAction)
                        {
                            var newProfile = new LaunchProfile(profile);
                            debugProfiles.Add(newProfile);
                        }
                    }

                    DebugProfiles = debugProfiles;

                    // If we have a selection, we want to leave it as is
                    if (curProfileName == null || profiles.Profiles.FirstOrDefault(p => { return(LaunchProfile.IsSameProfileName(p.Name, curProfileName)); }) == null)
                    {
                        // Note that we have to be careful since the collection can be empty.
                        if (!string.IsNullOrEmpty(profiles.ActiveProfile.Name))
                        {
                            SelectedDebugProfile = DebugProfiles.Where((p) => LaunchProfile.IsSameProfileName(p.Name, profiles.ActiveProfile.Name)).Single();
                        }
                        else
                        {
                            if (debugProfiles.Count > 0)
                            {
                                SelectedDebugProfile = debugProfiles[0];
                            }
                            else
                            {
                                SetEnvironmentGrid(null);
                            }
                        }
                    }
                    else
                    {
                        SelectedDebugProfile = DebugProfiles.Where((p) => LaunchProfile.IsSameProfileName(p.Name, curProfileName)).Single();
                    }
                }
            }
            finally
            {
                PopIgnoreEvents();
            }
        }
 /// <summary>
 /// See <see cref="IDynamicEnumValuesGenerator"/>
 /// </summary>
 public async Task <IEnumValue?> TryCreateEnumValueAsync(string userSuppliedValue)
 {
     return((await _listedValues.GetValueAsync())
            .FirstOrDefault(v => LaunchProfile.IsSameProfileName(v.Name, userSuppliedValue)));
 }
Exemple #7
0
 public void LaunchProfile_IsSameProfileNameTests()
 {
     Assert.True(LaunchProfile.IsSameProfileName("test", "test"));
     Assert.False(LaunchProfile.IsSameProfileName("test", "Test"));
 }