protected override void Dispose(bool disposing)
        {
            Row.RowToggled                -= RowToggledHandler;
            Row.RowHeightChanged          -= RowHeightChangedHandler;
            Row.RowHeightResized          -= RowHeightResizedHandler;
            Row.RowLabelContextMenuSelect -= RowLabelContextMenuHandler;
            Vixen.Utility.cEventHelper.RemoveAllEventHandlers(this);
            Vixen.Utility.cEventHelper.RemoveAllEventHandlers(TimeInfo);
            TimeInfo = null;

            if (grid != null)
            {
                grid.Scroll -= GridScrolledHandler;
                grid.VerticalOffsetChanged -= GridScrollVerticalHandler;
                grid.Dispose();
                Vixen.Utility.cEventHelper.RemoveAllEventHandlers(grid);
                grid = null;
            }

            if (timelineRowList != null)
            {
                timelineRowList.Dispose();
                timelineRowList = null;
            }
            waveform?.Dispose();
            waveform = null;

            MarksBar?.Dispose();
            MarksBar = null;

            ruler?.Dispose();
            ruler = null;

            base.Dispose(disposing);
        }
        // Panel 2 - the right side of the splitContainer
        private void InitializePanel2()
        {
            // Add all timeline-like controls to panel2
            splitContainer.Panel2.SuspendLayout();

            // Grid
            grid = new Grid(TimeInfo)
            {
                Dock = DockStyle.Fill,
            };
            splitContainer.Panel2.Controls.Add(grid);             // gets added first - to fill the remains
            grid.Scroll += GridScrolledHandler;
            grid.VerticalOffsetChanged += GridScrollVerticalHandler;


            //Marks
            MarksBar = new MarksBar(TimeInfo)
            {
                Dock   = DockStyle.Top,
                Height = 50
            };

            splitContainer.Panel2.Controls.Add(MarksBar);

            // Ruler
            ruler = new Ruler(TimeInfo)
            {
                Dock   = DockStyle.Top,
                Height = 50,
            };
            splitContainer.Panel2.Controls.Add(ruler);

            //WaveForm
            //TODO deal with positioning, can we dock two controls to the top
            //Looks like the last one wins.
            waveform = new Waveform(TimeInfo)
            {
                Dock   = DockStyle.Top,
                Height = 50
            };

            splitContainer.Panel2.Controls.Add(waveform);

            splitContainer.Panel2.ResumeLayout(false);
            splitContainer.Panel2.PerformLayout();
        }