public override void OnBodyGUI()
        {
            // Override label width for this node (since some names are quite long)
            LabelWidth = 184;

            base.OnBodyGUI();

            // Get reference to the current node
            m_TrainingExamplesNode = (target as TrainingExamplesNode);

            // TOTAL NUMBER OF TRAINING EXAMPLES
            ShowTotalNumberOfTrainingData();

            // DESIRED OUTPUT CONFIG AND BUILD OUTPUT LIST
            EditorGUILayout.Space();
            ShowDesiredOutputFeaturesLogic();
            EditorGUILayout.Space();

            // RECORD EXAMPLES BUTTON
            ShowRecordExamplesButton();

            // RECORD ONE SINGLE EXAMPLE BUTTON
            ShowRecordOneExampleButton();

            // CLEAR ALL TRAINING EXAMPLES BUTTON
            ShowClearAllExamplesButton();

            // Debug buttons loading stuff
            if (GUILayout.Button("Load All Data From Disk"))
            {
                m_TrainingExamplesNode.LoadDataFromDisk();
            }

            // WARNINGS IF FEATURES CHANGE
            CheckInputFeaturesChanges();
            CheckOutputFeaturesChanges();

            // TRAINING DATA DROPDOWN
            ShowDataDropdown();

            // Error with output configuration
            var nodeTraining = target as TrainingExamplesNode;

            if (nodeTraining.DesiredOutputsConfig.Count == 0)
            {
                EditorGUILayout.HelpBox("There are no Desired Outputs Configured!", MessageType.Error);
            }
        }
        /// <summary>
        /// Show the load, delete and record buttons
        /// </summary>
        protected virtual void ShowButtons()
        {
            m_BodyRectButtons.x     = m_BodyRectButtons.x + 30;
            m_BodyRectButtons.y     = m_BodyRectButtons.y + 20;
            m_BodyRectButtons.width = m_BodyRectButtons.width - 70;

            GUILayout.BeginArea(m_BodyRectButtons);
            GUILayout.BeginHorizontal();

            if (GUILayout.Button("Record One /n example", Resources.Load <GUISkin>("GUIStyles/InteractMLGUISkin").GetStyle("Load Button")))
            {
                m_TrainingExamplesNode.LoadDataFromDisk();
            }
            GUILayout.Label("");

            ShowClearAllExamplesButton();
            GUILayout.Label("");

            string recordNameButton = ShowRecordExamplesButton();

            GUILayout.EndHorizontal();
            GUILayout.EndArea();

            m_BodyRectButtons.x     = m_BodyRectButtons.x - 10;
            m_BodyRectButtons.y     = m_BodyRectButtons.y + 35;
            m_BodyRectButtons.width = m_BodyRectButtons.width + 40;
            GUILayout.BeginArea(m_BodyRectButtons);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Load Data", Resources.Load <GUISkin>("GUIStyles/InteractMLGUISkin").GetStyle("Load Button Yellow"));
            GUILayout.Label("");
            GUILayout.Label("Delete Data", Resources.Load <GUISkin>("GUIStyles/InteractMLGUISkin").GetStyle("Delete Button Pink"));
            GUILayout.Label("");
            GUILayout.Label(recordNameButton, Resources.Load <GUISkin>("GUIStyles/InteractMLGUISkin").GetStyle("Record Button Green"));
            GUILayout.EndHorizontal();

            GUILayout.EndArea();
        }
        public override void OnBodyGUI()
        {
            // Override label width for this node (since some names are quite long)
            LabelWidth = 184;

            base.OnBodyGUI();

            // Get reference to the current node
            m_TrainingExamplesNode = (target as TrainingExamplesNode);

            // SHOW KEYBOARD SHORTCUTS
            // Show information about runtime keys for interaction
            GUIStyle styleGUIBox = new GUIStyle(GUI.skin.box);

            styleGUIBox.richText = true;
            if (m_TrainingExamplesNode.EnableKeyboardControl)
            {
                GUILayout.Box("<b>Keyboard Shortcuts:</b>\n <b>Record:</b> " + m_TrainingExamplesNode.RecordDataKey.ToString(),
                              styleGUIBox);

                // Show key configs
                m_TrainingExamplesNode.RecordDataKey = (KeyCode)EditorGUILayout.EnumFlagsField(m_TrainingExamplesNode.RecordDataKey);
                EditorGUILayout.Space();
            }



            // SHOW INPUT CONFIG
            ShowDesiredInputsConfigLogic();
            EditorGUILayout.Space();

            // SHOW OUTPUT CONFIG
            ShowDesiredOutputsConfigLogic();
            EditorGUILayout.Space();

            // TOTAL NUMBER OF TRAINING EXAMPLES
            ShowTotalNumberOfTrainingData();

            // DESIRED OUTPUT CONFIG AND BUILD OUTPUT LIST
            EditorGUILayout.Space();
            ShowDesiredOutputFeaturesLogic();
            EditorGUILayout.Space();

            // RECORD EXAMPLES BUTTON
            ShowRecordExamplesButton();

            // RECORD ONE SINGLE EXAMPLE BUTTON
            ShowRecordOneExampleButton();

            // CLEAR ALL TRAINING EXAMPLES BUTTON
            ShowClearAllExamplesButton();

            // Debug buttons loading stuff
            if (GUILayout.Button("Load All Data From Disk"))
            {
                m_TrainingExamplesNode.LoadDataFromDisk();
            }

            // WARNINGS IF FEATURES CHANGE
            CheckInputFeaturesChanges();
            CheckOutputFeaturesChanges();

            // TRAINING DATA DROPDOWN
            ShowDataDropdown();

            // Error with output configuration
            var nodeTraining = target as TrainingExamplesNode;

            if (nodeTraining.DesiredOutputsConfig.Count == 0)
            {
                EditorGUILayout.HelpBox("There are no Desired Outputs Configured!", MessageType.Error);
            }
        }