/// <summary>
        /// Loads a visualization layout from the specified file.
        /// </summary>
        /// <param name="filename">File to load visualization layout.</param>
        /// <returns>The new visualization container.</returns>
        public static VisualizationContainer Load(string filename)
        {
            var serializer = JsonSerializer.Create(
                new JsonSerializerSettings()
            {
                Formatting                     = Formatting.Indented,
                NullValueHandling              = NullValueHandling.Ignore,
                ReferenceLoopHandling          = ReferenceLoopHandling.Ignore,
                TypeNameHandling               = TypeNameHandling.Auto,
                TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple,
            });

            StreamReader jsonFile = null;

            try
            {
                jsonFile = File.OpenText(filename);
                using (var jsonReader = new JsonTextReader(jsonFile))
                {
                    jsonFile = null;
                    VisualizationContainer container = serializer.Deserialize <VisualizationContainer>(jsonReader);
                    return(container);
                }
            }
            finally
            {
                jsonFile?.Dispose();
            }
        }
        /// <summary>
        /// Called internally by the VisualizationPanel to connect the parent chain.
        /// </summary>
        /// <param name="panel">Panel to connect this visualization object to.</param>
        internal void SetParentPanel(VisualizationPanel panel)
        {
            if (this.panel != null)
            {
                this.OnDisconnect();
                this.navigator.CursorChanged -= this.OnCursorChanged;
                this.panel     = null;
                this.container = null;
                this.navigator = null;
            }

            if (panel != null)
            {
                this.panel     = panel;
                this.container = this.panel.Container;
                this.navigator = this.container.Navigator;
                this.navigator.CursorChanged += this.OnCursorChanged;
                this.OnConnect();
            }
        }