private void ThisObjectInGameDataViewToolStripMenuItem_Click(object sender, EventArgs e) { if (treeView1.SelectedNode == null) { throw new NullReferenceException("SelectedNode was null."); } else { Type t = treeView1.SelectedNode.GetType(); if (t.Equals(typeof(SolarSystem_TN))) { SolarSystem_TN node = (SolarSystem_TN)treeView1.SelectedNode; treeView1.SelectedNode = node.LinkedGameDataNode; // Trigger refresh HellionExplorerProgram.RefreshSelectedOjectPathBarText(treeView1.SelectedNode); HellionExplorerProgram.RefreshListView(treeView1.SelectedNode); HellionExplorerProgram.RefreshSelectedObjectSummaryText(treeView1.SelectedNode); HellionExplorerProgram.RefreshStatusStrip(treeView1.SelectedNode); } else { throw new InvalidOperationException("Unexpected node type " + t.ToString()); } } }
private void ListView1_SelectedIndexChanged(object sender, EventArgs e) { // Update the object information panel if (HellionExplorerProgram.docCurrent != null) // && Program.docCurrent.IsFileReady) { TreeNode node = null; ListView.SelectedListViewItemCollection selection = listView1.SelectedItems; foreach (ListViewItem item in selection) { // We only process the first node = (TreeNode)item.Tag; break; } if (node == null) { // We get two updates, the first one has no data as it's the // deselection event, in this case we do nothing } else { // Update the object path + name + Tag in the object identifier bar HellionExplorerProgram.RefreshSelectedOjectPathBarText(node); //Program.RefreshListView(node); HellionExplorerProgram.RefreshSelectedObjectSummaryText(node); HellionExplorerProgram.RefreshStatusStrip(node); } } }
/// <summary> /// Handles KeyDown events when the TreeView has focus. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TreeView1_KeyDown(object sender, KeyEventArgs e) { //Debug.Print("treeView1_KeyDown fired. [" + e.KeyData.ToString() + "] [" + e.Modifiers.ToString() + "]"); // Handle Control+Enter as an expansion/load ALL request. if (e.KeyData.HasFlag(Keys.Enter) && e.KeyData.HasFlag(Keys.Control)) { HandleExpansionRequest(loadAllLevels: true); return; } // Handle Shift+Enter as an expansion/load request. if (e.KeyData.HasFlag(Keys.Enter) && e.KeyData.HasFlag(Keys.Shift)) { HandleExpansionRequest(); return; } // Handle the Enter key similarly to a click. if (e.KeyData == Keys.Enter) { Debug.Print("Selection Request"); HellionExplorerProgram.RefreshSelectedOjectPathBarText(treeView1.SelectedNode); HellionExplorerProgram.RefreshListView(treeView1.SelectedNode); HellionExplorerProgram.RefreshSelectedObjectSummaryText(treeView1.SelectedNode); HellionExplorerProgram.RefreshStatusStrip(treeView1.SelectedNode); return; } }
private void RootOfDockingTreeToolStripMenuItem_Click(object sender, EventArgs e) { // This is only applicable in the Solar System View SolarSystem_TN node = (SolarSystem_TN)treeView1.SelectedNode; treeView1.SelectedNode = node.DockingTreeRoot; // Trigger refresh HellionExplorerProgram.RefreshSelectedOjectPathBarText(treeView1.SelectedNode); HellionExplorerProgram.RefreshListView(treeView1.SelectedNode); HellionExplorerProgram.RefreshSelectedObjectSummaryText(treeView1.SelectedNode); HellionExplorerProgram.RefreshStatusStrip(treeView1.SelectedNode); }
/// <summary> /// Handles an expansion request when the keyboard has been used to issue the request. /// </summary> /// <param name="populateDepth"></param> private void HandleExpansionRequest(bool loadAllLevels = false) { // TODO - this may need to run parts asynchronously for large collections of // objects - the Ships collection for example. TreeNode node = HellionExplorerProgram.MainForm.treeView1.SelectedNode; if (node != null && node.GetType() == typeof(Json_TN)) { // Make a note of the starting time DateTime startingTime = DateTime.Now; // Update the status bar HellionExplorerProgram.RefreshStatusStrip("Starting node loading and generation..."); // Set mouse cursor. Cursor = Cursors.WaitCursor; // Suppress repainting the TreeView until all the objects have been created. treeView1.BeginUpdate(); if (loadAllLevels) { // Load all levels up to the default maximum. Debug.Print("Load (all) Request"); LoadLevels(GameData.Def_LoadAllNodeDepth, skipThroughPopulatedNodes: true); } else { // Load next level Debug.Print("Load (next) Request"); LoadLevels(1, skipThroughPopulatedNodes: true); } // Begin repainting the TreeView. treeView1.EndUpdate(); // Reset cursor. Cursor = Cursors.Default; // Update the status bar HellionExplorerProgram.RefreshStatusStrip(string.Format( "Node loading and generation completed in {0:mm}m{0:ss}s", DateTime.Now - startingTime)); // Expand the current node node.Expand(); } }
private void TreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { // Update the object path + name + Tag in the object identifier bar HellionExplorerProgram.RefreshSelectedOjectPathBarText(e.Node); HellionExplorerProgram.RefreshListView(e.Node); HellionExplorerProgram.RefreshSelectedObjectSummaryText(e.Node); HellionExplorerProgram.RefreshStatusStrip(e.Node); // Show menu only if the right mouse button is clicked. if (e.Button == MouseButtons.Right) { Base_TN node = (Base_TN)e.Node; // Get the node that the user has clicked. if (node == null) { return; } // Select in the TreeView the node the user has clicked. treeView1.SelectedNode = node; // Determine node type and activate appropriate jump to menu items. Type t = node.GetType(); // Handles Json_TN nodes for the Game Data representation. if (t.Equals(typeof(Json_TN))) { // We're working with a GAME DATA node // Enable the Json Data View //jsonDataViewToolStripMenuItem.Enabled = true; // Editing of Json is now handled by the Edit menu item on the // context menu. At this point only Objects seem // suitable for use in the Json editor - otherwise de-serialisation // fails and changes can't be applied to the main document. switch (node.NodeType) { case Base_TN_NodeType.SaveFile: case Base_TN_NodeType.DataFile: case Base_TN_NodeType.StationBlueprintFile: case Base_TN_NodeType.JsonObject: //case Base_TN_NodeType.JsonArray: // Show the Edit menu item. editToolStripMenuItem1.Enabled = true; break; default: // Disable the Edit menu item. editToolStripMenuItem1.Enabled = false; break; } // Enable the Jump to sub-menu jumpToToolStripMenuItem.Enabled = true; // GD nodes always have load items visible, even if enabled loadNextLevelToolStripMenuItem.Enabled = true; loadAllLevelsToolStripMenuItem.Enabled = true; // We're in the Game Data already, so disable selection of it thisObjectInGameDataViewToolStripMenuItem.Enabled = false; thisObjectInGameDataViewToolStripMenuItem.Checked = true; // Disable these two as they're Solar System related rootOfDockingTreeToolStripMenuItem.Enabled = false; parentCelestialBodyToolStripMenuItem.Enabled = false; // Cast the node to an Json_TN type Json_TN gDnode = (Json_TN)treeView1.SelectedNode; // Disable the LoadNextLevel item if it's already been loaded. if (gDnode.ChildNodesLoaded) { loadNextLevelToolStripMenuItem.Enabled = false; } else { loadNextLevelToolStripMenuItem.Enabled = true; } if (gDnode.LinkedSolarSystemNode != null) { // It's a Game Data node that has a linked Solar System node // Enable the Jump to menu item thisObjectInSolarSystemViewToolStripMenuItem.Enabled = true; thisObjectInSolarSystemViewToolStripMenuItem.Checked = false; } else { thisObjectInSolarSystemViewToolStripMenuItem.Enabled = false; thisObjectInSolarSystemViewToolStripMenuItem.Checked = false; } } else if (t.Equals(typeof(Base_TN)) && node.NodeType == Base_TN_NodeType.StationBlueprintFile) { // Enable the Edit menu item. editToolStripMenuItem1.Enabled = true; // Disable the Jump to sub-menu jumpToToolStripMenuItem.Enabled = false; // Disable Jump to sub-items. thisObjectInGameDataViewToolStripMenuItem.Enabled = false; thisObjectInGameDataViewToolStripMenuItem.Checked = false; thisObjectInSolarSystemViewToolStripMenuItem.Enabled = false; thisObjectInSolarSystemViewToolStripMenuItem.Checked = false; rootOfDockingTreeToolStripMenuItem.Enabled = false; parentCelestialBodyToolStripMenuItem.Enabled = false; // Disable load items. loadNextLevelToolStripMenuItem.Enabled = false; loadAllLevelsToolStripMenuItem.Enabled = false; } // Handles SolarSystem_TN Nodes for the Solar System representation. else if (t.Equals(typeof(SolarSystem_TN))) { // We're working with a SOLAR SYSTEM node // Hide the Edit menu item. editToolStripMenuItem1.Enabled = false; // Disable the Json Data View option. //jsonDataViewToolStripMenuItem.Enabled = false; // Solar System nodes never have load options loadNextLevelToolStripMenuItem.Enabled = false; loadAllLevelsToolStripMenuItem.Enabled = false; // We're in the Solar System already, so disable selection of it thisObjectInSolarSystemViewToolStripMenuItem.Enabled = false; thisObjectInSolarSystemViewToolStripMenuItem.Checked = true; // Cast the node as an SolarSystem_TN type SolarSystem_TN sSnode = (SolarSystem_TN)treeView1.SelectedNode; if (sSnode.GUID == -1 || sSnode.NodeType == Base_TN_NodeType.SolarSystemView || sSnode.NodeType == Base_TN_NodeType.BlueprintHierarchyView) { // We're dealing with the Solar System Root Node or a Blueprint Hierarchy // View node, special cases. jumpToToolStripMenuItem.Enabled = false; thisObjectInGameDataViewToolStripMenuItem.Enabled = false; thisObjectInGameDataViewToolStripMenuItem.Checked = false; } else { if (sSnode.LinkedGameDataNode == null) // throw new NullReferenceException("sNode.LinkedGameDataNode was null."); { thisObjectInGameDataViewToolStripMenuItem.Enabled = false; thisObjectInGameDataViewToolStripMenuItem.Checked = false; } else { thisObjectInGameDataViewToolStripMenuItem.Enabled = true; thisObjectInGameDataViewToolStripMenuItem.Checked = false; } // Enable the Jump to sub-menu unless it's the Solar System root node if (sSnode.GUID != -1) { jumpToToolStripMenuItem.Enabled = true; } else { jumpToToolStripMenuItem.Enabled = false; } // Enable the Root of Docking Tree option only if the node's parent type // is a ship, indicating it is docked to something (rather than something // being docked *to* this node i.e. child nodes). rootOfDockingTreeToolStripMenuItem.Enabled = sSnode.IsDockedToParent; } } // Handles Blueprint_TN for blueprint files. else if (t.Equals(typeof(Blueprint_TN))) { // Some decision making logic needed here if (node.NodeType == Base_TN_NodeType.StationBlueprintFile) { // Show the Edit menu item. editToolStripMenuItem1.Enabled = true; } else { editToolStripMenuItem1.Enabled = false; } // Disable the Json Data View //jsonDataViewToolStripMenuItem.Enabled = false; // Disable the Jump to sub-menu jumpToToolStripMenuItem.Enabled = false; // Disable the Solar System Jump to option thisObjectInSolarSystemViewToolStripMenuItem.Enabled = false; thisObjectInSolarSystemViewToolStripMenuItem.Checked = false; // Disable the Game Data Jump to option thisObjectInGameDataViewToolStripMenuItem.Enabled = false; thisObjectInGameDataViewToolStripMenuItem.Checked = false; // Disable these two as they're Solar System related rootOfDockingTreeToolStripMenuItem.Enabled = false; parentCelestialBodyToolStripMenuItem.Enabled = false; // Disable the load options loadNextLevelToolStripMenuItem.Enabled = false; loadAllLevelsToolStripMenuItem.Enabled = false; } // Default behaviour - handles other node types. else { // Hide the Edit menu item. editToolStripMenuItem1.Enabled = false; // Disable the Json Data View //jsonDataViewToolStripMenuItem.Enabled = false; // Disable the Jump to sub-menu jumpToToolStripMenuItem.Enabled = false; // Disable the Solar System Jump to option thisObjectInSolarSystemViewToolStripMenuItem.Enabled = false; thisObjectInSolarSystemViewToolStripMenuItem.Checked = false; // Disable the Game Data Jump to option thisObjectInGameDataViewToolStripMenuItem.Enabled = false; thisObjectInGameDataViewToolStripMenuItem.Checked = false; // Disable these two as they're Solar System related rootOfDockingTreeToolStripMenuItem.Enabled = false; parentCelestialBodyToolStripMenuItem.Enabled = false; // Disable the load options loadNextLevelToolStripMenuItem.Enabled = false; loadAllLevelsToolStripMenuItem.Enabled = false; } // Show the ContextMenuStrip. contextMenuStrip1.Show(treeView1, e.Location); } }