示例#1
0
        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();
        }
示例#2
0
        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";
        }