private void DuplicateOption(TimingOption option)
    {
        TimingOption newBoy = new TimingOption(option);

        theConfig.timingOptions.Add(newBoy);
        // show the editor dialog
        TimingOptionEditorWindow.ShowWindow().SetOption(newBoy);
    }
    private void DoAddButton(Rect pos)
    {
        float btnWidth  = 40;
        float btnHeight = goodWordButtonHeight;

        if (GUI.Button(new Rect(pos.x + pos.width / 2 - btnWidth / 2, pos.y + pos.height - btnHeight, btnWidth, btnHeight), "Add"))
        {
            TimingOption newBoy = new TimingOption();
            theConfig.timingOptions.Add(newBoy);
            // show the editor dialog
            TimingOptionEditorWindow.ShowWindow().SetOption(newBoy);

            // also clear the deleted thing
            toUndo = null;
        }
    }
 private void ShowListView()
 {
     EditorGUILayout.BeginScrollView(scrollPos);
     foreach (TimingOption option in theConfig.timingOptions)
     {
         EditorGUILayout.BeginHorizontal();
         EditorGUILayout.LabelField(option.optionName);
         if (GUILayout.Button("Edit"))
         {
             TimingOptionEditorWindow.ShowWindow().SetOption(option);
         }
         if (GUILayout.Button("Remove"))
         {
             toRemove = option;
         }
         EditorGUILayout.EndHorizontal();
     }
     DoShowViewButton(new Rect());
     EditorGUILayout.EndScrollView();
 }
    private void DoShowTimingOptions(Rect frame)
    {
        float btnHeight = frame.height / 10;

        if (btnHeight < 15)
        {
            btnHeight = 15;
        }

        foreach (TimingOption option in theConfig.timingOptions)
        {
            foreach (TimingWindow window in option.windows)
            {
                GUI.color = option.associatedColor;
                float currentButtonWidth  = GetButtonWidth(window.window, frame.width);
                float currentButtonHeight = btnHeight;
                float xPos = frame.x + GetXPos(window.beatOffset, frame.width);
                float yPos = frame.y + (frame.height / 2) - (currentButtonHeight / 2);

                if (GUI.Button(new Rect(xPos, yPos, currentButtonWidth, currentButtonHeight), option.optionName))
                {
                    TimingOptionEditorWindow.ShowWindow().SetOption(option);
                }

                GUI.color = Color.white;
                if (GUI.Button(new Rect(xPos + currentButtonWidth / 2 - 10, yPos + currentButtonHeight + (btnHeight / 2), 20, 20), "-"))
                {
                    toRemove = option;
                }
                if (GUI.Button(new Rect(xPos + currentButtonWidth / 2 - 10, yPos - (btnHeight / 2) - 20, 20, 20), "D"))
                {
                    DuplicateOption(option);
                }
            }
        }
    }