public FactoriesDialog(List <UIModel> models, UIOutputItem itemOut, UIInputItem itemIn) { _itemOut = itemOut; _itemIn = itemIn; UIAdaptedFactory factory; string firstSourceFactory = null; foreach (UIModel model in models) { foreach (IAdaptedOutputFactory iFactory in model.LinkableComponent.AdaptedOutputFactories) { factory = new UIAdaptedFactory(); if (_itemOut.Component == model.LinkableComponent) { factory.InitialiseAsNative(iFactory.Id, model.LinkableComponent); if (firstSourceFactory == null) { firstSourceFactory = factory.ToString(); } } else { factory.InitialiseAs3rdParty(iFactory.GetType(), model.LinkableComponent); } AddFactory(factory); } } InitializeComponent(); groupBox2.Text = string.Format( "Factory sources that adapt \"{0}\" -> \"{1}\"", itemOut.Caption, itemIn.Caption); UpdateUIFactories(); if (firstSourceFactory != null) { cbFactories.SelectedIndex = cbFactories.FindStringExact(firstSourceFactory); } UpdateControlEnabling(); }
void SetValidAdatedOutputs(TreeNode outputSender = null) { UIInputItem input = null; UIOutputItem output = null; if (outputSender != null && outputSender.Tag is UIOutputItem) { output = outputSender.Tag as UIOutputItem; } else { SetErrorText("No output item has been selected"); } List <UIInputItem> checkedInputs = GetDownStreamCheckedItems <UIInputItem>(treeViewTargets.Nodes); if (checkedInputs.Count != 1) { SetErrorText("More than one input item has been selected"); } else { input = checkedInputs[0]; } if (input == null) { listBoxAdaptedOutputs.DataSource = null; return; } if (output == null) { listBoxAdaptedOutputs.DataSource = null; return; } List <UIAdaptedOutputItem> ids = new List <UIAdaptedOutputItem>(); foreach (UIAdaptedFactory factory in externalFactories) { IIdentifiable[] idf = factory.GetAvailableAdaptedOutputIds(output, input); foreach (IIdentifiable f in idf) { ITimeSpaceAdaptedOutput adpout = (ITimeSpaceAdaptedOutput)factory.CreateAdaptedOutput(f, output, input); UIAdaptedOutputItem uiadpout = new UIAdaptedOutputItem(factory, f, adpout, output); ids.Add(uiadpout); } } foreach (IAdaptedOutputFactory factory in connection.SourceModel.LinkableComponent.AdaptedOutputFactories) { UIAdaptedFactory fac = new UIAdaptedFactory(); fac.InitialiseAsNative(factory.Id, connection.SourceModel.LinkableComponent); IIdentifiable[] idf = factory.GetAvailableAdaptedOutputIds(output, input); foreach (IIdentifiable f in idf) { UIAdaptedFactory tempFac = new UIAdaptedFactory(); tempFac.InitialiseAsNative(factory.Id, connection.SourceModel.LinkableComponent); ITimeSpaceAdaptedOutput adpout = (ITimeSpaceAdaptedOutput)factory.CreateAdaptedOutput(f, output, input); UIAdaptedOutputItem uiadpout = new UIAdaptedOutputItem(tempFac, f, adpout, output); ids.Add(uiadpout); } } foreach (TreeNode node in outputSender.Nodes) { if (node.Tag != null && node.Tag is UIAdaptedOutputItem) { UIAdaptedOutputItem item = (UIAdaptedOutputItem)node.Tag; for (int i = 0; i < ids.Count; i++) { if (item.Id == ids[i].Id) { ids.RemoveAt(i); break; } } } } listBoxAdaptedOutputs.DataSource = ids; listBoxAdaptedOutputs.DisplayMember = "Caption"; }