public ContextMenuStrip CreateMenu(WzNode node, WzObject Tag) { int currentDataTreeSelectedCount = parentPanel.DataTree.SelectedNodes.Count; ContextMenuStrip menu = new ContextMenuStrip(); if (Tag is WzImage || Tag is IPropertyContainer) { if (Tag is WzSubProperty) { menu.Items.AddRange(new ToolStripItem[] { AddPropsSubMenu, Rename, /*export, import,*/ Remove }); } else { menu.Items.AddRange(new ToolStripItem[] { AddPropsSubMenu, Rename, /*export, import,*/ Remove }); } } else if (Tag is WzImageProperty) { menu.Items.AddRange(new ToolStripItem[] { Rename, /*export, import,*/ Remove }); } else if (Tag is WzDirectory) { menu.Items.AddRange(new ToolStripItem[] { AddDirsSubMenu, Rename, /*export, import,*/ Remove }); } else if (Tag is WzFile) { menu.Items.AddRange(new ToolStripItem[] { AddDirsSubMenu, SaveFile, Unload, Reload }); } currNode = node; return(menu); }
protected void removePaintFromNodes() { if (m_coll.Count == 0) { return; } TreeNode n0 = (TreeNode)m_coll[0]; /*Color back = n0.TreeView.BackColor; * Color fore = n0.TreeView.ForeColor;*/ Color back = BackColor; Color fore = ForeColor; foreach (TreeNode n in m_coll) { n.BackColor = back; WzNode node = (WzNode)n; if (node.IsWzObjectAddedManually) { n.ForeColor = WzNode.NewObjectForeColor; } else { n.ForeColor = fore; } } }
/// <summary> /// Delayed loading of the loaded WzFile to the TreeNode panel /// This primarily fixes some performance issue when loading multiple WZ concurrently. /// </summary> /// <param name="newFile"></param> /// <param name="panel"></param> /// <param name="currentDispatcher"></param> public void AddLoadedWzFileToMainPanel(WzFile newFile, MainPanel panel, Dispatcher currentDispatcher = null) { WzNode node = new WzNode(newFile); // execute in main thread if (currentDispatcher != null) { currentDispatcher.BeginInvoke((Action)(() => { panel.DataTree.BeginUpdate(); panel.DataTree.Nodes.Add(node); SortNodesRecursively(node); panel.DataTree.EndUpdate(); })); } else { panel.DataTree.BeginUpdate(); panel.DataTree.Nodes.Add(node); SortNodesRecursively(node); panel.DataTree.EndUpdate(); } }
/// <summary> /// Adds a WzObject to the WzNode and returns the newly created WzNode /// </summary> /// <param name="obj"></param> /// <param name="undoRedoMan"></param> /// <returns></returns> public WzNode AddObject(WzObject obj, UndoRedoManager undoRedoMan) { if (CanNodeBeInserted(this, obj.Name)) { TryParseImage(); if (addObjInternal(obj)) { WzNode node = new WzNode(obj, true); Nodes.Add(node); if (node.Tag is WzImageProperty) { ((WzImageProperty)node.Tag).ParentImage.Changed = true; } undoRedoMan.AddUndoBatch(new System.Collections.Generic.List <UndoRedoAction> { UndoRedoManager.ObjectAdded(this, node) }); node.EnsureVisible(); return(node); } else { Warning.Error("Could not insert property, make sure all types are correct"); return(null); } } else { MessageBox.Show("Cannot insert object \"" + obj.Name + "\" because an object with the same name already exists. Skipping.", "Skipping Object", MessageBoxButtons.OK, MessageBoxIcon.Information); return(null); } }
public ContextMenuStrip CreateMenu(WzNode node, WzObject Tag) { ContextMenuStrip menu = null; if (Tag is WzImage || Tag is IPropertyContainer) { if (Tag is WzSubProperty) { menu = new ContextMenuStrip(); menu.Items.AddRange(new ToolStripItem[] { AddPropsSubMenu, /*export, import,*/ Remove }); } else { menu = new ContextMenuStrip(); menu.Items.AddRange(new ToolStripItem[] { AddPropsSubMenu, /*export, import,*/ Remove }); } } else if (Tag is WzImageProperty) { menu = new ContextMenuStrip(); menu.Items.AddRange(new ToolStripItem[] { /*export, import,*/ Remove }); } else if (Tag is WzDirectory) { menu = new ContextMenuStrip(); menu.Items.AddRange(new ToolStripItem[] { AddDirsSubMenu, /*export, import,*/ Remove }); } else if (Tag is WzFile) { menu = new ContextMenuStrip(); menu.Items.AddRange(new ToolStripItem[] { AddDirsSubMenu, SaveFile, Unload, Reload }); } currNode = node; return(menu); }
/// <summary> /// /// </summary> /// <param name="otherWzFileToLoadAt"></param> /// <param name="path"></param> /// <param name="encVersion"></param> /// <param name="version"></param> /// <param name="panel"></param> /// <param name="currentDispatcher">Dispatcher thread</param> /// <returns></returns> private WzFile LoadWzFile(string path, WzMapleVersion encVersion, short version, MainPanel panel, Dispatcher currentDispatcher = null) { WzFile newFile; if (!OpenWzFile(path, encVersion, version, out newFile)) { return(null); } WzNode node = new WzNode(newFile); // execute in main thread if (currentDispatcher != null) { currentDispatcher.BeginInvoke((Action)(() => { panel.DataTree.Nodes.Add(node); SortNodesRecursively(node); })); } else { panel.DataTree.Nodes.Add(node); SortNodesRecursively(node); } return(newFile); }
private void SortNodesRecursively(WzNode parent) { if (Program.ConfigurationManager.UserSettings.Sort) { parent.TreeView.TreeViewNodeSorter = SORTER; parent.TreeView.Sort(); } }
/// <summary> /// Sort all nodes that is a parent of /// </summary> /// <param name="parent"></param> /// <param name="sortFromTheParentNode">Sorts only items in the parent node</param> public void SortNodesRecursively(WzNode parent, bool sortFromTheParentNode = false) { if (Program.ConfigurationManager.UserSettings.Sort || sortFromTheParentNode) { parent.TreeView.TreeViewNodeSorter = new TreeViewNodeSorter(sortFromTheParentNode ? parent : null); parent.TreeView.BeginUpdate(); parent.TreeView.Sort(); parent.TreeView.EndUpdate(); } }
public static WzNode GetChildNode(WzNode parentNode, string name) { foreach (WzNode node in parentNode.Nodes) { if (node.Text == name) { return(node); } } return(null); }
public void InsertWzFileUnsafe(WzFile f, MainPanel panel) { lock (wzFiles) { wzFiles.Add(f); } WzNode node = new WzNode(f); panel.DataTree.Nodes.Add(node); SortNodesRecursively(node); }
/// <summary> /// Toolstrip menu when right clicking on nodes /// </summary> /// <param name="node"></param> /// <param name="Tag"></param> /// <returns></returns> public ContextMenuStrip CreateMenu(WzNode node, WzObject Tag) { int currentDataTreeSelectedCount = parentPanel.DataTree.SelectedNodes.Count; List <ToolStripItem> toolStripmenuItems = new List <ToolStripItem>(); ContextMenuStrip menu = new ContextMenuStrip(); if (Tag is WzImage || Tag is IPropertyContainer) { toolStripmenuItems.Add(AddPropsSubMenu); toolStripmenuItems.Add(Rename); // export, import toolStripmenuItems.Add(Remove); } else if (Tag is WzImageProperty) { toolStripmenuItems.Add(Rename); toolStripmenuItems.Add(Remove); } else if (Tag is WzDirectory) { toolStripmenuItems.Add(AddDirsSubMenu); toolStripmenuItems.Add(Rename); toolStripmenuItems.Add(Remove); } else if (Tag is WzFile) { toolStripmenuItems.Add(AddDirsSubMenu); toolStripmenuItems.Add(Rename); toolStripmenuItems.Add(SaveFile); toolStripmenuItems.Add(Unload); toolStripmenuItems.Add(Reload); } toolStripmenuItems.Add(FixLink); toolStripmenuItems.Add(ExpandAllChildNode); toolStripmenuItems.Add(CollapseAllChildNode); toolStripmenuItems.Add(SortAllChildNode); // Add foreach (ToolStripItem toolStripItem in toolStripmenuItems) { menu.Items.Add(toolStripItem); } currNode = node; return(menu); }
/// <summary> /// Adds a node /// </summary> /// <param name="node"></param> /// <returns></returns> public bool AddNode(WzNode node, bool reparseImage) { if (CanNodeBeInserted(this, node.Text)) { TryParseImage(reparseImage); this.Nodes.Add(node); addObjInternal((WzObject)node.Tag); return(true); } else { MessageBox.Show("Cannot insert node \"" + node.Text + "\" because a node with the same name already exists. Skipping.", "Skipping Node", MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } }
/// <summary> /// Loads the Data.wz file /// </summary> /// <param name="path"></param> /// <param name="encVersion"></param> /// <param name="panel"></param> /// <returns></returns> public WzImage LoadDataWzHotfixFile(string path, WzMapleVersion encVersion, MainPanel panel) { FileStream fs = File.Open(path, FileMode.Open); WzImage img = new WzImage(Path.GetFileName(path), fs, encVersion); img.ParseImage(true); WzNode node = new WzNode(img); panel.DataTree.Nodes.Add(node); if (Program.ConfigurationManager.UserSettings.Sort) { SortNodesRecursively(node); } return(img); }
/// <summary> /// Loads the Data.wz file /// </summary> /// <param name="path"></param> /// <param name="encVersion"></param> /// <param name="panel"></param> /// <returns></returns> public WzImage LoadDataWzHotfixFile(string path, WzMapleVersion encVersion, MainPanel panel) { FileStream fs = File.Open(path, FileMode.Open); // dont close this file stream until it is unloaded from memory WzImage img = new WzImage(Path.GetFileName(path), fs, encVersion); img.ParseImage(true); WzNode node = new WzNode(img); panel.DataTree.BeginUpdate(); panel.DataTree.Nodes.Add(node); panel.DataTree.EndUpdate(); if (Program.ConfigurationManager.UserSettings.Sort) { SortNodesRecursively(node); } return(img); }
public static bool CanNodeBeInserted(WzNode parentNode, string name) { WzObject obj = (WzObject)parentNode.Tag; if (obj is IPropertyContainer) { return(((IPropertyContainer)obj)[name] == null); } else if (obj is WzDirectory) { return(((WzDirectory)obj)[name] == null); } else if (obj is WzFile) { return(((WzFile)obj).WzDirectory[name] == null); } else { return(false); } }
/*private ToolStripMenuItem ExportPropertySubMenu; * private ToolStripMenuItem ExportAnimationSubMenu; * private ToolStripMenuItem ExportDirectorySubMenu; * private ToolStripMenuItem ExportPServerXML; * private ToolStripMenuItem ExportDataXML; * private ToolStripMenuItem ExportImgData; * private ToolStripMenuItem ExportRawData; * private ToolStripMenuItem ExportGIF; * private ToolStripMenuItem ExportAPNG; * * private ToolStripMenuItem ImportSubMenu; * private ToolStripMenuItem ImportXML; * private ToolStripMenuItem ImportImgData;*/ public ContextMenuManager(MainPanel haRepackerMainPanel, UndoRedoManager undoMan) { this.parentPanel = haRepackerMainPanel; SaveFile = new ToolStripMenuItem("Save", Properties.Resources.disk, new EventHandler( delegate(object sender, EventArgs e) { foreach (WzNode node in GetNodes(sender)) { new SaveForm(parentPanel, node).ShowDialog(); } })); Rename = new ToolStripMenuItem("Rename", Properties.Resources.rename, new EventHandler( delegate(object sender, EventArgs e) { WzNode currentNode = currNode; haRepackerMainPanel.PromptRenameWzTreeNode(currentNode); })); Remove = new ToolStripMenuItem("Remove", Properties.Resources.delete, new EventHandler( delegate(object sender, EventArgs e) { haRepackerMainPanel.PromptRemoveSelectedTreeNodes(); })); Unload = new ToolStripMenuItem("Unload", Properties.Resources.delete, new EventHandler( delegate(object sender, EventArgs e) { if (!Warning.Warn("Are you sure you want to unload this file?")) { return; } foreach (WzNode node in GetNodes(sender)) { Program.WzFileManager.UnloadWzFile((WzFile)node.Tag); } })); Reload = new ToolStripMenuItem("Reload", Properties.Resources.arrow_refresh, new EventHandler( delegate(object sender, EventArgs e) { if (!Warning.Warn("Are you sure you want to reload this file?")) { return; } foreach (WzNode node in GetNodes(sender)) { Program.WzFileManager.ReloadWzFile((WzFile)node.Tag, parentPanel); } })); CollapseAllChildNode = new ToolStripMenuItem("Collapse All", Properties.Resources.collapse, new EventHandler( delegate(object sender, EventArgs e) { foreach (WzNode node in GetNodes(sender)) { node.Collapse(); } })); ExpandAllChildNode = new ToolStripMenuItem("Expand all", Properties.Resources.expand, new EventHandler( delegate(object sender, EventArgs e) { foreach (WzNode node in GetNodes(sender)) { node.ExpandAll(); } })); SortAllChildNode = new ToolStripMenuItem("Sort child nodes", Properties.Resources.sort, new EventHandler( delegate(object sender, EventArgs e) { foreach (WzNode node in GetNodes(sender)) { Program.WzFileManager.SortNodesRecursively(node, true); } })); AddImage = new ToolStripMenuItem("Image", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } string name; if (NameInputBox.Show("Add Image", 0, out name)) { nodes[0].AddObject(new WzImage(name) { Changed = true }, undoMan); } })); AddDirectory = new ToolStripMenuItem("Directory", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzDirectoryToSelectedNode(nodes[0]); })); AddByteFloat = new ToolStripMenuItem("Float", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzByteFloatToSelectedNode(nodes[0]); })); AddCanvas = new ToolStripMenuItem("Canvas", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzCanvasToSelectedNode(nodes[0]); })); AddLong = new ToolStripMenuItem("Long", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzLongToSelectedNode(nodes[0]); })); AddInt = new ToolStripMenuItem("Int", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzCompressedIntToSelectedNode(nodes[0]); })); AddConvex = new ToolStripMenuItem("Convex", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzConvexPropertyToSelectedNode(nodes[0]); })); AddDouble = new ToolStripMenuItem("Double", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzDoublePropertyToSelectedNode(nodes[0]); })); AddNull = new ToolStripMenuItem("Null", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzNullPropertyToSelectedNode(nodes[0]); })); AddSound = new ToolStripMenuItem("Sound", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzSoundPropertyToSelectedNode(nodes[0]); })); AddString = new ToolStripMenuItem("String", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzStringPropertyToSelectedIndex(nodes[0]); })); AddSub = new ToolStripMenuItem("Sub", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzSubPropertyToSelectedIndex(nodes[0]); })); AddUshort = new ToolStripMenuItem("Short", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzUnsignedShortPropertyToSelectedIndex(nodes[0]); })); AddUOL = new ToolStripMenuItem("UOL", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzUOLPropertyToSelectedIndex(nodes[0]); })); AddVector = new ToolStripMenuItem("Vector", null, new EventHandler( delegate(object sender, EventArgs e) { WzNode[] nodes = GetNodes(sender); if (nodes.Length != 1) { MessageBox.Show("Please select only ONE node"); return; } haRepackerMainPanel.AddWzVectorPropertyToSelectedIndex(nodes[0]); })); AddConvexSubMenu = new ToolStripMenuItem("Add", Properties.Resources.add, AddVector); AddDirsSubMenu = new ToolStripMenuItem("Add", Properties.Resources.add, AddDirectory, AddImage); AddPropsSubMenu = new ToolStripMenuItem("Add", Properties.Resources.add, AddCanvas, AddConvex, AddDouble, AddByteFloat, AddLong, AddInt, AddNull, AddUshort, AddSound, AddString, AddSub, AddUOL, AddVector); WzFileMenu = new ContextMenuStrip(); WzFileMenu.Items.AddRange(new ToolStripItem[] { AddDirsSubMenu, SaveFile, Unload, Reload }); WzDirectoryMenu = new ContextMenuStrip(); WzDirectoryMenu.Items.AddRange(new ToolStripItem[] { AddDirsSubMenu, Rename, /*export, import,*/ Remove }); PropertyContainerMenu = new ContextMenuStrip(); PropertyContainerMenu.Items.AddRange(new ToolStripItem[] { AddPropsSubMenu, Rename, /*export, import,*/ Remove }); PropertyMenu = new ContextMenuStrip(); PropertyMenu.Items.AddRange(new ToolStripItem[] { Rename, /*export, import,*/ Remove }); SubPropertyMenu = new ContextMenuStrip(); SubPropertyMenu.Items.AddRange(new ToolStripItem[] { AddPropsSubMenu, Rename, /*export, import,*/ Remove }); }
public static UndoRedoAction ObjectRenamed(WzNode parent, WzNode item) { return(new UndoRedoAction(item, parent, UndoRedoType.ObjectRemoved)); }
public UndoRedoAction(WzNode item, WzNode parent, UndoRedoType type) { this.item = item; this.parent = parent; this.type = type; }