private void Save(XmlWriter writer, Form mainForm)
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("options");

            this.SaveOption(writer, "HidePathsRoot", _hidePathsRoot);
            //this.SaveOption(writer, "WebSuitePath", _webSuitePath);
            //this.SaveOption(writer, "LocalSuitePath", this.GetPath(_localSuitePath));
            this.SaveOption(writer, "SelectedValuePath", _selectedValuePath);
            this.SaveOption(writer, "Theme", _theme);

            if (_testSuites != null && _testSuites.Count != 0)
            {
                var selectedSuite = SvgTestSuite.GetSelected(_testSuites);
                if (selectedSuite != null)
                {
                    selectedSuite.LocalSuitePath = _localSuitePath;
                    selectedSuite.WebSuitePath   = _webSuitePath;
                }

                writer.WriteStartElement("testSuites");

                foreach (var testSuite in _testSuites)
                {
                    testSuite.WriteXml(writer);
                }

                writer.WriteEndElement();
            }

            try
            {
                _winPosition = new WindowPosition();
                if (mainForm != null)
                {
                    _winPosition.Location    = mainForm.Location;
                    _winPosition.Size        = mainForm.Size;
                    _winPosition.WindowState = mainForm.WindowState;
                    foreach (Screen screen in Screen.AllScreens)
                    {
                        _winPosition.WorkingAreas.Add(screen.WorkingArea);
                    }
                }

                this.SaveWindowPosition(writer);
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.ToString());
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            writer.WriteEndElement();
            writer.WriteEndDocument();
        }
        private void Load(XmlReader reader, Form mainForm)
        {
            var comparer = StringComparison.OrdinalIgnoreCase;

            List <SvgTestSuite> testSuites = new List <SvgTestSuite>(SvgTestSuite.TestSuiteCount);

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (string.Equals(reader.Name, "option", comparer))
                    {
                        string optionName = reader.GetAttribute("name");
                        string optionType = reader.GetAttribute("type");
                        if (string.Equals(optionType, "String", comparer))
                        {
                            string optionValue = reader.ReadElementContentAsString();

                            switch (optionName)
                            {
                            //case "WebSuitePath":
                            //    _webSuitePath = optionValue;
                            //    break;
                            //case "LocalSuitePath":
                            //    if (optionValue.StartsWith(ParentSymbol, comparer))
                            //    {
                            //        var inputPath = string.Copy(_localSuitePath);
                            //        int indexOf = inputPath.IndexOf(SharpVectors, comparer);

                            //        if (indexOf > 0)
                            //        {
                            //            var basePath    = inputPath.Substring(0, indexOf);
                            //            _localSuitePath = Path.Combine(basePath, optionValue.Replace(ParentSymbol, ""));
                            //        }
                            //        else
                            //        {
                            //            _localSuitePath = optionValue;
                            //        }
                            //    }
                            //    else
                            //    {
                            //        _localSuitePath = optionValue;
                            //    }

                            //    // Ignore old test suite directory, if found
                            //    if (string.IsNullOrWhiteSpace(_localSuitePath) ||
                            //        !this.IsLocalSuitePathChanged(Path.GetFullPath(TestsSvg)))
                            //    {
                            //        _localSuitePath = Path.GetFullPath(TestsSvg10);
                            //    }
                            //    break;
                            case "SelectedValuePath":
                                _selectedValuePath = optionValue;
                                break;
                            }
                        }
                        else if (string.Equals(optionType, "Boolean", comparer))
                        {
                            bool optionValue = reader.ReadElementContentAsBoolean();
                            switch (optionName)
                            {
                            case "HidePathsRoot":
                                _hidePathsRoot = optionValue;
                                break;
                            }
                        }
                        else if (string.Equals(optionType, "Other", comparer))
                        {
                            string optionValue = reader.ReadElementContentAsString();
                            switch (optionName)
                            {
                            case "Theme":
                                _theme = (DockingTheme)Enum.Parse(typeof(DockingTheme), optionValue, true);
                                break;
                            }
                        }
                    }
                    else if (string.Equals(reader.Name, "testSuite", comparer))
                    {
                        if (!reader.IsEmptyElement)
                        {
                            SvgTestSuite testSuite = new SvgTestSuite(reader);
                            if (testSuite.IsValid())
                            {
                                testSuites.Add(testSuite);
                            }
                        }
                    }
                    else if (string.Equals(reader.Name, "placements", comparer))
                    {
                        if (reader.IsEmptyElement == false)
                        {
                            if (reader.ReadToFollowing("WindowPosition"))
                            {
                                var xs = new XmlSerializer(typeof(WindowPosition));
                                _winPosition = xs.Deserialize(reader) as WindowPosition;
                            }
                        }
                    }
                }
            }

            if (testSuites.Count == SvgTestSuite.TestSuiteCount)
            {
                var selectedSuite = SvgTestSuite.GetSelected(testSuites);
                if (selectedSuite != null)
                {
                    _localSuitePath = selectedSuite.LocalSuitePath;
                    _webSuitePath   = selectedSuite.WebSuitePath;

                    _testSuites = testSuites;
                }
            }

            if (mainForm != null && _winPosition != null)
            {
                try
                {
                    switch (_winPosition.WindowState)
                    {
                    case FormWindowState.Maximized:
                        mainForm.Location      = _winPosition.MaximisedPoint;
                        mainForm.StartPosition = FormStartPosition.Manual;
                        break;

                    case FormWindowState.Normal:
                        if (_winPosition.IsIdenticalScreen())
                        {
                            mainForm.Location      = _winPosition.Location;
                            mainForm.Size          = _winPosition.Size;
                            mainForm.StartPosition = FormStartPosition.Manual;
                        }
                        break;

                    case FormWindowState.Minimized:
                        _winPosition.WindowState = FormWindowState.Normal;
                        break;

                    default:
                        break;
                    }
                    mainForm.WindowState = _winPosition.WindowState;
                }
                catch (Exception ex)
                {
                    Trace.TraceError(ex.ToString());
                }
            }
        }