private ClientBuilderViewModel() { _plugins = new ObservableCollection <PluginViewModel>( PluginManager.Current.LoadedPlugins.Select(x => { var buildPlugin = x as BuildPlugin; if (buildPlugin != null) { return((PluginViewModel) new BuilderPluginViewModel(buildPlugin)); } var clientPlugin = x as ClientPlugin; if (clientPlugin != null) { return(new ClientPluginViewModel(clientPlugin)); } var factoryCommandPlugin = x as FactoryCommandPlugin; if (factoryCommandPlugin != null) { return(new FactoryPluginViewModel(factoryCommandPlugin)); } return(null); }).Where(x => x != null)); foreach (var pluginViewModel in _plugins) { pluginViewModel.OpenSettings += PluginViewModelOnOpenSettings; pluginViewModel.SelectedChanged += PluginViewModelOnSelectedChanged; } Plugins = CollectionViewSource.GetDefaultView(_plugins); Plugins.GroupDescriptions.Add(new PropertyGroupDescription("IsBuildPlugin")); Plugins.SortDescriptions.Add(new SortDescription("IsBuildPlugin", ListSortDirection.Ascending)); Plugins.Filter = FilterPlugins; BuilderSettingsManager = new BuilderSettingsManager(); BuilderSettingsManager.BuilderSettingsOverwriteRequest += BuilderSettingsManagerOnBuilderSettingsOverwriteRequest; BuildConfigurationManager = new BuildConfigurationManager(); }
private void PluginViewModelOnSelectedChanged(object sender, EventArgs eventArgs) { var pluginViewModel = (PluginViewModel)sender; if (pluginViewModel.IsSelected) { var overwriteBuilderProperties = pluginViewModel.PluginObject as IOverwriteBuilderProperties; if (overwriteBuilderProperties?.OverwrittenSettings?.Count > 0) { BuilderSettingsManager.AddOverwritingPlugin(pluginViewModel.Plugin, overwriteBuilderProperties); } var provideBuilderSettings = pluginViewModel.PluginObject as IProvideBuilderSettings; if (provideBuilderSettings?.BuilderSettings?.Count > 0) { BuilderSettingsManager.AddProvidingPlugin(pluginViewModel.Plugin, provideBuilderSettings); } } else if (pluginViewModel.PluginObject is IOverwriteBuilderProperties || pluginViewModel.PluginObject is IProvideBuilderSettings) { BuilderSettingsManager.RemovePlugin(pluginViewModel.Plugin); } }
private void LoadSettings(IEnumerable <ClientSetting> clientSettings) { var settings = new List <IBuilderProperty>(); foreach (var clientSetting in clientSettings) { var type = Type.GetType(clientSetting.SettingsType); if (type == null) { continue; } var settingInstance = Activator.CreateInstance(type) as IBuilderProperty; if (settingInstance == null) { continue; } BuilderPropertyHelper.ApplyProperties(settingInstance, clientSetting.Properties); settings.Add(settingInstance); } BuilderSettingsManager.InitializeSettings(settings); }