From 51cbeabd7bd74fc27e185f504907ef12ceed1a0c Mon Sep 17 00:00:00 2001 From: dl2alf Date: Sun, 15 Mar 2020 15:29:02 +0100 Subject: [PATCH] V1.3.2.0 --- ...AirScout.PlaneFeeds.Plugin.FlexJSON.csproj | 3 +- .../AirScout.PlaneFeeds.Plugin.OpenSky.csproj | 3 +- ...Scout.PlaneFeeds.Plugin.PlaneFinder.csproj | 3 +- .../PlaneFinder.cs | 3 +- .../Properties/AssemblyInfo.cs | 4 +- .../AirScout.PlaneFeeds.Plugin.RB24.csproj | 3 +- .../AirScout.PlaneFeeds.Plugin.RTL1090.csproj | 3 +- ...laneFeeds.Plugin.VirtualRadarServer.csproj | 3 +- AirScout.sln | 14 - AirScout/HorizonDlg.cs | 20 +- AirScout/MapDlg.cs | 298 ++++++++++-------- AirScout/MapDlg.resx | 4 +- AirScout/OptionsDlg.Designer.cs | 68 +++- AirScout/OptionsDlg.cs | 27 +- AirScout/Program.cs | 17 +- AirScout/Properties/AssemblyInfo.cs | 4 +- AirScout/Properties/Settings.Designer.cs | 14 +- AirScout/Properties/Settings.settings | 5 +- AirScout/VersionHistory.txt | 11 + AirScout/Watchlist.cs | 28 +- AirScout/app.config | 5 +- .../ElevationTileGenerator.csproj | 30 ++ .../SQLiteDatabase/SQLiteDatabase.cs | 46 ++- 23 files changed, 403 insertions(+), 213 deletions(-) diff --git a/AirScout.PlaneFeeds.Plugin.FlexJSON/AirScout.PlaneFeeds.Plugin.FlexJSON.csproj b/AirScout.PlaneFeeds.Plugin.FlexJSON/AirScout.PlaneFeeds.Plugin.FlexJSON.csproj index 73f86f2..c518440 100644 --- a/AirScout.PlaneFeeds.Plugin.FlexJSON/AirScout.PlaneFeeds.Plugin.FlexJSON.csproj +++ b/AirScout.PlaneFeeds.Plugin.FlexJSON/AirScout.PlaneFeeds.Plugin.FlexJSON.csproj @@ -78,6 +78,7 @@ - copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir) /y + mkdir $(SolutionDir)\Airscout\$(OutDir)\Plugin\ +copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir)\Plugin\ /y \ No newline at end of file diff --git a/AirScout.PlaneFeeds.Plugin.OpenSky/AirScout.PlaneFeeds.Plugin.OpenSky.csproj b/AirScout.PlaneFeeds.Plugin.OpenSky/AirScout.PlaneFeeds.Plugin.OpenSky.csproj index 29874c2..c4e2b48 100644 --- a/AirScout.PlaneFeeds.Plugin.OpenSky/AirScout.PlaneFeeds.Plugin.OpenSky.csproj +++ b/AirScout.PlaneFeeds.Plugin.OpenSky/AirScout.PlaneFeeds.Plugin.OpenSky.csproj @@ -78,6 +78,7 @@ - copy Z:\CSharp\AirScout\AirScout\AirScout.PlaneFeeds.Plugin.OpenSky\bin\Debug\ILMerge\*.dll Z:\CSharp\AirScout\AirScout\AirScout\bin\Debug\ /Y + mkdir $(SolutionDir)\Airscout\$(OutDir)\Plugin\ +copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir)\Plugin\ /y \ No newline at end of file diff --git a/AirScout.PlaneFeeds.Plugin.PlaneFinder/AirScout.PlaneFeeds.Plugin.PlaneFinder.csproj b/AirScout.PlaneFeeds.Plugin.PlaneFinder/AirScout.PlaneFeeds.Plugin.PlaneFinder.csproj index 61ba667..fb1901c 100644 --- a/AirScout.PlaneFeeds.Plugin.PlaneFinder/AirScout.PlaneFeeds.Plugin.PlaneFinder.csproj +++ b/AirScout.PlaneFeeds.Plugin.PlaneFinder/AirScout.PlaneFeeds.Plugin.PlaneFinder.csproj @@ -78,6 +78,7 @@ - copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir) /y + mkdir $(SolutionDir)\Airscout\$(OutDir)\Plugin\ +copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir)\Plugin\ /y \ No newline at end of file diff --git a/AirScout.PlaneFeeds.Plugin.PlaneFinder/PlaneFinder.cs b/AirScout.PlaneFeeds.Plugin.PlaneFinder/PlaneFinder.cs index 9b0c102..8e6e9b9 100644 --- a/AirScout.PlaneFeeds.Plugin.PlaneFinder/PlaneFinder.cs +++ b/AirScout.PlaneFeeds.Plugin.PlaneFinder/PlaneFinder.cs @@ -158,12 +158,13 @@ namespace AirScout.PlaneFeeds.Plugin.PlaneFinder { using (StreamWriter sw = new StreamWriter(File.Create(filename))) { - XmlSerializer s = new XmlSerializer(this.GetType(), overrides); + XmlSerializer s = new XmlSerializer(this.GetType(), overrides,null,new XmlRootAttribute(),""); s.Serialize(sw, this); } } catch (Exception ex) { + Console.WriteLine("[" + this.GetType().Name + "]: Cannot save settings to " + filename + ", " + ex.ToString()); throw new InvalidOperationException("[" + this.GetType().Name + "]: Cannot save settings to " + filename + ", " + ex.Message); } } diff --git a/AirScout.PlaneFeeds.Plugin.PlaneFinder/Properties/AssemblyInfo.cs b/AirScout.PlaneFeeds.Plugin.PlaneFinder/Properties/AssemblyInfo.cs index 3f0dfa2..ab9fcca 100644 --- a/AirScout.PlaneFeeds.Plugin.PlaneFinder/Properties/AssemblyInfo.cs +++ b/AirScout.PlaneFeeds.Plugin.PlaneFinder/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] +[assembly: AssemblyVersion("1.3.1.1")] +[assembly: AssemblyFileVersion("1.3.1.1")] diff --git a/AirScout.PlaneFeeds.Plugin.RB24/AirScout.PlaneFeeds.Plugin.RB24.csproj b/AirScout.PlaneFeeds.Plugin.RB24/AirScout.PlaneFeeds.Plugin.RB24.csproj index e20bcd7..6e09012 100644 --- a/AirScout.PlaneFeeds.Plugin.RB24/AirScout.PlaneFeeds.Plugin.RB24.csproj +++ b/AirScout.PlaneFeeds.Plugin.RB24/AirScout.PlaneFeeds.Plugin.RB24.csproj @@ -78,6 +78,7 @@ - copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir) /y + mkdir $(SolutionDir)\Airscout\$(OutDir)\Plugin\ +copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir)\Plugin\ /y \ No newline at end of file diff --git a/AirScout.PlaneFeeds.Plugin.RTL1090/AirScout.PlaneFeeds.Plugin.RTL1090.csproj b/AirScout.PlaneFeeds.Plugin.RTL1090/AirScout.PlaneFeeds.Plugin.RTL1090.csproj index 6ab76df..7e62355 100644 --- a/AirScout.PlaneFeeds.Plugin.RTL1090/AirScout.PlaneFeeds.Plugin.RTL1090.csproj +++ b/AirScout.PlaneFeeds.Plugin.RTL1090/AirScout.PlaneFeeds.Plugin.RTL1090.csproj @@ -84,6 +84,7 @@ - copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir) /y + mkdir $(SolutionDir)\Airscout\$(OutDir)\Plugin\ +copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir)\Plugin\ /y \ No newline at end of file diff --git a/AirScout.PlaneFeeds.Plugin.VirtualRadarServer/AirScout.PlaneFeeds.Plugin.VirtualRadarServer.csproj b/AirScout.PlaneFeeds.Plugin.VirtualRadarServer/AirScout.PlaneFeeds.Plugin.VirtualRadarServer.csproj index 34fa833..f2a7108 100644 --- a/AirScout.PlaneFeeds.Plugin.VirtualRadarServer/AirScout.PlaneFeeds.Plugin.VirtualRadarServer.csproj +++ b/AirScout.PlaneFeeds.Plugin.VirtualRadarServer/AirScout.PlaneFeeds.Plugin.VirtualRadarServer.csproj @@ -77,7 +77,8 @@ - copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir) /y + mkdir $(SolutionDir)\Airscout\$(OutDir)\Plugin\ +copy $(ProjectDir)\$(OutDir)\ILMerge\*$(TargetExt) $(SolutionDir)\Airscout\$(OutDir)\Plugin\ /y \ No newline at end of file diff --git a/AirScout.sln b/AirScout.sln index 7c33096..fef359f 100644 --- a/AirScout.sln +++ b/AirScout.sln @@ -81,8 +81,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.RB24", "AirScout.PlaneFeeds.Plugin.RB24\AirScout.PlaneFeeds.Plugin.RB24.csproj", "{D953C82D-5881-4F5C-8335-1C54114BE28B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout_Cleanup", "AirScout_Cleanup\AirScout_Cleanup.csproj", "{4DDDB65C-0E40-4A69-8775-5B4152C3196D}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.OpenSky", "AirScout.PlaneFeeds.Plugin.OpenSky\AirScout.PlaneFeeds.Plugin.OpenSky.csproj", "{23F584DB-EB5E-452D-B49F-7C1CABB713FF}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirScout.PlaneFeeds.Plugin.PlaneFinder", "AirScout.PlaneFeeds.Plugin.PlaneFinder\AirScout.PlaneFeeds.Plugin.PlaneFinder.csproj", "{DB85E98A-E209-49D0-B6CF-6CDD5B8E20E3}" @@ -537,18 +535,6 @@ Global {D953C82D-5881-4F5C-8335-1C54114BE28B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {D953C82D-5881-4F5C-8335-1C54114BE28B}.Release|x86.ActiveCfg = Release|Any CPU {D953C82D-5881-4F5C-8335-1C54114BE28B}.Release|x86.Build.0 = Release|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Debug|x86.ActiveCfg = Debug|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Debug|x86.Build.0 = Debug|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Release|Any CPU.Build.0 = Release|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Release|x86.ActiveCfg = Release|Any CPU - {4DDDB65C-0E40-4A69-8775-5B4152C3196D}.Release|x86.Build.0 = Release|Any CPU {23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Debug|Any CPU.Build.0 = Debug|Any CPU {23F584DB-EB5E-452D-B49F-7C1CABB713FF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU diff --git a/AirScout/HorizonDlg.cs b/AirScout/HorizonDlg.cs index 7e16437..498e039 100644 --- a/AirScout/HorizonDlg.cs +++ b/AirScout/HorizonDlg.cs @@ -149,7 +149,7 @@ namespace AirScout // elevation polar chart pm_Elevation_Polar.PlotType = PlotType.Polar; pm_Elevation_Polar.Title = String.Empty; - pm_Elevation_Polar.DefaultFontSize = 6F; + pm_Elevation_Polar.DefaultFontSize = (double)Properties.Settings.Default.Charts_FontSize; pv_Elevation_Polar.BackColor = Color.White; pv_Elevation_Polar.Dock = DockStyle.Fill; pv_Elevation_Polar.Model = pm_Elevation_Polar; @@ -187,7 +187,7 @@ namespace AirScout pv_Elevation_Cartesian.Dock = DockStyle.Fill; pv_Elevation_Cartesian.Model = pm_Elevation_Cartesian; pm_Elevation_Cartesian.Title = String.Empty; - pm_Elevation_Cartesian.DefaultFontSize = 6F; + pm_Elevation_Cartesian.DefaultFontSize = (double)Properties.Settings.Default.Charts_FontSize; // add axes pm_Elevation_Cartesian.Axes.Clear(); // add x-axis @@ -215,7 +215,7 @@ namespace AirScout // distance polar chart pm_Distance_Polar.PlotType = PlotType.Polar; pm_Distance_Polar.Title = String.Empty; - pm_Distance_Polar.DefaultFontSize = 6F; + pm_Distance_Polar.DefaultFontSize = (double)Properties.Settings.Default.Charts_FontSize; pv_Distance_Polar.BackColor = Color.White; pv_Distance_Polar.Dock = DockStyle.Fill; pv_Distance_Polar.Model = pm_Distance_Polar; @@ -253,7 +253,7 @@ namespace AirScout pv_Distance_Cartesian.Dock = DockStyle.Fill; pv_Distance_Cartesian.Model = pm_Distance_Cartesian; pm_Distance_Cartesian.Title = String.Empty; - pm_Distance_Cartesian.DefaultFontSize = 6F; + pm_Distance_Cartesian.DefaultFontSize = (double)Properties.Settings.Default.Charts_FontSize; // add axes pm_Distance_Cartesian.Axes.Clear(); // add x-axis @@ -359,15 +359,17 @@ namespace AirScout horizon.Clear(); } - private void DrawHorizonPoint(int azimuth, HorizonPoint hp) + private void DrawHorizonPoint(int azimuth, HorizonPoint hp, bool closing = false) { Elevation_Polar_Series.Points.Add(new DataPoint(hp.Epsmin / Math.PI * 180.0, azimuth)); pm_Elevation_Polar.InvalidatePlot(true); - Elevation_Cartesian_Series.Points.Add(new DataPoint(azimuth, hp.Epsmin / Math.PI * 180.0)); + if (!closing) + Elevation_Cartesian_Series.Points.Add(new DataPoint(azimuth, hp.Epsmin / Math.PI * 180.0)); pm_Elevation_Cartesian.InvalidatePlot(true); Distance_Polar_Series.Points.Add(new DataPoint(hp.Dist, azimuth)); pm_Distance_Polar.InvalidatePlot(true); - Distance_Cartesian_Series.Points.Add(new DataPoint(azimuth, hp.Dist)); + if (!closing) + Distance_Cartesian_Series.Points.Add(new DataPoint(azimuth, hp.Dist)); pm_Distance_Cartesian.InvalidatePlot(true); LatLon.GPoint gp = LatLon.DestinationPoint(Location.Lat, Location.Lon, azimuth, hp.Dist); PointLatLng p = new PointLatLng(gp.Lat, gp.Lon); @@ -451,8 +453,8 @@ namespace AirScout { DrawHorizonPoint(j, Horizon.Horizon[j]); } - // draw first point again to close the circle - DrawHorizonPoint(0, Horizon.Horizon[0]); + // draw first point again to close the circle in polar modes + DrawHorizonPoint(0, Horizon.Horizon[0],true); } // enable radio buttons btn_Horizon_Calculate.Enabled = true; diff --git a/AirScout/MapDlg.cs b/AirScout/MapDlg.cs index 19ee50c..86a5695 100644 --- a/AirScout/MapDlg.cs +++ b/AirScout/MapDlg.cs @@ -731,7 +731,7 @@ namespace AirScout string filespec = "AirScout.PlaneFeeds.Plugin.*.dll"; // first copy plugins from application directory to plugin directory if they not exist or newer - CopyPlugins(AppDirectory, PluginDirectory, filespec); + CopyPlugins(Path.Combine(AppDirectory,"Plugin"), PluginDirectory, filespec); // check for new plugins on the web resource try @@ -1158,8 +1158,6 @@ namespace AirScout CheckSettings(); // reset topmost state SplashDlg.TopMost = false; - // must have internet connection on FirstRun - CheckInternet(); /* // run database updater once for basic information bw_DatabaseUpdater.RunWorkerAsync(UPDATERSTARTOPTIONS.FIRSTRUN); @@ -1168,6 +1166,8 @@ namespace AirScout Application.DoEvents(); */ SplashDlg.Close(); + // must have internet connection on FirstRun + CheckInternet(); // show FirstRunWizard try { @@ -1826,7 +1826,7 @@ namespace AirScout { // propagation path chart pm_Path.Title = String.Empty; - pm_Path.DefaultFontSize = 6F; + pm_Path.DefaultFontSize = (double)Properties.Settings.Default.Charts_FontSize; pm_Path.IsLegendVisible = false; pv_Path.BackColor = Color.White; pv_Path.Model = pm_Path; @@ -1894,7 +1894,7 @@ namespace AirScout // zoomed elevation chart pm_Elevation.Title = String.Empty; - pm_Elevation.DefaultFontSize = 6F; + pm_Elevation.DefaultFontSize = (double)Properties.Settings.Default.Charts_FontSize; pm_Elevation.IsLegendVisible = false; pv_Elevation.BackColor = Color.White; pv_Elevation.Model = pm_Elevation; @@ -1936,7 +1936,7 @@ namespace AirScout // spectrum chart pm_Spectrum.Title = String.Empty; - pm_Spectrum.DefaultFontSize = 6F; + pm_Spectrum.DefaultFontSize = (double)Properties.Settings.Default.Charts_FontSize; pv_Spectrum.BackColor = Color.White; pv_Spectrum.Model = pm_Spectrum; // add Spectrum series @@ -2063,132 +2063,139 @@ namespace AirScout private void SaveUserSettings() { - Log.WriteMessage("Saving configuration..."); - Properties.Settings.Default.Save(); - if (!SupportFunctions.IsMono) - return; - Console.WriteLine("Creating XML document..."); - XmlDocument doc = new XmlDocument(); - XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null); - XmlElement root = doc.DocumentElement; - doc.InsertBefore(xmlDeclaration, root); - XmlElement configuration = doc.CreateElement(string.Empty, "configuration", string.Empty); - doc.AppendChild(configuration); - XmlElement configsections = doc.CreateElement(string.Empty, "configSections", string.Empty); - configuration.AppendChild(configsections); - XmlElement usersettingsgroup = doc.CreateElement(string.Empty, "sectionGroup", string.Empty); - XmlAttribute usersettingsname = doc.CreateAttribute(string.Empty, "name", string.Empty); - usersettingsname.Value = "userSettings"; - usersettingsgroup.Attributes.Append(usersettingsname); - XmlElement usersection = doc.CreateElement(string.Empty, "section", string.Empty); - XmlAttribute sectionname = doc.CreateAttribute(string.Empty, "name", string.Empty); - sectionname.Value = "AirScout.PlaneFeeds.Properties.Settings"; - usersection.Attributes.Append(sectionname); - XmlAttribute sectiontype = doc.CreateAttribute(string.Empty, "type", string.Empty); - sectiontype.Value = "System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; - usersection.Attributes.Append(sectiontype); - XmlAttribute sectionallowexedefinition = doc.CreateAttribute(string.Empty, "allowExeDefinition", string.Empty); - sectionallowexedefinition.Value = "MachineToLocalUser"; - usersection.Attributes.Append(sectionallowexedefinition); - XmlAttribute sectionrequirepermission = doc.CreateAttribute(string.Empty, "requirePermission", string.Empty); - sectionrequirepermission.Value = "false"; - usersection.Attributes.Append(sectionrequirepermission); - usersettingsgroup.AppendChild(usersection); - configsections.AppendChild(usersettingsgroup); - XmlElement usersettings = doc.CreateElement(string.Empty, "userSettings", string.Empty); - configuration.AppendChild(usersettings); - Console.WriteLine("Writing user settings..."); - // append AirScout.PlaneFeeds properties - Console.WriteLine("Appending AirScout.PlaneFeeds.Properties.Settings.Default node..."); - XmlElement planefeedproperties = doc.CreateElement(string.Empty, AirScout.PlaneFeeds.Properties.Settings.Default.ToString(), string.Empty); - usersettings.AppendChild(planefeedproperties); - foreach (SettingsPropertyValue p in AirScout.PlaneFeeds.Properties.Settings.Default.PropertyValues) + try { - if ((p != null) && (p.Name != null) && (p.PropertyValue != null) && !p.UsingDefaultValue) + Log.WriteMessage("Saving configuration..."); + Properties.Settings.Default.Save(); + if (!SupportFunctions.IsMono) + return; + Console.WriteLine("Creating XML document..."); + XmlDocument doc = new XmlDocument(); + XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null); + XmlElement root = doc.DocumentElement; + doc.InsertBefore(xmlDeclaration, root); + XmlElement configuration = doc.CreateElement(string.Empty, "configuration", string.Empty); + doc.AppendChild(configuration); + XmlElement configsections = doc.CreateElement(string.Empty, "configSections", string.Empty); + configuration.AppendChild(configsections); + XmlElement usersettingsgroup = doc.CreateElement(string.Empty, "sectionGroup", string.Empty); + XmlAttribute usersettingsname = doc.CreateAttribute(string.Empty, "name", string.Empty); + usersettingsname.Value = "userSettings"; + usersettingsgroup.Attributes.Append(usersettingsname); + XmlElement usersection = doc.CreateElement(string.Empty, "section", string.Empty); + XmlAttribute sectionname = doc.CreateAttribute(string.Empty, "name", string.Empty); + sectionname.Value = "AirScout.PlaneFeeds.Properties.Settings"; + usersection.Attributes.Append(sectionname); + XmlAttribute sectiontype = doc.CreateAttribute(string.Empty, "type", string.Empty); + sectiontype.Value = "System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; + usersection.Attributes.Append(sectiontype); + XmlAttribute sectionallowexedefinition = doc.CreateAttribute(string.Empty, "allowExeDefinition", string.Empty); + sectionallowexedefinition.Value = "MachineToLocalUser"; + usersection.Attributes.Append(sectionallowexedefinition); + XmlAttribute sectionrequirepermission = doc.CreateAttribute(string.Empty, "requirePermission", string.Empty); + sectionrequirepermission.Value = "false"; + usersection.Attributes.Append(sectionrequirepermission); + usersettingsgroup.AppendChild(usersection); + configsections.AppendChild(usersettingsgroup); + XmlElement usersettings = doc.CreateElement(string.Empty, "userSettings", string.Empty); + configuration.AppendChild(usersettings); + Console.WriteLine("Writing user settings..."); + // append AirScout.PlaneFeeds properties + Console.WriteLine("Appending AirScout.PlaneFeeds.Properties.Settings.Default node..."); + XmlElement planefeedproperties = doc.CreateElement(string.Empty, AirScout.PlaneFeeds.Properties.Settings.Default.ToString(), string.Empty); + usersettings.AppendChild(planefeedproperties); + foreach (SettingsPropertyValue p in AirScout.PlaneFeeds.Properties.Settings.Default.PropertyValues) { - // Console.WriteLine("Appending " + p.Name + " = " + p.PropertyValue.ToString()); - XmlElement setting = doc.CreateElement(string.Empty, "setting", string.Empty); - XmlAttribute name = doc.CreateAttribute(string.Empty, "name", string.Empty); - name.Value = p.Name.ToString(); - setting.Attributes.Append(name); - XmlAttribute serializeas = doc.CreateAttribute(string.Empty, "serializeAs", string.Empty); - serializeas.Value = p.Property.SerializeAs.ToString(); - setting.Attributes.Append(serializeas); - XmlElement value = doc.CreateElement(string.Empty, "value", string.Empty); - if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.String) + if ((p != null) && (p.Name != null) && (p.PropertyValue != null) && !p.UsingDefaultValue) { - XmlText text = doc.CreateTextNode(p.SerializedValue.ToString()); - value.AppendChild(text); - } - else - { - if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.Xml) + // Console.WriteLine("Appending " + p.Name + " = " + p.PropertyValue.ToString()); + XmlElement setting = doc.CreateElement(string.Empty, "setting", string.Empty); + XmlAttribute name = doc.CreateAttribute(string.Empty, "name", string.Empty); + name.Value = p.Name.ToString(); + setting.Attributes.Append(name); + XmlAttribute serializeas = doc.CreateAttribute(string.Empty, "serializeAs", string.Empty); + serializeas.Value = p.Property.SerializeAs.ToString(); + setting.Attributes.Append(serializeas); + XmlElement value = doc.CreateElement(string.Empty, "value", string.Empty); + if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.String) { - MemoryStream ms = new MemoryStream(); - XmlWriter writer = XmlWriter.Create(ms, new XmlWriterSettings - { - NewLineOnAttributes = true, - OmitXmlDeclaration = true - }); - XmlSerializer serializer = new XmlSerializer(p.PropertyValue.GetType()); - serializer.Serialize(writer, p.PropertyValue); - byte[] text2 = new byte[ms.ToArray().Length - 3]; - Array.Copy(ms.ToArray(), 3, text2, 0, text2.Length); - XmlText xml = doc.CreateTextNode(Encoding.UTF8.GetString(text2.ToArray())); - value.AppendChild(xml); - value.InnerXml = WebUtility.HtmlDecode(value.InnerXml); + XmlText text = doc.CreateTextNode(p.SerializedValue.ToString()); + value.AppendChild(text); } + else + { + if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.Xml) + { + MemoryStream ms = new MemoryStream(); + XmlWriter writer = XmlWriter.Create(ms, new XmlWriterSettings + { + NewLineOnAttributes = true, + OmitXmlDeclaration = true + }); + XmlSerializer serializer = new XmlSerializer(p.PropertyValue.GetType()); + serializer.Serialize(writer, p.PropertyValue); + byte[] text2 = new byte[ms.ToArray().Length - 3]; + Array.Copy(ms.ToArray(), 3, text2, 0, text2.Length); + XmlText xml = doc.CreateTextNode(Encoding.UTF8.GetString(text2.ToArray())); + value.AppendChild(xml); + value.InnerXml = WebUtility.HtmlDecode(value.InnerXml); + } + } + setting.AppendChild(value); + planefeedproperties.AppendChild(setting); } - setting.AppendChild(value); - planefeedproperties.AppendChild(setting); } + // append AirScout properties + Console.WriteLine("Appending AirScout.Properties.Settings.Default node..."); + XmlElement properties = doc.CreateElement(string.Empty, Properties.Settings.Default.ToString(), string.Empty); + usersettings.AppendChild(properties); + foreach (SettingsPropertyValue p in Properties.Settings.Default.PropertyValues) + { + if ((p != null) && (p.Name != null) && (p.PropertyValue != null) && !p.UsingDefaultValue) + { + // Console.WriteLine("Appending " + p.Name + " = " + p.PropertyValue.ToString(); + XmlElement setting = doc.CreateElement(string.Empty, "setting", string.Empty); + XmlAttribute name = doc.CreateAttribute(string.Empty, "name", string.Empty); + name.Value = p.Name.ToString(); + setting.Attributes.Append(name); + XmlAttribute serializeas = doc.CreateAttribute(string.Empty, "serializeAs", string.Empty); + serializeas.Value = p.Property.SerializeAs.ToString(); + setting.Attributes.Append(serializeas); + XmlElement value = doc.CreateElement(string.Empty, "value", string.Empty); + if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.String) + { + XmlText text = doc.CreateTextNode(p.SerializedValue.ToString()); + value.AppendChild(text); + } + else + { + if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.Xml) + { + MemoryStream ms = new MemoryStream(); + XmlWriter writer = XmlWriter.Create(ms, new XmlWriterSettings + { + NewLineOnAttributes = true, + OmitXmlDeclaration = true + }); + XmlSerializer serializer = new XmlSerializer(p.PropertyValue.GetType()); + serializer.Serialize(writer, p.PropertyValue); + byte[] text2 = new byte[ms.ToArray().Length - 3]; + Array.Copy(ms.ToArray(), 3, text2, 0, text2.Length); + XmlText xml = doc.CreateTextNode(Encoding.UTF8.GetString(text2.ToArray())); + value.AppendChild(xml); + value.InnerXml = WebUtility.HtmlDecode(value.InnerXml); + } + } + setting.AppendChild(value); + properties.AppendChild(setting); + } + } + doc.Save(GetUserSettingsPath()); } - // append AirScout properties - Console.WriteLine("Appending AirScout.Properties.Settings.Default node..."); - XmlElement properties = doc.CreateElement(string.Empty, Properties.Settings.Default.ToString(), string.Empty); - usersettings.AppendChild(properties); - foreach (SettingsPropertyValue p in Properties.Settings.Default.PropertyValues) + catch (Exception ex) { - if ((p != null) && (p.Name != null) && (p.PropertyValue != null) && !p.UsingDefaultValue) - { - // Console.WriteLine("Appending " + p.Name + " = " + p.PropertyValue.ToString(); - XmlElement setting = doc.CreateElement(string.Empty, "setting", string.Empty); - XmlAttribute name = doc.CreateAttribute(string.Empty, "name", string.Empty); - name.Value = p.Name.ToString(); - setting.Attributes.Append(name); - XmlAttribute serializeas = doc.CreateAttribute(string.Empty, "serializeAs", string.Empty); - serializeas.Value = p.Property.SerializeAs.ToString(); - setting.Attributes.Append(serializeas); - XmlElement value = doc.CreateElement(string.Empty, "value", string.Empty); - if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.String) - { - XmlText text = doc.CreateTextNode(p.SerializedValue.ToString()); - value.AppendChild(text); - } - else - { - if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.Xml) - { - MemoryStream ms = new MemoryStream(); - XmlWriter writer = XmlWriter.Create(ms, new XmlWriterSettings - { - NewLineOnAttributes = true, - OmitXmlDeclaration = true - }); - XmlSerializer serializer = new XmlSerializer(p.PropertyValue.GetType()); - serializer.Serialize(writer, p.PropertyValue); - byte[] text2 = new byte[ms.ToArray().Length - 3]; - Array.Copy(ms.ToArray(), 3, text2, 0, text2.Length); - XmlText xml = doc.CreateTextNode(Encoding.UTF8.GetString(text2.ToArray())); - value.AppendChild(xml); - value.InnerXml = WebUtility.HtmlDecode(value.InnerXml); - } - } - setting.AppendChild(value); - properties.AppendChild(setting); - } + Console.WriteLine("Unable to save settings: " + ex.ToString()); } - doc.Save(GetUserSettingsPath()); } #endregion @@ -2197,9 +2204,6 @@ namespace AirScout private void OnIdle(object sender, EventArgs args) { - // enable/disable watchlist button - if (btn_Control_Manage_Watchlist.Enabled == Properties.Settings.Default.Watchlist_SyncWithKST) - btn_Control_Manage_Watchlist.Enabled = !Properties.Settings.Default.Watchlist_SyncWithKST; } #endregion @@ -2813,6 +2817,10 @@ namespace AirScout Say("Options"); if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { + // enbale/disable manage watchlist button + btn_Control_Manage_Watchlist.Enabled = !Properties.Settings.Default.Watchlist_SyncWithKST; + // Re-initialze charts + InitializeCharts(); // clear paths cache assuming that new options were set ElevationPaths.Clear(); PropagationPaths.Clear(); @@ -2837,18 +2845,6 @@ namespace AirScout bw_PlaneFeed2 = null; bw_PlaneFeed3 = null; - /* - foreach (PlaneFeed feed in PlaneFeeds) - { - if (Properties.Settings.Default.Planes_PlaneFeed1 == feed.Name) - bw_PlaneFeed1 = feed; - if (Properties.Settings.Default.Planes_PlaneFeed2 == feed.Name) - bw_PlaneFeed2 = feed; - if (Properties.Settings.Default.Planes_PlaneFeed3 == feed.Name) - bw_PlaneFeed3 = feed; - } - - */ if (PlaneFeedPlugins != null) { foreach (IPlaneFeedPlugin plugin in PlaneFeedPlugins) @@ -4030,6 +4026,7 @@ namespace AirScout // update listview lv_Control_Watchlist.BeginUpdate(); lv_Control_Watchlist.Items.Clear(); + Properties.Settings.Default.Watchlist.Sort(); // run twice, add checked items first, then all others foreach (WatchlistItem item in Properties.Settings.Default.Watchlist) { @@ -4143,6 +4140,7 @@ namespace AirScout if (item.Overlay == gmo_Callsigns) { string call = (string)item.Tag; + // check if callsign clicked and not own callsign if (Callsign.Check(call) && (call != Properties.Settings.Default.MyCall)) { if (PathMode == AIRSCOUTPATHMODE.MULTI) @@ -4160,6 +4158,24 @@ namespace AirScout UpdatePaths(); } } + else if (PathMode == AIRSCOUTPATHMODE.SINGLE) + { + // search call on watchlist + int index = Properties.Settings.Default.Watchlist.IndexOf(call); + if (index >= 0) + { + string loc = Properties.Settings.Default.Watchlist.ElementAt(index).Loc; + // get location info from database + LocationDesignator ld = LocationFindOrCreate(call, loc); + Properties.Settings.Default.DXCall = ld.Call; + Properties.Settings.Default.DXLat = ld.Lat; + Properties.Settings.Default.DXLon = ld.Lon; + UpdateStatus(); + // update paths if running + if (PlayMode == AIRSCOUTPLAYMODE.FORWARD) + UpdatePaths(); + } + } } } // check if plane clicked @@ -4635,6 +4651,9 @@ namespace AirScout private void tp_Control_Multi_Enter(object sender, EventArgs e) { + // enbale/disable manage watchlist button + btn_Control_Manage_Watchlist.Enabled = !Properties.Settings.Default.Watchlist_SyncWithKST; + if (PathMode != AIRSCOUTPATHMODE.MULTI) { PathMode = AIRSCOUTPATHMODE.MULTI; @@ -5876,13 +5895,14 @@ namespace AirScout { Stopwatch st = new Stopwatch(); st.Start(); - // mark all watchlist items to remove + // mark all watchlist items to remove wich are not currently tracked foreach (WatchlistItem item in Properties.Settings.Default.Watchlist) { // nasty!! Should never be null! if (item == null) continue; - item.Remove = true; + if (!item.Checked) + item.Remove = true; } // split message string[] a = msg.Data.Split(','); diff --git a/AirScout/MapDlg.resx b/AirScout/MapDlg.resx index 49427b5..e4da65a 100644 --- a/AirScout/MapDlg.resx +++ b/AirScout/MapDlg.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACc - DQAAAk1TRnQBSQFMAgEBAwEAAWgBCwFoAQsBIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + DQAAAk1TRnQBSQFMAgEBAwEAAXABCwFwAQsBIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABgAMAASADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -340,7 +340,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACM - DAAAAk1TRnQBSQFMAwEBAAHQAQkB0AEJASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + DAAAAk1TRnQBSQFMAwEBAAHYAQkB2AEJASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA AYADAAEgAwABAQEAAQgGAAEQGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm diff --git a/AirScout/OptionsDlg.Designer.cs b/AirScout/OptionsDlg.Designer.cs index 312ff00..0d269d1 100644 --- a/AirScout/OptionsDlg.Designer.cs +++ b/AirScout/OptionsDlg.Designer.cs @@ -422,6 +422,9 @@ this.bw_SRTM1_MapUpdater = new System.ComponentModel.BackgroundWorker(); this.bw_GLOBE_MapUpdater = new System.ComponentModel.BackgroundWorker(); this.bw_StationDataUpdater = new System.ComponentModel.BackgroundWorker(); + this.groupBox37 = new System.Windows.Forms.GroupBox(); + this.ud_Options_Charts_FontSize = new System.Windows.Forms.NumericUpDown(); + this.label34 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.pb_Donate)).BeginInit(); this.tab_Options_Planes.SuspendLayout(); this.groupBox48.SuspendLayout(); @@ -492,6 +495,8 @@ this.groupBox28.SuspendLayout(); this.tab_Options_Info.SuspendLayout(); this.ss_Options.SuspendLayout(); + this.groupBox37.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ud_Options_Charts_FontSize)).BeginInit(); this.SuspendLayout(); // // btn_Options_OK @@ -1802,6 +1807,7 @@ // tab_Options_Map // this.tab_Options_Map.BackColor = System.Drawing.SystemColors.Control; + this.tab_Options_Map.Controls.Add(this.groupBox37); this.tab_Options_Map.Controls.Add(this.groupBox39); this.tab_Options_Map.Controls.Add(this.groupBox23); this.tab_Options_Map.Controls.Add(this.groupBox30); @@ -1945,9 +1951,9 @@ this.groupBox30.Controls.Add(this.label81); this.groupBox30.Controls.Add(this.label80); this.groupBox30.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.groupBox30.Location = new System.Drawing.Point(446, 301); + this.groupBox30.Location = new System.Drawing.Point(424, 301); this.groupBox30.Name = "groupBox30"; - this.groupBox30.Size = new System.Drawing.Size(211, 154); + this.groupBox30.Size = new System.Drawing.Size(233, 154); this.groupBox30.TabIndex = 6; this.groupBox30.TabStop = false; this.groupBox30.Text = "Plane Icon Sizes per Category"; @@ -2074,7 +2080,7 @@ this.groupBox7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupBox7.Location = new System.Drawing.Point(14, 301); this.groupBox7.Name = "groupBox7"; - this.groupBox7.Size = new System.Drawing.Size(415, 154); + this.groupBox7.Size = new System.Drawing.Size(394, 154); this.groupBox7.TabIndex = 5; this.groupBox7.TabStop = false; this.groupBox7.Text = "Info Window Elements"; @@ -2086,7 +2092,7 @@ this.groupBox29.Controls.Add(this.label75); this.groupBox29.Location = new System.Drawing.Point(256, 19); this.groupBox29.Name = "groupBox29"; - this.groupBox29.Size = new System.Drawing.Size(139, 123); + this.groupBox29.Size = new System.Drawing.Size(129, 123); this.groupBox29.TabIndex = 19; this.groupBox29.TabStop = false; // @@ -2277,7 +2283,7 @@ this.groupBox22.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupBox22.Location = new System.Drawing.Point(13, 226); this.groupBox22.Name = "groupBox22"; - this.groupBox22.Size = new System.Drawing.Size(644, 69); + this.groupBox22.Size = new System.Drawing.Size(395, 69); this.groupBox22.TabIndex = 4; this.groupBox22.TabStop = false; this.groupBox22.Text = "Info Window Options"; @@ -2324,7 +2330,7 @@ // btn_Options_SelectFont // this.btn_Options_SelectFont.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btn_Options_SelectFont.Location = new System.Drawing.Point(514, 37); + this.btn_Options_SelectFont.Location = new System.Drawing.Point(280, 37); this.btn_Options_SelectFont.Name = "btn_Options_SelectFont"; this.btn_Options_SelectFont.Size = new System.Drawing.Size(106, 23); this.btn_Options_SelectFont.TabIndex = 2; @@ -2349,7 +2355,7 @@ this.tb_Options_Map_ToolTipFont.Location = new System.Drawing.Point(72, 39); this.tb_Options_Map_ToolTipFont.Name = "tb_Options_Map_ToolTipFont"; this.tb_Options_Map_ToolTipFont.ReadOnly = true; - this.tb_Options_Map_ToolTipFont.Size = new System.Drawing.Size(417, 20); + this.tb_Options_Map_ToolTipFont.Size = new System.Drawing.Size(179, 20); this.tb_Options_Map_ToolTipFont.TabIndex = 0; this.tb_Options_Map_ToolTipFont.Text = global::AirScout.Properties.Settings.Default.Map_ToolTipFont; // @@ -5339,6 +5345,48 @@ this.bw_StationDataUpdater.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.bw_StationDataUpdater_ProgressChanged); this.bw_StationDataUpdater.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.bw_StationDataUpdater_RunWorkerCompleted); // + // groupBox37 + // + this.groupBox37.Controls.Add(this.label34); + this.groupBox37.Controls.Add(this.ud_Options_Charts_FontSize); + this.groupBox37.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.groupBox37.Location = new System.Drawing.Point(415, 227); + this.groupBox37.Name = "groupBox37"; + this.groupBox37.Size = new System.Drawing.Size(242, 68); + this.groupBox37.TabIndex = 9; + this.groupBox37.TabStop = false; + this.groupBox37.Text = "Chart Window Options"; + // + // ud_Options_Charts_FontSize + // + this.ud_Options_Charts_FontSize.DataBindings.Add(new System.Windows.Forms.Binding("Value", global::AirScout.Properties.Settings.Default, "Charts_FontSize", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.ud_Options_Charts_FontSize.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.ud_Options_Charts_FontSize.Location = new System.Drawing.Point(184, 39); + this.ud_Options_Charts_FontSize.Maximum = new decimal(new int[] { + 16, + 0, + 0, + 0}); + this.ud_Options_Charts_FontSize.Minimum = new decimal(new int[] { + 6, + 0, + 0, + 0}); + this.ud_Options_Charts_FontSize.Name = "ud_Options_Charts_FontSize"; + this.ud_Options_Charts_FontSize.Size = new System.Drawing.Size(45, 22); + this.ud_Options_Charts_FontSize.TabIndex = 0; + this.ud_Options_Charts_FontSize.Value = global::AirScout.Properties.Settings.Default.Charts_FontSize; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label34.Location = new System.Drawing.Point(7, 41); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(174, 13); + this.label34.TabIndex = 2; + this.label34.Text = "Font Size for Axes in Diagrams etc.:"; + // // OptionsDlg // this.AcceptButton = this.btn_Options_OK; @@ -5470,6 +5518,9 @@ this.tab_Options_Info.PerformLayout(); this.ss_Options.ResumeLayout(false); this.ss_Options.PerformLayout(); + this.groupBox37.ResumeLayout(false); + this.groupBox37.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ud_Options_Charts_FontSize)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -5869,5 +5920,8 @@ private System.Windows.Forms.Button btn_Options_PlaneFeed2_Default; private System.Windows.Forms.Button btn_Options_PlaneFeed1_Default; private System.Windows.Forms.CheckBox cb_Options_Map_LabelCalls; + private System.Windows.Forms.GroupBox groupBox37; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.NumericUpDown ud_Options_Charts_FontSize; } } \ No newline at end of file diff --git a/AirScout/OptionsDlg.cs b/AirScout/OptionsDlg.cs index d6df9ba..f877a2f 100644 --- a/AirScout/OptionsDlg.cs +++ b/AirScout/OptionsDlg.cs @@ -1694,7 +1694,14 @@ namespace AirScout ID = ID + "," + DateTime.UtcNow.ToString("u"); ID = ID + "," + System.Security.Principal.WindowsIdentity.GetCurrent().Name; feed.DisclaimerAccepted = ID; - feed.SaveSettings(); + try + { + feed.SaveSettings(); + } + catch (Exception ex) + { + Log.WriteMessage(ex.ToString()); + } } else { @@ -1740,7 +1747,14 @@ namespace AirScout ID = ID + "," + DateTime.UtcNow.ToString("u"); ID = ID + "," + System.Security.Principal.WindowsIdentity.GetCurrent().Name; feed.DisclaimerAccepted = ID; - feed.SaveSettings(); + try + { + feed.SaveSettings(); + } + catch (Exception ex) + { + Log.WriteMessage(ex.ToString()); + } } else { @@ -1786,7 +1800,14 @@ namespace AirScout ID = ID + "," + DateTime.UtcNow.ToString("u"); ID = ID + "," + System.Security.Principal.WindowsIdentity.GetCurrent().Name; feed.DisclaimerAccepted = ID; - feed.SaveSettings(); + try + { + feed.SaveSettings(); + } + catch (Exception ex) + { + Log.WriteMessage(ex.ToString()); + } } else { diff --git a/AirScout/Program.cs b/AirScout/Program.cs index e693b81..f08e55f 100644 --- a/AirScout/Program.cs +++ b/AirScout/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.InteropServices; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; @@ -8,6 +9,11 @@ namespace AirScout { static class Program { + + [DllImport("kernel32.dll")] + static extern bool AttachConsole(int dwProcessId); + private const int ATTACH_PARENT_PROCESS = -1; + // Mutex to ensure that only one instance is running static System.Threading.Mutex singleton = new Mutex(true, Application.ProductName); /// @@ -25,12 +31,21 @@ namespace AirScout } else */ + try { + // redirect console output to parent process; + // must be before any calls to Console.WriteLine() + // this will crash on Linux/Mono for sure --> handle exception + AttachConsole(ATTACH_PARENT_PROCESS); + } + catch (Exception ex) + { + // do nothing + } // run program normally Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MapDlg()); - } } } } diff --git a/AirScout/Properties/AssemblyInfo.cs b/AirScout/Properties/AssemblyInfo.cs index fc67a64..0290e6f 100644 --- a/AirScout/Properties/AssemblyInfo.cs +++ b/AirScout/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.3.1.0")] -[assembly: AssemblyFileVersion("1.3.1.0")] +[assembly: AssemblyVersion("1.3.2.0")] +[assembly: AssemblyFileVersion("1.3.2.0")] diff --git a/AirScout/Properties/Settings.Designer.cs b/AirScout/Properties/Settings.Designer.cs index 6cdfd7c..5791d8f 100644 --- a/AirScout/Properties/Settings.Designer.cs +++ b/AirScout/Properties/Settings.Designer.cs @@ -1536,7 +1536,7 @@ namespace AirScout.Properties { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.DefaultSettingValueAttribute("True")] public bool Watchlist_SyncWithKST { get { return ((bool)(this["Watchlist_SyncWithKST"])); @@ -2232,5 +2232,17 @@ Digital data base on the World Wide Web (URL: http://www.ngdc.noaa.gov/mgg/topo/ this["Map_LabelCalls"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("6")] + public decimal Charts_FontSize { + get { + return ((decimal)(this["Charts_FontSize"])); + } + set { + this["Charts_FontSize"] = value; + } + } } } diff --git a/AirScout/Properties/Settings.settings b/AirScout/Properties/Settings.settings index 0542bd1..bb59fb3 100644 --- a/AirScout/Properties/Settings.settings +++ b/AirScout/Properties/Settings.settings @@ -381,7 +381,7 @@ http://www.airscout.eu - False + True True @@ -586,5 +586,8 @@ MEaSUREs data and products are available at no charge from the LP DAAC.See https True + + 6 + \ No newline at end of file diff --git a/AirScout/VersionHistory.txt b/AirScout/VersionHistory.txt index 3066c3c..0a105fd 100644 --- a/AirScout/VersionHistory.txt +++ b/AirScout/VersionHistory.txt @@ -209,3 +209,14 @@ Initial Version - Feature: New web feed from OpenSky Network implenented (a free community) - Bugfix: AirScout crashed when the "Info" tab in the "Options" dialog box is opened twice after doing some other stuff --> fixed (tnx G0LGS) +2020-xx-xx: V1.3.2.0 +==================== + +- Bugfix: Several limitations on Windows XP, program crashes while opening Options Dialog, users cannot save plane feed settings --> fixed (tnx OK1TEH) +- Feature: Users can click on the watchlist markers on the map to change path immediately in SINGLE mode (tnx GM4JTJ) +- Feature: Change font size in charts via "Options/Map" (tnx LZ2ZP) +- Bugfix: Radio Horizon shows an unwanted strike through in Cartesian diagram --> fixed (tnx LZ2ZP) +- Feature: Redirect console output, users can run AirScout from a command line and see all console output for debugging (like on Linux) +- Bugfix: Watchlist was not properly sorted when synchronized with wtKST --> fixed +- Bugfix: "Orphan paths" when watchlist synchronized with wtKST and user leaves the chat --> fixed, call is kept on watchlist now as long as it is selected + diff --git a/AirScout/Watchlist.cs b/AirScout/Watchlist.cs index 0a1b04c..857e7d2 100644 --- a/AirScout/Watchlist.cs +++ b/AirScout/Watchlist.cs @@ -8,7 +8,7 @@ namespace AirScout /// /// Holds the watchlist item /// - public class WatchlistItem + public class WatchlistItem : IComparable { public string Call { get; set; } public string Loc { get; set; } @@ -28,7 +28,7 @@ namespace AirScout } public WatchlistItem(string call, string loc, bool oor) : this(call, loc, oor, false, false) { } - public WatchlistItem(string call, string loc, bool oor, bool check, bool selected ) + public WatchlistItem(string call, string loc, bool oor, bool check, bool selected) { Call = call; Loc = loc; @@ -38,13 +38,25 @@ namespace AirScout Remove = false; } - } + public int CompareTo(WatchlistItem other) + { + // If other is not a valid object reference, this instance is greater. + if (other == null) return 1; - /// - /// Holds the watchlist, e.g. a list of watchlist items - /// - public class Watchlist : List - { + // compare call signs first + int i = String.Compare(this.Call, other.Call); + if (i != 0) + return i; + // then compare locs when calls are equal + return String.Compare(this.Loc, other.Loc); + } + + } + /// + /// Holds the watchlist, e.g. a list of watchlist items + /// + public class Watchlist : List + { public Watchlist() { diff --git a/AirScout/app.config b/AirScout/app.config index c87eb82..18903a8 100644 --- a/AirScout/app.config +++ b/AirScout/app.config @@ -385,7 +385,7 @@ http://www.airscout.eu - False + True True @@ -585,6 +585,9 @@ MEaSUREs data and products are available at no charge from the LP DAAC.See https True + + 6 + diff --git a/ElevationTileGenerator/ElevationTileGenerator.csproj b/ElevationTileGenerator/ElevationTileGenerator.csproj index a181ec1..3101e7a 100644 --- a/ElevationTileGenerator/ElevationTileGenerator.csproj +++ b/ElevationTileGenerator/ElevationTileGenerator.csproj @@ -15,6 +15,21 @@ + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true AnyCPU @@ -117,6 +132,10 @@ {ee86e933-d883-4b18-80eb-0fba55ec67c6} ScoutBase.Core + + {89E6C7A3-6064-479E-A710-37C7293CF47C} + ScoutBase.Database + {009cabfd-726d-481f-972d-0a218e0ad9b9} ScoutBase.Elevation @@ -126,6 +145,13 @@ SQLiteDatabase + + + False + .NET Framework 3.5 SP1 + false + + @@ -134,6 +160,10 @@ + + + + cut column names to its right length + for (int i = 0; i < dt.Columns.Count; i++) + { + int j = 0; + while ((j < dt.Columns[i].ColumnName.Length) && (Char.IsLetter(dt.Columns[i].ColumnName[j]) || Char.IsDigit(dt.Columns[i].ColumnName[j]))) + j++; + dt.Columns[i].ColumnName = dt.Columns[i].ColumnName.Substring(0, j); + Console.Write("'" + dt.Columns[i].ColumnName + "[" + dt.Columns[i].ColumnName.Length + "]', "); + } + Console.WriteLine(); } - // Linux/Mono hack --> cut column names to its right length - for (int i = 0; i < dt.Columns.Count; i++) + catch (Exception ex) { - int j = 0; - while ((j < dt.Columns[i].ColumnName.Length) && (Char.IsLetter(dt.Columns[i].ColumnName[j]) || Char.IsDigit(dt.Columns[i].ColumnName[j]))) - j++; - dt.Columns[i].ColumnName = dt.Columns[i].ColumnName.Substring(0, j); - Console.Write("'" + dt.Columns[i].ColumnName + "[" + dt.Columns[i].ColumnName.Length + "]', "); + Console.WriteLine("SQLiteDatabase.Select: fatal error while executing command <" + sql + ">\n\n" + ex.ToString()); } - Console.WriteLine(); return dt; } public DataTable Select (SQLiteCommand cmd) { DataTable dt = new DataTable(); - lock (cmd) + try { - SQLiteDataAdapter da = new SQLiteDataAdapter(cmd); - da.Fill(dt); + lock (cmd) + { + SQLiteDataAdapter da = new SQLiteDataAdapter(cmd); + da.Fill(dt); + } + } + catch (Exception ex) + { + Console.WriteLine("SQLiteDatabase.Select: fatal error while executing command <" + cmd.CommandText + ">\n\n" + ex.ToString()); } return dt; }