static void Execute(ILSpyTreeNode[] nodes) { if (!CanExecute(nodes)) return; var imgRsrcElNode = (SerializedImageResourceElementTreeNode)nodes[0]; var options = new ResourceElementOptions(imgRsrcElNode.GetAsRawImage()); var data = new ImageResourceElementVM(options); var win = new ImageResourceElementDlg(); win.Title = CMD_NAME; win.DataContext = data; win.Owner = MainWindow.Instance; if (win.ShowDialog() != true) return; var opts = data.CreateResourceElementOptions(); string error; try { opts = new ResourceElementOptions(imgRsrcElNode.Serialize(opts.Create())); error = imgRsrcElNode.CheckCanUpdateData(opts.Create()); } catch (Exception ex) { error = string.Format("New data must be an image. Error: {0}", ex.Message); } if (!string.IsNullOrEmpty(error)) { MainWindow.Instance.ShowMessageBox(error); return; } UndoCommandManager.Instance.Add(new SerializedImageResourceElementSettingsCommand(imgRsrcElNode, opts)); }
protected ResourceElementSettingsBaseCommand(ResourceElementTreeNode rsrcElNode, ResourceElementOptions options) { this.rsrcSetNode = (ResourceElementSetTreeNode)rsrcElNode.Parent; this.rsrcElNode = rsrcElNode; this.newOptions = options.Create(); this.origOptions = rsrcElNode.ResourceElement; this.module = ILSpyTreeNode.GetModule(rsrcSetNode); Debug.Assert(this.module != null); this.resource = rsrcSetNode.Resource; this.resourceIndex = module.Resources.IndexOf(this.resource); Debug.Assert(this.resourceIndex >= 0); if (this.resourceIndex < 0) throw new InvalidOperationException(); this.origParentChildIndex = this.rsrcSetNode.Children.IndexOf(rsrcElNode); Debug.Assert(this.origParentChildIndex >= 0); if (this.origParentChildIndex < 0) throw new InvalidOperationException(); this.nameChanged = origOptions.Name != newOptions.Name; }