예제 #1
0
        private void OnFactoryDetails(object sender, EventArgs e)
        {
            UIAdaptedFactory factory = _factories[cbFactories.SelectedIndex];

            string s = string.Format("Type: {0}\r\nAssembly: {1}",
                                     factory.Type.ToString(),
                                     factory.Assembly.FullName
                                     );

            MessageBox.Show(s, "Selected factory details",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
예제 #2
0
        bool AddFactory(UIAdaptedFactory iFactory)
        {
            foreach (UIAdaptedFactory factory in _factories)
            {
                if (factory.Factory.GetType() == iFactory.GetType())
                {
                    return(false);
                }
            }

            _factories.Add(iFactory);

            return(true);
        }
예제 #3
0
        private void AddFactories(FileInfo assemblyFileInfo)
        {
            if (!assemblyFileInfo.Exists)
            {
                throw new Exception(
                          "File not found: " + assemblyFileInfo.FullName);
            }

            Assembly assembly = Assembly.LoadFile(assemblyFileInfo.FullName);

            List <Type> factoryTypes = new List <Type>();

            foreach (Type type in assembly.GetExportedTypes())
            {
                // need a parameterless constructor
                if (type.GetConstructor(Type.EmptyTypes) == null)
                {
                    continue;
                }

                foreach (Type inter in type.GetInterfaces())
                {
                    if (inter == typeof(IAdaptedOutputFactory))
                    {
                        factoryTypes.Add(type);
                        break;
                    }
                }
            }

            if (factoryTypes.Count == 0)
            {
                MessageBox.Show("No types derived from IAdaptedOutputFactory with parameterless constructors found",
                                "Add Factories", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            UIAdaptedFactory factory;

            foreach (Type type in factoryTypes)
            {
                factory = new UIAdaptedFactory();
                factory.InitialiseAs3rdParty(assemblyFileInfo, type.ToString());
                AddFactory(factory);
            }

            UpdateUIFactories();
        }
예제 #4
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();
        }
예제 #5
0
        void UpdateUIAdapters()
        {
            clbAdapters.Items.Clear();

            if (cbFactories.SelectedItem == null)
            {
                return;
            }

            UIAdaptedFactory factory = (UIAdaptedFactory)cbFactories.SelectedItem;

            foreach (IIdentifiable id in factory.GetAvailableAdaptedOutputIds(_itemOut, _itemIn))
            {
                clbAdapters.Items.Add(
                    factory.NewAdaptedUIOutputItem(id.Id, _itemOut, _itemIn));
            }

            clbAdapters.Invalidate();
        }
예제 #6
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";
        }