1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
4 using System
.Collections
.Generic
;
5 using System
.ComponentModel
;
6 using System
.Windows
.Forms
;
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
)
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
];
56 CopySerializedMembers(treeURDI
, urdi
);
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
);
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
)
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)
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;
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)
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;
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();