public override void OnInspectorGUI()
        {
            InstructionBreadcrumbsDrawer.Draw();

            var set    = target as InstructionSet;
            var design = GUILayout.Button("Show Designer");

            _toEdit   = null;
            _toRemove = -1;

            EditorGUILayout.Space();
            EditorHelper.Separator(Color.grey);
            EditorGUILayout.Space();

            using (new UndoScope(serializedObject))
                _instructions.DrawList();

            if (_toEdit != null)
            {
                InstructionBreadcrumbs.Edit(_toEdit);
            }

            if (_toRemove >= 0)
            {
                Remove(set, _toRemove);
            }

            if (design)
            {
                Design(set);
            }
        }
        public static Instruction Draw(Rect position, InstructionSet set, Instruction currentInstruction, GUIContent label)
        {
            if (label != null)
            {
                position = EditorGUI.PrefixLabel(position, label);
            }

            var popup = GetPopup(set);
            var names = popup.GetRootNames();
            var index = popup.GetIndex(currentInstruction);
            var left  = currentInstruction != null ? new Rect(position.x, position.y, position.width * 0.5f, EditorGUIUtility.singleLineHeight) : position;

            using (var changes = new EditorGUI.ChangeCheckScope())
            {
                index = EditorGUI.Popup(left, index, names);

                if (changes.changed)
                {
                    currentInstruction = popup.GetInstruction(index);
                }
            }

            if (currentInstruction != null)
            {
                var edit  = new Rect(left.xMax + 5, position.y, (position.width - left.width - 10) * 0.5f, EditorGUIUtility.singleLineHeight);
                var clear = new Rect(edit.xMax + 5, position.y, edit.width, edit.height);

                if (GUI.Button(edit, EditorHelper.EditContent))
                {
                    InstructionBreadcrumbs.Edit(currentInstruction);
                }

                if (GUI.Button(clear, EditorHelper.ClearContent))
                {
                    currentInstruction = null;
                }
            }

            return(currentInstruction);
        }