/// <summary>
        /// Saves the current collection of splits (if valid).
        /// </summary>
        public void SaveSplits(bool updateStatus)
        {
            // This check prevents accidentialy wiping all splits on load.
            if (splitControls.Count == 0)
            {
                return;
            }

            Split[] splits = new Split[splitControls.Count];

            for (int i = 0; i < splits.Length; i++)
            {
                SplitControl control = (SplitControl)splitControls[i];
                splits[i] = new Split(control.SplitType, control.SplitData);
            }

            int invalidIndex;

            if (ValidateSplits(splits, out invalidIndex))
            {
                SplitCollection.Splits = splits;

                if (updateStatus)
                {
                    UpdateStatusLabel("Splits saved.", Color.Green);
                }
            }
            else if (updateStatus)
            {
                UpdateStatusLabel($"Invalid split (line {invalidIndex + 1}).", Color.Red);
            }
        }
        /// <summary>
        /// Moves the given control down.
        /// </summary>
        public void MoveDown(SplitControl control)
        {
            int index = splitControls.IndexOf(control);

            Swap(index, index + 1);
            SaveSplits(false);
        }
        /// <summary>
        /// Removes the given split control from the panel's collection.
        /// </summary>
        public void Remove(SplitControl control)
        {
            int index = splitControls.IndexOf(control);

            splitControls.RemoveAt(index);

            if (splitControls.Count > 0)
            {
                for (int i = index; i < splitControls.Count; i++)
                {
                    SplitControl toMove = (SplitControl)splitControls[i];
                    toMove.Location = toMove.Location.Subtract(spacing);
                    toMove.Index    = i + 1;
                }

                if (index == 0)
                {
                    ((SplitControl)splitControls[index]).ToggleUp(false);
                }

                if (index == splitControls.Count)
                {
                    ((SplitControl)splitControls.Last()).ToggleDown(false);
                }
            }

            UpdateCountLabel();
            SaveSplits(false);
        }
        /// <summary>
        /// Called when the Add Split button is pressed.
        /// </summary>
        private void addSplitButton_Click(object sender, EventArgs e)
        {
            SplitControl newSplit = new SplitControl(this, splitControls.Count + 1);

            if (splitControls.Count > 0)
            {
                SplitControl control = (SplitControl)splitControls.Last();

                newSplit.Location = control.Location.Add(spacing);
                control.ToggleDown(true);
            }

            newSplit.ToggleUp(splitControls.Count > 0);
            newSplit.ToggleDown(false);
            splitControls.Add(newSplit);

            UpdateCountLabel();
        }
        /// <summary>
        /// Swaps the two split controls with the given indices.
        /// </summary>
        private void Swap(int index1, int index2)
        {
            SplitControl control1 = (SplitControl)splitControls[index1];
            SplitControl control2 = (SplitControl)splitControls[index2];

            Point temporaryLocation = control1.Location;

            control1.Location = control2.Location;
            control2.Location = temporaryLocation;

            splitControls.SetChildIndex(control1, index2);
            splitControls.SetChildIndex(control2, index1);

            ToggleButtons(control1, index2);
            ToggleButtons(control2, index1);

            control1.Index = index2 + 1;
            control2.Index = index1 + 1;
        }
 /// <summary>
 /// Toggles up/down buttons on the given split control based on the given index.
 /// </summary>
 private void ToggleButtons(SplitControl control, int index)
 {
     control.ToggleUp(index > 0);
     control.ToggleDown(index < splitControls.Count - 1);
 }