示例#1
0
        public FinderPluginNode(IHDEHost host, IPluginHost2 pluginHost, [Config("Tags")] IDiffSpread <string> tagsPin)
        {
            // The InitializeComponent() call is required for Windows Forms designer support.
            InitializeComponent();

            FHDEHost    = host;
            FPluginHost = pluginHost;

            FSearchTextBox.ContextMenu        = new ContextMenu();
            FSearchTextBox.ContextMenu.Popup += FSearchTextBox_ContextMenu_Popup;
            FSearchTextBox.MouseWheel        += FSearchTextBox_MouseWheel;

            FMappingRegistry = new MappingRegistry();
            FMappingRegistry.RegisterDefaultMapping <INamed, DefaultNameProvider>();
            FHierarchyViewer.Registry = FMappingRegistry;

            FTagsPin          = tagsPin;
            FTagsPin.Changed += HandleTagsPinChanged;

            FNodeFilter = new NodeFilter();
            FNodeView   = FNodeFilter.UpdateFilter(string.Empty, FHDEHost.RootNode);

            FHDEHost.WindowSelectionChanged += HandleWindowSelectionChanged;
            //defer setting the active patch window as
            //this will trigger the initial WindowSelectionChangeCB
            //which will want to access this windows caption which is not yet available
            SynchronizationContext.Current.Post((object state) => HandleWindowSelectionChanged(FHDEHost, new WindowEventArgs(FHDEHost.ActivePatchWindow)), null);
        }
示例#2
0
 public NodePlugin(Host vlHost, RuntimeHost runtimeHost, NodeId nodeId, IPluginHost2 pluginHost, IIORegistry ioRegistry)
 {
     FInstanceId  = Element.ProduceNewIdentity();
     FVlHost      = vlHost;
     FRuntimeHost = runtimeHost;
     NodeId       = nodeId;
     FPluginHost  = pluginHost;
     FIORegistry  = ioRegistry;
     FBuildResult = new BuildResult(this, null, null, null, null, null, null);
 }
示例#3
0
        public ConflictSolution Solve(IPluginHost2 declarer, Declaration newDeclaration, Dictionary <string, Declaration> register)
        {
            SetConflictInfo(newDeclaration, register);
            FUI.SetExistingDeclaration(FExisting);
            FUI.SetNewSelection(FRegister.Keys);
            FUI.SetExistingUsers(GetUsers(FExisting.Name));
            FUI.SetNewUsers(new[] { NiceNodePath(declarer) });

            var kind = (ConflictSolutionKind)FUI.ShowDialog();

            return(new ConflictSolution(kind, FUI.NewDeclarationName, FUI.NewDeclarationBody));
        }
示例#4
0
        //load from config pin
        void LoadDeclaration(IPluginHost2 nodeHost, IStructDeclarer declarer, string text)
        {
            if (declarer.Declaration == null || declarer.Declaration.ToString() != text) //we are only interested in cache on startup
            {
                var d = FDeclarationFactory["Template"];
                if (!string.IsNullOrWhiteSpace(text))
                {
                    d = FDeclarationFactory.Create(text);
                    var existing = FDeclarationFactory.Get(d.Name);
                    if (existing == null) //is new
                    {
                        FDeclarationFactory.Add(d, false);
                    }
                    else if (d.Equals(existing)) //equals existing, don't worry
                    {
                        d = existing;
                    }
                    else
                    {
                        var solution = FConflictMgr.Solve(nodeHost, d, FDeclarationFactory.FDeclarations);
                        switch (solution.SolutionKind)
                        {
                        case ConflictManager.ConflictSolutionKind.Ignore:
                            d = existing;
                            break;

                        case ConflictManager.ConflictSolutionKind.Split:
                            d = FDeclarationFactory.Get(solution.DeclarationName);
                            if (d == null)
                            {
                                d = FDeclarationFactory.Create(solution.DeclarationName, solution.DeclarationBody);
                                FDeclarationFactory.Add(d, false);
                            }
                            break;

                        case ConflictManager.ConflictSolutionKind.Overwrite:
                            d = FDeclarationFactory.Create(solution.DeclarationName, solution.DeclarationBody);
                            FDeclarationFactory.Update(existing.Name, d);
                            break;
                        }
                    }
                }
                declarer.Declaration = d;
                (declarer.IOManager as IOManager).UpdateFromDeclaration(d);
                SetDescriptiveName(declarer, d.Name);
            }
        }
示例#5
0
        public IPluginBase CreatePlugin(INodeInfo nodeInfo, IPluginHost2 pluginHost)
        {
            IPluginBase plugin = null;

            string assemblyLocation = string.Empty;
            var    isUpToDate       = GetAssemblyLocation(nodeInfo, out assemblyLocation);

            // HACK: pluginHost is null in case of WindowSwitcher/NodeBrowser/etc. Fix this.
            if (pluginHost != null)
            {
                // Mark the node if old assembly was loaded and log warning.
                if (!isUpToDate)
                {
                    pluginHost.Status |= StatusCode.HasInvalidData;
                    FLogger.Log(LogType.Warning, string.Format("Plugin of node '{0}' (ID: {1}) is out of date and couldn't be recompiled. Check its source code for errors.", nodeInfo.Username, pluginHost.GetID()));
                }
                else
                {
                    pluginHost.Status &= ~StatusCode.HasInvalidData;
                }
            }

            var assembly = Assembly.LoadFrom(assemblyLocation);

            //Check if need to start anything before rest is loaded
            FStartableRegistry.ProcessAssembly(assembly);

            var type = assembly.GetType(nodeInfo.Arguments);

            // type can be null if assembly is corrupt or doesn't contain cached node info anymore
            if (type != null)
            {
                var attribute = GetPluginInfoAttributeData(type);
                if (attribute != null)
                {
                    var pluginContainer = new PluginContainer(
                        pluginHost as IInternalPluginHost,
                        FIORegistry,
                        FParentContainer,
                        FNodeInfoFactory,
                        this,
                        type,
                        nodeInfo);

                    // We intercept the plugin to manage IOHandlers.
                    plugin = pluginContainer;
                    FPluginContainers[pluginContainer.PluginBase] = pluginContainer;

                    // HACK: FPluginHost is null in case of WindowSwitcher and friends
                    if (pluginHost != null)
                    {
                        AssignOptionalPluginInterfaces(pluginHost as IInternalPluginHost, pluginContainer.PluginBase);
                    }

                    // Send event, clients are not interested in wrapping plugin, so send original here.
                    if (this.PluginCreated != null)
                    {
                        this.PluginCreated(pluginContainer.PluginBase, pluginHost);
                    }
                }
                else
                {
                    var v1Plugin = (IPlugin)assembly.CreateInstance(nodeInfo.Arguments);

                    v1Plugin.SetPluginHost(pluginHost);

                    plugin = v1Plugin;

                    // HACK: FPluginHost is null in case of WindowSwitcher and friends
                    if (pluginHost != null)
                    {
                        AssignOptionalPluginInterfaces(pluginHost as IInternalPluginHost, plugin);
                    }

                    // Send event
                    if (this.PluginCreated != null)
                    {
                        this.PluginCreated(plugin, pluginHost);
                    }
                }
            }
            else
            {
                pluginHost.Status |= StatusCode.HasInvalidData;
                FLogger.Log(LogType.Warning, string.Format("Type '{0}' not found in assembly '{1}'. Failed to create plugin node {2} (ID: {3}).", nodeInfo.Arguments, assembly.FullName, nodeInfo.Username, pluginHost.GetID()));
            }

            return(plugin);
        }
 public SScopedValueNode(IPluginHost2 host, IHDEHost hdeHost)
 {
     FHost = host;
     hdeHost.MainLoop.OnPrepareGraph += OnPrepareGraph;
 }
示例#7
0
        public NodeBrowserPluginNode(IHDEHost host, INodeInfoFactory nodeInfoFactory, NodeCollection nodeCollection, IPluginHost2 pluginHost)
        {
            HDEHost         = host;
            NodeInfoFactory = nodeInfoFactory;
            FNodeCollection = nodeCollection;
            IsStandalone    = pluginHost != null;

            DefaultConstructor();
        }
 public RScopedValueNode(IPluginHost2 host, IHDEHost hdeHost)
 {
     FHost = host;
     hdeHost.MainLoop.OnRender += OnRender;
 }