!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / Tools / Statoscope / Statoscope / URDICheckboxTreeView.cs
blobfd178de29c08cd658e5e258dad646f2cbc9ec7dd
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 using System;
4 using System.Collections.Generic;
5 using System.ComponentModel;
6 using System.Windows.Forms;
8 namespace Statoscope
10 public class URDICheckboxTreeView : RDICheckboxTreeView<UserMarkerRDI>
12 public URDICheckboxTreeView(LogControl logControl, UserMarkerRDI urdiTree)
13 : base(logControl, urdiTree)
15 ContextMenuStrip userMarkerCMS = new ContextMenuStrip();
16 userMarkerCMS.Opening += new CancelEventHandler(userMarkerCMS_Opening);
17 userMarkerCMS.Items.Add("Use as start frame", null, userMarkerCMS_StartFrameClicked);
18 userMarkerCMS.Items.Add("Use as end frame", null, userMarkerCMS_EndFrameClicked);
19 userMarkerCMS.ShowImageMargin = false;
21 ContextMenuStrip = userMarkerCMS;
23 m_toolTip.SetToolTip(this,
24 "Right-click: toggle subtree" + Environment.NewLine +
25 "Right-click (leaf node): select log range" + Environment.NewLine +
26 "Ctrl-left-click: isolate subtree");
29 public override void AddRDIs(IEnumerable<UserMarkerRDI> newToAdd)
31 base.AddRDIs(newToAdd);
32 SetNodeColours(newToAdd);
35 public override void SerializeInRDIs(UserMarkerRDI[] urdis)
37 if (urdis == null)
38 return;
40 foreach (UserMarkerRDI urdi in RDITree.GetEnumerator(ERDIEnumeration.Full))
42 urdi.Displayed = false;
45 foreach (UserMarkerRDI urdi in urdis)
47 bool bIsLeaf = (urdi.DisplayName != urdi.Name);
48 UserMarkerRDI treeURDI = RDITree[bIsLeaf ? urdi.BasePath : urdi.Path];
50 if (treeURDI == null)
51 continue;
53 if (!bIsLeaf)
55 // internal nodes
56 CopySerializedMembers(treeURDI, urdi);
58 else
60 // leaf nodes (actual markers)
61 foreach (UserMarkerRDI childURDI in treeURDI.Children)
63 if (childURDI.DisplayName == urdi.DisplayName)
65 CopySerializedMembers(childURDI, urdi);
71 foreach (TreeNode node in TreeNodeHierarchy)
73 UserMarkerRDI urdi = (UserMarkerRDI)node.Tag;
74 node.Checked = urdi.Displayed;
78 public void SetNodeColours(IEnumerable<UserMarkerRDI> UMRDIs)
80 foreach (UserMarkerRDI umrdi in UMRDIs)
82 LogView nodeLogView = umrdi.m_logView;
83 if (nodeLogView != null && nodeLogView.m_singleOrdiColour != null)
85 TreeNode node = RDITreeNodeHierarchy[umrdi];
86 node.ForeColor = nodeLogView.m_singleOrdiColour.ConvertToSysDrawCol();
91 protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)
93 base.OnNodeMouseClick(e);
94 // right-clicking on leaf nodes opens up a menu, so don't toggle the check state
95 if ((e.Button == MouseButtons.Right) && (e.Node.Nodes.Count == 0))
96 e.Node.Checked = !e.Node.Checked;
99 protected override void OnNodeMouseDoubleClick(TreeNodeMouseClickEventArgs e)
101 base.OnNodeMouseDoubleClick(e);
103 string path = "/" + e.Node.FullPath;
104 float x = float.MinValue;
106 foreach (UserMarkerRDI umrdi in RDITree.GetEnumerator(ERDIEnumeration.OnlyLeafNodes))
108 if (umrdi.Path == path)
110 // only set x to a valid value if it's the only path that matches
111 if (x == float.MinValue)
112 x = umrdi.m_uml.m_fr.GetDisplayXValue(umrdi.m_logView.m_logData, LogControl.m_OGLGraphingControl.m_againstFrameTime);
113 else
114 x = float.MaxValue;
116 umrdi.Highlight();
118 else
120 umrdi.Unhighlight();
124 if (x != float.MinValue && x != float.MaxValue)
125 LogControl.m_OGLGraphingControl.ZoomViewToXValue(x);
127 LogControl.m_OGLGraphingControl.Invalidate();
130 void userMarkerCMS_Opening(object sender, CancelEventArgs e)
132 e.Cancel = true;
134 if (SelectedNode != null)
136 UserMarkerRDI umrdi = (UserMarkerRDI)SelectedNode.Tag;
137 if (umrdi.m_uml != null)
138 e.Cancel = false; // only show the pop-up menu for user marker leaf nodes
142 void userMarkerCMS_StartFrameClicked(object sender, EventArgs e)
144 if (SelectedNode != null)
146 UserMarkerRDI umrdi = (UserMarkerRDI)SelectedNode.Tag;
147 int umIdx = umrdi.m_uml.m_fr.Index;
148 umrdi.m_logView.SetFrameRecordRange(umIdx, Math.Max(umIdx, umrdi.m_logView.GetFrameRecordRange().EndIdx));
149 umrdi.m_logView.m_startUM = umrdi.DisplayUserMarker;
153 void userMarkerCMS_EndFrameClicked(object sender, EventArgs e)
155 if (SelectedNode != null)
157 UserMarkerRDI umrdi = (UserMarkerRDI)SelectedNode.Tag;
158 int umIdx = umrdi.m_uml.m_fr.Index;
159 umrdi.m_logView.SetFrameRecordRange(Math.Min(umIdx, umrdi.m_logView.GetFrameRecordRange().StartIdx), umIdx);
160 umrdi.m_logView.m_endUM = umrdi.DisplayUserMarker;
165 private void TargetLineKeyDown(System.Windows.Forms.KeyEventArgs e)
167 m_nonNumberEntered = false;
168 // Determine whether the keystroke is a number from the top of the keyboard.
169 if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
171 // Determine whether the keystroke is a number from the keypad.
172 if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
174 // Determine whether the keystroke is a backspace or a decimal point
175 if (e.KeyCode != Keys.Back && e.KeyCode != Keys.Decimal && e.KeyValue != 190) // main keyboard .
177 // A non-numerical keystroke was pressed.
178 // Set the flag to true and evaluate in KeyPress event.
179 m_nonNumberEntered = true;
185 private void userDefinedFPSTargetLine_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
187 TargetLineKeyDown(e);
190 private void userDefinedFPSTargetLine_KeyPress(object sender, KeyPressEventArgs e)
192 if (m_nonNumberEntered == true)
194 e.Handled = true;
198 private void userDefinedFPSTargetLine_TextChanged(object sender, EventArgs e)
200 //Update the user line
201 userDefinedFPSTargetLine.BackColor = SystemColors.Window;
203 if (userDefinedFPSTargetLine.Text.Length > 0)
207 float value = Convert.ToSingle(userDefinedFPSTargetLine.Text);
208 m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserFPS)].m_displayLevel = value == 0.0f ? 0.0f : (1.0f / value) * 1000.0f;
209 m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserFPS)].m_label.Text = string.Format("*{0}", value);
211 catch (FormatException)
213 userDefinedFPSTargetLine.BackColor = Color.Red;
216 else
218 m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserFPS)].m_displayLevel = 0.0f;
219 m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserFPS)].m_label.Text = "";
222 InvalidateGraphControl();
225 private void userDefinedNumTargetLine_KeyDown(object sender, KeyEventArgs e)
227 TargetLineKeyDown(e);
230 private void userDefinedNumTargetLine_KeyPress(object sender, KeyPressEventArgs e)
232 if (m_nonNumberEntered == true)
234 e.Handled = true;
238 private void userDefinedNumTargetLine_TextChanged(object sender, EventArgs e)
240 //Update the user line
241 userDefinedNumTargetLine.BackColor = SystemColors.Window;
243 if (userDefinedNumTargetLine.Text.Length > 0)
247 m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserNum)].m_displayLevel = Convert.ToSingle(userDefinedNumTargetLine.Text);
248 m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserNum)].m_label.Text = string.Format("*{0}", m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserNum)].m_displayLevel);
250 catch (FormatException)
252 userDefinedNumTargetLine.BackColor = Color.Red;
255 else
257 m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserNum)].m_displayLevel = 0.0f;
258 m_OGLGraphingControl.m_targetLines[Convert.ToInt16(EReservedTargetLines.UserNum)].m_label.Text = "";
261 InvalidateGraphControl();