/// <summary> /// imageFileProcessor can be null - the default one will be used, same with insertWaypointHandler and insertEarthquakeHandler /// /// for a .jpg file just calls image file processor. /// for .gpx, .loc, .zip, .gpz and .wpt files calls BaseFormat.processor() and adds to foldersToProcess /// /// returns true on success /// </summary> /// <param name="fileName"></param> /// <param name="insertWaypointHandler"></param> /// <param name="insertEarthquakeHandler"></param> /// <param name="imageFileProcessor"></param> /// <param name="foldersToProcess"></param> /// <returns></returns> public static bool readFile(string fileName, InsertWaypoint insertWaypointHandler, InsertEarthquake insertEarthquakeHandler, ProcessFile imageFileProcessor, SortedList foldersToProcess, bool addToRecent) { bool isSuccess = false; fileName = Project.GetLongPathName(new FileInfo(fileName).FullName); // make sure we are not dealing with 8.3 notation here if (insertWaypointHandler == null) { insertWaypointHandler = new InsertWaypoint(WaypointsCache.insertWaypoint); } if (insertEarthquakeHandler == null) { insertEarthquakeHandler = new InsertEarthquake(EarthquakesCache.insertEarthquake); } if (imageFileProcessor == null) { imageFileProcessor = new ProcessFile(FileAndZipIO.processImageFile); } if (AllFormats.isTiffFile(fileName)) { #region Handle a GeoTiff file GeoTiff geoTiff = new GeoTiff(fileName); try { geoTiff.init(); } catch { } if (geoTiff.isValid) { CustomMapsCache.RemoveCustomMapsBySource(fileName); CustomMap cm = new CustomMapGeotiff(geoTiff); Project.customMapId++; cm.Id = Project.customMapId; CustomMapsCache.AddCustomMap(cm); WaypointsCache.pushBoundaries(cm.Location); WaypointsCache.pushBoundaries(new GeoCoord(geoTiff.BottomLeftLng, geoTiff.BottomLeftLat)); WaypointsCache.pushBoundaries(new GeoCoord(geoTiff.TopRightLng, geoTiff.TopRightLat)); WaypointsCache.pushBoundaries(new GeoCoord(geoTiff.BottomRightLng, geoTiff.BottomRightLat)); // success, worth adding to imported list, if not repeat read: bool repeatRead = isRepeatRead(fileName); if (!repeatRead) { FormattedFileDescr ffd = new FormattedFileDescr(fileName, FileGeoTIFF.FormatName, false); Project.FileDescrList.Add(ffd); } string msg = "OK: read file " + fileName + (repeatRead ? " (repeat read)" : ""); LibSys.StatusBar.Trace(msg); LibSys.StatusBar.Trace("* " + msg); isSuccess = true; // will ensure refresh is called } else { LibSys.StatusBar.Error("readFile - not a GeoTIFF file: " + fileName); } #endregion // Handle a GeoTiff file } else if (fileName.ToLower().EndsWith(".jpg")) { #region Single JPEG image probably dropped PhotoWaypoints.cleanPhotoTrackpoints(fileName); try { LibSys.StatusBar.Trace(" ...readFile - processing image file: " + fileName); if (imageFileProcessor(null, null, fileName, fileName) > 0) { Project.photoFileName = fileName; isSuccess = true; // will ensure refresh is called } } catch (Exception exc) { LibSys.StatusBar.Error("Exception: " + exc.Message); } #endregion // Single JPEG image probably dropped } else { LibSys.StatusBar.Trace(" ...readFile - processing formatted file: " + fileName); #region Processing formatted file - zip, gpx BaseFormat format = AllFormats.formatByFileName(fileName); if (format != null) { string formatName = AllFormats.formatNameByFileName(fileName); format.InsertWaypoint = insertWaypointHandler; format.InsertEarthquake = insertEarthquakeHandler; FileListStruct fls = new FileListStruct(fileName, formatName, new FormatProcessor(format.process), false); WaypointsCache.RemoveWaypointsBySource(fls.filename); // actually read the file. If ZIP processor is there, it will read all enclosed .GPX files. if (fls.processor("", fls.filename, fls.filename)) // boundaries pushed in WaypointsCache.insertWaypoint() { // knows about .gpx files and Project.photoAnalyzeOnLoad: enlistPhotoFolder(fls.filename, foldersToProcess, imageFileProcessor); // success, worth adding to imported list, if not repeat read: bool repeatRead = isRepeatRead(fileName); if (!repeatRead) { FormattedFileDescr ffd = new FormattedFileDescr(fileName, formatName, false); Project.FileDescrList.Add(ffd); } string msg = "OK: read file " + fileName + (repeatRead ? " (repeat read)" : ""); LibSys.StatusBar.Trace(msg); LibSys.StatusBar.Trace("* " + msg); isSuccess = true; } else { LibSys.StatusBar.Trace("* Error: while processing file " + fileName); Project.ErrorBox(Project.mainForm, "Error processing file:\n\n" + fls.filename); } } else { LibSys.StatusBar.Trace("* Error: unrecognized format " + fileName); Project.ErrorBox(Project.mainForm, "Unrecognized format:\n\n" + fileName); } #endregion // Processing formatted file - zip, gpx } if (addToRecent && isSuccess) { Project.insertRecentFile(fileName); } return isSuccess; }
/// <summary> /// used in initial load processing; returns number of processed files: /// loads all files marked for persistent loading, and then those which were dropped on us (or supplied as cmd line args) /// </summary> /// <returns></returns> public static int readPersistentAndDroppedFiles(bool doZoom, Label messageLabel) { int ret = 0; LibSys.StatusBar.Trace("Read persistent and dropped files - " + doZoom); bool boundariesReset = false; // also will cause zoom to corners, if true - a sign that dropped files are processed SortedList foldersToProcess = new SortedList(); // actually load all files marked for persistent loading, and then those which were dropped on us (or supplied as cmd line args): foreach (FileListStruct fls in Project.FileList) { string fileName = fls.filename; try { FileInfo fi = new FileInfo(Project.GetLongPathName(fls.filename)); fileName = fi.FullName; messageLabel.Text = "...reading files...\n" + fileName; if (!fls.persistent) { warnPhotoAnalyzeOnLoad(fileName); // can turn Project.photoAnalyzeOnLoad off } if (!boundariesReset && !fls.persistent) // first non-persistent file, the rest will be also the dropped ones { WaypointsCache.resetBoundaries(); boundariesReset = true; } WaypointsCache.RemoveWaypointsBySource(fileName); CustomMapsCache.RemoveCustomMapsBySource(fileName); // actually read the file. If ZIP processor is there, it will read all enclosed .GPX files. if (fls.formatName.Equals(FileGeoTIFF.FormatName)) { string[] fileNames = new string[] { fileName }; bool anySuccess = FileAndZipIO.readFiles(fileNames); } else { if (fls.processor("", fileName, fileName)) // boundaries pushed in WaypointsCache.insertWaypoint() { // knows about .gpx files and Project.photoAnalyzeOnLoad: enlistPhotoFolder(fileName, foldersToProcess, null); if (!fls.persistent) { // success, worth adding to imported list, if not repeat read: bool repeatRead = isRepeatRead(fileName); if (!repeatRead) { FormattedFileDescr ffd = new FormattedFileDescr(fileName, fls.formatName, false); Project.FileDescrList.Add(ffd); } } ret++; } else { Project.ErrorBox(Project.mainForm, "Error processing file:\n\n" + fileName); boundariesReset = false; // no zoom to corners } } } catch { Project.ErrorBox(Project.mainForm, "Error processing file:\n\n" + fileName); boundariesReset = false; // no zoom to corners } } postProcessFolders(foldersToProcess, true); if (doZoom && boundariesReset) // we need to zoom into whole set of dropped files { // LibSys.StatusBar.Trace("zooming into set"); Project.mainCommand.wptEnabled(true); PictureManager.This.CameraManager.zoomToCorners(); } else { // LibSys.StatusBar.Trace("just ProcessCameraMove()"); PictureManager.This.CameraManager.ProcessCameraMove(); } if (ret > 0) { string msg = "OK: done reading files... (" + ret + " total)"; messageLabel.Text = msg; LibSys.StatusBar.Trace(msg); } LibSys.StatusBar.Trace("Read persistent and dropped files finished"); return ret; }
public static void FileDescrListAdd(FormattedFileDescr ffd) { // do not add duplicate files here: foreach(FormattedFileDescr tmp in FileDescrList) { if(tmp.filename.Equals(ffd.filename)) { FileDescrList.Remove(tmp); break; } } FileDescrList.Add(ffd); }
private static void AddFfdOption(XmlDocument xmlDoc, XmlNode ffdNode, FormattedFileDescr ffd) { XmlNode node = xmlDoc.CreateElement("file"); XmlAttribute attr = xmlDoc.CreateAttribute("path"); attr.InnerText = "" + ffd.filename; node.Attributes.Append(attr); attr = xmlDoc.CreateAttribute("format"); attr.InnerText = "" + ffd.formatName; node.Attributes.Append(attr); ffdNode.AppendChild(node); }
public static void ReadOptions() { bool favoritesDirty = false; string optionsFilePath = GetMiscPath(OPTIONS_FILE_NAME); #if DEBUG LibSys.StatusBar.Trace("IP: Project:ReadOptions() path=" + optionsFilePath); #endif DateTime startedRead = DateTime.Now; try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(optionsFilePath); // we want to traverse XmlDocument fast, as tile load operations can be numerous // and come in pack. So we avoid using XPath and rely mostly on "foreach child": foreach(XmlNode nnode in xmlDoc.ChildNodes) { if(nnode.Name.Equals("options")) { foreach(XmlNode node in nnode.ChildNodes) { string nodeName = node.Name; try { if(nodeName.Equals("cameraLat")) { cameraLat = Convert.ToDouble(node.InnerText); } else if(nodeName.Equals("cameraLng")) { cameraLng = Convert.ToDouble(node.InnerText); } else if(nodeName.Equals("cameraElev")) { cameraElev = Convert.ToDouble(node.InnerText); } #if DEBUG else if(nodeName.Equals("enableTrace")) { enableTrace = node.InnerText.ToLower().Equals("true"); } #endif else if(nodeName.Equals("mappingCacheLocation")) { mappingCacheLocation = node.InnerText; } else if(nodeName.Equals("gpsMakeIndex")) { gpsMakeIndex = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("gpsModelIndex")) { gpsModelIndex = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("gpsInterfaceIndex")) { gpsInterfaceIndex = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("gpsRtToleranceIndex")) { gpsRtToleranceIndex = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("gpsMaxPointsPerRoute")) { gpsMaxPointsPerRoute = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("gpsMagellanRouteNameConversionMethod")) { gpsMagellanRouteNameConversionMethod = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("mainFormWidth")) { mainFormWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("mainFormHeight")) { mainFormHeight = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("mainFormX")) { mainFormX = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("mainFormY")) { mainFormY = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("mainFormMaximized")) { mainFormMaximized = "true".Equals(node.InnerText.ToLower()); } else if(nodeName.Equals("wptManagerWidth")) { wptManagerWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("wptManagerHeight")) { wptManagerHeight = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("cmManagerWidth")) { cmManagerWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("cmManagerHeight")) { cmManagerHeight = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("symbolColWidth")) { symbolColWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("nameColWidth")) { nameColWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("nameColWidthCm")) { nameColWidthCm = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("urlNameColWidth")) { urlNameColWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("descColWidth")) { descColWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("descColWidthCm")) { descColWidthCm = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("sourceColWidthCm")) { sourceColWidthCm = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("commentColWidth")) { commentColWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("eqManagerWidth")) { eqManagerWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("eqManagerHeight")) { eqManagerHeight = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoFullSizeWidth")) { photoFullSizeWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoFullSizeHeight")) { photoFullSizeHeight = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoFullSizeX")) { photoFullSizeX = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoFullSizeY")) { photoFullSizeY = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoManagerDlgWidth")) { photoManagerWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoManagerDlgHeight")) { photoManagerHeight = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoManagerDlgX")) { photoManagerX = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoManagerDlgY")) { photoManagerY = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("pmLastTabMode")) { pmLastTabMode = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("preloadDoProgress")) { preloadDoProgress = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("preloadScale1")) { preloadScale1 = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("preloadScale2")) { preloadScale2 = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("pdaExportDoAerial")) { pdaExportDoAerial = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("pdaExportDoTopo")) { pdaExportDoTopo = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("pdaExportDoColor")) { pdaExportDoColor = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("kmlShowInPopup")) { kmlOptions.kmlShowInPopup = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("kmlWptsClampToGround")) { kmlOptions.kmlWptsClampToGround = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("kmlTrksClampToGround")) { kmlOptions.kmlTrksClampToGround = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("fileInitialDirectory")) { fileInitialDirectory = node.InnerText; } else if(nodeName.Equals("imageInitialDirectory")) { imageInitialDirectory = node.InnerText; } else if(nodeName.Equals("photoSaveInitialDirectory")) { photoSaveInitialDirectory = node.InnerText; } else if(nodeName.Equals("pdaInitialDirectory")) { pdaInitialDirectory = node.InnerText; } else if(nodeName.Equals("exportDestFolder")) { exportDestFolder = node.InnerText; } else if(nodeName.Equals("pdaWellDiagonale")) { pdaWellDiagonale = Convert.ToDouble(node.InnerText); } else if(nodeName.Equals("pdaExportImageFormat")) { pdaExportImageFormat = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("pdaExportUseWebsafeGrayscalePalette")) { pdaExportUseWebsafeGrayscalePalette = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("pdaExportWrapPdb")) { pdaExportWrapPdb = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("findKeyword")) { findKeyword = node.InnerText; } else if (nodeName.Equals("zipcode")) { zipcode = node.InnerText; } else if (nodeName.Equals("waypointNameStyle")) { waypointNameStyle = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("trackNameStyle")) { trackNameStyle = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("earthquakeStyle")) { earthquakeStyle = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("printTextFont")) { printTextFont = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("mouseWheelAction")) { mouseWheelAction = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("distortionFactor")) { distortionFactor = Convert.ToDouble(node.InnerText); } else if(nodeName.Equals("cameraHeightMin")) { cameraHeightMin = Convert.ToDouble(node.InnerText); } else if(nodeName.Equals("coordStyle")) { coordStyle = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("unitsDistance")) { unitsDistance = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("earthquakeStyleFillHowRecentIndex")) { earthquakeStyleFillHowRecentIndex = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("allowMapPopups")) { allowMapPopups = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawRelief")) { drawRelief = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("serverMessageLast")) { serverMessageLast = node.InnerText; } else if(nodeName.Equals("drawGrid")) { drawGrid = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawCentralPoint")) { drawCentralPoint = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawCornerArrows")) { drawCornerArrows = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawCities")) { drawCities = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawLandmarks")) { drawLandmarks = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawEarthquakes")) { drawEarthquakes = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawWaypoints")) { drawWaypoints = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawTrackpoints")) { drawTrackpoints = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("useWaypointIcons")) { useWaypointIcons = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("showHelpAtStart")) { showHelpAtStart = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("gpsWptDescrAsName")) { gpsWptDescrAsName = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("gpsVehicleIcon")) { gpsVehicleIcon = node.InnerText; } else if(nodeName.Equals("showTrackpointNumbers")) { showTrackpointNumbers = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawVehicles")) { drawVehicles = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("eqUseOldData")) { eqUseOldData = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("eqFetchOnStart")) { eqFetchOnStart = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("earthquakeStyleFillRecent")) { earthquakeStyleFillRecent = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("terraserverUseServices")) { terraserverUseServices = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("sanityFilter")) { sanityFilter = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("gpsRtTrackOnMap")) { gpsRtTrackOnMap = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("gpsZoomIntoTracks")) { gpsZoomIntoTracks = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("gpsRtTrackLog")) { gpsRtTrackLog = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("gpsRtKeepInView")) { gpsRtKeepInView = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("gpsMagellanHandshake")) { gpsMagellanHandshake = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("terraLayerOpacity")) { terraLayerOpacity = Convert.ToDouble(node.InnerText); // protect from "disappearing aerial", when transparency goes to 0: if(terraLayerOpacity < 0.5d || terraLayerOpacity > 1.0d) { terraLayerOpacity = 0.5d; } } else if(nodeName.Equals("terraLayerOpacity2")) { terraLayerOpacity2 = Convert.ToDouble(node.InnerText); // protect from "disappearing aerial", when transparency goes to 0: if(terraLayerOpacity2 < 0.15d || terraLayerOpacity2 > 1.0d) { terraLayerOpacity2 = 0.5d; } } else if(nodeName.Equals("terraLayerOpacity3")) { terraLayerOpacity3 = Convert.ToDouble(node.InnerText); // protect from "disappearing aerial", when transparency goes to 0: if(terraLayerOpacity3 < 0.25d || terraLayerOpacity3 > 1.0d) { terraLayerOpacity3 = 1.0d; } } else if(nodeName.Equals("terraUseOverlay")) { //terraUseOverlay = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("breakTimeMinutes")) { breakTimeMinutes = Convert.ToDouble(node.InnerText); } else if(nodeName.Equals("drawTerraserver")) { drawTerraserver = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("makeWhitishTransparent")) { makeWhitishTransparent = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("drawTerraserverMode")) { drawTerraserverMode = node.InnerText; } else if(nodeName.Equals("photoGalleryPictureSize")) { photoGalleryPictureSize = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoFolderPath")) { photoFolderPath = node.InnerText; } else if(nodeName.Equals("photoTimeShiftYourCamera")) { long ticks = Convert.ToInt64(node.InnerText); photoTimeShiftYourCamera = new TimeSpan(ticks); } else if(nodeName.Equals("photoTimeZoneIdYourCamera")) { photoTimeZoneIdYourCamera = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoTimeZoneIdFile")) { photoTimeZoneIdFile = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoTimeZoneIdTemp")) { photoTimeZoneIdTemp = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("togeotiffFolderPath")) { togeotiffFolderPath = node.InnerText; } else if(nodeName.Equals("togeotiffFileName")) { togeotiffFileName = node.InnerText; } else if(nodeName.Equals("photoFileName")) { photoFileName = node.InnerText; } else if(nodeName.Equals("photoAnalyzeOnLoad")) { photoAnalyzeOnLoad = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("photoAnalyzeOnLoadReminder")) { photoAnalyzeOnLoadReminder = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("photoDoPreview")) { photoDoPreview = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("thumbDoDisplay")) { thumbDoDisplay = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("thumbWidth")) { thumbWidth = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("thumbHeight")) { thumbHeight = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("thumbPosition")) { thumbPosition = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("photoPreserveSize")) { photoPreserveSize = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("photoFitToSize")) { photoFitToSize = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("photoSaveQuality")) { photoSaveQuality = Convert.ToInt64(node.InnerText.Trim()); } else if(nodeName.Equals("useProxy")) { useProxy = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("suspendKeepAlive")) { suspendKeepAlive = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("forceEmptyProxy")) { forceEmptyProxy = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("proxyServer")) { proxyServer = node.InnerText; } else if(nodeName.Equals("proxyPort")) { proxyPort = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("webTimeoutMs")) { webTimeoutMs = Convert.ToInt32(node.InnerText); } else if(nodeName.Equals("geocachingLogin")) { geocachingLogin = node.InnerText; } else if(nodeName.Equals("penTrackThickness")) { TrackPalette.penTrackThickness = (float)Convert.ToDouble(node.InnerText); } else if(nodeName.Equals("penRouteThickness")) { TrackPalette.penRouteThickness = (float)Convert.ToDouble(node.InnerText); } else if(nodeName.Equals("webPageTemplate")) { webPageTemplate = node.InnerText; } else if(nodeName.Equals("webPageDestinationFolder")) { webPageDestinationFolder = node.InnerText; } else if(nodeName.Equals("webPagePhotoStorageUrlBase")) { webPagePhotoStorageUrlBase = node.InnerText; } else if(nodeName.Equals("webPageLinksUsePopup")) { webPageLinksUsePopup = node.InnerText.ToLower().Equals("true"); } else if(nodeName.Equals("trackPalette")) { int i = 0; foreach(XmlNode nnnode in node.ChildNodes) { try { string sRGB = nnnode.InnerText; string[] split = sRGB.Split(new Char[] {','}); int r = Convert.ToInt32(split[0]); int g = Convert.ToInt32(split[1]); int b = Convert.ToInt32(split[2]); Color color = Color.FromArgb(r, g, b); TrackPalette.setColor(i, color); } catch {} i++; } } else if(nodeName.Equals("fileDescrList")) { foreach(XmlNode nnnode in node.ChildNodes) { string filename = nnnode.Attributes.GetNamedItem("path").InnerText.Trim(); string formatName = nnnode.Attributes.GetNamedItem("format").InnerText; FormattedFileDescr ffd = new FormattedFileDescr(filename, formatName, true); Project.FileDescrList.Add(ffd); } } else if(nodeName.Equals("favorites")) { // this is here only for backwards compatibility. It takes favorites from options.xml // there is no save block back to options.xml, favorites go into favorites.xml now foreach(XmlNode nnnode in node.ChildNodes) { string name = nnnode.InnerText; string sLng = nnnode.Attributes.GetNamedItem("lon").InnerText; string sLat = nnnode.Attributes.GetNamedItem("lat").InnerText; string sElev = nnnode.Attributes.GetNamedItem("elev").InnerText; XmlNode tNode = nnnode.Attributes.GetNamedItem("type"); string type = tNode == null ? "aerial" : tNode.InnerText.Trim(); double lng = Convert.ToDouble(sLng); double lat = Convert.ToDouble(sLat); double elev = Convert.ToDouble(sElev); CamPos camPos = new CamPos(lng, lat, elev, name, type); Project.favorites.Add(camPos); favoritesDirty = true; // provoke SaveFavorites into favorites.xml } } else if(nodeName.Equals("recentFiles")) { foreach(XmlNode nnnode in node.ChildNodes) { string filename = nnnode.Attributes.GetNamedItem("path").InnerText.Trim(); filename = Project.GetLongPathName(filename); FileInfo fi = new FileInfo(filename); if(fi.Exists) { Project.recentFiles.Add(filename); } else { DirectoryInfo di = new DirectoryInfo(filename); if(di.Exists) { Project.recentFiles.Add(filename); } } } } } catch (Exception ee) { // bad node - not a big deal... LibSys.StatusBar.Error("Project:ReadOptions() node=" + nodeName + " " + ee.Message); } } } } } catch (Exception e) { LibSys.StatusBar.Error("Project:ReadOptions() " + e.Message); } LibSys.StatusBar.Trace("ReadOptions: " + Math.Round((DateTime.Now - startedRead).TotalMilliseconds) + " ms"); // restore gpsPortSettings from the file or fill it with default values: restoreOrDefaultGpsSettings(); if(cameraHeightMin < 0.04d || cameraHeightMin > CAMERA_HEIGHT_MIN_DEFAULT) { cameraHeightMin = CAMERA_HEIGHT_MIN_DEFAULT; } if(cameraElev < cameraHeightMin * 1000.0d || cameraElev > CAMERA_HEIGHT_MAX * 1000.0d) { cameraElev = CAMERA_HEIGHT_SAFE * 1000.0d; } // restore Tools from the file or fill it with default values: string toolsFilePath = GetMiscPath(TOOLS_FILE_NAME); Project.tools.Restore(toolsFilePath); if(favoritesDirty) { LibSys.StatusBar.Trace("ReadOptions: saving favorites"); SaveFavorites(); // in case the old format was read in SaveOptions(); // without the favorites part } else { ReadFavorites(); } LibSys.StatusBar.Trace("ReadOptions: finished in " + Math.Round((DateTime.Now - startedRead).TotalMilliseconds) + " ms"); }
/* * see http://www.topografix.com/GPX/1/0 for more info * * Validating your GPX document Validation is done using the Xerces XML parser. Download the latest Xerces distribution from the Apache website. Windows users should download the "Latest Xerces-C++ Binary Package for Windows". Unzip the files, and locate the SAXCount.exe program in the bin folder. This is a command-line utility that will validate your GPX file. Assuming your GPX file is named my_gpx_file.gpx, and is located in the same folder as SaxCount.exe, use the following command line to validate your file: SaxCount.exe -v=always -n -s -f test.gpx If your file validates successfully, SAXCount will display a count of the elements in your file, like the following: test.gpx: 1012 ms (4025 elems, 1916 attrs, 8048 spaces, 36109 chars) Any other output from SAXCount.exe indicates that your GPX file is incorrect. It is your responsibility to ensure that any GPX files you create validate successfully against the GPX schema. */ public void doWrite() { string diag = "Selected format: " + m_selectedFormat + "\r\n\r\n"; trkpointCount = 0; waypointCount = 0; // could be "new DateTimeFormatInfo().UniversalSortableDateTimePattern;" - but it has space instead of 'T' messageBoxDirty = true; messageTextBox.Text = diag; try { if(m_selectedFormat.Equals(FileStreetsTripsCsv.FormatName)) { hasSaved = FileAndZipIO.saveCsv(m_selectedFileName, m_tracks, m_saveTracks, m_waypoints, m_saveWaypoints, out waypointCount, out trkpointCount); } else if(m_selectedFormat.Equals(FileEasyGps.FormatName)) { int tracksCount; hasSaved = FileAndZipIO.saveGpx(m_selectedFileName, m_tracks, m_saveTracks, m_waypoints, m_saveWaypoints, out waypointCount, out trkpointCount, out tracksCount); // try suggesting JPEG correlation here, if the folder has any .JPG files if(tracksCount > 0) { bool hasJpegs = false; try { FileInfo fi = new FileInfo(m_selectedFileName); DirectoryInfo di = fi.Directory; foreach(FileInfo fii in di.GetFiles()) { if(fii.Name.ToLower().EndsWith(".jpg")) { hasJpegs = true; break; } } } catch { } if(hasJpegs) { string message = "The folder you selected contains images\r\n\r\nDo you want to relate them to trackpoints?"; if(Project.YesNoBox(this, message)) { Project.photoFileName = m_selectedFileName; Project.pmLastTabMode = 0; DlgPhotoManager dlg = new DlgPhotoManager(0); dlg.setImportButtonsAgitated(); dlg.ShowDialog(); } } } } else if(m_selectedFormat.Equals(FileKml.FormatName)) { string name = new FileInfo(m_selectedFileName).Name; name = name.Substring(0, name.Length - FileKml.FileExtension.Length); GoogleEarthManager.saveTracksWaypoints( m_selectedFileName, name, m_tracks, m_saveTracks, m_waypoints, m_saveWaypoints, out waypointCount, out trkpointCount ); } else { messageTextBox.Text = "Error: format " + m_selectedFormat + " not supported for writing."; LibSys.StatusBar.Error("FileExportForm:doWrite() format " + m_selectedFormat + " not supported for writing."); return; } WaypointsCache.isDirty = false; if(waypointCount > 0 || trkpointCount > 0) { diag += "OK: " + waypointCount + " waypoints and " + trkpointCount + " legs saved to file."; messageTextBox.ForeColor = Color.Black; FileInfo fi = new FileInfo(Project.GetLongPathName(m_selectedFileName)); FormattedFileDescr fd = new FormattedFileDescr(fi.FullName, m_selectedFormat, persistCheckBox.Checked); Project.FileDescrListAdd(fd); if(!m_selectedFormat.Equals(FileKml.FormatName)) // can't read back kmz { Project.insertRecentFile(fi.FullName); } } else { diag += "Error: failed to save to file (0 waypoints, 0 legs)."; messageTextBox.ForeColor = Color.Red; } messageTextBox.Text = diag; } catch (Exception e) { LibSys.StatusBar.Error("FileExportForm:doWrite() " + e); //.Message); messageTextBox.Text = diag + e.Message; messageTextBox.ForeColor = Color.Red; } }
/// <summary> /// Calls format.process() and then FileAndZipIO.processPhotoFolderByFile(...true), (true for reading photoParameters file) /// </summary> public void doRead(int mode) { Cursor.Current = Cursors.WaitCursor; string filename = m_fileImportForm.m_selectedFileName; bool repeatRead = false; string sRepeatRead = ""; FormattedFileDescr ffdRepeat = null; foreach(FormattedFileDescr ffd in Project.FileDescrList) { if(ffd.filename.Equals(filename)) { repeatRead = true; ffdRepeat = ffd; sRepeatRead = " (repeat read)"; switch(mode) { case MODE_GPS: WaypointsCache.RemoveWaypointsBySource(filename); CustomMapsCache.RemoveCustomMapsBySource(filename); break; case MODE_EQ: EarthquakesCache.RemoveEarthquakesBySource(filename); break; } LayerWaypoints.This.init(); // provoke PutOnMap on layer's Paint() m_pictureManager.Refresh(); break; } } // actually read the file. If ZIP processor is there, it will read all enclosed .GPX files. WaypointsCache.resetBoundaries(); string formatName = FileImportForm.m_selectedFormat; //m_fileImportForm.detailComboBox.Text; string diag = "Selected format: " + formatName + sRepeatRead + "\n\n"; if(AllFormats.isTiffFile(filename)) { string[] fileNames = new string[] { filename }; bool anySuccess = FileAndZipIO.readFiles(fileNames); if(anySuccess) { elementCount = 1; elementName = "GeoTIFF image"; } } else { elementCount = 0; m_fileProcessor("", filename, filename); switch(mode) { case MODE_GPS: FileAndZipIO.processPhotoFolderByFile(filename, null); // use default photo files processor and read in parameters file break; } } if(elementCount > 0) { diag += "OK: read " + elementCount + " " + elementName + "." + "\n\nClick \"Next>>\" to see list of imported files"; m_fileImportForm.nextButton.Enabled = true; LibSys.StatusBar.Trace("OK: read file " + filename + " containing " + elementCount + " " + elementName + (repeatRead ? " (repeat read)" : "")); if(repeatRead) { ffdRepeat.isPersistent = m_fileImportForm.persistCheckBox.Checked; } else { FileInfo fi = new FileInfo(Project.GetLongPathName(m_fileImportForm.m_selectedFileName)); FormattedFileDescr fd = new FormattedFileDescr(fi.FullName, formatName, m_fileImportForm.persistCheckBox.Checked); Project.FileDescrListAdd(fd); } m_fileImportForm.diagLabel.ForeColor = Color.Black; switch(mode) { case MODE_GPS: Project.mainCommand.wptEnabled(true); WaypointsCache.RefreshWaypointsDisplayed(); if(doZoomIn) { m_pictureManager.CameraManager.zoomToCorners(); } Project.insertRecentFile(filename); break; case MODE_EQ: Project.mainCommand.eqEnabled(true); EarthquakesCache.RefreshEarthquakesDisplayed(); break; } LayerWaypoints.This.init(); // provoke PutOnMap on layer's Paint() m_pictureManager.Refresh(); } else { diag += "Error: the file seems to contain no " + elementName + ".\nIt is probably in other format than you have selected." + "\n\nClick \"<<Back\" to select another format"; m_fileImportForm.nextButton.Enabled = false; m_fileImportForm.diagLabel.ForeColor = Color.Red; LibSys.StatusBar.Error("the file " + filename + " seems to contain no " + elementName); } m_fileImportForm.diagLabel.Text = diag; Cursor.Current = Cursors.Default; }