using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Globalization; using GMap.NET; using GMap.NET.MapProviders; using GMap.NET.WindowsForms; using GMap.NET.WindowsForms.Markers; using GMap.NET.WindowsForms.ToolTips; using System.Configuration; using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.Win32; using AirScout.PlaneFeeds; using AirScout.Core; using AirScout.Aircrafts; using ScoutBase.Core; using ScoutBase.Stations; using ScoutBase.Elevation; using ScoutBase.Propagation; using ScoutBase.Maps; using ScoutBase; using Newtonsoft.Json; using static ScoutBase.Core.ZIP; using AirScout.PlaneFeeds.Plugin.MEFContract; using AirScout.CAT; using System.Reflection; namespace AirScout { public partial class OptionsDlg : Form { GMapOverlay Coveragepolygons = new GMapOverlay("Coveragepolygons"); GMapOverlay GLOBEpolygons = new GMapOverlay("GLOBEpolygons"); GMapOverlay SRTM3polygons = new GMapOverlay("SRTM3polygons"); GMapOverlay SRTM1polygons = new GMapOverlay("SRTM1polygons"); GMapOverlay ASTER3polygons = new GMapOverlay("ASTER3polygons"); GMapOverlay ASTER1polygons = new GMapOverlay("ASTER1polygons"); MapDlg ParentDlg; NumberFormatInfo ENprovider; private LocalObstructionDesignator LocalObstructions; private LogWriter Log = LogWriter.Instance; private bool LoadingTab = false; public OptionsDlg(MapDlg parentDlg) { InitializeComponent(); ParentDlg = parentDlg; // get an EN format provider ENprovider = new NumberFormatInfo(); ENprovider.NumberDecimalSeparator = "."; ENprovider.NumberGroupSeparator = ","; } private void OptionsDlg_Load(object sender, EventArgs e) { Log.WriteMessage("Loading."); // fill data grid with band settings dgv_BandSettings.DataSource = Properties.Settings.Default.Path_Band_Settings; dgv_BandSettings.Columns[0].Width = 45; dgv_BandSettings.Columns[0].HeaderText = "Band\n"; dgv_BandSettings.Columns[0].ToolTipText = "Band\n50M ... 76G"; dgv_BandSettings.Columns[0].ReadOnly = true; dgv_BandSettings.Columns[1].Width = 60; dgv_BandSettings.Columns[1].HeaderText = "K-Factor\n"; dgv_BandSettings.Columns[1].ToolTipText = "K-Factor\n1 ... 2 x Earth Radius\nDefault = 1.33"; dgv_BandSettings.Columns[2].Width = 70; dgv_BandSettings.Columns[2].HeaderText = "F1-Clearance\n"; dgv_BandSettings.Columns[2].ToolTipText = "Fresnel Zone Clearance\n0 ... 1 x Fresnel Zone F1\nDefault = 0.6"; dgv_BandSettings.Columns[3].Width = 105; dgv_BandSettings.Columns[3].HeaderText = "Ground Clearance [m]"; dgv_BandSettings.Columns[3].ToolTipText = "Additional Ground Clearance in m\nDefault = 0"; dgv_BandSettings.Columns[4].Width = 95; dgv_BandSettings.Columns[4].HeaderText = "Max. Distance [km]"; dgv_BandSettings.Columns[4].ToolTipText = "Max. Distance in km\nan aircraft is considered to be \"on the path\"\nDefault = 10"; dgv_BandSettings.Columns[5].Width = 80; dgv_BandSettings.Columns[5].HeaderText = "Max. Squint [deg]"; dgv_BandSettings.Columns[5].ToolTipText = "Max. Squint an asymmetric reflection can have"; dgv_BandSettings.Columns[6].Width = 95; dgv_BandSettings.Columns[6].HeaderText = "Max. Elevation [deg]"; dgv_BandSettings.Columns[6].ToolTipText = "Max. Elevation an aircraft can have to be inside the main lobe of antenna"; // set initial settings for CoverageMap gm_Options_Coverage.MapProvider = GMapProviders.Find(Properties.Settings.Default.Map_Provider); gm_Options_Coverage.IgnoreMarkerOnMouseWheel = true; gm_Options_Coverage.MinZoom = 0; gm_Options_Coverage.MaxZoom = 20; gm_Options_Coverage.Zoom = 6; gm_Options_Coverage.DragButton = System.Windows.Forms.MouseButtons.Left; gm_Options_Coverage.CanDragMap = true; gm_Options_Coverage.ScalePen = new Pen(Color.Black, 3); gm_Options_Coverage.HelperLinePen = null; gm_Options_Coverage.SelectionPen = null; gm_Options_Coverage.MapScaleInfoEnabled = true; gm_Options_Coverage.Overlays.Add(Coveragepolygons); // set initial settings for GLOBEMap gm_Options_GLOBE.MapProvider = GMapProviders.Find(Properties.Settings.Default.Map_Provider); gm_Options_GLOBE.IgnoreMarkerOnMouseWheel = true; gm_Options_GLOBE.MinZoom = 0; gm_Options_GLOBE.MaxZoom = 20; gm_Options_GLOBE.Zoom = 1; gm_Options_GLOBE.DragButton = System.Windows.Forms.MouseButtons.Left; gm_Options_GLOBE.CanDragMap = true; gm_Options_GLOBE.ScalePen = new Pen(Color.Black, 3); gm_Options_GLOBE.HelperLinePen = null; gm_Options_GLOBE.SelectionPen = null; gm_Options_GLOBE.MapScaleInfoEnabled = true; gm_Options_GLOBE.Overlays.Add(GLOBEpolygons); // set initial settings for SRTM3Map gm_Options_SRTM3.MapProvider = GMapProviders.Find(Properties.Settings.Default.Map_Provider); gm_Options_SRTM3.IgnoreMarkerOnMouseWheel = true; gm_Options_SRTM3.MinZoom = 0; gm_Options_SRTM3.MaxZoom = 20; gm_Options_SRTM3.Zoom = 6; gm_Options_SRTM3.DragButton = System.Windows.Forms.MouseButtons.Left; gm_Options_SRTM3.CanDragMap = true; gm_Options_SRTM3.ScalePen = new Pen(Color.Black, 3); gm_Options_SRTM3.HelperLinePen = null; gm_Options_SRTM3.SelectionPen = null; gm_Options_SRTM3.MapScaleInfoEnabled = true; gm_Options_SRTM3.Overlays.Add(SRTM3polygons); // set initial settings for SRTM1Map gm_Options_SRTM1.MapProvider = GMapProviders.Find(Properties.Settings.Default.Map_Provider); gm_Options_SRTM1.IgnoreMarkerOnMouseWheel = true; gm_Options_SRTM1.MinZoom = 0; gm_Options_SRTM1.MaxZoom = 20; gm_Options_SRTM1.Zoom = 6; gm_Options_SRTM1.DragButton = System.Windows.Forms.MouseButtons.Left; gm_Options_SRTM1.CanDragMap = true; gm_Options_SRTM1.ScalePen = new Pen(Color.Black, 3); gm_Options_SRTM1.HelperLinePen = null; gm_Options_SRTM1.SelectionPen = null; gm_Options_SRTM1.MapScaleInfoEnabled = true; gm_Options_SRTM1.Overlays.Add(SRTM1polygons); // set initial settings for ASTER3Map gm_Options_ASTER3.MapProvider = GMapProviders.Find(Properties.Settings.Default.Map_Provider); gm_Options_ASTER3.IgnoreMarkerOnMouseWheel = true; gm_Options_ASTER3.MinZoom = 0; gm_Options_ASTER3.MaxZoom = 20; gm_Options_ASTER3.Zoom = 6; gm_Options_ASTER3.DragButton = System.Windows.Forms.MouseButtons.Left; gm_Options_ASTER3.CanDragMap = true; gm_Options_ASTER3.ScalePen = new Pen(Color.Black, 3); gm_Options_ASTER3.HelperLinePen = null; gm_Options_ASTER3.SelectionPen = null; gm_Options_ASTER3.MapScaleInfoEnabled = true; gm_Options_ASTER3.Overlays.Add(ASTER3polygons); // set initial settings for ASTER1Map gm_Options_ASTER1.MapProvider = GMapProviders.Find(Properties.Settings.Default.Map_Provider); gm_Options_ASTER1.IgnoreMarkerOnMouseWheel = true; gm_Options_ASTER1.MinZoom = 0; gm_Options_ASTER1.MaxZoom = 20; gm_Options_ASTER1.Zoom = 6; gm_Options_ASTER1.DragButton = System.Windows.Forms.MouseButtons.Left; gm_Options_ASTER1.CanDragMap = true; gm_Options_ASTER1.ScalePen = new Pen(Color.Black, 3); gm_Options_ASTER1.HelperLinePen = null; gm_Options_ASTER1.SelectionPen = null; gm_Options_ASTER1.MapScaleInfoEnabled = true; gm_Options_ASTER1.Overlays.Add(ASTER1polygons); Log.WriteMessage("Finished."); } #region Helpers private bool IsInside(string loc, double lat, double lon) { string newloc = MaidenheadLocator.LocFromLatLon(lat, lon, false, loc.Length); if (loc.ToUpper().Trim() != newloc.ToUpper().Trim()) return false; return true; } private bool IsPrecise(string loc, double lat, double lon) { loc = loc.ToUpper(); double mlat = MaidenheadLocator.LatFromLoc(loc); double mlon = MaidenheadLocator.LonFromLoc(loc); string mloc = MaidenheadLocator.LocFromLatLon(lat, lon, false, loc.Length); if ((loc == mloc) && ((Math.Abs(mlat - lat) > 0.00001) || (mlon - lon) > 0.00001)) { return true; } return false; } private void Say(string text) { if (tsl_Options_Status.Text != text) { tsl_Options_Status.Text = text; } } private ELEVATIONMODEL GetElevationModel() { if (Properties.Settings.Default.Elevation_ASTER1_Enabled) return ELEVATIONMODEL.ASTER1; if (Properties.Settings.Default.Elevation_ASTER3_Enabled) return ELEVATIONMODEL.ASTER3; if (Properties.Settings.Default.Elevation_SRTM1_Enabled) return ELEVATIONMODEL.SRTM1; if (Properties.Settings.Default.Elevation_SRTM3_Enabled) return ELEVATIONMODEL.SRTM3; if (Properties.Settings.Default.Elevation_GLOBE_Enabled) return ELEVATIONMODEL.GLOBE; return ELEVATIONMODEL.NONE; } #endregion #region tab_Options_General private void tab_Options_General_Enter(object sender, EventArgs e) { tab_Options_General_Update(this, null); } private void tab_Options_General_Validating(object sender, CancelEventArgs e) { /* if (tb_Coverage_MaxLat.Value <= tb_Coverage_MinLat.Value) { MessageBox.Show("MaxLat must be greater than MinLat.", "Parameter Error"); e.Cancel = true; } if (tb_Coverage_MaxLon.Value <= tb_Coverage_MinLon.Value) { MessageBox.Show("MaxLon must be greater than MinLon.", "Parameter Error"); e.Cancel = true; } */ } private void tab_Options_General_Update(object sender, EventArgs e) { Coveragepolygons.Clear(); // check values if (double.IsNaN(tb_Coverage_MinLat.Value) || double.IsNaN(tb_Coverage_MaxLat.Value) || double.IsNaN(tb_Coverage_MinLon.Value) | double.IsNaN(tb_Coverage_MaxLon.Value)) return; // add tile to map polygons List l = new List(); l.Add(new PointLatLng(tb_Coverage_MinLat.Value, tb_Coverage_MinLon.Value)); l.Add(new PointLatLng(tb_Coverage_MinLat.Value, tb_Coverage_MaxLon.Value)); l.Add(new PointLatLng(tb_Coverage_MaxLat.Value, tb_Coverage_MaxLon.Value)); l.Add(new PointLatLng(tb_Coverage_MaxLat.Value, tb_Coverage_MinLon.Value)); GMapPolygon p = new GMapPolygon(l, "Coverage"); p.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3); p.Fill = new SolidBrush(Color.FromArgb(0, Color.Magenta)); Coveragepolygons.Polygons.Add(p); // zoom the map gm_Options_Coverage.SetZoomToFitRect(RectLatLng.FromLTRB(tb_Coverage_MinLon.Value - 1, tb_Coverage_MaxLat.Value + 1, tb_Coverage_MaxLon.Value + 1, tb_Coverage_MinLat.Value - 1)); } #endregion #region tab_Options_Database private string GetDatabaseDir(string dir) { if (dir.IndexOf(Path.DirectorySeparatorChar) == 0) return Path.GetFileName(dir); try { string databasedir = "..." + Path.DirectorySeparatorChar + dir.Split(Path.DirectorySeparatorChar).Reverse().Take(2).Aggregate((s1, s2) => s2 + Path.DirectorySeparatorChar + s1); return databasedir; } catch (Exception ex) { Log.WriteMessage(ex.ToString(), LogLevel.Error); } return Path.GetFileName(dir); } private void tab_Options_Database_Enter(object sender, EventArgs e) { lbl_Options_ScoutBase_Database_FileName.Text = GetDatabaseDir(StationData.Database.GetDBLocation()); tb_Options_ScoutBase_Database_FileSize.Text = StationData.Database.GetDBSize().ToString("F0"); lbl_Options_AirScout_Database_FileName.Text = GetDatabaseDir(AircraftData.Database.GetDBLocation()); tb_Options_AirScout_Database_FileSize.Text = AircraftData.Database.GetDBSize().ToString("F0"); lbl_Options_Propagation_GLOBE_Database_FileName.Text = GetDatabaseDir(PropagationData.Database.GetDBLocation(ELEVATIONMODEL.GLOBE)); tb_Options_Propagation_GLOBE_Database_FileSize.Text = PropagationData.Database.GetDBSize(ELEVATIONMODEL.GLOBE).ToString("F0"); lbl_Options_Propagation_SRTM3_Database_FileName.Text = GetDatabaseDir(PropagationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM3)); tb_Options_Propagation_SRTM3_Database_FileSize.Text = PropagationData.Database.GetDBSize(ELEVATIONMODEL.SRTM3).ToString("F0"); lbl_Options_Propagation_SRTM1_Database_FileName.Text = GetDatabaseDir(PropagationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM1)); tb_Options_Propagation_SRTM1_Database_FileSize.Text = PropagationData.Database.GetDBSize(ELEVATIONMODEL.SRTM1).ToString("F0"); lbl_Options_Elevation_GLOBE_Database_FileName.Text = GetDatabaseDir(ElevationData.Database.GetDBLocation(ELEVATIONMODEL.GLOBE)); tb_Options_Elevation_GLOBE_Database_FileSize.Text = ElevationData.Database.GetDBSize(ELEVATIONMODEL.GLOBE).ToString("F0"); lbl_Options_Elevation_SRTM3_Database_FileName.Text = GetDatabaseDir(ElevationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM3)); tb_Options_Elevation_SRTM3_Database_FileSize.Text = ElevationData.Database.GetDBSize(ELEVATIONMODEL.SRTM3).ToString("F0"); lbl_Options_Elevation_SRTM1_Database_FileName.Text = GetDatabaseDir(ElevationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM1)); tb_Options_Elevation_SRTM1_Database_FileSize.Text = ElevationData.Database.GetDBSize(ELEVATIONMODEL.SRTM1).ToString("F0"); lbl_Options_Map_Database_FileName.Text = GetDatabaseDir(MapData.Database.GetDBLocation()); tb_Options_Map_Database_FileSize.Text = MapData.Database.GetDBSize().ToString("F0"); tt_Options.SetToolTip(lbl_Options_ScoutBase_Database_FileName, StationData.Database.GetDBLocation() + "\n\n" + "Click here to open database location in Explorer window."); tt_Options.SetToolTip(lbl_Options_AirScout_Database_FileName, AircraftData.Database.GetDBLocation() + "\n\n" + "Click here to open database location in Explorer window."); tt_Options.SetToolTip(lbl_Options_Propagation_GLOBE_Database_FileName, PropagationData.Database.GetDBLocation(ELEVATIONMODEL.GLOBE) + "\n\n" + "Click here to open database location in Explorer window."); tt_Options.SetToolTip(lbl_Options_Propagation_SRTM3_Database_FileName, PropagationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM3) + "\n\n" + "Click here to open database location in Explorer window."); tt_Options.SetToolTip(lbl_Options_Propagation_SRTM1_Database_FileName, PropagationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM1) + "\n\n" + "Click here to open database location in Explorer window."); tt_Options.SetToolTip(lbl_Options_Elevation_GLOBE_Database_FileName, ElevationData.Database.GetDBLocation(ELEVATIONMODEL.GLOBE) + "\n\n" + "Click here to open database location in Explorer window."); tt_Options.SetToolTip(lbl_Options_Elevation_SRTM3_Database_FileName, ElevationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM3) + "\n\n" + "Click here to open database location in Explorer window."); tt_Options.SetToolTip(lbl_Options_Elevation_SRTM1_Database_FileName, ElevationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM1) + "\n\n" + "Click here to open database location in Explorer window."); tt_Options.SetToolTip(lbl_Options_Map_Database_FileName, MapData.Database.GetDBLocation() + "\n\n" + "Click here to open database location in Explorer window."); double total = StationData.Database.GetDBSize() + AircraftData.Database.GetDBSize() + PropagationData.Database.GetDBSize(ELEVATIONMODEL.GLOBE) + PropagationData.Database.GetDBSize(ELEVATIONMODEL.SRTM3) + PropagationData.Database.GetDBSize(ELEVATIONMODEL.SRTM1) + ElevationData.Database.GetDBSize(ELEVATIONMODEL.GLOBE) + ElevationData.Database.GetDBSize(ELEVATIONMODEL.SRTM3) + ElevationData.Database.GetDBSize(ELEVATIONMODEL.SRTM1) + MapData.Database.GetDBSize(); lbl_Options_Database_TotalSize.Text = total.ToString("F0"); rb_Options_Database_Update_Never.Checked = !Properties.Settings.Default.Background_Update_OnStartup && !Properties.Settings.Default.Background_Update_Periodically; rb_Options_Database_Update_OnStartup.Checked = Properties.Settings.Default.Background_Update_OnStartup; rb_Options_Database_Update_Periodically.Checked = Properties.Settings.Default.Background_Update_Periodically; ud_Options_Database_Update_Period.Enabled = Properties.Settings.Default.Background_Update_Periodically; } private void tab_Options_Database_Validating(object sender, CancelEventArgs e) { } private void rb_Options_Database_Update_Never_CheckedChanged(object sender, EventArgs e) { if (rb_Options_Database_Update_Never.Checked) { ud_Options_Database_Update_Period.Enabled = false; } } private void rb_Options_Database_Update_OnStartup_CheckedChanged(object sender, EventArgs e) { if (rb_Options_Database_Update_OnStartup.Checked) { Properties.Settings.Default.Background_Update_OnStartup = true; ud_Options_Database_Update_Period.Enabled = false; } else Properties.Settings.Default.Background_Update_OnStartup = false; } private void rb_Options_Database_Update_Periodically_CheckedChanged(object sender, EventArgs e) { if (rb_Options_Database_Update_Periodically.Checked) { Properties.Settings.Default.Background_Update_Periodically = true; ud_Options_Database_Update_Period.Enabled = true; } else Properties.Settings.Default.Background_Update_Periodically = false; } private void btn_Options_DeleteAllElevationPaths_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure to delete all precalculated elevation paths from database?", "Delete all elevation paths", MessageBoxButtons.YesNo) == DialogResult.Yes) { ElevationData.Database.ElevationPathDeleteAll(ELEVATIONMODEL.GLOBE); ElevationData.Database.ElevationPathDeleteAll(ELEVATIONMODEL.SRTM3); ElevationData.Database.ElevationPathDeleteAll(ELEVATIONMODEL.SRTM1); } } private void btn_Options_DeleteAllPropagationPaths_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure to delete all precalculated propagation paths from database?", "Delete all propagation paths", MessageBoxButtons.YesNo) == DialogResult.Yes) { PropagationData.Database.PropagationPathDeleteAll(ELEVATIONMODEL.GLOBE); PropagationData.Database.PropagationPathDeleteAll(ELEVATIONMODEL.SRTM3); PropagationData.Database.PropagationPathDeleteAll(ELEVATIONMODEL.SRTM1); } } private void btn_DeleteAllMapTiles_Click(object sender, EventArgs e) { MapData.Database.TileDeleteAll(); } private void btn_DeleteSingleStation_Click(object sender, EventArgs e) { DeleteSingleStationDlg Dlg = new DeleteSingleStationDlg(); Dlg.ShowDialog(); } private void btn_Options_ScoutBase_Database_Maintenance_Click(object sender, EventArgs e) { DatabaseMaintenanceDlg Dlg = new DatabaseMaintenanceDlg(StationData.Database); Dlg.ShowDialog(); } private void btn_Options_AirScout_Database_Maintenance_Click(object sender, EventArgs e) { DatabaseMaintenanceDlg Dlg = new DatabaseMaintenanceDlg(AircraftData.Database); Dlg.ShowDialog(); } private void btn_Options_Propagation_GLOBE_Database_Maintenance_Click(object sender, EventArgs e) { DatabaseMaintenanceDlg Dlg = new DatabaseMaintenanceDlg(PropagationData.Database, ELEVATIONMODEL.GLOBE); Dlg.ShowDialog(); } private void btn_Options_Propagation_SRTM3_Database_Maintenance_Click(object sender, EventArgs e) { DatabaseMaintenanceDlg Dlg = new DatabaseMaintenanceDlg(PropagationData.Database, ELEVATIONMODEL.SRTM3); Dlg.ShowDialog(); } private void btn_Options_Propagation_SRTM1_Database_Maintenance_Click(object sender, EventArgs e) { DatabaseMaintenanceDlg Dlg = new DatabaseMaintenanceDlg(PropagationData.Database, ELEVATIONMODEL.SRTM1); Dlg.ShowDialog(); } private void btn_Options_Elevation_GLOBE_Database_Maintenance_Click(object sender, EventArgs e) { DatabaseMaintenanceDlg Dlg = new DatabaseMaintenanceDlg(ElevationData.Database, ELEVATIONMODEL.GLOBE); Dlg.ShowDialog(); } private void btn_Options_Elevation_SRTM3_Database_Maintenance_Click(object sender, EventArgs e) { DatabaseMaintenanceDlg Dlg = new DatabaseMaintenanceDlg(ElevationData.Database, ELEVATIONMODEL.SRTM3); Dlg.ShowDialog(); } private void btn_Options_Elevation_SRTM1_Database_Maintenance_Click(object sender, EventArgs e) { DatabaseMaintenanceDlg Dlg = new DatabaseMaintenanceDlg(ElevationData.Database, ELEVATIONMODEL.SRTM1); Dlg.ShowDialog(); } private void lbl_Options_ScoutBase_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(StationData.Database.GetDBLocation())); } private void lbl_Options_AirScout_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(AircraftData.Database.GetDBLocation())); } private void lbl_Options_Propagation_GLOBE_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(PropagationData.Database.GetDBLocation(ELEVATIONMODEL.GLOBE))); } private void lbl_Options_Propagation_SRTM3_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(PropagationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM3))); } private void lbl_Options_Propagation_SRTM1_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(PropagationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM1))); } private void lbl_Options_Elevation_GLOBE_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(ElevationData.Database.GetDBLocation(ELEVATIONMODEL.GLOBE))); } private void lbl_Options_Elevation_SRTM3_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(ElevationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM3))); } private void lbl_Options_Elevation_SRTM1_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(ElevationData.Database.GetDBLocation(ELEVATIONMODEL.SRTM1))); } private void lbl_Options_Map_Database_FileName_Click(object sender, EventArgs e) { Process.Start(Path.GetDirectoryName(MapData.Database.GetDBLocation())); } #endregion #region tab_Options_Stations private void tab_Options_Stations_Enter(object sender, EventArgs e) { // initially set textboxes tb_Options_MyCall.SilentText = Properties.Settings.Default.MyCall; tb_Options_MyLat.SilentValue = (double)Properties.Settings.Default.MyLat; tb_Options_MyLon.SilentValue = (double)Properties.Settings.Default.MyLon; MyLocator_Set(Properties.Settings.Default.MyLat, Properties.Settings.Default.MyLon); tb_Options_MyElevation.Text = ParentDlg.GetElevation(tb_Options_MyLat.Value, tb_Options_MyLon.Value).ToString(); tb_Options_DXCall.SilentText = Properties.Settings.Default.DXCall; tb_Options_DXLat.SilentValue = Properties.Settings.Default.DXLat; tb_Options_DXLon.SilentValue = Properties.Settings.Default.DXLon; DXLocator_Set(Properties.Settings.Default.DXLat, Properties.Settings.Default.DXLon); tb_Options_DXElevation.Text = ParentDlg.GetElevation(tb_Options_DXLat.Value, tb_Options_DXLon.Value).ToString(); tb_Options_Band.Text = Bands.GetStringValue(Properties.Settings.Default.Band); MyQRV_Load(); DXQRV_Load(); MyLocation_Check(); DXLocation_Check(); } private void MyLocator_Set(double lat, double lon) { if (GeographicalPoint.Check(tb_Options_MyLat.Value, tb_Options_MyLon.Value)) { // colour Textbox if more precise lat/lon information is available if (MaidenheadLocator.IsPrecise(tb_Options_MyLat.Value, tb_Options_MyLon.Value, 3)) { tb_Options_MyLoc.SilentText = MaidenheadLocator.LocFromLatLon(lat, lon, Properties.Settings.Default.Locator_SmallLettersForSubsquares, (int)Properties.Settings.Default.Locator_MaxLength / 2); if (tb_Options_MyLoc.BackColor != Color.PaleGreen) tb_Options_MyLoc.BackColor = Color.PaleGreen; } else { tb_Options_MyLoc.SilentText = MaidenheadLocator.LocFromLatLon(lat, lon, Properties.Settings.Default.Locator_SmallLettersForSubsquares, 3); if (tb_Options_MyLoc.BackColor != Color.FloralWhite) tb_Options_MyLoc.BackColor = Color.FloralWhite; } } else { tb_Options_MyLoc.SilentText = ""; if (tb_Options_MyLoc.BackColor != Color.FloralWhite) tb_Options_MyLoc.BackColor = Color.FloralWhite; } } private void tb_Options_MyCall_TextChanged(object sender, EventArgs e) { // try to find callsign in database LocationDesignator ld = StationData.Database.LocationFind(tb_Options_MyCall.Text); if (ld != null) { // update location info tb_Options_MyLat.SilentValue = ld.Lat; tb_Options_MyLon.SilentValue = ld.Lon; MyLocator_Set(tb_Options_MyLat.Value, tb_Options_MyLon.Value); tb_Options_DXElevation.Text = ParentDlg.GetElevation(tb_Options_DXLat.Value, tb_Options_DXLon.Value).ToString("F0"); // update QRV info MyQRV_Load(); return; } else { MyLocation_Clear(); MyQRV_Clear(); } MyLocation_Check(); } private void tb_Options_MyLat_TextChanged(object sender, EventArgs e) { MyLocator_Set(tb_Options_MyLat.Value, tb_Options_MyLon.Value); tb_Options_DXElevation.Text = ParentDlg.GetElevation(tb_Options_DXLat.Value, tb_Options_DXLon.Value).ToString("F0"); } private void tb_Options_MyLon_TextChanged(object sender, EventArgs e) { MyLocator_Set(tb_Options_MyLat.Value, tb_Options_MyLon.Value); tb_Options_DXElevation.Text = ParentDlg.GetElevation(tb_Options_DXLat.Value, tb_Options_DXLon.Value).ToString("F0"); } private void tb_Options_MyLoc_TextChanged(object sender, EventArgs e) { // update lat/lon double mlat, mlon; if (tb_Options_MyLoc.Focused) { // locator box is focused --> update lat/lon if (MaidenheadLocator.Check(tb_Options_MyLoc.Text) && tb_Options_MyLoc.Text.Length >= 6) { // colour Textbox if more precise lat/lon information is available if (MaidenheadLocator.IsPrecise(tb_Options_DXLat.Value, tb_Options_DXLon.Value, 3)) { if (tb_Options_DXLoc.BackColor != Color.PaleGreen) tb_Options_DXLoc.BackColor = Color.PaleGreen; } else { if (tb_Options_DXLoc.BackColor != Color.FloralWhite) tb_Options_DXLoc.BackColor = Color.FloralWhite; } MaidenheadLocator.LatLonFromLoc(tb_Options_MyLoc.Text, PositionInRectangle.MiddleMiddle, out mlat, out mlon); tb_Options_MyLat.SilentValue = mlat; tb_Options_MyLon.SilentValue = mlon; tb_Options_MyElevation.Text = ParentDlg.GetElevation(tb_Options_MyLat.Value, tb_Options_MyLon.Value).ToString("F0"); // update QRV info MyQRV_Load(); } else { tb_Options_MyLat.SilentValue = double.NaN; tb_Options_MyLon.SilentValue = double.NaN; MyQRV_Clear(); } } } private void btn_MyCall_QRZ_Click(object sender, EventArgs e) { try { WebRequest myWebRequest = WebRequest.Create(Properties.Settings.Default.QRZ_URL_Database + Properties.Settings.Default.MyCall); myWebRequest.Timeout = 10000; WebResponse myWebResponse = myWebRequest.GetResponse(); Stream ReceiveStream = myWebResponse.GetResponseStream(); Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); StreamReader readStream = new StreamReader(ReceiveStream, encode); string s = readStream.ReadToEnd(); if (s.IndexOf("cs_lat") >= 0) { string loc; double lat = 0; double lon = 0; try { s = s.Remove(0, s.IndexOf("cs_lat = \"") + 10); lat = System.Convert.ToDouble(s.Substring(0, s.IndexOf("\n") - 2), ENprovider); s = s.Remove(0, s.IndexOf("cs_lon = \"") + 10); lon = System.Convert.ToDouble(s.Substring(0, s.IndexOf("\n") - 2), ENprovider); } catch { } loc = MaidenheadLocator.LocFromLatLon(lat, lon, false, 3); // check if loc is matching --> refine lat/lon if ((tb_Options_MyLoc.Text.Length >= 6) && (loc == MaidenheadLocator.Convert(tb_Options_MyLoc.Text, false).Substring(0, 6))) { Properties.Settings.Default["MyLat"] = lat; Properties.Settings.Default.MyLon = lon; tb_Options_MyLat.Text = Properties.Settings.Default.MyLat.ToString("F8", ENprovider); tb_Options_MyLon.Text = Properties.Settings.Default.MyLon.ToString("F8", ENprovider); MessageBox.Show("Position update from QRZ.com was performed succesfully.", "QRZ.com"); return; } } } catch { } MessageBox.Show("Position query at QRZ.com failed or does not match with current locator. \nNo update was performed.", "QRZ.com"); } private void btn_Options_MyHorizon_Click(object sender, EventArgs e) { if (!MyLocation_Check()) return; HorizonDlg Dlg = new HorizonDlg(tb_Options_MyCall.Text, tb_Options_MyLat.Value, tb_Options_MyLon.Value, LocalObstructions); if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // do nothing } } private void DXLocator_Set(double lat, double lon) { if (GeographicalPoint.Check(tb_Options_DXLat.Value, tb_Options_DXLon.Value)) { // colour Textbox if more precise lat/lon information is available if (MaidenheadLocator.IsPrecise(tb_Options_DXLat.Value, tb_Options_DXLon.Value, 3)) { tb_Options_DXLoc.SilentText = MaidenheadLocator.LocFromLatLon(lat, lon, Properties.Settings.Default.Locator_SmallLettersForSubsquares, (int)Properties.Settings.Default.Locator_MaxLength / 2); if (tb_Options_DXLoc.BackColor != Color.PaleGreen) tb_Options_DXLoc.BackColor = Color.PaleGreen; } else { tb_Options_DXLoc.SilentText = MaidenheadLocator.LocFromLatLon(lat, lon, Properties.Settings.Default.Locator_SmallLettersForSubsquares, 3); if (tb_Options_DXLoc.BackColor != Color.FloralWhite) tb_Options_DXLoc.BackColor = Color.FloralWhite; } } else { tb_Options_DXLoc.SilentText = ""; if (tb_Options_DXLoc.BackColor != Color.FloralWhite) tb_Options_DXLoc.BackColor = Color.FloralWhite; } } private void tb_Options_DXCall_TextChanged(object sender, EventArgs e) { // try to find callsign in database LocationDesignator ld = StationData.Database.LocationFind(tb_Options_DXCall.Text); if (ld != null) { // update location info tb_Options_DXLat.SilentValue = ld.Lat; tb_Options_DXLon.SilentValue = ld.Lon; DXLocator_Set(tb_Options_DXLat.Value, tb_Options_DXLon.Value); tb_Options_DXElevation.Text = ParentDlg.GetElevation(tb_Options_DXLat.Value, tb_Options_DXLon.Value).ToString("F0"); // update QRV info DXQRV_Load(); return; } else { DXLocation_Clear(); DXQRV_Clear(); } DXLocation_Check(); } private void tb_Options_DXLat_TextChanged(object sender, EventArgs e) { DXLocator_Set(tb_Options_DXLat.Value, tb_Options_DXLon.Value); tb_Options_DXElevation.Text = ParentDlg.GetElevation(tb_Options_DXLat.Value, tb_Options_DXLon.Value).ToString("F0"); } private void tb_Options_DXLon_TextChanged(object sender, EventArgs e) { DXLocator_Set(tb_Options_DXLat.Value, tb_Options_DXLon.Value); tb_Options_DXElevation.Text = ParentDlg.GetElevation(tb_Options_DXLat.Value, tb_Options_DXLon.Value).ToString("F0"); } private void tb_Options_DXLoc_TextChanged(object sender, EventArgs e) { // update lat/lon double mlat, mlon; if (tb_Options_DXLoc.Focused) { // locator box is focused --> update lat/lon if (MaidenheadLocator.Check(tb_Options_DXLoc.Text) && tb_Options_DXLoc.Text.Length >= 6) { // colour Textbox if more precise lat/lon information is available if (MaidenheadLocator.IsPrecise(tb_Options_DXLat.Value, tb_Options_DXLon.Value, 3)) { if (tb_Options_DXLoc.BackColor != Color.PaleGreen) tb_Options_DXLoc.BackColor = Color.PaleGreen; } else { if (tb_Options_DXLoc.BackColor != Color.FloralWhite) tb_Options_DXLoc.BackColor = Color.FloralWhite; } MaidenheadLocator.LatLonFromLoc(tb_Options_DXLoc.Text, PositionInRectangle.MiddleMiddle, out mlat, out mlon); tb_Options_DXLat.SilentValue = mlat; tb_Options_DXLon.SilentValue = mlon; tb_Options_DXElevation.Text = ParentDlg.GetElevation(tb_Options_DXLat.Value, tb_Options_DXLon.Value).ToString("F0"); // update QRV info DXQRV_Load(); } else { tb_Options_DXLat.SilentValue = double.NaN; tb_Options_DXLon.SilentValue = double.NaN; DXQRV_Clear(); } } } private void btn_DXCall_QRZ_Click(object sender, EventArgs e) { try { WebRequest DXWebRequest = WebRequest.Create(Properties.Settings.Default.QRZ_URL_Database + Properties.Settings.Default.DXCall); DXWebRequest.Timeout = 10000; WebResponse DXWebResponse = DXWebRequest.GetResponse(); Stream ReceiveStream = DXWebResponse.GetResponseStream(); Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); StreamReader readStream = new StreamReader(ReceiveStream, encode); string s = readStream.ReadToEnd(); if (s.IndexOf("cs_lat") >= 0) { string loc; double lat = 0; double lon = 0; try { s = s.Remove(0, s.IndexOf("cs_lat = \"") + 10); lat = System.Convert.ToDouble(s.Substring(0, s.IndexOf("\n") - 2), ENprovider); s = s.Remove(0, s.IndexOf("cs_lon = \"") + 10); lon = System.Convert.ToDouble(s.Substring(0, s.IndexOf("\n") - 2), ENprovider); } catch { } loc = MaidenheadLocator.LocFromLatLon(lat, lon, false, 3); // check if loc is matching --> refine lat/lon if ((tb_Options_DXLoc.Text.Length >= 6) && (loc == MaidenheadLocator.Convert(tb_Options_DXLoc.Text, false).Substring(0, 6))) { Properties.Settings.Default["DXLat"] = lat; Properties.Settings.Default.DXLon = lon; tb_Options_DXLat.Text = Properties.Settings.Default.DXLat.ToString("F8", ENprovider); tb_Options_DXLon.Text = Properties.Settings.Default.DXLon.ToString("F8", ENprovider); MessageBox.Show("Position update from QRZ.com was performed succesfully.", "QRZ.com"); return; } } } catch { } MessageBox.Show("Position query at QRZ.com failed or does not match with current locator. \nNo update was performed.", "QRZ.com"); } private void btn_Options_DXHorizon_Click(object sender, EventArgs e) { if (!DXLocation_Check()) return; HorizonDlg Dlg = new HorizonDlg(tb_Options_DXCall.Text, tb_Options_DXLat.Value, tb_Options_DXLon.Value, null); if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // do nothing } } private void cb_Options_SmallLettersForSubSquares_CheckedChanged(object sender, EventArgs e) { Properties.Settings.Default.Locator_SmallLettersForSubsquares = cb_Options_SmallLettersForSubSquares.Checked; // refresh layout tab_Options_Stations_Enter(this, null); } private void tab_Options_Stations_Validating(object sender, CancelEventArgs e) { // validates station details // enables leaving tab if (!MyLocation_Check() || !MyQRV_Check() || !DXLocation_Check() || !DXQRV_Check()) e.Cancel = true; } private void btn_Options_BandDown_Click(object sender, EventArgs e) { if (MyQRV_Check()) MyQRV_Save(); if (DXQRV_Check()) DXQRV_Save(); if (MyLocation_Check() && DXLocation_Check()) { Properties.Settings.Default.Band = Bands.Previous(Properties.Settings.Default.Band); tb_Options_Band.Text = Bands.GetStringValue(Properties.Settings.Default.Band); MyQRV_Load(); DXQRV_Load(); } } private void btn_Options_BandUp_Click(object sender, EventArgs e) { if (MyQRV_Check()) MyQRV_Save(); if (DXQRV_Check()) DXQRV_Save(); if (MyLocation_Check() && DXLocation_Check()) { Properties.Settings.Default.Band = Bands.Next(Properties.Settings.Default.Band); tb_Options_Band.Text = Bands.GetStringValue(Properties.Settings.Default.Band); MyQRV_Load(); DXQRV_Load(); } } private void MyLocation_Clear() { tb_Options_MyLoc.SilentText = ""; tb_Options_MyLat.SilentText = ""; tb_Options_MyLon.SilentText = ""; tb_Options_MyElevation.Text = ""; if (tb_Options_MyLoc.BackColor != Color.FloralWhite) tb_Options_MyLoc.BackColor = Color.FloralWhite; } private void DXLocation_Clear() { tb_Options_DXLoc.SilentText = ""; tb_Options_DXLat.SilentText = ""; tb_Options_DXLon.SilentText = ""; tb_Options_DXElevation.Text = ""; if (tb_Options_DXLoc.BackColor != Color.FloralWhite) tb_Options_DXLoc.BackColor = Color.FloralWhite; } private bool MyLocation_Check() { // check all values if (Callsign.Check(tb_Options_MyCall.Text) && MaidenheadLocator.Check(tb_Options_MyLoc.Text) && GeographicalPoint.Check(tb_Options_MyLat.Value, tb_Options_MyLon.Value) && MyQRV_Check()) { // check for local obstructions LocalObstructions = ElevationData.Database.LocalObstructionFind(Properties.Settings.Default.MyLat, Properties.Settings.Default.MyLon, Properties.Settings.Default.ElevationModel); if (LocalObstructions != null) lbl_Options_LocalObstructions.Text = "Local Obstruction found for this location."; else lbl_Options_LocalObstructions.Text = "Local Obstruction not found for this location."; return true; } return false; } private bool DXLocation_Check() { // check all values if (Callsign.Check(tb_Options_DXCall.Text) && MaidenheadLocator.Check(tb_Options_DXLoc.Text) && GeographicalPoint.Check(tb_Options_DXLat.Value, tb_Options_DXLon.Value) && DXQRV_Check()) { return true; } return false; } private void MyLocation_Save() { // save location to settings && database if (MyLocation_Check()) { Properties.Settings.Default.MyCall = tb_Options_MyCall.Text; Properties.Settings.Default.MyLat = tb_Options_MyLat.Value; Properties.Settings.Default.MyLon = tb_Options_MyLon.Value; // find entry in database LocationDesignator ld = StationData.Database.LocationFind(tb_Options_MyCall.Text, MaidenheadLocator.LocFromLatLon(tb_Options_MyLat.Value, tb_Options_MyLon.Value, false, 3)); // update if not found or different values if ((ld == null) || (ld.Lat != tb_Options_MyLat.Value) || (ld.Lon != tb_Options_MyLon.Value)) StationData.Database.LocationInsertOrUpdateIfNewer(new LocationDesignator(tb_Options_MyCall.Text, tb_Options_MyLat.Value, tb_Options_MyLon.Value, (MaidenheadLocator.IsPrecise(tb_Options_MyLat.Value, tb_Options_MyLon.Value, 3) ? GEOSOURCE.FROMUSER : GEOSOURCE.FROMLOC))); } } private void DXLocation_Save() { // save location to settings && database if (DXLocation_Check()) { Properties.Settings.Default.DXCall = tb_Options_DXCall.Text; Properties.Settings.Default.DXLat = tb_Options_DXLat.Value; Properties.Settings.Default.DXLon = tb_Options_DXLon.Value; // find entry in database LocationDesignator ld = StationData.Database.LocationFind(tb_Options_DXCall.Text, MaidenheadLocator.LocFromLatLon(tb_Options_DXLat.Value, tb_Options_DXLon.Value, false, 3)); // update if not found or different values if ((ld == null) || (ld.Lat != tb_Options_DXLat.Value) || (ld.Lon != tb_Options_DXLon.Value)) StationData.Database.LocationInsertOrUpdateIfNewer(new LocationDesignator(tb_Options_DXCall.Text, tb_Options_DXLat.Value, tb_Options_DXLon.Value, (MaidenheadLocator.IsPrecise(tb_Options_DXLat.Value, tb_Options_DXLon.Value, 3) ? GEOSOURCE.FROMUSER : GEOSOURCE.FROMLOC))); } } private void btn_Options_MyUpdate_Click(object sender, EventArgs e) { if (MyLocation_Check() && MyQRV_Check()) { StationDataUpdaterDoWorkEventArgs args = new StationDataUpdaterDoWorkEventArgs(); args.ld = StationData.Database.LocationFind(tb_Options_MyCall.Text, MaidenheadLocator.LocFromLatLon(tb_Options_MyLat.Value, tb_Options_MyLon.Value, false, 3)); args.qrvs = StationData.Database.QRVFind(tb_Options_MyCall.Text, MaidenheadLocator.LocFromLatLon(tb_Options_MyLat.Value, tb_Options_MyLon.Value, false, 3)); bw_StationDataUpdater.RunWorkerAsync(args); } } private void btn_Options_DXUpdate_Click(object sender, EventArgs e) { if (DXLocation_Check() && DXQRV_Check()) { StationDataUpdaterDoWorkEventArgs args = new StationDataUpdaterDoWorkEventArgs(); args.ld = StationData.Database.LocationFind(tb_Options_DXCall.Text, MaidenheadLocator.LocFromLatLon(tb_Options_DXLat.Value, tb_Options_DXLon.Value, false, 3)); args.qrvs = StationData.Database.QRVFind(tb_Options_DXCall.Text, MaidenheadLocator.LocFromLatLon(tb_Options_DXLat.Value, tb_Options_DXLon.Value, false, 3)); bw_StationDataUpdater.RunWorkerAsync(args); } } private bool MyQRV_Check() { if (double.IsNaN(tb_Options_MyAntennaHeight.Value) & double.IsNaN(tb_Options_MyAntennaGain.Value) & double.IsNaN(tb_Options_MyPower.Value)) return true; if (!double.IsNaN(tb_Options_MyAntennaHeight.Value) & !double.IsNaN(tb_Options_MyAntennaGain.Value) & !double.IsNaN(tb_Options_MyPower.Value)) return true; MessageBox.Show("The QRV information you entered is incorrect.\n The fields \"Antenna Heigth\", \"Antenna Gain\" and \"Power\" must either be all filled or all left empty.\nPlease use one of the following options:\n\n<>0 : station is QRV and value is known\n=0 : Station is QRV and value is not konwn\nEmpty: Station is not QRV", "QRV Information incorrect"); return false; } private bool DXQRV_Check() { if (double.IsNaN(tb_Options_DXAntennaHeight.Value) & double.IsNaN(tb_Options_DXAntennaGain.Value) & double.IsNaN(tb_Options_DXPower.Value)) return true; if (!double.IsNaN(tb_Options_DXAntennaHeight.Value) & !double.IsNaN(tb_Options_DXAntennaGain.Value) & !double.IsNaN(tb_Options_DXPower.Value)) return true; MessageBox.Show("The QRV information you entered is incorrect.\n The fields \"Antenna Heigth\", \"Antenna Gain\" and \"Power\" must either be all filled or all left empty.\nPlease use one of the following options:\n\n<>0 : station is QRV and value is known\n=0 : Station is QRV and value is not konwn\nEmpty: Station is not QRV", "QRV Information incorrect"); return false; } private void MyQRV_Clear() { tb_Options_MyAntennaHeight.Text = ""; tb_Options_MyAntennaGain.Text = ""; tb_Options_MyPower.Text = ""; lbl_Options_MyLastUpdated.Text = ""; } private void DXQRV_Clear() { tb_Options_DXAntennaHeight.Text = ""; tb_Options_DXAntennaGain.Text = ""; tb_Options_DXPower.Text = ""; lbl_Options_DXLastUpdated.Text = ""; } private void MyQRV_Load() { if (!Callsign.Check(tb_Options_MyCall.Text) || !MaidenheadLocator.Check(tb_Options_MyLoc.Text)) return; if (tb_Options_MyLoc.Text.Length < 6) return; QRVDesignator qrv = StationData.Database.QRVFind(tb_Options_MyCall.Text, tb_Options_MyLoc.Text, Properties.Settings.Default.Band); if (qrv != null) { tb_Options_MyAntennaHeight.Value = qrv.AntennaHeight; tb_Options_MyAntennaGain.Value = qrv.AntennaGain; tb_Options_MyPower.Value = qrv.Power; lbl_Options_MyLastUpdated.Text = qrv.LastUpdated.ToString("yyyy-MM-dd HH:mm:ss"); } else { tb_Options_MyAntennaHeight.Value = double.NaN; tb_Options_MyAntennaGain.Value = double.NaN; tb_Options_MyPower.Value = double.NaN; lbl_Options_MyLastUpdated.Text = ""; } } private void DXQRV_Load() { if (!Callsign.Check(tb_Options_DXCall.Text) || !MaidenheadLocator.Check(tb_Options_DXLoc.Text)) return; if (tb_Options_DXLoc.Text.Length < 6) return; QRVDesignator qrv = StationData.Database.QRVFind(tb_Options_DXCall.Text, tb_Options_DXLoc.Text, Properties.Settings.Default.Band); if (qrv != null) { tb_Options_DXAntennaHeight.Value = qrv.AntennaHeight; tb_Options_DXAntennaGain.Value = qrv.AntennaGain; tb_Options_DXPower.Value = qrv.Power; lbl_Options_DXLastUpdated.Text = qrv.LastUpdated.ToString("yyyy-MM-dd HH:mm:ss"); } else { tb_Options_DXAntennaHeight.Value = double.NaN; tb_Options_DXAntennaGain.Value = double.NaN; tb_Options_DXPower.Value = double.NaN; lbl_Options_DXLastUpdated.Text = ""; } } private void MyQRV_Save() { if (MyQRV_Check()) { QRVDesignator qrv = StationData.Database.QRVFind(tb_Options_MyCall.Text, tb_Options_MyLoc.Text, Properties.Settings.Default.Band); if (double.IsNaN(tb_Options_MyAntennaHeight.Value) && double.IsNaN(tb_Options_MyAntennaGain.Value) && double.IsNaN(tb_Options_MyPower.Value)) { if (qrv != null) StationData.Database.QRVDelete(qrv); } else { if ((qrv == null) || (qrv.AntennaHeight != tb_Options_MyAntennaHeight.Value) || (qrv.AntennaGain != tb_Options_MyAntennaGain.Value) || (qrv.Power != tb_Options_MyPower.Value)) { qrv = new QRVDesignator(tb_Options_MyCall.Text, tb_Options_MyLoc.Text, Properties.Settings.Default.Band, tb_Options_MyAntennaHeight.Value, tb_Options_MyAntennaGain.Value, tb_Options_MyPower.Value); StationData.Database.QRVInsertOrUpdateIfNewer(qrv); } } } } private void DXQRV_Save() { if (DXQRV_Check()) { QRVDesignator qrv = StationData.Database.QRVFind(tb_Options_DXCall.Text, tb_Options_DXLoc.Text, Properties.Settings.Default.Band); if (double.IsNaN(tb_Options_DXAntennaHeight.Value) && double.IsNaN(tb_Options_DXAntennaGain.Value) && double.IsNaN(tb_Options_DXPower.Value)) { if (qrv != null) StationData.Database.QRVDelete(qrv); } else { if ((qrv == null) || (qrv.AntennaHeight != tb_Options_DXAntennaHeight.Value) || (qrv.AntennaGain != tb_Options_DXAntennaGain.Value) || (qrv.Power != tb_Options_DXPower.Value)) { qrv = new QRVDesignator(tb_Options_DXCall.Text, tb_Options_DXLoc.Text, Properties.Settings.Default.Band, tb_Options_DXAntennaHeight.Value, tb_Options_DXAntennaGain.Value, tb_Options_DXPower.Value); StationData.Database.QRVInsertOrUpdateIfNewer(qrv); } } } } private void btn_Options_MyMap_Click(object sender, EventArgs e) { if (Callsign.Check(tb_Options_MyCall.Text) && MaidenheadLocator.Check(tb_Options_MyLoc.Text)) { LocationDesignator ld = new LocationDesignator(tb_Options_MyCall.Text, tb_Options_MyLoc.Text); MapStationDlg Dlg = new MapStationDlg(ld); if (Dlg.ShowDialog() == DialogResult.OK) { StationData.Database.LocationInsertOrUpdateIfNewer(Dlg.StationLocation); tb_Options_MyLat.SilentValue = Dlg.StationLocation.Lat; tb_Options_MyLon.SilentValue = Dlg.StationLocation.Lon; MyLocator_Set(tb_Options_MyLat.Value, tb_Options_MyLon.Value); } } } private void btn_Options_DXMap_Click(object sender, EventArgs e) { if (Callsign.Check(tb_Options_DXCall.Text) && MaidenheadLocator.Check(tb_Options_DXLoc.Text)) { LocationDesignator ld = new LocationDesignator(tb_Options_DXCall.Text, tb_Options_DXLoc.Text); MapStationDlg Dlg = new MapStationDlg(ld); if (Dlg.ShowDialog() == DialogResult.OK) { StationData.Database.LocationInsertOrUpdateIfNewer(Dlg.StationLocation); tb_Options_DXLat.SilentValue = Dlg.StationLocation.Lat; tb_Options_DXLon.SilentValue = Dlg.StationLocation.Lon; DXLocator_Set(tb_Options_DXLat.Value, tb_Options_DXLon.Value); } } } private void btn_Options_LocalObstructions_Click(object sender, EventArgs e) { try { LocalObstructions = ElevationData.Database.LocalObstructionFindOrCreateDefault(Properties.Settings.Default.MyLat, Properties.Settings.Default.MyLon, Properties.Settings.Default.ElevationModel); LocalObstructionsDlg Dlg = new LocalObstructionsDlg(LocalObstructions); if (Dlg.ShowDialog() == DialogResult.OK) { // create new local obstructions object and save it to database LocalObstructions = new LocalObstructionDesignator(Properties.Settings.Default.MyLat, Properties.Settings.Default.MyLon, Dlg.LocalObstructions); ElevationData.Database.LocalObstructionInsertOrUpdateIfNewer(LocalObstructions, Properties.Settings.Default.ElevationModel); } } catch (Exception ex) { Log.WriteMessage(ex.ToString(), LogLevel.Error); } } private void tab_Options_Stations_Leave(object sender, EventArgs e) { MyLocation_Save(); MyQRV_Save(); DXLocation_Save(); DXQRV_Save(); } #endregion #region tab_Options_Map private void tab_Options_Map_Enter(object sender, EventArgs e) { // populate the list of providers depending on user acception cb_Options_Map_Provider.DataSource = null; cb_Options_Map_Provider.Items.Clear(); if (!String.IsNullOrEmpty(Properties.Settings.Default.Map_Provider_Accepted)) { // get a full list of all map providers cb_Options_Map_Provider.ValueMember = "Name"; cb_Options_Map_Provider.DataSource = GMapProviders.List; } else { cb_Options_Map_Provider.Items.Add(GMapProviders.Find("None")); cb_Options_Map_Provider.Items.Add(GMapProviders.Find("OpenStreetMap")); } cb_Options_Map_Provider.SelectedItem = GMapProviders.Find(Properties.Settings.Default.Map_Provider); // populate color picker dropdwon foreach(var colorValue in Enum.GetValues(typeof(KnownColor))) { cb_Options_Gauges_ForeColor.Items.Add(Color.FromKnownColor((KnownColor)colorValue)); } // select Color from Properties try { cb_Options_Gauges_ForeColor.SelectedItem = Color.FromName(Properties.Settings.Default.Map_TrackingGaugeColor); } catch (Exception ex) { } cb_Options_Gauges_ForeColor.MaxDropDownItems = 10; cb_Options_Gauges_ForeColor.IntegralHeight = false; cb_Options_Gauges_ForeColor.DrawMode = DrawMode.OwnerDrawFixed; cb_Options_Gauges_ForeColor.DropDownStyle = ComboBoxStyle.DropDownList; cb_Options_Gauges_ForeColor.DrawItem += cb_Options_Gauges_ForeColor_DrawItem; } private void tab_Options_Map_Validating(object sender, CancelEventArgs e) { // save map provider if (cb_Options_Map_Provider.SelectedItem != null) { Properties.Settings.Default.Map_Provider = cb_Options_Map_Provider.SelectedItem.ToString(); } } private void cb_Options_Map_Provider_DropDown(object sender, EventArgs e) { // show the MapProviderAcceptDlg on first run if (String.IsNullOrEmpty(Properties.Settings.Default.Map_Provider_Accepted)) { MapProviderDlg Dlg = new MapProviderDlg(); if (Dlg.ShowDialog() == DialogResult.OK) { // making a unique ID for confirmation string ID = ""; try { ID = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "ProductId", ""); } catch { ID = "Key not found!"; } ID = ID + "," + DateTime.UtcNow.ToString("u"); ID = ID + "," + System.Security.Principal.WindowsIdentity.GetCurrent().Name; Properties.Settings.Default.Map_Provider_Accepted = ID; Properties.Settings.Default.Map_Provider_Accepted = ID; // get a full list of all map providers cb_Options_Map_Provider.DataSource = null; cb_Options_Map_Provider.Items.Clear(); cb_Options_Map_Provider.ValueMember = "Name"; cb_Options_Map_Provider.DataSource = GMapProviders.List; } else { Properties.Settings.Default.Map_Provider_Accepted = ""; Properties.Settings.Default.Map_Provider_Accepted = ""; } } } private void btn_Options_SelectFont_Click(object sender, EventArgs e) { try { FontDialog Dlg = new FontDialog(); string[] a = Properties.Settings.Default.Map_ToolTipFont.Split(';'); string fontfamily = a[0].Trim(); float emsize = 0; float.TryParse(a[1].Trim(), NumberStyles.Float, ENprovider, out emsize); FontStyle fontstyle = 0; // check if any additional font style is given if (a.Length > 2) { if (a[2].ToUpper().IndexOf("BOLD") >= 0) fontstyle = fontstyle | FontStyle.Bold; if (a[2].ToUpper().IndexOf("ITALIC") >= 0) fontstyle = fontstyle | FontStyle.Italic; if (a[2].ToUpper().IndexOf("UNDERLINE") >= 0) fontstyle = fontstyle | FontStyle.Underline; if (a[2].ToUpper().IndexOf("STRIKEOUT") >= 0) fontstyle = fontstyle | FontStyle.Strikeout; } else { fontstyle = FontStyle.Regular; } Dlg.Font = new Font(fontfamily, emsize, fontstyle, GraphicsUnit.Point); if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string font = Dlg.Font.FontFamily.Name + ";" + Dlg.Font.Size.ToString(ENprovider); string style = Dlg.Font.Style.ToString(); if (style != "Regular") font = font + ";style=" + style; tb_Options_Map_ToolTipFont.Text = font; Properties.Settings.Default.Map_ToolTipFont = font; } } catch { Properties.Settings.Default.Map_ToolTipFont = "Microsoft Sans Serif;14;style=Bold"; } } private void cb_Options_Gauges_ForeColor_DrawItem(object sender, DrawItemEventArgs e) { e.DrawBackground(); if (e.Index >= 0) { var txt = cb_Options_Gauges_ForeColor.GetItemText(cb_Options_Gauges_ForeColor.Items[e.Index]); var color = (Color)cb_Options_Gauges_ForeColor.Items[e.Index]; var r1 = new Rectangle(e.Bounds.Left + 1, e.Bounds.Top + 1, 2 * (e.Bounds.Height - 2), e.Bounds.Height - 2); var r2 = Rectangle.FromLTRB(r1.Right + 2, e.Bounds.Top, e.Bounds.Right, e.Bounds.Bottom); using (var b = new SolidBrush(color)) e.Graphics.FillRectangle(b, r1); e.Graphics.DrawRectangle(Pens.Black, r1); TextRenderer.DrawText(e.Graphics, txt, cb_Options_Gauges_ForeColor.Font, r2, cb_Options_Gauges_ForeColor.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); } } private void cb_Options_Gauges_ForeColor_SelectedIndexChanged(object sender, EventArgs e) { Color c = (Color)cb_Options_Gauges_ForeColor.SelectedItem; if (c == null) return; Properties.Settings.Default.Map_TrackingGaugeColor = c.ToKnownColor().ToString(); } #endregion #region tab_Options_GLOBE private void bw_GLOBE_MapUpdater_DoWork(object sender, DoWorkEventArgs e) { bw_GLOBE_MapUpdater.ReportProgress(0, "GLOBE: Creating elevation tile catalogue..."); // get all locs needed for covered area ElevationCatalogue availabletiles = ElevationData.Database.ElevationCatalogueCreateCheckBoundsAndLastModified(bw_GLOBE_MapUpdater, ELEVATIONMODEL.GLOBE, Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon); bw_GLOBE_MapUpdater.ReportProgress(0, "GLOBE: Processing tiles..."); int missing = 0; int found = 0; foreach (string tilename in availabletiles.Files.Keys) { if (ElevationData.Database.ElevationTileExists(tilename.Substring(0, 6), ELEVATIONMODEL.GLOBE)) { bw_GLOBE_MapUpdater.ReportProgress(1, tilename); found++; } else { bw_GLOBE_MapUpdater.ReportProgress(-1, tilename); missing++; } if (bw_GLOBE_MapUpdater.CancellationPending) { bw_GLOBE_MapUpdater.ReportProgress(0, "GLOBE: Processing cancelled..."); return; } } bw_GLOBE_MapUpdater.ReportProgress(0, "GLOBE: " + found.ToString() + " tile(s) found, " + missing.ToString() + " more tile(s) available and missing."); } private void bw_GLOBE_MapUpdater_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == 1) { // add a tile found in database to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Green)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Green)); GLOBEpolygons.Polygons.Add(p); } else if (e.ProgressPercentage == -1) { // add missing tile to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Red)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); GLOBEpolygons.Polygons.Add(p); } else { Say((string)e.UserState); } } private void bw_GLOBE_MapUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } private void tab_Options_GLOBE_Enter(object sender, EventArgs e) { // clear map polygons GLOBEpolygons.Clear(); // add coverage to map polygons List cl = new List(); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MinLon)); GMapPolygon c = new GMapPolygon(cl, "Coverage"); c.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3); c.Fill = new SolidBrush(Color.FromArgb(0, Color.Magenta)); GLOBEpolygons.Polygons.Add(c); // zoom the map initally gm_Options_GLOBE.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon, Properties.Settings.Default.MinLat)); // start map updater if (!bw_GLOBE_MapUpdater.IsBusy) bw_GLOBE_MapUpdater.RunWorkerAsync(); // zoom the map gm_Options_Coverage.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon - 1, Properties.Settings.Default.MaxLat + 1, Properties.Settings.Default.MaxLon + 1, Properties.Settings.Default.MinLat - 1)); } private void tab_Options_GLOBE_Leave(object sender, EventArgs e) { // stop map updater bw_GLOBE_MapUpdater.CancelAsync(); // clear map polygons GLOBEpolygons.Clear(); // do garbage collection GC.Collect(); Say(""); } private void btn_Options_GLOBE_Copyright_Click(object sender, EventArgs e) { ElevationCopyrightDlg Dlg = new ElevationCopyrightDlg(); Dlg.Text = "GLOBE Copyright Information"; Dlg.rtb_Copyright.Text = Properties.Settings.Default.Elevation_GLOBE_Copyright; Dlg.ShowDialog(); } #endregion #region tab_Options_SRTM3 private void bw_SRTM3_MapUpdater_DoWork(object sender, DoWorkEventArgs e) { bw_SRTM3_MapUpdater.ReportProgress(0, "SRTM3: Creating elevation tile catalogue..."); ElevationCatalogue availabletiles = ElevationData.Database.ElevationCatalogueCreateCheckBoundsAndLastModified(bw_SRTM3_MapUpdater, ELEVATIONMODEL.SRTM3, Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon); bw_SRTM3_MapUpdater.ReportProgress(0, "SRTM3: Processing tiles..."); int missing = 0; int found = 0; foreach (string tilename in availabletiles.Files.Keys) { if (ElevationData.Database.ElevationTileExists(tilename.Substring(0, 6), ELEVATIONMODEL.SRTM3)) { bw_SRTM3_MapUpdater.ReportProgress(1, tilename); found++; } else { bw_SRTM3_MapUpdater.ReportProgress(-1, tilename); missing++; } if (bw_SRTM3_MapUpdater.CancellationPending) { bw_SRTM3_MapUpdater.ReportProgress(0, "SRTM3: Processing cancelled..."); return; } } bw_SRTM3_MapUpdater.ReportProgress(0, "SRTM3: " + found.ToString() + " tile(s) found, " + missing.ToString() + " more tile(s) available and missing."); } private void bw_SRTM3_MapUpdater_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == 1) { // add a tile found in database to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Green)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Green)); SRTM3polygons.Polygons.Add(p); } else if (e.ProgressPercentage == -1) { // add missing tile to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Red)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); SRTM3polygons.Polygons.Add(p); } else { Say((string)e.UserState); } } private void bw_SRTM3_MapUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } private void tab_Options_SRTM3_Enter(object sender, EventArgs e) { // clear map polygons SRTM3polygons.Clear(); // add coverage to map polygons List cl = new List(); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MinLon)); GMapPolygon c = new GMapPolygon(cl, "Coverage"); c.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3); c.Fill = new SolidBrush(Color.FromArgb(0, Color.Magenta)); SRTM3polygons.Polygons.Add(c); // zoom the map initally gm_Options_SRTM3.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon, Properties.Settings.Default.MinLat)); // start map updater if (!bw_SRTM3_MapUpdater.IsBusy) bw_SRTM3_MapUpdater.RunWorkerAsync(); // zoom the map gm_Options_Coverage.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon - 1, Properties.Settings.Default.MaxLat + 1, Properties.Settings.Default.MaxLon + 1, Properties.Settings.Default.MinLat - 1)); } private void tab_Options_SRTM3_Leave(object sender, EventArgs e) { // stop map updater bw_SRTM3_MapUpdater.CancelAsync(); // clear map polygons SRTM3polygons.Clear(); // do garbage collection GC.Collect(); Say(""); } private void btn_Options_SRTM3_Copyright_Click(object sender, EventArgs e) { ElevationCopyrightDlg Dlg = new ElevationCopyrightDlg(); Dlg.Text = "SRTM3 Copyright Information"; Dlg.rtb_Copyright.Text = Properties.Settings.Default.Elevation_SRTM3_Copyright; Dlg.ShowDialog(); } #endregion #region tab_Options_SRTM1 private void bw_SRTM1_MapUpdater_DoWork(object sender, DoWorkEventArgs e) { bw_SRTM1_MapUpdater.ReportProgress(0, "SRTM1: Creating elevation tile catalogue..."); ElevationCatalogue availabletiles = ElevationData.Database.ElevationCatalogueCreateCheckBoundsAndLastModified(bw_SRTM1_MapUpdater, ELEVATIONMODEL.SRTM1, Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon); bw_SRTM1_MapUpdater.ReportProgress(0, "SRTM1: Processing tiles..."); int missing = 0; int found = 0; foreach (string tilename in availabletiles.Files.Keys) { if (ElevationData.Database.ElevationTileExists(tilename.Substring(0, 6), ELEVATIONMODEL.SRTM1)) { bw_SRTM1_MapUpdater.ReportProgress(1, tilename); found++; } else { bw_SRTM1_MapUpdater.ReportProgress(-1, tilename); missing++; } if (bw_SRTM1_MapUpdater.CancellationPending) { bw_SRTM1_MapUpdater.ReportProgress(0, "SRTM1: Processing cancelled..."); return; } } bw_SRTM1_MapUpdater.ReportProgress(0, "SRTM1: " + found.ToString() + " tile(s) found, " + missing.ToString() + " more tile(s) available and missing."); } private void bw_SRTM1_MapUpdater_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == 1) { // add a tile found in database to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Green)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Green)); SRTM1polygons.Polygons.Add(p); } else if (e.ProgressPercentage == -1) { // add missing tile to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Red)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); SRTM1polygons.Polygons.Add(p); } else { Say((string)e.UserState); } } private void bw_SRTM1_MapUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } private void tab_Options_SRTM1_Enter(object sender, EventArgs e) { // clear map polygons SRTM1polygons.Clear(); // add coverage to map polygons List cl = new List(); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MinLon)); GMapPolygon c = new GMapPolygon(cl, "Coverage"); c.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3); c.Fill = new SolidBrush(Color.FromArgb(0, Color.Magenta)); SRTM1polygons.Polygons.Add(c); // zoom the map initally gm_Options_SRTM1.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon, Properties.Settings.Default.MinLat)); // start map updater if (!bw_SRTM1_MapUpdater.IsBusy) bw_SRTM1_MapUpdater.RunWorkerAsync(); // zoom the map gm_Options_Coverage.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon - 1, Properties.Settings.Default.MaxLat + 1, Properties.Settings.Default.MaxLon + 1, Properties.Settings.Default.MinLat - 1)); } private void tab_Options_SRTM1_Leave(object sender, EventArgs e) { // stop map updater bw_SRTM1_MapUpdater.CancelAsync(); // clear map polygons SRTM1polygons.Clear(); // do garbage collection GC.Collect(); Say(""); } private void btn_Options_SRTM1_Copyright_Click(object sender, EventArgs e) { ElevationCopyrightDlg Dlg = new ElevationCopyrightDlg(); Dlg.Text = "SRTM1 Copyright Information"; Dlg.rtb_Copyright.Text = Properties.Settings.Default.Elevation_SRTM1_Copyright; Dlg.ShowDialog(); } #endregion #region tab_Options_ASTER3 private void bw_ASTER3_MapUpdater_DoWork(object sender, DoWorkEventArgs e) { bw_ASTER3_MapUpdater.ReportProgress(0, "ASTER3: Creating elevation tile catalogue..."); ElevationCatalogue availabletiles = ElevationData.Database.ElevationCatalogueCreateCheckBoundsAndLastModified(bw_ASTER3_MapUpdater, ELEVATIONMODEL.ASTER3, Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon); bw_ASTER3_MapUpdater.ReportProgress(0, "ASTER3: Processing tiles..."); int missing = 0; int found = 0; foreach (string tilename in availabletiles.Files.Keys) { if (ElevationData.Database.ElevationTileExists(tilename.Substring(0, 6), ELEVATIONMODEL.ASTER3)) { bw_ASTER3_MapUpdater.ReportProgress(1, tilename); found++; } else { bw_ASTER3_MapUpdater.ReportProgress(-1, tilename); missing++; } if (bw_ASTER3_MapUpdater.CancellationPending) { bw_ASTER3_MapUpdater.ReportProgress(0, "ASTER3: Processing cancelled..."); return; } } bw_ASTER3_MapUpdater.ReportProgress(0, "ASTER3: " + found.ToString() + " tile(s) found, " + missing.ToString() + " more tile(s) available and missing."); } private void bw_ASTER3_MapUpdater_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == 1) { // add a tile found in database to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Green)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Green)); ASTER3polygons.Polygons.Add(p); } else if (e.ProgressPercentage == -1) { // add missing tile to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Red)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); ASTER3polygons.Polygons.Add(p); } else { Say((string)e.UserState); } } private void bw_ASTER3_MapUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } private void tab_Options_ASTER3_Enter(object sender, EventArgs e) { // clear map polygons ASTER3polygons.Clear(); // add coverage to map polygons List cl = new List(); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MinLon)); GMapPolygon c = new GMapPolygon(cl, "Coverage"); c.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3); c.Fill = new SolidBrush(Color.FromArgb(0, Color.Magenta)); ASTER3polygons.Polygons.Add(c); // zoom the map initally gm_Options_ASTER3.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon, Properties.Settings.Default.MinLat)); // start map updater if (!bw_ASTER3_MapUpdater.IsBusy) bw_ASTER3_MapUpdater.RunWorkerAsync(); // zoom the map gm_Options_Coverage.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon - 1, Properties.Settings.Default.MaxLat + 1, Properties.Settings.Default.MaxLon + 1, Properties.Settings.Default.MinLat - 1)); } private void tab_Options_ASTER3_Leave(object sender, EventArgs e) { // stop map updater bw_ASTER3_MapUpdater.CancelAsync(); // clear map polygons ASTER3polygons.Clear(); // do garbage collection GC.Collect(); Say(""); } private void btn_Options_ASTER3_Copyright_Click(object sender, EventArgs e) { ElevationCopyrightDlg Dlg = new ElevationCopyrightDlg(); Dlg.Text = "ASTER3 Copyright Information"; Dlg.rtb_Copyright.Text = Properties.Settings.Default.Elevation_ASTER3_Copyright; Dlg.ShowDialog(); } #endregion #region tab_Options_ASTER1 private void bw_ASTER1_MapUpdater_DoWork(object sender, DoWorkEventArgs e) { bw_ASTER1_MapUpdater.ReportProgress(0, "ASTER1: Creating elevation tile catalogue..."); ElevationCatalogue availabletiles = ElevationData.Database.ElevationCatalogueCreateCheckBoundsAndLastModified(bw_ASTER1_MapUpdater, ELEVATIONMODEL.ASTER1, Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon); bw_ASTER1_MapUpdater.ReportProgress(0, "ASTER1: Processing tiles..."); int missing = 0; int found = 0; foreach (string tilename in availabletiles.Files.Keys) { if (ElevationData.Database.ElevationTileExists(tilename.Substring(0, 6), ELEVATIONMODEL.ASTER1)) { bw_ASTER1_MapUpdater.ReportProgress(1, tilename); found++; } else { bw_ASTER1_MapUpdater.ReportProgress(-1, tilename); missing++; } if (bw_ASTER1_MapUpdater.CancellationPending) { bw_ASTER1_MapUpdater.ReportProgress(0, "ASTER1: Processing cancelled..."); return; } } bw_ASTER1_MapUpdater.ReportProgress(0, "ASTER1: " + found.ToString() + " tile(s) found, " + missing.ToString() + " more tile(s) available and missing."); } private void bw_ASTER1_MapUpdater_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == 1) { // add a tile found in database to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Green)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Green)); ASTER1polygons.Polygons.Add(p); } else if (e.ProgressPercentage == -1) { // add missing tile to map polygons double baselat; double baselon; MaidenheadLocator.LatLonFromLoc(((string)e.UserState).Substring(0, 6), PositionInRectangle.BottomLeft, out baselat, out baselon); List l = new List(); l.Add(new PointLatLng((decimal)baselat, (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)baselon)); l.Add(new PointLatLng((decimal)(baselat + 1 / 24.0), (decimal)(baselon + 2 / 24.0))); l.Add(new PointLatLng((decimal)baselat, (decimal)(baselon + 2 / 24.0))); GMapPolygon p = new GMapPolygon(l, (string)e.UserState); p.Stroke = new Pen(Color.FromArgb(50, Color.Red)); p.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); ASTER1polygons.Polygons.Add(p); } else { Say((string)e.UserState); } } private void bw_ASTER1_MapUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } private void tba_Option_ASTER1_Enter(object sender, EventArgs e) { // clear map polygons ASTER1polygons.Clear(); // add coverage to map polygons List cl = new List(); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MinLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon)); cl.Add(new PointLatLng(Properties.Settings.Default.MaxLat, Properties.Settings.Default.MinLon)); GMapPolygon c = new GMapPolygon(cl, "Coverage"); c.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3); c.Fill = new SolidBrush(Color.FromArgb(0, Color.Magenta)); ASTER1polygons.Polygons.Add(c); // zoom the map initally gm_Options_ASTER1.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon, Properties.Settings.Default.MinLat)); // start map updater if (!bw_ASTER1_MapUpdater.IsBusy) bw_ASTER1_MapUpdater.RunWorkerAsync(); // zoom the map gm_Options_Coverage.SetZoomToFitRect(RectLatLng.FromLTRB(Properties.Settings.Default.MinLon - 1, Properties.Settings.Default.MaxLat + 1, Properties.Settings.Default.MaxLon + 1, Properties.Settings.Default.MinLat - 1)); } private void tba_Option_ASTER1_Leave(object sender, EventArgs e) { // stop map updater bw_ASTER1_MapUpdater.CancelAsync(); // clear map polygons ASTER1polygons.Clear(); // do garbage collection GC.Collect(); Say(""); } private void btn_Options_ASTER1_Copyright_Click(object sender, EventArgs e) { ElevationCopyrightDlg Dlg = new ElevationCopyrightDlg(); Dlg.Text = "ASTER1 Copyright Information"; Dlg.rtb_Copyright.Text = Properties.Settings.Default.Elevation_ASTER1_Copyright; Dlg.ShowDialog(); } #endregion #region tab_Options_Path private void tab_Options_Path_Enter(object sender, EventArgs e) { dgv_BandSettings.DefaultCellStyle.Font = new Font(FontFamily.GenericMonospace, 8, FontStyle.Regular); tb_Options_Path_StepWidth.Text = ElevationData.Database.GetDefaultStepWidth(GetElevationModel()).ToString("F0"); } private void tab_Options_Path_Validating(object sender, CancelEventArgs e) { // include range checking here! } private void tab_Options_Path_Leave(object sender, EventArgs e) { // validate settings } public short GetElevation(double lat, double lon) { if (!GeographicalPoint.Check(lat, lon)) return 0; short elv = ElevationData.Database.ElvMissingFlag; // try to get elevation data from distinct elevation model // start with detailed one if (Properties.Settings.Default.Elevation_SRTM1_Enabled && (elv == ElevationData.Database.ElvMissingFlag)) elv = ElevationData.Database[lat, lon, ELEVATIONMODEL.SRTM1, false]; if (Properties.Settings.Default.Elevation_SRTM3_Enabled && (elv == ElevationData.Database.ElvMissingFlag)) elv = ElevationData.Database[lat, lon, ELEVATIONMODEL.SRTM3, false]; if (Properties.Settings.Default.Elevation_GLOBE_Enabled && (elv == ElevationData.Database.ElvMissingFlag)) elv = ElevationData.Database[lat, lon, ELEVATIONMODEL.GLOBE, false]; // set it to zero if still invalid if (elv <= ElevationData.Database.TileMissingFlag) elv = 0; return elv; } public ElvMinMaxInfo GetMinMaxElevationLoc(string loc) { ElvMinMaxInfo elv = new ElvMinMaxInfo(); // try to get elevation data from distinct elevation model // start with detailed one if (Properties.Settings.Default.Elevation_SRTM1_Enabled && (elv.MaxElv == ElevationData.Database.ElvMissingFlag)) { ElvMinMaxInfo info = ElevationData.Database.GetMaxElvLoc(loc, ELEVATIONMODEL.SRTM1, false); if (info != null) { elv.MaxLat = info.MaxLat; elv.MaxLon = info.MaxLon; elv.MaxElv = info.MaxElv; elv.MinLat = info.MinLat; elv.MinLon = info.MinLon; elv.MinElv = info.MinElv; } } if (Properties.Settings.Default.Elevation_SRTM3_Enabled && (elv.MaxElv == ElevationData.Database.ElvMissingFlag)) { ElvMinMaxInfo info = ElevationData.Database.GetMaxElvLoc(loc, ELEVATIONMODEL.SRTM3, false); if (info != null) { elv.MaxLat = info.MaxLat; elv.MaxLon = info.MaxLon; elv.MaxElv = info.MaxElv; elv.MinLat = info.MinLat; elv.MinLon = info.MinLon; elv.MinElv = info.MinElv; } } if (Properties.Settings.Default.Elevation_GLOBE_Enabled && (elv.MaxElv == ElevationData.Database.ElvMissingFlag)) { ElvMinMaxInfo info = ElevationData.Database.GetMaxElvLoc(loc, ELEVATIONMODEL.GLOBE, false); if (info != null) { elv.MaxLat = info.MaxLat; elv.MaxLon = info.MaxLon; elv.MaxElv = info.MaxElv; elv.MinLat = info.MinLat; elv.MinLon = info.MinLon; elv.MinElv = info.MinElv; } } /* // set it to zero if still invalid if (elv.MaxElv == ElevationData.Database.ElvMissingFlag) elv.MaxElv = 0; if (elv.MinElv == ElevationData.Database.ElvMissingFlag) elv.MinElv = 0; */ return elv; } public LocationDesignator LocationFindOrUpdateOrCreate(string call, double lat, double lon) { // check all parameters if (!Callsign.Check(call)) return null; if (!GeographicalPoint.Check(lat, lon)) return null; // get location info LocationDesignator ld = StationData.Database.LocationFindOrUpdateOrCreate(call, lat, lon); // get elevation ld.Elevation = GetElevation(ld.Lat, ld.Lon); ld.BestCaseElevation = false; // modify location in case of best case elevation is selected --> but do not store in database or settings! if (Properties.Settings.Default.Path_BestCaseElevation) { if (!MaidenheadLocator.IsPrecise(ld.Lat, ld.Lon, 3)) { ElvMinMaxInfo maxinfo = GetMinMaxElevationLoc(ld.Loc); if (maxinfo.MaxElv != ElevationData.Database.ElvMissingFlag) { ld.Lat = maxinfo.MaxLat; ld.Lon = maxinfo.MaxLon; ld.Elevation = maxinfo.MaxElv; ld.BestCaseElevation = true; } } } return ld; } private void btn_Options_Path_Export_Click(object sender, EventArgs e) { // check and update station database LocationDesignator myloc = LocationFindOrUpdateOrCreate(Properties.Settings.Default.MyCall, Properties.Settings.Default.MyLat, Properties.Settings.Default.MyLon); Properties.Settings.Default.MyElevation = myloc.Elevation; // get qrv info or create default QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, Properties.Settings.Default.Band); // set qrv defaults if zero if (myqrv.AntennaHeight == 0) myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(Properties.Settings.Default.Band); if (myqrv.AntennaGain == 0) myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(Properties.Settings.Default.Band); if (myqrv.Power == 0) myqrv.Power = StationData.Database.QRVGetDefaultPower(Properties.Settings.Default.Band); // check if there are a valid DX settings if (!Callsign.Check(Properties.Settings.Default.DXCall) || !GeographicalPoint.Check(Properties.Settings.Default.DXLat, Properties.Settings.Default.DXLon)) return; // OK valid, lets continue // check and update station database LocationDesignator dxloc = LocationFindOrUpdateOrCreate(Properties.Settings.Default.DXCall, Properties.Settings.Default.DXLat, Properties.Settings.Default.DXLon); Properties.Settings.Default.DXElevation = dxloc.Elevation; // get qrv info or create default QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, Properties.Settings.Default.Band); // set qrv defaults if zero if (dxqrv.AntennaHeight == 0) dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(Properties.Settings.Default.Band); if (dxqrv.AntennaGain == 0) dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(Properties.Settings.Default.Band); if (dxqrv.Power == 0) dxqrv.Power = StationData.Database.QRVGetDefaultPower(Properties.Settings.Default.Band); // find local obstruction, if any LocalObstructionDesignator o = ElevationData.Database.LocalObstructionFind(myloc.Lat, myloc.Lon, Properties.Settings.Default.ElevationModel); double mybearing = LatLon.Bearing(myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon); double myobstr = (o != null) ? o.GetObstruction(myqrv.AntennaHeight, mybearing) : double.MinValue; // try to find elevation path in database or create new one and store ElevationPathDesignator epath = ElevationData.Database.ElevationPathFindOrCreateFromLatLon( null, myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon, ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel), Properties.Settings.Default.ElevationModel); // add additional info to ppath epath.Location1 = myloc; epath.Location2 = dxloc; epath.QRV1 = myqrv; epath.QRV2 = dxqrv; // export path to csv SaveFileDialog Dlg = new SaveFileDialog(); Dlg.AddExtension = true; Dlg.DefaultExt = "csv"; Dlg.Filter = "Comma Separated Values *.csv |*.csv"; Dlg.FileName = "Path Information " + Properties.Settings.Default.MyCall.Replace("/", "_") + " to " + Properties.Settings.Default.DXCall.Replace("/", "_"); Dlg.InitialDirectory = Application.StartupPath; Dlg.OverwritePrompt = true; if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { using (StreamWriter sw = new StreamWriter(Dlg.FileName)) { int est = 10; sw.WriteLine("Distance[km];Lat[deg];Lon[deg];Elevation[m]"); for (int i = 0; i < epath.Path.Length; i++) { for (int j = 0; j < epath.StepWidth / est; j++) { double distance = (double)(i + j * est / epath.StepWidth) * epath.StepWidth / 1000.0; LatLon.GPoint p = LatLon.DestinationPoint(myloc.Lat, myloc.Lon, epath.Bearing12, distance); sw.WriteLine(distance.ToString("F8") + ";" + p.Lat.ToString("F8") + ";" + p.Lon.ToString("F8") + ";" + epath.Path[i].ToString()); } } } } catch (Exception ex) { MessageBox.Show("Error while exporting path: " + ex.Message, "Export Path to CSV"); Log.WriteMessage(ex.ToString()); } } } #endregion #region tab_Options_Planes private void tab_Options_Planes_Enter(object sender, EventArgs e) { // set initial settings for planes tab cb_Options_PlaneFeed1.DisplayMember = "Name"; cb_Options_PlaneFeed2.DisplayMember = "Name"; cb_Options_PlaneFeed3.DisplayMember = "Name"; cb_Options_PlaneFeed1.Items.Clear(); cb_Options_PlaneFeed2.Items.Clear(); cb_Options_PlaneFeed3.Items.Clear(); cb_Options_PlaneFeed1.Items.Add("[none]"); cb_Options_PlaneFeed2.Items.Add("[none]"); cb_Options_PlaneFeed3.Items.Add("[none]"); // select plane feeds if (ParentDlg.PlaneFeedPlugins != null) { foreach (var plugin in ParentDlg.PlaneFeedPlugins) { cb_Options_PlaneFeed1.Items.Add(plugin); cb_Options_PlaneFeed2.Items.Add(plugin); cb_Options_PlaneFeed3.Items.Add(plugin); } } cb_Options_PlaneFeed1.SelectedIndex = cb_Options_PlaneFeed1.FindStringExact(Properties.Settings.Default.Planes_PlaneFeed1); cb_Options_PlaneFeed2.SelectedIndex = cb_Options_PlaneFeed2.FindStringExact(Properties.Settings.Default.Planes_PlaneFeed2); cb_Options_PlaneFeed3.SelectedIndex = cb_Options_PlaneFeed3.FindStringExact(Properties.Settings.Default.Planes_PlaneFeed3); // reset all feeds not found anymore if (cb_Options_PlaneFeed1.SelectedIndex < 0) cb_Options_PlaneFeed1.SelectedItem = "[none]"; if (cb_Options_PlaneFeed2.SelectedIndex < 0) cb_Options_PlaneFeed2.SelectedItem = "[none]"; if (cb_Options_PlaneFeed3.SelectedIndex < 0) cb_Options_PlaneFeed3.SelectedItem = "[none]"; // fill planes filter dropdown string[] cats = PlaneCategories.GetStringValues(); foreach (string cat in cats) cb_Options_Planes_Filter_Min_Cat.Items.Add(cat); try { cb_Options_Planes_Filter_Min_Cat.SelectedItem = PlaneCategories.GetStringValue(Properties.Settings.Default.Planes_Filter_Min_Category); } catch (Exception ex) { Log.WriteMessage(ex.ToString(), LogLevel.Error); } } private void tab_Options_Planes_Validating(object sender, CancelEventArgs e) { if (tb_Options_Planes_MaxAlt.Value < tb_Options_Planes_MinAlt.Value) { MessageBox.Show("MaxAlt must be greater than MinAlt.", "Parameter Error"); e.Cancel = true; } } private void cb_Options_PlaneFeed1_SelectedIndexChanged(object sender, EventArgs e) { if ((cb_Options_PlaneFeed1.SelectedItem == null) || (cb_Options_PlaneFeed1.GetItemText(cb_Options_PlaneFeed1.SelectedItem) == "[none]")) { btn_Options_PlaneFeed1_Settings.Enabled = false; btn_Options_PlaneFeed1_Import.Enabled = false; btn_Options_PlaneFeed1_Export.Enabled = false; btn_Options_PlaneFeed1_Default.Enabled = false; Properties.Settings.Default.Planes_PlaneFeed1 = "[none]"; return; } IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem; // show disclaimer if necessary if (!String.IsNullOrEmpty(feed.Disclaimer) && (String.IsNullOrEmpty(feed.DisclaimerAccepted))) { PlaneFeedDisclaimerDlg Dlg = new PlaneFeedDisclaimerDlg(); Dlg.tb_DisclaimerText.Text = feed.Disclaimer; if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // making a unique ID for confirmation string ID = ""; try { ID = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "ProductId", ""); } catch { ID = "Key not found!"; } ID = ID + "," + DateTime.UtcNow.ToString("u"); ID = ID + "," + System.Security.Principal.WindowsIdentity.GetCurrent().Name; feed.DisclaimerAccepted = ID; try { feed.SaveSettings(); } catch (Exception ex) { Log.WriteMessage(ex.ToString()); } } else { cb_Options_PlaneFeed1.SelectedItem = "[none]"; } } btn_Options_PlaneFeed1_Settings.Enabled = feed.HasSettings; btn_Options_PlaneFeed1_Import.Enabled = feed.CanImport; btn_Options_PlaneFeed1_Export.Enabled = feed.CanExport; btn_Options_PlaneFeed1_Default.Enabled = true; Properties.Settings.Default.Planes_PlaneFeed1 = feed.Name; } private void cb_Options_PlaneFeed2_SelectedIndexChanged(object sender, EventArgs e) { if ((cb_Options_PlaneFeed2.SelectedItem == null) || (cb_Options_PlaneFeed2.GetItemText(cb_Options_PlaneFeed2.SelectedItem) == "[none]")) { btn_Options_PlaneFeed2_Settings.Enabled = false; btn_Options_PlaneFeed2_Import.Enabled = false; btn_Options_PlaneFeed2_Export.Enabled = false; btn_Options_PlaneFeed2_Default.Enabled = false; Properties.Settings.Default.Planes_PlaneFeed2 = "[none]"; return; } IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem; // show disclaimer if necessary if (!String.IsNullOrEmpty(feed.Disclaimer) && (String.IsNullOrEmpty(feed.DisclaimerAccepted))) { PlaneFeedDisclaimerDlg Dlg = new PlaneFeedDisclaimerDlg(); Dlg.tb_DisclaimerText.Text = feed.Disclaimer; if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // making a unique ID for confirmation string ID = ""; try { ID = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "ProductId", ""); } catch { ID = "Key not found!"; } ID = ID + "," + DateTime.UtcNow.ToString("u"); ID = ID + "," + System.Security.Principal.WindowsIdentity.GetCurrent().Name; feed.DisclaimerAccepted = ID; try { feed.SaveSettings(); } catch (Exception ex) { Log.WriteMessage(ex.ToString()); } } else { cb_Options_PlaneFeed2.SelectedItem = "[none]"; } } btn_Options_PlaneFeed2_Settings.Enabled = feed.HasSettings; btn_Options_PlaneFeed2_Import.Enabled = feed.CanImport; btn_Options_PlaneFeed2_Export.Enabled = feed.CanExport; btn_Options_PlaneFeed2_Default.Enabled = true; Properties.Settings.Default.Planes_PlaneFeed2 = feed.Name; } private void cb_Options_PlaneFeed3_SelectedIndexChanged(object sender, EventArgs e) { if ((cb_Options_PlaneFeed3.SelectedItem == null) || (cb_Options_PlaneFeed3.GetItemText(cb_Options_PlaneFeed3.SelectedItem) == "[none]")) { btn_Options_PlaneFeed3_Settings.Enabled = false; btn_Options_PlaneFeed3_Import.Enabled = false; btn_Options_PlaneFeed3_Export.Enabled = false; btn_Options_PlaneFeed3_Default.Enabled = false; Properties.Settings.Default.Planes_PlaneFeed3 = "[none]"; return; } IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem; // show disclaimer if necessary if (!String.IsNullOrEmpty(feed.Disclaimer) && (String.IsNullOrEmpty(feed.DisclaimerAccepted))) { PlaneFeedDisclaimerDlg Dlg = new PlaneFeedDisclaimerDlg(); Dlg.tb_DisclaimerText.Text = feed.Disclaimer; if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // making a unique ID for confirmation string ID = ""; try { ID = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "ProductId", ""); } catch { ID = "Key not found!"; } ID = ID + "," + DateTime.UtcNow.ToString("u"); ID = ID + "," + System.Security.Principal.WindowsIdentity.GetCurrent().Name; feed.DisclaimerAccepted = ID; try { feed.SaveSettings(); } catch (Exception ex) { Log.WriteMessage(ex.ToString()); } } else { cb_Options_PlaneFeed3.SelectedItem = "[none]"; } } btn_Options_PlaneFeed3_Settings.Enabled = feed.HasSettings; btn_Options_PlaneFeed3_Import.Enabled = feed.CanImport; btn_Options_PlaneFeed3_Export.Enabled = feed.CanExport; btn_Options_PlaneFeed3_Default.Enabled = true; Properties.Settings.Default.Planes_PlaneFeed3 = feed.Name; } private void btn_Options_PlaneFeed1_Settings_Click(object sender, EventArgs e) { try { PlaneFeedSettingsDlg Dlg = new PlaneFeedSettingsDlg(); Dlg.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem).Name; Dlg.lbl_Info.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem).Info; Dlg.lbl_Version.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem).Version; Dlg.pg_Main.SelectedObject = ((IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem).GetSettings(); if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { } ((IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem).SaveSettings(); } catch { // do nothing } } private void btn_Options_PlaneFeed2_Settings_Click(object sender, EventArgs e) { try { PlaneFeedSettingsDlg Dlg = new PlaneFeedSettingsDlg(); Dlg.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem).Name; Dlg.lbl_Info.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem).Info; Dlg.lbl_Version.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem).Version; Dlg.pg_Main.SelectedObject = ((IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem).GetSettings(); if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { } ((IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem).SaveSettings(); } catch { // do nothing } } private void btn_Options_PlaneFeed3_Settings_Click(object sender, EventArgs e) { try { PlaneFeedSettingsDlg Dlg = new PlaneFeedSettingsDlg(); Dlg.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem).Name; Dlg.lbl_Info.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem).Info; Dlg.lbl_Version.Text = ((IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem).Version; Dlg.pg_Main.SelectedObject = ((IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem).GetSettings(); if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { } ((IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem).SaveSettings(); } catch { // do nothing } } private void btn_Options_PlaneFeed1_Import_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem; feed.ImportSettings(); } catch (Exception ex) { // do nothing } } private void btn_Options_PlaneFeed2_Import_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem; feed.ImportSettings(); } catch (Exception ex) { // do nothing } } private void btn_Options_PlaneFeed3_Import_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem; feed.ImportSettings(); } catch (Exception ex) { // do nothing } } private void btn_Options_PlaneFeed1_Export_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem; feed.ExportSettings(); } catch (Exception ex) { // do nothing } } private void btn_Options_PlaneFeed2_Export_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem; feed.ExportSettings(); } catch (Exception ex) { // do nothing } } private void btn_Options_PlaneFeed3_Export_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem; feed.ExportSettings(); } catch (Exception ex) { // do nothing } } private void btn_Options_PlaneFeed1_Default_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed1.SelectedItem; feed.ResetSettings(); } catch (Exception ex) { // do nothing } } private void btn_Options_PlaneFeed2_Default_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed2.SelectedItem; feed.ResetSettings(); } catch (Exception ex) { // do nothing } } private void btn_Options_PlaneFeed3_Default_Click(object sender, EventArgs e) { try { IPlaneFeedPlugin feed = (IPlaneFeedPlugin)cb_Options_PlaneFeed3.SelectedItem; feed.ResetSettings(); } catch (Exception ex) { // do nothing } } private void cb_Options_Planes_Filter_Min_Cat_SelectedIndexChanged(object sender, EventArgs e) { try { Properties.Settings.Default.Planes_Filter_Min_Category = PlaneCategories.ParseStringValue((string)cb_Options_Planes_Filter_Min_Cat.SelectedItem); } catch (Exception ex) { Log.WriteMessage(ex.ToString(), LogLevel.Error); } } #endregion #region tab_Options_Alarm private void tab_Options_Alarm_Enter(object sender, EventArgs e) { } #endregion #region tab_Options_Network private void tab_Options_Network_Enter(object sender, EventArgs e) { } private void tab_Options_Network_Validating(object sender, CancelEventArgs e) { if (tb_Options_Server_Port.Value == tb_Options_Webserver_Port.Value) { MessageBox.Show("UDP Server and HTTP Server must have different port numbers.", "Parameter Error"); e.Cancel = true; } } #endregion #region tab_Options_SpecLab private void tab_Options_SpecLab_Enter(object sender, EventArgs e) { } private void tab_Options_SpecLab_Validating(object sender, CancelEventArgs e) { if (tb_Options_SpecLab_F1.Value > tb_Options_SpecLab_F2.Value) { MessageBox.Show("F1 must be lesser than F2.", "Parameter Error"); e.Cancel = true; } } #endregion #region tab_Options_Track private void tab_Options_Track_Enter(object sender, EventArgs e) { if (AirScout.CAT.Properties.Settings.Default.CAT_Activate) { gb_Options_Doppler.Enabled = true; } else { gb_Options_Doppler.Enabled = false; } // check/uncheck radio buttons // do not use property binding here! if (Properties.Settings.Default.Track_Serial_None) { rb_Options_Track_Serial_None.Checked = true; } else if (Properties.Settings.Default.Track_Serial_GS232_AZ) { rb_Options_Track_Serial_GS232_AZ.Checked = true; } else if (Properties.Settings.Default.Track_Serial_GS232_AZEL) { rb_Options_Track_Serial_GS232_AZEL.Checked = true; } if (Properties.Settings.Default.Track_DDE_None) { rb_Options_Track_DDE_None.Checked = true; } else if (Properties.Settings.Default.Track_DDE_HRD) { rb_Options_Track_DDE_HRD.Checked = true; } if (Properties.Settings.Default.Track_UDP_None) { rb_Options_Track_UDP_None.Checked = true; } else if (Properties.Settings.Default.Track_UDP_WinTest) { rb_Options_Track_UDP_WinTest.Checked = true; } else if (Properties.Settings.Default.Track_UDP_AirScout) { rb_Options_Track_UDP_AirScout.Checked = true; } if (Properties.Settings.Default.Track_File_None) { rb_Options_Track_File_None.Checked = true; } else if (Properties.Settings.Default.Track_File_Native) { rb_Options_Track_File_Native.Checked = true; } else if (Properties.Settings.Default.Track_File_WSJT) { rb_Options_Track_File_WSJT.Checked = true; } if (Properties.Settings.Default.Doppler_Strategy_None) { rb_Options_Doppler_Strategy_None.Checked = true; } else if (Properties.Settings.Default.Doppler_Strategy_A) { rb_Options_Doppler_Strategy_A.Checked = true; } else if (Properties.Settings.Default.Doppler_Strategy_B) { rb_Options_Doppler_Strategy_B.Checked = true; } else if (Properties.Settings.Default.Doppler_Strategy_C) { rb_Options_Doppler_Strategy_C.Checked = true; } else if (Properties.Settings.Default.Doppler_Strategy_D) { rb_Options_Doppler_Strategy_D.Checked = true; } ud_Options_CAT_Update.Value = AirScout.CAT.Properties.Settings.Default.CAT_Update; tb_Options_Track_DialFreq.SilentValue = Properties.Settings.Default.Doppler_DialFreq; cb_Options_Track_Activate_CheckedChanged(this, null); } private void tb_Options_CAT_DialFreq_TextChanged(object sender, EventArgs e) { } private void tc_Track_Validating(object sender, CancelEventArgs e) { if (tb_Options_Track_UDP_WinTest_Port.Value == tb_Options_Track_UDP_AirScout_Port.Value) { MessageBox.Show("Win-Test port and AirScout port must have different values.", "Parameter Error"); e.Cancel = true; } List baudrates = new List(new int[] { 50, 100, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 }); if (!baudrates.Contains(tb_Options_Track_Serial_Baudrate.Value)) { string s = ""; foreach (int b in baudrates) s = s + b.ToString() + ", "; s = s.Trim().TrimEnd(','); MessageBox.Show("This is not a valid baudrate: " + tb_Options_Track_Serial_Baudrate.Text + "\nValid baudrates are:\n\n" + s, "Parameter Error"); e.Cancel = true; } } private void cb_Options_Track_Activate_CheckedChanged(object sender, EventArgs e) { if (cb_Options_Track_Activate.Checked) { gb_Options_Track_Serial.Enabled = true; gb_Options_Track_UDP.Enabled = true; gb_Options_Track_DDE.Enabled = true; gb_Options_Track_File.Enabled = true; if (AirScout.CAT.Properties.Settings.Default.CAT_Activate) { gb_Options_Doppler.Enabled = true; } } else { gb_Options_Track_Serial.Enabled = false; gb_Options_Track_UDP.Enabled = false; gb_Options_Track_DDE.Enabled = false; gb_Options_Track_File.Enabled = false; gb_Options_Doppler.Enabled = false; } } private void gb_Options_Track_Serial_CheckedChanged(object sender, EventArgs e) { Properties.Settings.Default.Track_Serial_None = rb_Options_Track_Serial_None.Checked; Properties.Settings.Default.Track_Serial_GS232_AZ = rb_Options_Track_Serial_GS232_AZ.Checked; Properties.Settings.Default.Track_Serial_GS232_AZEL = rb_Options_Track_Serial_GS232_AZEL.Checked; } private void gb_Options_Track_DDE_CheckedChanged(object sender, EventArgs e) { Properties.Settings.Default.Track_DDE_None = rb_Options_Track_DDE_None.Checked; Properties.Settings.Default.Track_DDE_HRD = rb_Options_Track_DDE_HRD.Checked; } private void gb_Options_Track_UDP_CheckedChanged(object sender, EventArgs e) { Properties.Settings.Default.Track_UDP_None = rb_Options_Track_UDP_None.Checked; Properties.Settings.Default.Track_UDP_WinTest = rb_Options_Track_UDP_WinTest.Checked; Properties.Settings.Default.Track_UDP_AirScout = rb_Options_Track_UDP_AirScout.Checked; } private void gb_Options_Track_File_CheckedChanged(object sender, EventArgs e) { Properties.Settings.Default.Track_File_None = rb_Options_Track_File_None.Checked; Properties.Settings.Default.Track_File_Native = rb_Options_Track_File_Native.Checked; Properties.Settings.Default.Track_File_WSJT = rb_Options_Track_File_WSJT.Checked; } private void gb_Options_Doppler_CheckedChanged(object sender, EventArgs e) { Properties.Settings.Default.Doppler_Strategy_None = rb_Options_Doppler_Strategy_None.Checked; Properties.Settings.Default.Doppler_Strategy_A = rb_Options_Doppler_Strategy_A.Checked; Properties.Settings.Default.Doppler_Strategy_B = rb_Options_Doppler_Strategy_B.Checked; Properties.Settings.Default.Doppler_Strategy_C = rb_Options_Doppler_Strategy_C.Checked; Properties.Settings.Default.Doppler_Strategy_D = rb_Options_Doppler_Strategy_D.Checked; } #endregion #region tab_Options_CAT private void tab_Options_CAT_Enter(object sender, EventArgs e) { LoadingTab = true; cb_Options_CAT_Activate.Checked = AirScout.CAT.Properties.Settings.Default.CAT_Activate; // get a list of supported rigs and add them to combo box List rigs = CATWorker.SupportedRigs(); cb_Options_CAT_Rig.Items.Clear(); // add a [None] rig SupportedRig none = new SupportedRig(); none.Model = "[None]"; none.Type = "[None]"; cb_Options_CAT_Rig.Items.Add(none); foreach (SupportedRig rig in rigs) { cb_Options_CAT_Rig.Items.Add(rig); } // try to select settings if (AirScout.CAT.Properties.Settings.Default.CAT_RigType != null) { try { int index = cb_Options_CAT_Rig.FindString(AirScout.CAT.Properties.Settings.Default.CAT_RigType); if (index >= 0) { cb_Options_CAT_Rig.SelectedIndex = index; } } catch { // do nothing if something goes wrong } } try { cb_Options_CAT_PortName.DataSource = System.IO.Ports.SerialPort.GetPortNames(); cb_Options_CAT_PortName.SelectedItem = AirScout.CAT.Properties.Settings.Default.CAT_PortName; } catch (Exception ex) { // do nothing if fails } try { cb_Options_CAT_Baudrate.DataSource = new string[] { "110", "300", "600", "1200", "2400", "4800", "9600", "14400", "19200", "38400", "56000", "57600", "115200", "128000", "256000" }; cb_Options_CAT_Baudrate.SelectedItem = AirScout.CAT.Properties.Settings.Default.CAT_Baudrate.ToString(); } catch (Exception ex) { // do nothing if fails } try { cb_Options_CAT_DataBits.DataSource = new string[] { "5", "6", "7", "8" }; cb_Options_CAT_DataBits.SelectedItem = AirScout.CAT.Properties.Settings.Default.CAT_DataBits.ToString(); } catch (Exception ex) { // do nothing if fails } try { EnumHelpers.BindToEnum(cb_Options_CAT_Parity); cb_Options_CAT_Parity.SelectedValue = (int)AirScout.CAT.Properties.Settings.Default.CAT_Parity; } catch (Exception ex) { // do nothing if fails } try { EnumHelpers.BindToEnum(cb_Options_CAT_StopBits); cb_Options_CAT_StopBits.SelectedValue = (int)AirScout.CAT.Properties.Settings.Default.CAT_StopBits; } catch (Exception ex) { // do nothing if fails } try { EnumHelpers.BindToEnum(cb_Options_CAT_RTS); cb_Options_CAT_RTS.SelectedValue = (int)AirScout.CAT.Properties.Settings.Default.CAT_RTS; } catch (Exception ex) { // do nothing if fails } try { EnumHelpers.BindToEnum(cb_Options_CAT_DTR); cb_Options_CAT_DTR.SelectedValue = (int)AirScout.CAT.Properties.Settings.Default.CAT_DTR; } catch (Exception ex) { // do nothing if fails } try { ud_Options_CAT_Poll.Value = AirScout.CAT.Properties.Settings.Default.CAT_Poll; } catch (Exception ex) { // do nothing if fails } try { ud_Options_CAT_Timeout.Value = AirScout.CAT.Properties.Settings.Default.CAT_Timeout; } catch (Exception ex) { // do nothing if fails } cb_Options_CAT_Activate_CheckedChanged(this, null); LoadingTab = false; } private void cb_Options_CAT_Activate_CheckedChanged(object sender, EventArgs e) { AirScout.CAT.Properties.Settings.Default.CAT_Activate = cb_Options_CAT_Activate.Checked; // check if port settings must be enabled (depending on rig type) bool portenabled = true; try { SupportedRig rig = (SupportedRig)cb_Options_CAT_Rig.SelectedItem; if (rig != null) { if (rig.CATEngine == CATENGINE.OMNIRIGX) portenabled = false; } } catch { } if (cb_Options_CAT_Activate.Checked) { ud_Options_CAT_Update.Enabled = true; gb_Options_CAT_RigType.Enabled = true; if (portenabled) gb_Options_CAT_PortSettings.Enabled = true; else gb_Options_CAT_PortSettings.Enabled = false; gb_Options_CAT_OperatingInstructions.Enabled = true; if (Properties.Settings.Default.Track_Activate) { gb_Options_Doppler.Enabled = true; } } else { ud_Options_CAT_Update.Enabled = false; gb_Options_CAT_RigType.Enabled = false; gb_Options_CAT_PortSettings.Enabled = false; gb_Options_CAT_OperatingInstructions.Enabled = false; gb_Options_Doppler.Enabled = false; } } private void cb_Options_CAT_Rig_SelectedIndexChanged(object sender, EventArgs e) { if (LoadingTab) return; try { SupportedRig rig = (SupportedRig)cb_Options_CAT_Rig.SelectedItem; if (rig != null) { AirScout.CAT.Properties.Settings.Default.CAT_RigType = rig.Type; // disable port settings when using OmniRig ActiveX if (rig.CATEngine == CATENGINE.OMNIRIGX) { gb_Options_CAT_PortSettings.Enabled = false; } else { gb_Options_CAT_PortSettings.Enabled = true; } } } catch { // do nothing if fails } } private void ud_Options_CAT_Update_ValueChanged(object sender, EventArgs e) { if (LoadingTab) return; AirScout.CAT.Properties.Settings.Default.CAT_Update = (int)ud_Options_CAT_Update.Value; } private void cb_Options_CAT_PortName_SelectedIndexChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_PortName = (string)cb_Options_CAT_PortName.SelectedItem; } catch { // do nothing if fails } } private void cb_Options_CAT_Baudrate_SelectedIndexChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_Baudrate = System.Convert.ToInt32(cb_Options_CAT_Baudrate.SelectedItem); } catch { // do nothing if fails } } private void cb_Options_CAT_DataBits_SelectedIndexChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_DataBits = System.Convert.ToInt32(cb_Options_CAT_DataBits.SelectedItem); } catch { // do nothing if fails } } private void cb_Parity_SelectedIndexChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_Parity = (PARITY)cb_Options_CAT_Parity.SelectedValue; } catch { // do nothing if fails } } private void cb_Options_CAT_Stopbits_SelectedIndexChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_StopBits = (STOPBITS)cb_Options_CAT_StopBits.SelectedValue; } catch { // do nothing if fails } } private void cb_Options_CAT_RTS_SelectedIndexChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_RTS = (FLOWCONTROL)cb_Options_CAT_RTS.SelectedValue; } catch { // do nothing if fails } } private void cb_Options_CAT_DTR_SelectedIndexChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_DTR = (FLOWCONTROL)cb_Options_CAT_DTR.SelectedValue; } catch { // do nothing if fails } } private void ud_Options_CAT_Poll_ValueChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_Poll = (int)ud_Options_CAT_Poll.Value; } catch { // do nothing if fails } } private void ud_Options_CAT_Timeout_ValueChanged(object sender, EventArgs e) { if (LoadingTab) return; try { AirScout.CAT.Properties.Settings.Default.CAT_Timeout = (int)ud_Options_CAT_Timeout.Value; } catch { // do nothing if fails } } #endregion #region tab_Options_Info private void tab_Options_Info_Enter(object sender, EventArgs e) { try { // clear links first lbl_Options_Map.Links.Clear(); lbl_Options_Spherical.Links.Clear(); lbl_Options_Elevation_GLOBE.Links.Clear(); lbl_Options_Elevation_SRTM3.Links.Clear(); lbl_Options_Elevation_SRTM1.Links.Clear(); // populate link labels lbl_Options_Version.Text = "Version: " + Application.ProductVersion; lbl_Options_Map.Text = "GMap.NET Copyright (c) 2008 - 2011 Universe"; lbl_Options_Map.Links.Add(0, 8, "http://greatmaps.codeplex.com/"); lbl_Options_Spherical.Text = "http://www.movable-type.co.uk/scripts/latlong.html"; lbl_Options_Spherical.Links.Add(0, lbl_Options_Spherical.Text.Length - 1, "http://www.movable-type.co.uk/scripts/latlong.html"); lbl_Options_Elevation_GLOBE.Text = "1km based Elevation Data from GLOBE - Project"; lbl_Options_Elevation_GLOBE.Links.Add(30, 5, "http://www.ngdc.noaa.gov/mgg/topo/globe.html"); lbl_Options_Elevation_SRTM3.Text = "3arsec (90m x 90m) Elevation Data from SRTM - Project"; lbl_Options_Elevation_SRTM3.Links.Add(40, 14, "http://srtm.usgs.gov/"); lbl_Options_Elevation_SRTM1.Text = "1arsec (30m x 30m) Elevation Data from SRTM - Project and ASTER"; lbl_Options_Elevation_SRTM1.Links.Add(40, 14, "http://srtm.usgs.gov"); lbl_Options_Elevation_SRTM1.Links.Add(58, 6, "http://asterweb.jpl.nasa.gov/index.asp"); } catch (Exception ex) { Log.WriteMessage(ex.ToString()); } } private void lbl_Options_Map_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start(e.Link.LinkData.ToString()); } private void lbl_Options_ElevationSource_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start(e.Link.LinkData.ToString()); } private void lbl_Options_Spherical_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start(e.Link.LinkData.ToString()); } private void lbl_Options_ElevationDataHowTo_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start(e.Link.LinkData.ToString()); } private void lbl_Options_Elevation_SRTM3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start(e.Link.LinkData.ToString()); } private void lbl_Options_Elevation_SRTM1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start(e.Link.LinkData.ToString()); } private void btn_Options_License_Click(object sender, EventArgs e) { LicenseDlg Dlg = new LicenseDlg(); Dlg.ShowDialog(); } #endregion #region tab_Options_Watchlist private void tab_Options_Watchlist_Enter(object sender, EventArgs e) { } private void cb_Options_Watchlist_SyncWithKST_CheckedChanged(object sender, EventArgs e) { // disable manage buttons when synced with KST btn_Options_Watchlist_Manage.Enabled = !cb_Options_Watchlist_SyncWithKST.Checked; btn_Options_Watchlist_Clear.Enabled = !cb_Options_Watchlist_SyncWithKST.Checked; } private void btn_Options_Watchlist_Manage_Click(object sender, EventArgs e) { // sync watchlist, try to keep previously checked calls // you can have a call only once in the watch list List checkedcalls = new List(); foreach (WatchlistItem item in Properties.Settings.Default.Watchlist) { if (item.Checked) checkedcalls.Add(item.Call); } WatchlistDlg Dlg = new WatchlistDlg(); if (Dlg.ShowDialog() == DialogResult.OK) { // clear watch list Properties.Settings.Default.Watchlist.Clear(); foreach (DataGridViewRow row in Dlg.dgv_Watchlist_Selected.Rows) { string call = row.Cells[0].Value.ToString(); string loc = row.Cells[1].Value.ToString(); bool oor = true; // try to get the location from database LocationDesignator dxloc = StationData.Database.LocationFind(call, loc); if (dxloc != null) { oor = LatLon.Distance(Properties.Settings.Default.MyLat, Properties.Settings.Default.MyLon, dxloc.Lat, dxloc.Lon) > Properties.Settings.Default.Path_MaxLength; } // add call to watch list WatchlistItem item = new WatchlistItem(call, loc, oor); Properties.Settings.Default.Watchlist.Add(item); } // reselect previously selected foreach (string checkedcall in checkedcalls) { int index = Properties.Settings.Default.Watchlist.IndexOf(checkedcall); if (index >= 0) Properties.Settings.Default.Watchlist[index].Checked = true; } } } private void btn_Options_Watchlist_Clear_Click(object sender, EventArgs e) { Properties.Settings.Default.Watchlist.Clear(); } #endregion #region tab_Options_Misc private void btn_Options_Open_AirScoutDirectory_Click(object sender, EventArgs e) { Process.Start(ParentDlg.AppDirectory); } private void btn_Options_Open_LogDirectory_Click(object sender, EventArgs e) { Process.Start(ParentDlg.LogDirectory); } private void btn_Options_Open_TmpDirectory_Click(object sender, EventArgs e) { Process.Start(ParentDlg.TmpDirectory); } private void btn_Options_Open_PluginDirectory_Click(object sender, EventArgs e) { Process.Start(ParentDlg.PluginDirectory); } private void pb_Donate_Click(object sender, EventArgs e) { try { System.Diagnostics.Process.Start(Properties.Settings.Default.Donate_URL); } catch { } } #endregion private void OptionsDlg_FormClosing(object sender, FormClosingEventArgs e) { bw_GLOBE_MapUpdater.CancelAsync(); bw_SRTM3_MapUpdater.CancelAsync(); bw_SRTM1_MapUpdater.CancelAsync(); bw_StationDataUpdater.CancelAsync(); // do garbage collection GC.Collect(); } private void OptionsDlg_FormClosed(object sender, FormClosedEventArgs e) { } private void btn_Options_Import_Callsigns_Click(object sender, EventArgs e) { OpenFileDialog Dlg = new OpenFileDialog(); Dlg.DefaultExt = ".txt"; Dlg.CheckFileExists = true; Dlg.Multiselect = false; Dlg.Title = "Import Callsign Database as TXT-File"; if (Dlg.ShowDialog() == DialogResult.OK) { // import old callsign database using (StreamReader sr = new StreamReader(Dlg.FileName)) { int count = 0; string s = sr.ReadToEnd(); List l = StationData.Database.LocationFromTXT(s); foreach (LocationDesignator ld in l) { int i = StationData.Database.LocationInsertOrUpdateIfNewer(ld); if (i > 0) count += i; } MessageBox.Show("The callsign database was imported succuessfully.\n" + count.ToString() + " entries were inserted/updated.", "Import Callsign Database as TXT-File", MessageBoxButtons.OK); } } } #region StationDataUpdater private void bw_StationDataUpdater_DoWork(object sender, DoWorkEventArgs e) { Log.WriteMessage("Started."); try { StationDataUpdaterDoWorkEventArgs args = (StationDataUpdaterDoWorkEventArgs)e.Argument; string encoded; string result; JsonSerializerSettings settings = new JsonSerializerSettings(); settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; settings.FloatFormatHandling = FloatFormatHandling.String; settings.Formatting = Newtonsoft.Json.Formatting.Indented; string json = JsonConvert.SerializeObject(args.ld, settings); encoded = Encryption.OpenSSLEncrypt(json, ParentDlg.SessionKey); WebClient client = new WebClient(); result = client.UploadString(Properties.Settings.Default.AirScout_UploadLocation_URL + "?id=" + Properties.Settings.Default.AirScout_Instance_ID, encoded); foreach (QRVDesignator qrv in args.qrvs) { json = JsonConvert.SerializeObject(qrv, settings); encoded = Encryption.OpenSSLEncrypt(json, ParentDlg.SessionKey); result = client.UploadString(Properties.Settings.Default.AirScout_UploadQRV_URL + "?id=" + Properties.Settings.Default.AirScout_Instance_ID, encoded); } bw_StationDataUpdater.ReportProgress(100, "Location upload successful."); } catch (Exception ex) { Log.WriteMessage(ex.ToString(), LogLevel.Error); bw_StationDataUpdater.ReportProgress(-1, "Error while uploading location:" + ex.Message); } Log.WriteMessage("Finished."); } private void bw_StationDataUpdater_ProgressChanged(object sender, ProgressChangedEventArgs e) { try { Say((string)e.UserState); } catch { } } private void bw_StationDataUpdater_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } #endregion public class StationDataUpdaterDoWorkEventArgs { public LocationDesignator ld; public List qrvs; } } }