protected override StorableSettings GetSettingsCore()
        {
            var settings = base.GetSettingsCore();

            settings.GlobalSettings[autoSaveKey]           = AutoSave.ToString();
            settings.GlobalSettings[mouseCoordinateKey]    = MouseCoordinateType.ToString();
            settings.GlobalSettings[windowLocationKey]     = windowLocation;
            settings.GlobalSettings[recentProjectFilesKey] = recentProjectFiles;
            settings.GlobalSettings[ThreadMaxCountKey]     = ThreadMaxCount.ToString();
            settings.GlobalSettings[ThreadMinCountKey]     = ThreadMinCount.ToString();
            settings.GlobalSettings[IsDisplayAutoSaveKey]  = IsDisplayAutoSave.ToString();

            if (Application.Current != null && Application.Current.MainWindow.Tag is Dictionary <string, string> )
            {
                settings.GlobalSettings[alwaysShowHintsKey] = (Application.Current.MainWindow.Tag as Dictionary <string, string>)["ShowHintSettings"];
                settings.GlobalSettings[currentExtentKey]   = (Application.Current.MainWindow.Tag as Dictionary <string, string>)[currentExtentKey];
            }
            XElement xml = new XElement("Scales");

            foreach (var scale in scales)
            {
                xml.Add(new XElement("scale", scale));
            }
            settings.GlobalSettings["Scales"] = xml.ToString();

            return(settings);
        }
        //private Dictionary<string, bool> showHints;

        public GeneralManager()
        {
            //showHints = new Dictionary<string, bool>();
            DisplayLanguage                 = GisEditor.LanguageManager.GetCurrentLanguage();
            originalSelectedLanguage        = DisplayLanguage;
            originalSelectedMouseCoordinate = MouseCoordinateType;
            AutoSave                 = true;
            originalAutoSave         = AutoSave;
            AutoSaveInterval         = TimeSpan.FromMinutes(5);
            originalAutoSaveTimeSpan = AutoSaveInterval;
            Theme              = GisEditor.DockWindowManager.Theme;
            originalTheme      = Theme;
            recentProjectFiles = "";
            threadMaxCount     = 100;
            threadMinCount     = 50;
            isDisplayAutoSave  = true;
            scales             = new Collection <double>();
            Application.Current.MainWindow.Tag = new Dictionary <string, string>();
        }
        private static string GetMouseCoordinates(double lon, double lat, MouseCoordinateType mouseCoordinateType, string displayProj4, double xInCurrentProjection = double.NaN,
                                                  double yInCurrentProjection = double.NaN)
        {
            switch (mouseCoordinateType)
            {
            case MouseCoordinateType.Default:

                //Vertex vertex = ConvertCurrentCoordinatesTo4326Coordinates(lon, lat, displayProj4);
                return(String.Format("X:{0}, Y:{1} | {2}", xInCurrentProjection.ToString("N4", CultureInfo.InvariantCulture), yInCurrentProjection.ToString("N4", CultureInfo.InvariantCulture), GetDmsString(lon, lat)));

            case MouseCoordinateType.LatitudeLongitude:
                return(String.Format(CultureInfo.InvariantCulture, "Latitude: {0}, Longitude: {1}", Math.Round(lat, 4).ToString(CultureInfo.InvariantCulture), Math.Round(lon, 4).ToString(CultureInfo.InvariantCulture)));

            case MouseCoordinateType.LongitudeLatitude:
                return(String.Format(CultureInfo.InvariantCulture, "Longitude: {0}, Latitude: {1}", Math.Round(lon, 4).ToString(CultureInfo.InvariantCulture), Math.Round(lat, 4).ToString(CultureInfo.InvariantCulture)));

            case MouseCoordinateType.DegreesMinutesSeconds:
                return(GetDmsString(lon, lat));

            default:
                return("--°--'--\"E  --°--'--\"N");
            }
        }
        public static string GetFormattedWorldCoordinate(this GisEditorWpfMap map, ScreenPointF screenPoint, MouseCoordinateType mouseCoordinateType)
        {
            PointShape lonlat = map.ToWorldCoordinate(screenPoint.X, screenPoint.Y);
            double     xInCurrentProjection = lonlat.X;
            double     yInCurrentProjection = lonlat.Y;
            string     projectionFullName   = "Unknown";

            if (map.DisplayProjectionParameters != null)
            {
                string projectionShortName = map.DisplayProjectionParameters.Split(' ')[0].Replace("+proj=", string.Empty);
                projectionFullName = projectionAbbreviations[projectionShortName];
            }

            GeographyUnit mapUnit = GisEditorWpfMap.GetGeographyUnit(map.DisplayProjectionParameters);

            if (projectionFullName == "Unknown" && mapUnit == GeographyUnit.Unknown)
            {
                return(String.Format("X:{0}, Y:{1}", lonlat.X.ToString("N4", CultureInfo.InvariantCulture), lonlat.Y.ToString("N4", CultureInfo.InvariantCulture)));
            }
            else
            {
                if (mapUnit != GeographyUnit.DecimalDegree)
                {
                    try
                    {
                        Proj4Projection proj = new Proj4Projection();
                        proj.InternalProjectionParametersString = map.DisplayProjectionParameters;
                        proj.ExternalProjectionParametersString = Proj4Projection.GetDecimalDegreesParametersString();
                        proj.Open();
                        lonlat = proj.ConvertToExternalProjection(lonlat) as PointShape;
                        proj.Close();
                    }
                    catch
                    {
                        lonlat = new PointShape();
                    }
                }
                return(GetMouseCoordinates(lonlat.X, lonlat.Y, mouseCoordinateType, map.DisplayProjectionParameters, xInCurrentProjection, yInCurrentProjection));
            }
        }