private void sanitizeToolStripMenuItem_Click(object sender, EventArgs e) { if (PluginTree.SelectedRecord == null) { MessageBox.Show(Resources.NoPluginSelected, Resources.ErrorText); return; } try { var rec = PluginTree.SelectedRecord as Record; var p = rec != null?rec.GetPlugin() : null; TESVSnip.Spells.SanitizePlugin(p); } catch (ApplicationException ex) { MessageBox.Show(ex.Message, Resources.ErrorText); } catch { MessageBox.Show("Unknown Exception", Resources.ErrorText); } finally { PluginTree.RebuildObjects(); SendStatusText("Sanitization Complete", SystemColors.ControlText); } }
/// <summary> /// 创建插件对象。 /// </summary> /// <param name="pluginTree">依附的插件树对象。</param> /// <param name="name">插件名称,该名称必须在同级插件中唯一。</param> /// <param name="filePath">插件文件路径(完整路径)。</param> /// <param name="parent">所属的父插件。</param> /// <remarks>创建的插件对象,并没有被加入到<paramref name="parent"/>参数指定的父插件的子集中(<seealso cref="Tiandao.Plugins.Plugin.Children"/>)。</remarks> internal Plugin(PluginTree pluginTree, string name, string filePath, Plugin parent) { if (pluginTree == null) { throw new ArgumentNullException("pluginTree"); } if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentNullException("name"); } if (string.IsNullOrWhiteSpace(filePath)) { throw new ArgumentNullException("filePath"); } _pluginTree = pluginTree; _name = name.Trim(); _filePath = filePath; _parent = parent; _status = PluginStatus.None; _manifest = new PluginManifest(this); _children = new PluginCollection(this); _builtins = new List <Builtin>(); _modules = new FixedElementCollection <IApplicationModule>(); _parsers = new FixedElementCollection <IParser>(); _builders = new BuilderElementCollection(); }
private void InternalCollapse(object item) { foreach (var child in PluginTree.GetChildren(item)) { InternalCollapse(child); } PluginTree.Collapse(item); }
private void InternalExpand(object item) { PluginTree.Expand(item); foreach (var child in PluginTree.GetChildren(item)) { InternalExpand(child); } }
public PluginResolver(PluginTree pluginTree) { if (pluginTree == null) { throw new ArgumentNullException("pluginTree"); } _pluginTree = pluginTree; }
public PluginsHostBuilder(string applicationName, IHostBuilder builder) { _builder = builder ?? throw new ArgumentNullException(nameof(builder)); builder.ConfigureAppConfiguration((ctx, configurator) => { var options = _initialize?.Invoke(ctx); if (options != null) { ctx.Properties[typeof(PluginOptions)] = options; } var environment = Environment.GetEnvironmentVariable(HostDefaults.EnvironmentKey); if (!string.IsNullOrWhiteSpace(environment)) { ctx.HostingEnvironment.EnvironmentName = environment.Trim(); } if (!string.IsNullOrWhiteSpace(applicationName)) { ctx.HostingEnvironment.ApplicationName = applicationName; } var pluginsHostBuilderContext = GetPluginsBuilderContext(ctx); configurator.Add(new Zongsoft.Configuration.PluginConfigurationSource(pluginsHostBuilderContext.Options)); }); builder.ConfigureServices((ctx, services) => { if (ctx.Properties.TryGetValue(typeof(PluginOptions), out var options)) { //将插件启动设置选项加载到服务中 services.AddSingleton((PluginOptions)options); //获取插件树并加载它 var tree = PluginTree.Get((PluginOptions)options).Load(); var registry = new HashSet <Assembly>(); foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { if (!assembly.IsDynamic && assembly.FullName.StartsWith("Zongsoft.") && registry.Add(assembly)) { Zongsoft.Services.ServiceCollectionExtension.Register(services, assembly, ctx.Configuration); } } foreach (var plugin in tree.Plugins) { RegisterPlugin(plugin, services, ctx.Configuration, registry); } } }); builder.UseServiceProviderFactory(new Zongsoft.Services.ServiceProviderFactory()); }
public PluginTreeNode(PluginTree tree, string name, object value) : base(name, null) { if (tree == null) { throw new ArgumentNullException("tree"); } _tree = tree; _children = new PluginTreeNodeCollection(this); this.Value = value; }
//该构造函数用来构造根节点专用 internal PluginTreeNode(PluginTree tree) : base("/", true) { if (tree == null) { throw new ArgumentNullException("tree"); } _tree = tree; _children = new PluginTreeNodeCollection(this); this.Value = null; }
public void CollapseAll(object item) { PluginTree.BeginUpdate(); try { InternalCollapse(item); } finally { PluginTree.EndUpdate(); } }
public void ExpandAll(object item) { PluginTree.BeginUpdate(); try { InternalExpand(item); } finally { PluginTree.EndUpdate(); } }
private void BaseRecord_ChildListChanged(object sender, RecordChangeEventArgs e) { if (e.Record == null || e.Record == PluginList.All) // use null record as hint to reset the roots { UpdateRoots(); //PluginTree.RebuildAll(true); GC.Collect(); // clean up memory after releasing plugins } else { PluginTree.RefreshObject(e.Record); } }
private void stripEDIDsToolStripMenuItem_Click(object sender, EventArgs e) { if (PluginTree.SelectedRecord == null) { MessageBox.Show(Resources.NoPluginSelected, Resources.ErrorText); return; } if (MessageBox.Show(Resources.GeneralSpellWarningInquiry, Resources.WarningText, MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } var p = GetPluginFromNode(PluginTree.SelectedRecord); TESVSnip.Spells.StripEDIDs(p); PluginTree.RebuildObjects(); }
internal PluginContext(PluginSetup settings, PluginApplicationContext applicationContext) { if (settings == null) { throw new ArgumentNullException("settings"); } if (applicationContext == null) { throw new ArgumentNullException("applicationContext"); } _settings = (PluginSetup)settings.Clone(); _pluginTree = new PluginTree(this); _applicationContext = applicationContext; _settings.PropertyChanged += delegate { if (_pluginTree != null && _pluginTree.Status != PluginTreeStatus.None) { throw new InvalidOperationException(); } }; }
private void cleanEspToolStripMenuItem_Click(object sender, EventArgs e) { if (PluginTree.SelectedRecord == null) { MessageBox.Show(Resources.NoPluginSelected, "Error"); return; } if ( MessageBox.Show("This may delete records from the esp.\nAre you sure you wish to continue?", "Warning", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } FixMasters(); var plugin = GetPluginFromNode(PluginTree.SelectedRecord); var lookup = new Dictionary <uint, Record>(); bool missingMasters = false; for (int i = 0; i < plugin.Masters.Length - 1; i++) { if (plugin.Masters[i] == null) { missingMasters = true; continue; } var tes4 = plugin.Records.OfType <Record>().FirstOrDefault(x => x.Name == "TES4"); if (plugin.Masters[i].Records.Count < 2 || tes4 == null) { continue; } var match = (uint)plugin.Masters.Count(x => x.Name == "MAST"); match <<= 24; uint mask = (uint)i << 24; for (int j = 1; j < plugin.Masters[i].Records.Count; j++) { cleanRecurse(plugin.Masters[i].Records[j] as Rec, match, mask, lookup); } } if (missingMasters) { MessageBox.Show("One or more dependencies are not loaded, and will be ignored.", "Warning"); } int count = 0; for (int j = 1; j < plugin.Masters[plugin.Masters.Length - 1].Records.Count; j++) { cleanRecurse2(plugin.Masters[plugin.Masters.Length - 1].Records[j] as Rec, ref count, lookup); } if (count == 0) { MessageBox.Show("No records removed"); } else { MessageBox.Show("" + count + " records removed"); } PluginTree.Refresh(); }
public TreeCommand(PluginTree pluginTree) : this("Tree", pluginTree) { }
public FindCommand(PluginTree pluginTree) : this("Find", pluginTree) { }
public ListCommand(PluginTree pluginTree) : this("List", pluginTree) { }
public PluginTreeNode(PluginTree tree, string name) : this(tree, name, null) { }
public ListCommand(string name, PluginTree pluginTree) : base(name) { _pluginTree = pluginTree ?? throw new ArgumentNullException(nameof(pluginTree)); }
public void RefreshObject(BaseRecord record) { PluginTree.RefreshObject(record); }
private void expandAllToolStripMenuItem_Click(object sender, EventArgs e) { PluginTree.ExpandAll(); }
private void collapseAllToolStripMenuItem_Click(object sender, EventArgs e) { PluginTree.CollapseAll(); }
public void ExpandAll() { PluginTree.ExpandAll(); }
public void CollapseAll() { PluginTree.CollapseAll(); }
private void PluginTree_ModelDropped(object sender, ModelDropEventArgs e) { if (e.DropTargetLocation == DropTargetLocation.Item) { var group = e.TargetModel as IGroupRecord; if (group == null) { return; } var objects = new List <BaseRecord>(); foreach (IRecord record in e.SourceModels) { if (e.Effect == DragDropEffects.Copy) { var r = record.Clone() as BaseRecord; group.AddRecord(r); objects.Add(r); } else if (e.Effect == DragDropEffects.Move) { var r = record as BaseRecord; if (r != null && r.Parent.DeleteRecord(r)) { group.AddRecord(r); objects.Add(r); } } } e.RefreshObjects(); PluginTree.SelectObject(objects); PluginTree.RefreshObject(group); PluginTree.RefreshObjects(objects); } else if (e.DropTargetLocation == DropTargetLocation.AboveItem || e.DropTargetLocation == DropTargetLocation.BelowItem) { int offset = e.DropTargetLocation == DropTargetLocation.BelowItem ? +1 : 0; var rec = (e.TargetModel as IRecord); if (rec == null) { return; } var group = rec.Parent as IGroupRecord; if (group == null) { return; } int idx = group.IndexOf(rec as BaseRecord) + offset; var refreshObjects = new List <BaseRecord>(); var selObjects = new List <BaseRecord>(); IEnumerable <IRecord> itr = e.SourceModels.OfType <IRecord>(); if (e.DropTargetLocation == DropTargetLocation.BelowItem) { itr = itr.Reverse(); } foreach (IRecord record in itr) { if (e.Effect == DragDropEffects.Copy) { var r = record.Clone() as BaseRecord; group.InsertRecord(idx, r); selObjects.Add(r); } else if (e.Effect == DragDropEffects.Move) { var r = record as BaseRecord; var p = r.Parent; if (r.Parent.DeleteRecord(r)) { idx = group.IndexOf(rec as BaseRecord) + offset; group.InsertRecord(idx, r); selObjects.Add(r); } } } e.RefreshObjects(); PluginTree.SelectObject(selObjects); PluginTree.RefreshObject(group); PluginTree.RefreshObjects(selObjects); } }
public void RefreshObject(IList records) { PluginTree.RefreshObjects(records); }
private void compileScriptToolStripMenuItem_Click(object sender, EventArgs e) { FixMasters(); var r = PluginTree.SelectedRecord as Record; var plugin = GetPluginFromNode(r); if (plugin == null || plugin.Parent == null) { return; } string errors; if (Selection.SelectedSubrecord && Selection.Record.Name != "SCPT") { var sr = SubrecordList.SubRecord; if (sr == null) { return; } if (sr.Name != "SCTX") { MessageBox.Show("You need to select a SCPT record or SCTX subrecord to compile", "Error"); return; } ScriptCompiler.ScriptCompiler.Setup(plugin.Masters); Record r2; if (!ScriptCompiler.ScriptCompiler.CompileResultScript(sr, out r2, out errors)) { MessageBox.Show("There were compilation errors:\n" + errors); } else { var srs = r.SubRecords; int i = srs.IndexOf(sr); if (i >= 0) { while (i > 0 && (srs[i - 1].Name == "SCDA" || srs[i - 1].Name == "SCHR")) { srs.RemoveAt(--i); } while (i < srs.Count && (srs[i].Name == "SCTX" || srs[i].Name == "SLSD" || srs[i].Name == "SCVR" || srs[i].Name == "SCRO" || srs[i].Name == "SCRV")) { srs.RemoveAt(i); } srs.InsertRange(i, r2.SubRecords); RebuildSelection(); PluginTree.RefreshObject(r); } } return; } if (r == null || (r.Name != "SCPT")) { MessageBox.Show("You need to select a SCPT record or SCTX subrecord to compile", "Error"); return; } ScriptCompiler.ScriptCompiler.Setup(plugin.Masters); if (!ScriptCompiler.ScriptCompiler.Compile(r, out errors)) { MessageBox.Show("There were compilation errors:\n" + errors); } else { RebuildSelection(); PluginTree.RebuildObjects(); } }
private void PluginTree_OnContextMenuKey(object sender, EventArgs e) { contextMenuRecord.Show(PluginTree.PointToScreen(new Point(PluginTree.Width / 4, PluginTree.Height / 4))); }
private void BaseRecord_RecordDescChanged(object sender, RecordChangeEventArgs e) { PluginTree.RefreshObject(e.Record); }
public void RebuildObjects() { PluginTree.RebuildAll(true); }