static void Execute(ILSpyTreeNode[] nodes) { if (!CanExecute(nodes)) return; var rsrcSetNode = nodes[0] as ResourceElementSetTreeNode; if (rsrcSetNode == null) rsrcSetNode = nodes[0].Parent as ResourceElementSetTreeNode; Debug.Assert(rsrcSetNode != null); var module = ILSpyTreeNode.GetModule(nodes[0]); Debug.Assert(module != null); if (module == null) throw new InvalidOperationException(); var data = new ImageListVM(new ImageListOptions() { Name = "my.ImageStream" }); var win = new ImageListDlg(); win.Title = CMD_NAME; win.DataContext = data; win.Owner = MainWindow.Instance; if (win.ShowDialog() != true) return; if (data.ImageListStreamerVM.Collection.Count == 0) { MainWindow.Instance.ShowMessageBox("It's not possible to create an empty image list"); return; } var listOpts = data.CreateImageListOptions(); ResourceElementOptions opts = null; string error; try { opts = new ResourceElementOptions(SerializedImageListStreamerResourceElementTreeNode.Serialize(listOpts)); error = SerializedImageListStreamerResourceElementTreeNode.CheckCanUpdateData(module, opts.Create()); } catch (Exception ex) { error = string.Format("Couldn't serialize the images. Error: {0}", ex.Message); } if (!string.IsNullOrEmpty(error)) { MainWindow.Instance.ShowMessageBox(error); return; } var newNode = (SerializedImageListStreamerResourceElementTreeNode)ResourceFactory.Create(module, opts.Create()); UndoCommandManager.Instance.Add(new CreateImageListResourceElementCommand(rsrcSetNode, newNode)); }
static void Execute(Lazy<IUndoCommandManager> undoCommandManager, IAppWindow appWindow, IFileTreeNodeData[] nodes) { if (!CanExecute(nodes)) return; var imgNode = (ISerializedImageListStreamerResourceElementNode)nodes[0]; var options = new ImageListOptions(imgNode.ImageListOptions); var data = new ImageListVM(options); var win = new ImageListDlg(); win.Title = dnSpy_AsmEditor_Resources.EditResourceCommand2; win.DataContext = data; win.Owner = appWindow.MainWindow; if (win.ShowDialog() != true) return; var listOpts = data.CreateImageListOptions(); if (listOpts.ImageSources.Count == 0) { Shared.App.MsgBox.Instance.Show(dnSpy_AsmEditor_Resources.Error_EmptyImageList); return; } ResourceElementOptions opts = null; string error; try { opts = new ResourceElementOptions(SerializedImageListStreamerUtils.Serialize(listOpts)); error = imgNode.CheckCanUpdateData(opts.Create()); } catch (Exception ex) { error = string.Format(dnSpy_AsmEditor_Resources.Error_CouldNotSerializeImages, ex.Message); } if (!string.IsNullOrEmpty(error)) { Shared.App.MsgBox.Instance.Show(error); return; } undoCommandManager.Value.Add(new SerializedImageListStreamerResourceElementSettingsCommand(imgNode, opts)); }
static void Execute(ILSpyTreeNode[] nodes) { if (!CanExecute(nodes)) return; var imgNode = (SerializedImageListStreamerResourceElementTreeNode)nodes[0]; var options = new ImageListOptions(imgNode.ImageListOptions); var data = new ImageListVM(options); var win = new ImageListDlg(); win.Title = CMD_NAME; win.DataContext = data; win.Owner = MainWindow.Instance; if (win.ShowDialog() != true) return; var listOpts = data.CreateImageListOptions(); if (listOpts.ImageSources.Count == 0) { MainWindow.Instance.ShowMessageBox("It's not possible to create an empty image list"); return; } ResourceElementOptions opts = null; string error; try { opts = new ResourceElementOptions(SerializedImageListStreamerResourceElementTreeNode.Serialize(listOpts)); error = imgNode.CheckCanUpdateData(opts.Create()); } catch (Exception ex) { error = string.Format("Couldn't serialize the images. Error: {0}", ex.Message); } if (!string.IsNullOrEmpty(error)) { MainWindow.Instance.ShowMessageBox(error); return; } UndoCommandManager.Instance.Add(new SerializedImageListStreamerResourceElementSettingsCommand(imgNode, opts)); }
static void Execute(Lazy<IUndoCommandManager> undoCommandManager, IAppWindow appWindow, IResourceNodeFactory resourceNodeFactory, IFileTreeNodeData[] nodes) { if (!CanExecute(nodes)) return; var rsrcSetNode = nodes[0] as IResourceElementSetNode; if (rsrcSetNode == null) rsrcSetNode = nodes[0].TreeNode.Parent.Data as IResourceElementSetNode; Debug.Assert(rsrcSetNode != null); var module = nodes[0].GetModule(); Debug.Assert(module != null); if (module == null) throw new InvalidOperationException(); var data = new ImageListVM(new ImageListOptions() { Name = "my.ImageStream" }); var win = new ImageListDlg(); win.Title = dnSpy_AsmEditor_Resources.CreateImageListStreamerResourceCommand2; win.DataContext = data; win.Owner = appWindow.MainWindow; if (win.ShowDialog() != true) return; if (data.ImageListStreamerVM.Collection.Count == 0) { Shared.App.MsgBox.Instance.Show(dnSpy_AsmEditor_Resources.Error_EmptyImageList); return; } var listOpts = data.CreateImageListOptions(); ResourceElementOptions opts = null; string error; try { opts = new ResourceElementOptions(SerializedImageListStreamerUtils.Serialize(listOpts)); error = SerializedImageListStreamerUtils.CheckCanUpdateData(module, opts.Create()); } catch (Exception ex) { error = string.Format(dnSpy_AsmEditor_Resources.Error_CouldNotSerializeImages, ex.Message); } if (!string.IsNullOrEmpty(error)) { Shared.App.MsgBox.Instance.Show(error); return; } var treeView = appWindow.FileTreeView.TreeView; var treeNodeGroup = appWindow.FileTreeView.FileTreeNodeGroups.GetGroup(FileTreeNodeGroupType.ResourceElementTreeNodeGroup); var newNode = (ISerializedImageListStreamerResourceElementNode)treeView.Create(resourceNodeFactory.Create(module, opts.Create(), treeNodeGroup)).Data; undoCommandManager.Value.Add(new CreateImageListResourceElementCommand(rsrcSetNode, newNode)); appWindow.FileTabManager.FollowReference(newNode); }