From 42dc1d36235292786322d28340a81c6cb3fd46c0 Mon Sep 17 00:00:00 2001 From: hurter Date: Wed, 31 Aug 2011 16:25:05 +0000 Subject: --- SimpleRadar/Config.cs | 257 ++ SimpleRadar/FormSimpleRadar.Designer.cs | 74 + SimpleRadar/FormSimpleRadar.cs | 298 +++ SimpleRadar/FormSimpleRadar.resx | 361 +++ SimpleRadar/FranceMap.cs | 71 + SimpleRadar/Program.cs | 21 + SimpleRadar/Properties/AssemblyInfo.cs | 36 + SimpleRadar/Properties/Resources.Designer.cs | 71 + SimpleRadar/Properties/Resources.resx | 117 + SimpleRadar/Properties/Settings.Designer.cs | 30 + SimpleRadar/Properties/Settings.settings | 7 + SimpleRadar/SimpleRadar.csproj | 128 + SimpleRadar/SimpleRadar.csproj.user | 14 + SimpleRadar/UserControlRadarView.Designer.cs | 49 + SimpleRadar/UserControlRadarView.cs | 2554 ++++++++++++++++++ SimpleRadar/UserControlRadarView.resx | 120 + SimpleRadar/balises.xml | 1949 ++++++++++++++ SimpleRadar/bin/Debug/Data.exe | Bin 0 -> 23040 bytes SimpleRadar/bin/Debug/Data.pdb | Bin 0 -> 71168 bytes SimpleRadar/bin/Debug/Ivy.dll | Bin 0 -> 65536 bytes SimpleRadar/bin/Debug/IvyBus.IvyControl.dll | Bin 0 -> 13312 bytes SimpleRadar/bin/Debug/SimpleRadar.exe | Bin 0 -> 101376 bytes SimpleRadar/bin/Debug/SimpleRadar.pdb | Bin 0 -> 103936 bytes SimpleRadar/bin/Debug/SimpleRadar.vshost.exe | Bin 0 -> 11600 bytes .../bin/Debug/SimpleRadar.vshost.exe.manifest | 11 + SimpleRadar/bin/Debug/balises.xml | 1949 ++++++++++++++ SimpleRadar/bin/Debug/routes.xml | 39 + SimpleRadar/bin/Debug/sectors.xml | 2824 ++++++++++++++++++++ .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 18361 bytes .../DesignTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 6730 bytes .../obj/x86/Debug/GenerateResource.read.1.tlog | Bin 0 -> 782 bytes .../obj/x86/Debug/GenerateResource.write.1.tlog | Bin 0 -> 1770 bytes .../obj/x86/Debug/ResolveAssemblyReference.cache | Bin 0 -> 36198 bytes .../Debug/SimpleRadar.FormSimpleRadar.resources | Bin 0 -> 14500 bytes .../SimpleRadar.Properties.Resources.resources | Bin 0 -> 180 bytes .../SimpleRadar.UserControlRadarView.resources | Bin 0 -> 180 bytes .../Debug/SimpleRadar.csproj.FileListAbsolute.txt | 34 + SimpleRadar/obj/x86/Debug/SimpleRadar.exe | Bin 0 -> 101376 bytes SimpleRadar/obj/x86/Debug/SimpleRadar.pdb | Bin 0 -> 103936 bytes SimpleRadar/routes.xml | 39 + SimpleRadar/sectors.xml | 2824 ++++++++++++++++++++ SimpleRadar/simpleRadar.ico | Bin 0 -> 13934 bytes 42 files changed, 13877 insertions(+) create mode 100644 SimpleRadar/Config.cs create mode 100644 SimpleRadar/FormSimpleRadar.Designer.cs create mode 100644 SimpleRadar/FormSimpleRadar.cs create mode 100644 SimpleRadar/FormSimpleRadar.resx create mode 100644 SimpleRadar/FranceMap.cs create mode 100644 SimpleRadar/Program.cs create mode 100644 SimpleRadar/Properties/AssemblyInfo.cs create mode 100644 SimpleRadar/Properties/Resources.Designer.cs create mode 100644 SimpleRadar/Properties/Resources.resx create mode 100644 SimpleRadar/Properties/Settings.Designer.cs create mode 100644 SimpleRadar/Properties/Settings.settings create mode 100644 SimpleRadar/SimpleRadar.csproj create mode 100644 SimpleRadar/SimpleRadar.csproj.user create mode 100644 SimpleRadar/UserControlRadarView.Designer.cs create mode 100644 SimpleRadar/UserControlRadarView.cs create mode 100644 SimpleRadar/UserControlRadarView.resx create mode 100644 SimpleRadar/balises.xml create mode 100644 SimpleRadar/bin/Debug/Data.exe create mode 100644 SimpleRadar/bin/Debug/Data.pdb create mode 100644 SimpleRadar/bin/Debug/Ivy.dll create mode 100644 SimpleRadar/bin/Debug/IvyBus.IvyControl.dll create mode 100644 SimpleRadar/bin/Debug/SimpleRadar.exe create mode 100644 SimpleRadar/bin/Debug/SimpleRadar.pdb create mode 100644 SimpleRadar/bin/Debug/SimpleRadar.vshost.exe create mode 100644 SimpleRadar/bin/Debug/SimpleRadar.vshost.exe.manifest create mode 100644 SimpleRadar/bin/Debug/balises.xml create mode 100644 SimpleRadar/bin/Debug/routes.xml create mode 100644 SimpleRadar/bin/Debug/sectors.xml create mode 100644 SimpleRadar/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 SimpleRadar/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 SimpleRadar/obj/x86/Debug/GenerateResource.read.1.tlog create mode 100644 SimpleRadar/obj/x86/Debug/GenerateResource.write.1.tlog create mode 100644 SimpleRadar/obj/x86/Debug/ResolveAssemblyReference.cache create mode 100644 SimpleRadar/obj/x86/Debug/SimpleRadar.FormSimpleRadar.resources create mode 100644 SimpleRadar/obj/x86/Debug/SimpleRadar.Properties.Resources.resources create mode 100644 SimpleRadar/obj/x86/Debug/SimpleRadar.UserControlRadarView.resources create mode 100644 SimpleRadar/obj/x86/Debug/SimpleRadar.csproj.FileListAbsolute.txt create mode 100644 SimpleRadar/obj/x86/Debug/SimpleRadar.exe create mode 100644 SimpleRadar/obj/x86/Debug/SimpleRadar.pdb create mode 100644 SimpleRadar/routes.xml create mode 100644 SimpleRadar/sectors.xml create mode 100644 SimpleRadar/simpleRadar.ico (limited to 'SimpleRadar') diff --git a/SimpleRadar/Config.cs b/SimpleRadar/Config.cs new file mode 100644 index 0000000..42a0016 --- /dev/null +++ b/SimpleRadar/Config.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Drawing; + +namespace SimpleRadar +{ + class Config + { + #region Anoto Pen Configuration + + public static float DxAnotoPen = 0.01f; + public static float DyAnotoPen = 0.01f; + + + #endregion + + #region General settings + + public static string picturesFolderName = "pictures"; + + #endregion + + #region Map drawing settings + + public static int initialZoom = 3; + + public static string selectedSectorName = "T2"; + + public static Pen franceDrawingPen = new Pen(Color.FromArgb(250, Color.DarkGray), 1.0f); + + public static Pen defaultDrawPlotsPen = new Pen(Color.FromArgb(200, Color.White), 0.1f); + public static Pen defaultDrawLinePen = new Pen(Color.FromArgb(150, Color.White), 0.1f); + public static Color defaultDrawStringColor = Color.FromArgb(240, Color.White); + public static Font defaultAircraftTagFont = new Font("Arial", 9, FontStyle.Bold); + + public static string descentTendency = "-"; + public static string stableTendency = ""; + public static string climbTendency = "+"; + + #endregion + + #region Alidade settings + + public static Pen alidadePen = new Pen(Color.FromArgb(250, Color.Red), 2.0f); + public static int alidadeDistancePrecision = 1; + public static Font alidadeDistanceFont = new Font("Arial", 12, FontStyle.Bold); + public static Color alidadeDistanceColor = Color.FromArgb(250, Color.LightGray); + public static int alidadeDistanceXShift = 10; + public static int alidadeDistanceYShift = 0; + public static string alidadeDistanceSuffix = " NM"; + public static float alidadeDistanceCoefficient = 1f; + + //public static int alidadeLabelWidth = 180; + public static int alidadeLabelWidth = 100; + public static int alidadeLabelHeight = 30; + public static Font alidadeLabelFont = new Font("Times New Roman", 18, FontStyle.Bold); + //public static string alidadeLabelUnselectedText = "Alidade inactive"; + public static string alidadeLabelUnselectedText = "Alidade"; + public static Color alidadeLabelUnselectedForeColor = Color.FromArgb(100, Color.DarkGray); + public static Color alidadeLabelUnselectedBackColor = Color.FromArgb(0, Color.White); + //public static string alidadeLabelSelectedText = "Alidade active"; + public static string alidadeLabelSelectedText = "Alidade"; + public static Color alidadeLabelSelectedForeColor = Color.FromArgb(100, Color.Black); + public static Color alidadeLabelSelectedBackColor = Color.FromArgb(0, Color.White); + + #endregion + + #region Clock settings + + public static Color clockLabelForeColor = Color.FromArgb(100, Color.DarkGray); + public static Color clockLabelBackColor = Color.FromArgb(0, Color.White); + public static Font clockLabelFont = new Font("Times New Roman", 18, FontStyle.Bold); + public static int clockLabelWidth = 80; + public static int clockLabelHeight = 30; + + #endregion + + #region Selected aircraft settings + + public static int aircraftSelectedTimerRadius = 900; + public static int aircraftSelectedTimerInterval = 20; + public static Pen aircraftSelectedPen = new Pen(Color.FromArgb(80, Color.Blue), 5.0f); + public static int firstSelectedAircraftCircleRadiusDecrease = 150; + public static int secondSelectedAircraftCircleRadiusDecrease = 40; + public static int aircraftSelectedCircleRadiusMinimumSize = 20; + + #endregion + + #region Warning aircraft settings + + public static Pen warningDrawPlotsPen = new Pen(Color.FromArgb(250, Color.Orange), 0.4f); + public static Color warningFillPolygonColor = Color.FromArgb(255, Color.Orange); + + #endregion + + #region Part aircraft settings + + public static Pen partDrawPlotsPen = new Pen(Color.FromArgb(250, Color.Aqua), 0.4f); + public static Color defaultFillPartRectangleColor = Color.FromArgb(255, Color.Chocolate); + + #endregion + + #region Followed aircraft settings + + public static Font followedAircraftFont = new Font("Arial", 12, FontStyle.Bold); + public static Color followedAircraftColor = Color.FromArgb(150, Color.Blue); + public static string picturesUsedArrowsNamesSuffix = "BlueArrow.png"; + + #endregion + + #region Beacon separation aircraft settings + + public static Font separationBeaconDistancesFont = new Font("Arial", 10, FontStyle.Bold); + public static Color separationBeaconDistanceOneColor = Color.FromArgb(200, Color.LightBlue); + public static Pen separationBeaconDistanceOnePen = new Pen(separationBeaconDistanceOneColor, 3.0f); + public static Color separationBeaconDistanceTwoColor = Color.FromArgb(200, Color.LightPink); + public static Pen separationBeaconDistanceTwoPen = new Pen(separationBeaconDistanceTwoColor, 2.5f); + public static Color goodSeparationDistanceColor = Color.FromArgb(200, Color.LightGreen); + public static Color wrongSeparationDistanceColor = Color.FromArgb(200, Color.Red); + public static Pen thicksJointLinesPen = new Pen(Color.FromArgb(200, Color.White), 1.5f); + public static System.Drawing.Drawing2D.DashStyle thicksJointLinesPenDashStyle = System.Drawing.Drawing2D.DashStyle.DashDotDot; + public static int thicksOneEllipseSize = 10; + public static int thicksTwoEllipseSize = 8; + public static int minimumAvailableDistance = 5; + + #endregion + + #region ModS settings + + public static int aircraftModsTimerInterval = 200; + public static int aircraftModsTimerSecondsLifeTime = 6; + public static int aircraftModsTimerRadius = 40; + public static int aircraftModsTimerIterationsToFocus = 20; + public static Font modsFont = new Font("Arial", 9, FontStyle.Bold); + public static Color modsNormalColor = Color.White; + public static Color modsUnsucceedColor = Color.Aqua; + public static Color modsSucceedColor = Color.Black; + public static string modsPrefix = "<"; + public static string modsSuffix = ">"; + + #endregion + + #region CFL filter settings + + public static Font filterActiveFont = new Font("Arial", 50, FontStyle.Bold); + public static Color filterActiveColor = Color.FromArgb(50, Color.LightGray); + public static Pen unfilteredDrawPlotsPen = new Pen(Color.FromArgb(100, Color.LightGray), 0.1f); + public static Color unfilteredFillPartRectangleColor = Color.FromArgb(80, Color.Chocolate); + public static Pen filteredDrawLinePen = new Pen(Color.FromArgb(255, Color.White), 0.3f); + public static Pen unfilteredDrawLinePen = new Pen(Color.FromArgb(180, Color.LightGray), 0.1f); + public static Color unfilteredDrawStringColor = Color.FromArgb(180, Color.LightGray); + public static Font filteredAircraftTagFont = new Font("Arial", 11, FontStyle.Bold); + + #endregion + + #region Alarms settings + + public static int aircraftAlarmsTimerInterval = 200; + public static int aircraftAlarmsTimerSecondsLifeTime = 10; + public static int aircraftAlarmsTimerFeedbackSecondsLifeTime = 5; + public static int aircraftAlarmsTimerRadius = 40; + public static int aircraftAlarmsTimerIterationsToFocus = 20; + public static Font alarmFont = new Font("Arial", 9, FontStyle.Bold); + public static Color alarmColor = Color.FromArgb(255, Color.White); + public static Color alarmCircleColor = Color.FromArgb(200, Color.Aqua); + public static string clockPictureName = "clock.png"; + + #endregion + + #region Information messages settings + + public static Color iInformationMessageLabelBackColor = Color.Transparent; + public static Color iInformationMessageLabelForeColor = Color.Aqua; + public static string iInformationMessageLabelText = "i"; + public static string iInformationMessageLabelFontFamily = "Blackadder ITC"; + public static float iInformationMessageLabelFontSizeCoefficient = 0.50f; + public static Color informationMessageForeColor = Color.White; + public static Color informationMessageBackColor = Color.Transparent; + public static int informationMessageCompression = 6; + public static int informationMessageLocationCeilValue = 100; + + #endregion + + #region Tag messages settings + + public static Color tagMessageForeColor = Color.White; + public static Color tagMessageBackColor = Color.Transparent; + public static Color emptyTagMessageBackColor = Color.White; + public static int tagMessageEmptyCompression = 3; + public static int tagMessageCompression = 14; + public static int tagMessageLocationCeilValue = 100; + + #endregion + + #region Contextual menu settings + + public static string visuPisteMenuItemCaption = "VISU PISTE"; + public static string montrerMenuItemCaption = "MONTRER..."; + public static string shootRequestMenuItemCaption = "SHOOTRQT"; + public static string flMenuItemCaption = "FL ?"; + public static string ripMenuItemCaption = "RIP..."; + public static string mvtMenuItemCaption = "MVT..."; + public static string modMenuItemCaption = "MOD..."; + public static string partMenuItemCaption = "PART"; + public static string warningMenuItemCaption = "WARNING"; + public static string accesPlnMenuItemCaption = "ACCES PLN"; + public static string cnlMenuItemCaption = "CNL..."; + public static string decorMenuItemCaption = "DECOR"; + public static string lvolMenuItemCaption = "LVOL"; + + #endregion + + + + /* ******************** A ENLEVER PLUS TARD ********************************** */ + //#region Route + + //public static float coordinatesRatio = 8f; + + //public static string sectorsXmlFilePath = "sectors.xml"; + //public static string beaconsXmlFilePath = "balises.xml"; + //public static string routesXmlFilePath = "routes.xml"; + + //public static Pen drawRoutesPen = new Pen(Color.FromArgb(60, Color.White), 1.0f); + + //#endregion + + //#region Beacon + + //public static Font unselectedBeaconsCodesFont = new Font("Arial", 8, FontStyle.Regular); + //public static Color drawBeaconColor = Color.FromArgb(100, Color.Black); + //public static Color drawBeaconCodeColor = Color.FromArgb(80, Color.Black); + //public static Color drawSelectedBeaconColor = Color.FromArgb(100, Color.White); + //public static Color drawSelectedBeaconCodeColor = Color.FromArgb(80, Color.White); + //public static Font selectedBeaconsCodesFont = new Font("Arial", 8, FontStyle.Bold); + + //public static int beaconsCirclesSize = 5; + //#endregion + + //#region Sector + //public static int sectorHighFloorValue = 195; + //public static Color sectorLinesColor = Color.FromArgb(40, Color.Black); + ////public static Color sectorSelectedFillColor = Color.FromArgb(250, Color.DarkSlateGray); + //public static Color sectorSelectedFillColor = Color.FromArgb(250, ColorTranslator.FromHtml("#616360")); + ////public static Color sectorFillColor = Color.FromArgb(0, Color.DarkSlateGray); + //public static Color sectorFillColor = Color.FromArgb(200, ColorTranslator.FromHtml("#7a797c")); + //public static Color sectorNameColor = Color.FromArgb(255, Color.Black); + //public static Font sectorNameFont = new Font("Arial", 8); + //#endregion + + //static public int aircraftCometLength = 5; + /* ************************************* FIN DE A ENLEVER PLUS TARD ************************************** */ + } + +} diff --git a/SimpleRadar/FormSimpleRadar.Designer.cs b/SimpleRadar/FormSimpleRadar.Designer.cs new file mode 100644 index 0000000..f2cecc0 --- /dev/null +++ b/SimpleRadar/FormSimpleRadar.Designer.cs @@ -0,0 +1,74 @@ +using Data; + +namespace SimpleRadar +{ + partial class FormSimpleRadar + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSimpleRadar)); + this.ivyDomain = new IvyBus.IvyDomain(); + this.IvyBus = new IvyBus.IvyControl(this.components); + ((System.ComponentModel.ISupportInitialize)(this.IvyBus)).BeginInit(); + this.SuspendLayout(); + // + // ivyDomain + // + this.ivyDomain.Domain = "10.192.35.255:3000"; + this.ivyDomain.Location = new System.Drawing.Point(12, 12); + this.ivyDomain.Name = "ivyDomain"; + this.ivyDomain.Size = new System.Drawing.Size(159, 22); + this.ivyDomain.TabIndex = 1; + // + // IvyBus + // + this.IvyBus.AppName = "ProjectedStripBoard"; + this.IvyBus.Culture = new System.Globalization.CultureInfo("en-US"); + // + // FormSimpleRadar + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(536, 477); + this.Controls.Add(this.ivyDomain); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FormSimpleRadar"; + this.Text = "SimpleRadar"; + this.Load += new System.EventHandler(this.FormRadar_Load); + ((System.ComponentModel.ISupportInitialize)(this.IvyBus)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + public IvyBus.IvyDomain ivyDomain; + private IvyBus.IvyControl IvyBus; + } +} + diff --git a/SimpleRadar/FormSimpleRadar.cs b/SimpleRadar/FormSimpleRadar.cs new file mode 100644 index 0000000..08e2de5 --- /dev/null +++ b/SimpleRadar/FormSimpleRadar.cs @@ -0,0 +1,298 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using IvyBus; +using System.Xml.Serialization; +using System.IO; +using Data; +using System.Globalization; + +namespace SimpleRadar +{ + public partial class FormSimpleRadar : Form + { + public static FormSimpleRadar FormRadarInstance; + UserControlRadarView userControlRadarView1; + + public static IvyBus.Ivy TheIvyBus; + + + #region Attributes + + #endregion + + #region Constructor + + public FormSimpleRadar() + { + FormRadarInstance = this; + userControlRadarView1 = new UserControlRadarView(); + this.Controls.Add(userControlRadarView1); + userControlRadarView1.Dock = DockStyle.Fill; + + InitializeComponent(); + AppDatabase data = new AppDatabase(IvyBus); + data.addAircraftView(userControlRadarView1); + userControlRadarView1.setData(data); + } + + #endregion + + #region Events handlers + + private void FormRadar_Load(object sender, EventArgs e) + { + IvyBus.ivy.Start(ivyDomain.Domain); + Bind(); + + FormSimpleRadar.TheIvyBus = IvyBus.ivy; + } + + #endregion + + #region Ivy messages binding + + private void Bind() + { + + int regexp_id = IvyBus.ivy.BindMsg(@"RadarScreenPenDown PenId=(.*) X=(.*) Y=(.*)", + RadarScreenPenDown, null); + + // ajoute la nouvelle regex + + regexp_id = IvyBus.ivy.BindMsg(@"SelectionEvent Flight=([0-9]+) Perform=(True|False)", + SelectAircraft, null); + + regexp_id = IvyBus.ivy.BindMsg(@"WarningEvent Flight=([0-9]+) Perform=(True|False|Change)", + WarningAircraft, null); + + regexp_id = IvyBus.ivy.BindMsg(@"PartEvent Flight=([0-9]+) Perform=(True|False|Change)", + PartAircraft, null); + + regexp_id = IvyBus.ivy.BindMsg(@"DisplayRoadEvent Flight1=([0-9]+) Route1=(.*) Distance1=([0-9]+) Thicks1=(.*) Flight2=([0-9]+) Route2=(.*) Distance2=([0-9]+) Thicks2=(.*) Distance=([0-9]+) Perform=(True|False)", + DisplayAircraftRoad, null); + + regexp_id = IvyBus.ivy.BindMsg(@"AFLFilterEvent AFL=([0-9]+) Range=(-?[0-9]+) Perform=(True|False)", + AFLFilter, null); + + regexp_id = IvyBus.ivy.BindMsg(@"AFLFilterEvent Flight=([0-9]+) Perform=(True|False)", + AFLAircraftFilter, null); + + regexp_id = IvyBus.ivy.BindMsg(@"ModS Flight=([0-9]+) Level=([0-9]+) NextSector=(.*) Succeed=(True|False)", + ModS, null); + + regexp_id = IvyBus.ivy.BindMsg(@"InformationMessage Beginning Flight=([0-9]+) NumberOfWords=([0-9]+)", + InformationMessageBegin, null); + + regexp_id = IvyBus.ivy.BindMsg(@"InformationMessage Flight=([0-9]+) Word=(([0-9]+)(( [0-9]+)+))", + InformationMessageStream, null); + + regexp_id = IvyBus.ivy.BindMsg(@"InformationMessage Flight=([0-9]+) End", + InformationMessageEnd, null); + + regexp_id = IvyBus.ivy.BindMsg(@"InformationMessage Flight=([0-9]+) Remove", + InformationMessageRemove, null); + + regexp_id = IvyBus.ivy.BindMsg(@"AlarmClock Flight=([0-9]+) Hour=([0-9]+) Min=([0-9]+) Perform=(True|False)", + AlarmClock, null); + + regexp_id = IvyBus.BindMsg(@"TrackMovedEvent (.*) Time=([0-9]+):([0-9]+):([0-9]+)", + UpdateClock, null); + + regexp_id = IvyBus.BindMsg(@"FollowPlane Flight=([0-9]+) Perform=(True|False)", + FollowPlane, null); + + regexp_id = IvyBus.ivy.BindMsg(@"SetTag Flight=([0-9]+) Strip=([0-9]+) Perform=(True|False)", + TagMessageInit, null); + + regexp_id = IvyBus.ivy.BindMsg(@"SetTag Beginning Flight=([0-9]+) NumberOfWords=([0-9]+)", + TagMessageBegin, null); + + regexp_id = IvyBus.ivy.BindMsg(@"SetTag Flight=([0-9]+) Word=(([0-9]+)(( [0-9]+)+))", + TagMessageStream, null); + + regexp_id = IvyBus.ivy.BindMsg(@"SetTag Flight=([0-9]+) End", + TagMessageEnd, null); + + regexp_id = IvyBus.ivy.BindMsg(@"SetTag Flight=([0-9]+) Remove", + TagMessageRemove, null); + } + + private void TagMessageRemove(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.manageAircraftTagMessageDictionary("remove", e[0], 0, 0); + } + + private void TagMessageEnd(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.updateAircraftTagMessage(e[0], false, ""); + } + + private void TagMessageStream(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.updateAircraftTagMessage(e[0], true, e[1]); + } + + private void TagMessageBegin(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.manageAircraftTagMessageDictionary("update", e[0], 0, int.Parse(e[1])); + } + + private void TagMessageInit(object sender, IvyMessageEventArgs e) + { + if (e[2].ToLower() == "true") + { + userControlRadarView1.manageAircraftTagMessageDictionary("add", e[0], int.Parse(e[1]), 0); + } + else + { + userControlRadarView1.manageAircraftTagMessageDictionary("remove", e[0], 0, 0); + } + } + + private void FollowPlane(object sender, IvyMessageEventArgs e) + { + if (e[1].ToLower() == "true") + userControlRadarView1.manageFollowedAircraftList("add", e[0]); + else + userControlRadarView1.manageFollowedAircraftList("remove", e[0]); + } + + private void UpdateClock(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.updateClock(Int32.Parse(e[1]), Int32.Parse(e[2]), Int32.Parse(e[3])); + } + + private void AlarmClock(object sender, IvyMessageEventArgs e) + { + if (e[3].ToLower() == "true") + { + userControlRadarView1.manageAircraftAlarmsDictionary("add", e[0], Int32.Parse(e[1]), Int32.Parse(e[2]), 0); + } + else + { + userControlRadarView1.manageAircraftAlarmsDictionary("remove", e[0], Int32.Parse(e[1]), Int32.Parse(e[2]), 0); + } + } + + private void InformationMessageRemove(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.manageAircraftInformationMessagesDictionary("remove", e[0], 0); + } + + private void InformationMessageEnd(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.updateAircraftInformationMessage(e[0], false, ""); + } + + private void InformationMessageStream(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.updateAircraftInformationMessage(e[0], true, e[1]); + } + + private void InformationMessageBegin(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.manageAircraftInformationMessagesDictionary("add", e[0], int.Parse(e[1])); + } + + private void ModS(object sender, IvyMessageEventArgs e) + { + userControlRadarView1.manageAircraftModSDictionary(e[0], e[1], e[2], e[3]); + } + + private void AFLFilter(object sender, IvyMessageEventArgs e) + { + if (e[2].ToLower() == "true") + { + userControlRadarView1.manageFlightLevelFilter("add", int.Parse(e[0]), int.Parse(e[1])); + } + else + { + userControlRadarView1.manageFlightLevelFilter("clear", 0, 0); + userControlRadarView1.manageFollowedAircraftList("clear", ""); + } + } + + private void AFLAircraftFilter(object sender, IvyMessageEventArgs e) + { + if (e[1].ToLower() == "true") + { + userControlRadarView1.manageAircraftFlightLevelFilterList("add", e[0]); + } + else + { + userControlRadarView1.manageAircraftFlightLevelFilterList("remove", e[0]); + } + } + + private void DisplayAircraftRoad(object sender, IvyMessageEventArgs e) + { + if (e[9].ToLower() == "true") + userControlRadarView1.manageAircraftSeparationList("add", e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8]); + else + userControlRadarView1.manageAircraftSeparationList("clear", "", "", "", "", "", "", "", "", ""); + } + + private void PartAircraft(object sender, IvyMessageEventArgs e) + { + if (e[1].ToLower() == "true") + userControlRadarView1.managePartAircraftList("add", e[0]); + else if (e[1].ToLower() == "false") + userControlRadarView1.managePartAircraftList("remove", e[0]); + else + userControlRadarView1.managePartAircraftList("change", e[0]); + } + + private void WarningAircraft(object sender, IvyMessageEventArgs e) + { + if (e[1].ToLower() == "true") + userControlRadarView1.manageWarningAircraftList("add", e[0]); + else if (e[1].ToLower() == "false") + userControlRadarView1.manageWarningAircraftList("remove", e[0]); + else + userControlRadarView1.manageWarningAircraftList("change", e[0]); + } + + private void SelectAircraft(object sender, IvyMessageEventArgs e) + { + if (e[1].ToLower() == "true") + userControlRadarView1.manageSelectedAircraftTimer("add", e[0]); + else + userControlRadarView1.manageSelectedAircraftTimer("clear", e[0]); + } + + CultureInfo ci = new CultureInfo("en-US"); + + /// + /// The anoto supervision sent a pendown event + /// + /// + /// + private void RadarScreenPenDown(object sender, IvyMessageEventArgs e) + { + string penId = e[0]; + float x = float.Parse(e[1],ci); + float y = float.Parse(e[2],ci); + userControlRadarView1.AddNewPenDown(new PointF(x, y)); + + + } + + #endregion + + #region Other methods + + public void sendIvyMessage(string txt) + { + int resp = IvyBus.ivy.SendMsg(txt); + Console.WriteLine("Message sent on Ivy : " + txt + " with response : " + resp); + } + + #endregion } + } + +} \ No newline at end of file diff --git a/SimpleRadar/FormSimpleRadar.resx b/SimpleRadar/FormSimpleRadar.resx new file mode 100644 index 0000000..e11d5c4 --- /dev/null +++ b/SimpleRadar/FormSimpleRadar.resx @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAMAEBAQAAAABAAoAQAANgAAACAgEAAAAAQA6AIAAF4BAABAQAAAAAAYACgyAABGBAAAKAAAABAA + AAAgAAAAAQAEAAAAAACAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA + AACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAiIcAB3 + eAAAiHAAAAB4gACAAAAAIAeAAIAAAAAKAHAIAAAAAKAAAAgAAAACAAAIACqiqqqqKgcAACIgAAAABwgC + IiAAIAAAAICjYAACAHAAgAIgAAAngAAIAAAAAHeAAAiIAAB4iAAAAAAIgAAAAP//AAD//wAA4AMAAMAB + AADAAQAAwAEAAIABAACAAAAAwAAAAMAAAACAAQAAwAEAAMABAADgAQAA4AMAAP5/AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA + gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAACHd3d3d3gAAAAAAAAACIiIhwAAAA + B3d4iAAAAAAIiIiAAAAAAAAHd4iIAAAACIiAAAAAAAAAAAd4iAAAAIiIAAAAAAAAAAAAd3gAAACIgAAA + CgAAAAAAAAd4AAAAeAAAAAAAAAAAoAAAdwAAAIgAAKAAAAAAAAAgAAcAAAiAAAAAAAAAAAAKAAAHcAAI + gAAAAAACAAAAoAIAAHAACAAAoAAKAAAACgAAAAB4AAAAAAAAAAAAACAAAKAAdwB4AAAAAAAAAAIAAAAA + AHcAiAAKAAAAAAAgACAAAAAHAIgAAgAAAAAgAAAAAAAABwCIAAIAIgIiIgAAAAAAAAcAiAACACIiIgCg + AAAAAAAHAHgAAiIiIiAACgAAAAAAdwCIAAAiIqIAAACgAACgAHcACAAAImJyAAAAAgAAAAB3AAiAAipm + cgAACgAgCgAAcAAIgAAqonIgAAAAAgAAB3AAAIgAKiZyIAAAAAAAAAeAAABwACACAgAAAAAgAAB3AAAA + iIAAAAAAAAACAAAIeAAAAIiIAAAAACIAAAAAB3gAAACIiAAAAAAAAAAAB3eIAAAAiIiIMAAAAAAAAIh4 + iAAAAAiIiAAwAAAAAIiIiIAAAAAAAAAIiIiIiIiIAAAAAAAAAAAAAAiIiIiAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/+AB//wAAA/4AAAD+AAAA/AAAAPwAAAD8AAAA/AAAAPgAAAB4AAAAeAAAADwAAAAwAAAAMAA + AADAAAAAwAAAAMAAAADAAAAAwAAAAOAAAADgAAAB4AAAAfAAAAH0AAAD8AAAA/AAAAPwgAAD8AAAA/gw + AAf/4AD///gH//////8oAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmczMzMzMmZmZmZmZzMzMmZmZmczMmf// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMmZmZmZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmczMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmf//mZmZmZmZmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZzMzMmf//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmczMmZmZmZmZmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZzMzM + mf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmcz/zP//zP//mczMmcz/mf/MmczMzMzMzMyZ + zMzMzMzMmZmZmZmZmZmZmZmZZmZmAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAADMAAAAAZmZmmZmZmZmZ + mZmZmZmZmZmZmZmZmZmZzMzMmczMzMzMzP//mczMzMzMmf//mf//AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMz/AAAAzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMmczMzMzMZplmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYAADMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAmZmZmZmZmZmZmZmZmZmZmZmZzMzMzMzMzMzMzMzMzMzMzMzMAAAAzMzMAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzM/8z/zMzMzMzM + zMzMzJnMzMzMzMzMAAAAzMzMzMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAGYA + AAAAAAAAADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmZmZmZmZmZmZmZmZmZmZmZmZzMzMzMzMzMzM + zMzMzMzMzMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + zMzMzMzMzMzMzMzMmcyZzMzMzMz////MzMzMzMzMmZmZAAAAAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAA + AAAAAAAAAAAAAJkAADMAADMAADMAAAAAADMAADMAADMAAAAAAAAAAAAAAAAAAAAAAAAAmZmZmZmZmZmZ + mZmZmZmZmZmZzMzMzMzMzMzMzMzM/8zMzP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAmf//zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADMAAAAAADMAADMAADMAADMAAJkAAAAAAAAAAAAAADMAAAAAAAAAADMAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAmZmZmZmZmZmZmZmZmZmZzMzMmczMzMzMzMzMzMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMzJnMzMyZzMzMAAAAzMzMzMzMAAAAADMAAAAAAAAA + AAAAAAAAAAAAADMAAAAAADMAADMAAAAAADMAADMAAAAAAJkAADMAADMAADMAADMAADMAADMAAAAAADMA + ADMAAAAAAAAAADMAADMAAAAAAAAAADMAmZmZmZmZmZmZmZmZzJmZzMzMmczMzMzMzMzMmf//AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMmZmZzMzMzMzMzMzMMzMzAAAA + AAAAAAAAADMAAAAAAAAAADMAAAAAADMAADMAAAAAAAAAADMAAAAAAAAAADMAAMwAADMAADMAADMAADMA + AAAAAAAAADMAADMAADMAAAAAADMAAAAAADMAAAAAAAAAAAAAAAAAmZmZmZmZmZmZmZmZzMzMmZmZzMzM + zMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMmczMmcyZzMzM/8z/ + zMzMmZmZAAAAADMAAAAAADMAAAAAAAAAAAAAADMAADMAADMAADMAADMAAAAAADMAAJkAAJkAAJkAAMwA + AJkAAJkAAMwAAJkAAAAAAAAAADMAADMAADMAADMAADMAAAAAADMAAAAAADMAAAAAAAAAAAAAmZmZmZmZ + mZmZmZmZmZmZzMzMzMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzM + zMzMzMzM/8zMzMzMmZmZAAAAAAAAAAAAAAAAADMAAAAAAAAAADMAADMAADMAADMAAAAAAJkAAGYAAAAA + AAAAADMAADMAAMwAADMAADMAADMAAAAAADMAAJkAAJkAADMAADMAADMAADMAAAAAADMAAAAAAAAAAAAA + AAAAADMAAAAAmZmZmZmZmZmZmZmZmczMzMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAzMzMzMzMzMzMzMzMzMzMzJnMAAAAAAAAADMAAAAAAAAAADMAAAAAADMAADMAADMAADMAAMwA + ADMAADMAAAAAADMAADMAADMAADMAAJkAADMAADMAADMAADMAADMAADMAADMAAGYAAJkAADMAAAAAADMA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmZmZmZmZmZmZmczMmczMzMzMAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMAAAAAAAAAAAAAAAAAAAAADMAAAAAAAAAADMAAAAA + AMwAADMAADMAAAAAADMAAAAAAAAAADMAADMAADMAADMAAJkAADMAAAAAADMAADMAAAAAAAAAADMAADMA + AAAAADMAADMAAJkAAAAAAAAAAGYAADMAAAAAAAAAAAAAAAAAAAAAM2YzmZmZmZmZmZmZzMzMAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMmZmZAAAAAAAAADMAAAAAAAAAADMA + AAAAAGYAADMAAMwAADMAADMAAAAAADMAADMAAAAAAAAAADMAADMAADMAAAAAAJkAADMAAAAAADMAADMA + ADMAAAAAADMAADMAADMAADMAADMAADMAAMwAAAAAADMAAAAAAAAAADMAADMAADMAAAAAAAAAmZmZmZmZ + mZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmczMzMzMzP/MzMzMAAAAADMAAAAA + AAAAADMAADMAAAAAADMAADMAAMwAADMAADMAADMAADMAAAAAAAAAADMAADMAAAAAADMAADMAADMAAJkA + ADMAADMAADMAADMAADMAADMAADMAAAAAADMAADMAADMAADMAADMAAMwAADMAADMAAAAAADMAAAAAAAAA + ADMAAAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMyZzMzMzMzM + MzMzAAAAAAAAADMAAAAAADMAADMAADMAADMAAMwAADMAAGYAADMAAAAAADMAADMAADMAADMAADMAADMA + ADMAADMAADMAAGYAADMAAAAAADMAADMAADMAADMAADMAADMAAAAAADMAADMAADMAAGYAAAAAAGYAADMA + ADMAADMAAAAAADMAAAAAAAAAAAAAmZmZmZmZmZmZmf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAzMzMzMzMzMzMAAAAADMAAAAAADMAAAAAADMAAAAAAAAAAAAAADMAADMAADMAAMwAADMAAAAAADMA + ADMAADMAADMAADMAAAAAAAAAADMAAGYAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAAGYA + ADMAAAAAADMAADMAADMAADMAADMAAAAAAAAAAAAAAAAAM2YzmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAmZmZzMzMzMzMmZmZAAAAADMAAAAAAAAAADMAAAAAAAAAADMAADMAAAAAADMAADMA + ADMAAGYAAAAAAAAAADMAAAAAAAAAADMAAJkAADMAAAAAAMwAADMAADMAAGYAAMwAADMAADMAADMAAAAA + AAAAADMAAGYAAAAAADMAAAAAAAAAAGYAADMAADMAADMAADMAADMAADMAAAAAAAAAmZmZmZmZmZmZmczM + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzP//zMzMAAAAAAAAAAAAADMAADMAAAAAADMAADMAAMwA + AAAAADMAAAAAAAAAAAAAADMAAGYAADMAADMAADMAAJkAADMAADMAADMAADMAAMwAADMAAAAAADMAADMA + ADMAAGYAADMAADMAAAAAAGYAAAAAAAAAADMAADMAADMAADMAAMwAADMAADMAAAAAAAAAAAAAAAAAAAAA + M2YzmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAmf//zMzM///MmczMAAAAADMAADMAAAAAADMA + ADMAADMAADMAADMAADMAADMAAAAAADMAADMAAAAAADMAAMwAAAAAAMwAADMAAAAAADMAADMAADMAAMwA + ADMAADMAADMAADMAADMAADMAAMwAAAAAAGYAADMAADMAADMAADMAADMAAAAAAAAAADMAADMAAAAAAAAA + ADMAAAAAAAAAAAAAADMAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMZplmAAAA + AAAAAAAAAAAAAAAAADMAADMAAMwAADMAADMAADMAADMAAAAAAAAAAAAAAAAAAAAAAMwAADMAADMAADMA + ADMAADMAADMAAMwAAAAAADMAADMAADMAADMAADMAADMAAMwAADMAADMAAAAAADMAAAAAADMAADMAADMA + ADMAAGYAADMAADMAAAAAAAAAADMAAAAAAAAAmZmZmZmZmZmZmf//AAAAAAAAAAAAAAAAAAAAAAAAzMzM + zMzMzMyZAAAAADMAAAAAAAAAADMAADMAAAAAADMAADMAADMAADMAADMAADMAADMAAAAAADMAADMAAJkA + AAAAAGYAADMAADMAADMAADMAADMAAMwAAAAAADMAADMAADMAADMAAAAAAGYAADMAAMwAADMAAAAAADMA + ADMAADMAADMAAAAAAAAAAJkAADMAADMAAAAAADMAAAAAAAAAAAAAADMAmZmZmZmZmZmZAAAAAAAAAAAA + AAAAAAAAAAAAzMzMzMzMmZnMAAAAAAAAAAAAADMAAAAAAAAAADMAADMAADMAADMAADMAAAAAADMAAAAA + AAAAADMAADMAAAAAADMAADMAAMwAADMAAAAAADMAADMAAJkAADMAADMAADMAADMAAAAAAGYAADMAADMA + AAAAADMAADMAADMAADMAADMAADMAADMAAAAAAAAAADMAADMAAAAAAAAAAAAAAAAAADMAAAAAmZmZmZmZ + mZmZAAAAAAAAAAAAAAAAAAAAAAAAzMzMAAAAzJmZAAAAAAAAADMAAAAAAAAAADMAAAAAAJkAAAAAADMA + ADMAADMAADMAADMAAAAAADMAAJkAADMAADMAADMAADMAAMwAADMAADMAADMAAMwAAAAAADMAADMAADMA + AMwAADMAADMAADMAADMAAMwAAAAAADMAADMAADMAADMAAAAAAAAAADMAAJkAADMAADMAAAAAAAAAAAAA + AAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAmczMzMzMzMzMmZmZADMAAAAAAAAAADMAADMAAAAA + ADMAAMwAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAAMwAADMAADMAAMwA + ADMAADMAAAAAAMwAADMAADMAADMAAAAAADMAADMAADMAADMAADMAADMAADMAADMAAAAAADMAAMwAAAAA + ADMAAAAAADMAADMAAAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAmczMzMzM/8zMZmZmAAAAAAAA + AAAAAAAAADMAADMAADMAAGYAADMAADMAADMAAAAAADMAADMAAAAAAJkAADMAADMAADMAAAAAADMAADMA + ADMAAJkAADMAAMwAADMAADMAAMwAAAAAAAAAADMAADMAADMAADMAAAAAAMwAADMAADMAAAAAADMAADMA + ADMAAAAAAGYAADMAAAAAADMAAAAAAAAAAAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAzMzMzMzM + zMzMM2YzAAAAAAAAAAAAADMAADMAADMAADMAAAAAADMAAAAAADMAADMAADMAADMAADMAAJkAADMAADMA + AAAAAAAAADMAADMAADMAADMAADMAAMwAADMAAMwAADMAADMAADMAADMAADMAADMAADMAADMAAJkAADMA + AAAAADMAADMAADMAAAAAADMAADMAADMAAAAAADMAAAAAAAAAAAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAA + AAAAAAAAmZmZzMzMzMzMAAAAAAAAAAAAAAAAAAAAADMAAAAAADMAADMAADMAADMAADMAAAAAADMAAAAA + ADMAAGYAAAAAADMAADMAADMAADMAAAAAADMAADMAAMwAAJkAAMwAADMAADMAADMAAAAAADMAADMAADMA + AAAAADMAADMAADMAADMAADMAADMAADMAAAAAADMAADMAADMAADMAADMAADMAAAAAAAAAAAAAmZmZmZmZ + mZmZAAAAAAAAAAAAAAAAAAAAmZmZzMzMzMzMAAAAADMAAGYAAGYAAGYAAJkAAMwAAMwAAMwAAMwAAMwA + AMwAAJkAAJkAAJkAAJkAAMwAAMwAAMwAAMwAAMwAAMwAAMwAAMwAAMwAAJkAAMwAAMwAAMwAAMwAAMwA + AMwAAMwAAMwAAMwAAMwAAMwAAMwAAMwAAMwAAJkAAMwAAJkAAJkAAJkAAJkAAMwAAMwAAJkAAJkAAGYA + ADMAADMAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMM2ZmAAAAAAAAADMAAAAAADMAADMA + AAAAADMAADMAADMAADMAADMAADMAADMAADMAAGYAAGYAADMAAGYAAGYAAGYAAGYAAGYAAJkAAJkAAMwA + AJkAADMAAAAAADMAADMAADMAADMAADMAADMAADMAADMAAAAAADMAADMAADMAADMAAAAAADMAAAAAADMA + ADMAAAAAAAAAADMAAAAAADMAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAzJmZzMzMzMzMMzMzAAAAAAAA + AAAAADMAAAAAADMAADMAADMAADMAADMAADMAADMAADMAAGYAADMAAGYAAGYAAGYAAGYAAGYAAGYAAGYA + AJkAAJkAADMAAMwAADMAAJkAADMAADMAAAAAADMAADMAADMAAAAAAAAAAJkAADMAAAAAAAAAAAAAADMA + ADMAAAAAADMAADMAADMAADMAADMAADMAAAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAzMzMzMzM + zMzMM2ZmADMAADMAAAAAAAAAADMAADMAADMAAGYAAGYAADMAADMAMzMzMzMzM2YzM2YzAJkAAGYAAGYA + AGYAAGYAAJkAAJkAAJkAAMwAADMAAMwAAAAAAAAAAJkAADMAAAAAADMAADMAADMAADMAADMAAMwAADMA + ADMAADMAADMAADMAADMAADMAAGYAADMAADMAADMAADMAAAAAAAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAA + AAAAAAAAmczMzMzMzMzMmcyZAAAAAAAAADMAADMAADMAADMAAGYAAJkAADMAM2YzADMAAGYAAGYzAGYz + M5kzM5kzAGYAAGYAAJkAAGYAAJkAAJkAAJkAAAAAADMAAMwAADMAADMAADMAAJkAADMAADMAAAAAAAAA + ADMAADMAADMAADMAADMAADMAADMAADMAADMAAAAAAMwAADMAAAAAADMAAAAAAAAAAAAAAAAAmZmZmZmZ + mZmZAAAAAAAAAAAAAAAAAAAAmczMzMzMAAAAmZmZAAAAAAAAAAAAADMAADMAADMAAGYAAJkAADMAAGYA + AGYAAGYAM2YzM2YzM2YAM5kzM5kzAJkAAGYAAGYAAJkAAJkAADMAADMAADMAAMwAADMAAAAAADMAAAAA + AJkAADMAADMAADMAAAAAAGYAAAAAAAAAADMAAAAAAAAAADMAAAAAADMAAMwAADMAADMAAAAAADMAAAAA + AAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAmczM/8zMzMzMAAAAADMAAAAAADMAADMAADMA + ADMAAGYAM2YzAGYAM2YzM5kAM2YAM2YzM5kzM5kzM8wzAJkAAJkAAJkAAMwAADMAADMAADMAADMAAMwA + ADMAADMAADMAADMAADMAADMAADMAADMAADMAAGYAADMAADMAADMAADMAADMAADMAADMAAAAAAGYAADMA + ADMAAAAAADMAADMAADMAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMAAAAAAAA + ADMAAAAAADMAADMAAGYAAGYAAGYAM2YzM2YzM2YAM5kzM5kzM5lmM5kzM5kzZsxmAJkAAJkAADMAADMA + ADMAAAAAAAAAAMwAADMAADMAADMAADMAADMAAGYAADMAADMAAMwAADMAADMAADMAADMAAAAAADMAADMA + ADMAAGYAADMAADMAADMAAAAAAAAAAAAAAAAAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAzMzM + zMzMzMzMZmZmADMAAAAAADMAAAAAADMAADMAADMAM5kzM5kzM2YzM5kAM5kzZpkzM5kzM8wzM8xmM8xm + M8wzADMAADMAADMAADMAADMAADMAAMwAADMAADMAAAAAAAAAAAAAADMAADMAAJkAADMAADMAADMAAAAA + AAAAAAAAADMAADMAADMAAJkAADMAADMAADMAADMAADMAAAAAAAAAZplmmZmZmZmZmczMAAAAAAAAAAAA + AAAAAAAAAAAAmczMzMzMzMzMzMzMAAAAADMAAAAAADMAADMAAGYAAGYAAJkAAJkAAGYAM5kzZpkzM5kz + M5kzZsxmM8wzM8xmZmZmZpkzAAAAADMAADMAADMAAAAAAMwAADMAAAAAAAAAADMAADMAAAAAAJkAADMA + AAAAADMAADMAADMAADMAADMAADMAADMAAAAAADMAADMAADMAAAAAADMAAAAAAAAAAAAAmZmZmZmZmZmZ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzJmZ/8zMzMzMAAAAAAAAADMAADMAADMAADMAADMAAGYAM5kz + M5kzM5kzM8wzM5kzM8xmM8xmM8xmZmZmZmZmM2YzM8wzADMAADMAADMAAAAAAMwAADMAADMAADMAADMA + ADMAAMwAADMAADMAAGYAADMAADMAADMAADMAADMAADMAADMAAJkAADMAADMAADMAAAAAAAAAAAAAAAAA + AAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmZmZzP//zMzMZplmAAAAADMAADMAADMA + ADMAAGYAM5kzM5kzM5kzM5kzM5lmM8xmZsxmZsxmZplmM2ZmM2YzZmYzZmYzM5kzM5kAADMAADMAAMwA + ADMAADMAADMAAJkAAGYAADMAADMAADMAADMAAGYAADMAADMAAAAAADMAADMAAAAAADMAADMAAAAAAAAA + ADMAADMAAAAAAAAAmZmZmZmZmZmZmczMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmf//zMzM/8zMzMzM + ADMAADMAADMAADMAADMAAGYAAJkAAJkAAJkAM8wzM5kzM8xmZv9mZmZmZmZmM2YzM2YzZmZmM2ZmM2Yz + ADMAMzMzADMAAMwAADMAADMAADMAADMAADMAADMAAAAAAAAAADMAADMAADMAADMAADMAADMAAAAAAGYA + ADMAADMAAAAAAAAAADMAAAAAADMAAAAAmZmZmZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAzJmZzMzMzMzMAAAAAAAAADMAADMAADMAADMAAGYAAJkAM5kzM8wzM8wzZsxmM2YzZmZmM2YzM2Zm + M2YzMzMzM2YzMzMzM2YzMzMAADMAAMwAADMAAAAAADMAAAAAAAAAADMAADMAADMAADMAADMAADMAAGYA + AAAAADMAAMwAAAAAADMAADMAADMAAAAAAAAAAAAAAAAAmZmZmZmZmZmZzMzMAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAzJmZzMzMzMzMzMzMADMAAAAAADMAAGYAAGYAAGYAAJkAAMwAAMwAM8wzM5kz + MzNmM2ZmMzMzM2YzZmZmM2YzMzMzM2YzMzMAADMAADMAAJkAADMAADMAADMAADMAAAAAAAAAADMAAAAA + AAAAADMAADMAADMAAGYAAGYAAAAAADMAADMAAAAAADMAAAAAAAAAAAAAAAAAmZmZmZmZmZmZAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMMzMzAAAAADMAADMAAGYAAGYAAGYA + AJkAAMwAM5kzM5kzM2YzZmZmM2YzZmZmM2YzMzMzMzMAM2YzAGYAADMAADMAAJkAADMAAAAAADMAADMA + ADMAAAAAADMAADMAADMAADMAAAAAAAAAAJkAAGYAAAAAADMAADMAADMAAAAAAAAAAAAAAAAAZmZmmZmZ + mZmZmZmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmczMzMzM/8zMzMzMAAAAADMA + ADMAAGYAAGYAAGYAAJkAAGYAMzMzADMzM2YzM2YzM2YzMzMzMzMzM2YzM2YAAGYAADMAADMAADMAAJkA + ADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAADMAAMwAADMAADMAAJkAAAAAADMAADMAAAAAAAAA + ADMAAAAAmZmZmZmZmZmZzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzM + mczMzMzMzMzMZpmZAAAAADMAAGYAADMAAAAAADMAADMAAAAAADMAMzMAM2YzM5kzAGYAMzMAADMzMzMA + MzMAADMAADMAAJkAADMAADMAADMAAAAAADMAADMAADMAADMAAMwAADMAAAAAAAAAAAAAAAAAAAAAAAAA + ADMAADMAAAAAAAAAmZmZmZmZmZmZmZmZmZmZzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAzMzMzMzMzJmZzMzMzMzMzMzMM2YzAAAAADMAAAAAAAAAAAAAADMAAAAAAAAAADMAADMAADMA + M5kzM8wAADMAMzMAADMAADMAAAAAAGYAADMAADMAADMAADMAADMAAAAAAJkAAGYAAAAAADMAADMAADMA + ADMAAAAAAAAAAAAAAAAAADMAAAAAMzMzmZmZmZmZmZmZmZmZzMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMmczMzMzMzMzMzP//zMzMADMAAAAAAAAAAAAAAAAAADMAAAAA + AAAAAAAAADMAADMAADMAADMAADMAAJkAAMwAAGYAADMAAGYAADMAADMAAJkAAMwAAMwAADMAADMAADMA + ADMAADMAAAAAAAAAADMAAAAAADMAAAAAAAAAAAAAM2YzmZmZmZmZmZmZmZmZzMzMzMzMzMzMAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMmczMzMzMzMzMzMzMAAAAAAAA + AAAAADMAAAAAAAAAADMAADMAADMAAAAAAAAAADMAADMAADMAADMAADMAAAAAAMwAADMAADMAAAAAAAAA + ADMAADMAAAAAAAAAADMAAAAAADMAADMAAAAAAAAAAAAAAAAAAAAAMzMzmZmZmZmZmZmZmZmZzMzMzMzM + zMzMzMzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzP//zMzMzMzMzMzMmZmZ + zMzMzP//zMzMZmZmAAAAADMAADMAAAAAAAAAADMAADMAAAAAADMAADMAAAAAAAAAAAAAADMAADMAAMwA + ADMAADMAADMAADMAADMAAAAAADMAAAAAAAAAAAAAAAAAADMAAAAAAAAAAAAAAAAAmZmZmZmZmZmZmZmZ + zMzMzMzMzMzMzMzMzMzMzP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzP//zP// + zMzMzMzMzMzMzMzMzJmZzMzMAAAAzMzMmczMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMA + AAAAADMAAAAAAJkAADMAADMAAAAAADMAAAAAADMAAAAAADMAAAAAADMAADMAADMAAAAAAAAAAAAAmZmZ + mZmZmZmZmZmZmZmZmczMzMzMzMzMzMzMzMzMmf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/8zMzMzMAAAAzMzMzMzMzMzMmZmZzMzMAAAAzMzMmczMAAAAAAAAAAAAADMAAAAAAAAA + AAAAAAAAADMAADMAAAAAAAAAAAAAAGYAADMAAAAAAAAAADMAADMAAAAAADMAAAAAAAAAAAAAADMAAAAA + ADMAAAAAzMzMzMzMzJmZmZmZmZmZzMzMzMzMzMzMzMzMzMzM/8zMAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMzMzMzMzMmczMzJmZzMzMzMzMzMzMzMzMmZmZ + AAAAAAAAAAAAADMAADMAAAAAAAAAADMAADMAAAAAAAAAAGYAAAAAAAAAADMAADMAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAzJmZzMzMzMzMmczMmczMzMzMzMzMzMzMzMzMzMzMzMzMzMzMmf//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMAAAAzMzMzMzMzMzMzMzMmZmZ + mczMzMzMzMzMzMzMzMzMM2ZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAGYAAAAAADMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAZmZmzMzMzMzMzMzMzMzMmczMzMzMzMzMzMzMzMzMzMzMzMzMAAAAmf// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmf//zMzM + zMzMzP//zMzMzMzMzMzMmZmZzMzMzMzMAAAAzP//zMzMzJmZZmZmAAAAAAAAAAAAAAAAAAAAAAAAADMA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmzMzMzMzMzMzMAAAAzP//zMzMzMzMzJmZzMzMzMzMzMzMzMzM + zP//mf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmf//zMzMzJmZzMzMzMzMzP//zMzMzMzMzMzMzMzM + zJmZZmZmMzMzMzMzMzMzMzMzZmZmmczMzJmZzMzMzMzMzMzMzP//zP///8zMzMzMzMzMAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmczMzMzMmczMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMAAAAzMzMzMzMzMzMzMzMAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAmZmZzMzMzJmZzMzMzMzM/8zMzMzMzMzMzMzMzMzMzMzMzP//zMzMzMzMzMzMzMzMzMzM + mczMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmczMmczMmczMzMzMzMzMzMzMzMzMzMzMzMzMmZmZ + mczMmf//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////8A/////// + /8AAP//////+AAAH//////gAAAH////4AAAAAAH//9AAAAAAAX//wCAAAAAAP//AAAAAAAAf/wAAAAAA + AB//AQAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/4A + AAAAAAAP/gAAAAAAAAf+AAAAAAAAB/wAAAAAAAAD/AAAAAAAAAP4AAAAAAAAA/gAAAAAAAAB+AAAAAAA + AAH4AAAAAAAAAfoAAAAAAAAB8AAAAAAAAAHwAAAAAAAAAfAAAAAAAAAB8AAAAAAAAAHwAAAAAAAAAfAA + AAAAAAAB8AAAAAAAAAHwAAAAAAAAAfAAAAAAAAAB8gAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB+AAAAAAA + AAH4AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAAAB/4AAAAAAAAH/gAAAAAAAA//AAAAAAAAD/8A + AAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/wAAAAAAAA//AAAAAAAAD/8AgAAAAAAP/5BAAAAA + AB//gAAAAAAAH//IAAAAAAC///ACAAAEAP////AAAAH//////AAAh///////gAAf///////wAP////// + //////////////////8= + + + \ No newline at end of file diff --git a/SimpleRadar/FranceMap.cs b/SimpleRadar/FranceMap.cs new file mode 100644 index 0000000..f6150b3 --- /dev/null +++ b/SimpleRadar/FranceMap.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Drawing; + +namespace SimpleRadar +{ + static public class FranceMap + { + static public int[] France = { 759, 1970, 748, 1965, 736, 1960, 723, 1955, 709, 1954, 697, 1954, 685, 1949, 671, 1946, 659, 1941, 647, 1936, 635, 1932, 620, 1931, 606, 1928, 593, 1924, 582, 1922, 571, 1916, 557, 1913, 546, 1907, 534, 1902, 523, 1895, 514, 1887, 507, 1877, 498, 1868, 485, 1863, 478, 1855, 482, 1842, 485, 1828, 486, 1813, 482, 1798, 477, 1785, 476, 1770, 478, 1756, 480, 1741, 480, 1725, 485, 1713, 488, 1703, 481, 1695, 481, 1678, 480, 1661, 478, 1645, 479, 1632, 490, 1626, 485, 1621, 475, 1614, 473, 1597, 470, 1581, 476, 1570, 485, 1564, 493, 1558, 500, 1548, 509, 1544, 513, 1537, 502, 1534, 491, 1540, 481, 1548, 468, 1544, 460, 1535, 454, 1523, 451, 1507, 445, 1495, 437, 1485, 428, 1477, 418, 1470, 408, 1461, 400, 1452, 391, 1444, 382, 1435, 372, 1427, 360, 1422, 349, 1416, 338, 1410, 326, 1404, 312, 1402, 296, 1401, 286, 1395, 273, 1391, 259, 1388, 248, 1382, 234, 1379, 218, 1379, 205, 1376, 192, 1372, 179, 1367, 169, 1361, 159, 1353, 149, 1346, 137, 1340, 126, 1335, 117, 1330, 108, 1321, 96, 1316, 84, 1312, 72, 1306, 61, 1300, 53, 1290, 49, 1276, 46, 1261, 40, 1248, 34, 1236, 28, 1224, 23, 1211, 29, 1200, 37, 1191, 50, 1188, 59, 1182, 65, 1184, 77, 1178, 94, 1176, 110, 1177, 123, 1180, 136, 1185, 147, 1190, 151, 1190, 141, 1181, 130, 1175, 118, 1170, 104, 1168, 90, 1165, 75, 1164, 64, 1160, 51, 1157, 39, 1150, 31, 1142, 24, 1131, 13, 1124, 2, 1118, -8, 1112, -20, 1106, -32, 1102, -47, 1100, -61, 1097, -68, 1091, -74, 1095, -84, 1101, -97, 1106, -109, 1112, -121, 1118, -134, 1123, -150, 1123, -163, 1128, -178, 1126, -192, 1124, -207, 1127, -224, 1128, -240, 1131, -256, 1133, -271, 1137, -283, 1143, -294, 1150, -310, 1150, -325, 1148, -338, 1147, -347, 1138, -347, 1126, -357, 1129, -364, 1132, -369, 1136, -365, 1150, -366, 1162, -373, 1172, -382, 1181, -389, 1192, -395, 1203, -401, 1214, -405, 1226, -403, 1241, -391, 1244, -386, 1256, -382, 1264, -385, 1277, -392, 1288, -397, 1295, -412, 1298, -428, 1301, -442, 1299, -455, 1296, -462, 1285, -473, 1278, -489, 1280, -501, 1275, -510, 1280, -520, 1287, -532, 1291, -547, 1292, -561, 1295, -568, 1305, -580, 1305, -589, 1311, -602, 1313, -601, 1299, -599, 1288, -585, 1284, -575, 1275, -573, 1261, -571, 1246, -577, 1234, -585, 1225, -582, 1213, -574, 1203, -572, 1189, -567, 1177, -567, 1160, -566, 1146, -554, 1148, -548, 1139, -541, 1129, -533, 1127, -529, 1128, -532, 1121, -529, 1110, -521, 1103, -520, 1093, -516, 1081, -511, 1068, -504, 1076, -491, 1072, -491, 1069, -503, 1069, -502, 1054, -501, 1039, -495, 1034, -500, 1027, -505, 1014, -501, 1002, -502, 991, -500, 976, -495, 969, -488, 980, -475, 978, -481, 978, -489, 969, -490, 954, -490, 939, -487, 928, -492, 926, -494, 911, -497, 896, -506, 887, -497, 883, -494, 869, -493, 853, -491, 839, -480, 831, -477, 821, -469, 812, -457, 806, -450, 805, -441, 799, -429, 792, -439, 792, -454, 791, -466, 786, -479, 787, -494, 791, -507, 788, -517, 780, -532, 779, -548, 778, -560, 775, -574, 778, -586, 785, -591, 796, -588, 809, -583, 819, -588, 823, -601, 819, -613, 820, -618, 816, -629, 813, -635, 804, -641, 796, -639, 785, -633, 775, -623, 770, -623, 763, -627, 760, -621, 751, -616, 742, -625, 734, -626, 741, -632, 753, -635, 763, -640, 774, -642, 788, -650, 796, -664, 796, -675, 794, -677, 785, -678, 783, -686, 779, -687, 768, -693, 776, -696, 773, -701, 769, -705, 782, -710, 793, -715, 799, -725, 792, -734, 784, -734, 794, -727, 805, -729, 813, -734, 821, -741, 810, -752, 805, -761, 797, -770, 804, -784, 802, -780, 795, -789, 786, -799, 779, -811, 775, -819, 766, -827, 756, -836, 747, -848, 751, -851, 737, -857, 742, -866, 750, -862, 760, -873, 766, -881, 775, -893, 781, -892, 794, -894, 809, -902, 818, -914, 825, -920, 835, -928, 844, -929, 855, -931, 865, -941, 864, -955, 869, -958, 874, -954, 880, -950, 889, -962, 891, -971, 888, -976, 875, -983, 865, -985, 868, -977, 877, -972, 891, -973, 902, -972, 915, -982, 914, -992, 909, -1000, 903, -1007, 893, -1017, 885, -1015, 888, -1011, 902, -1013, 915, -1023, 911, -1031, 903, -1041, 903, -1053, 900, -1066, 896, -1076, 888, -1081, 894, -1090, 898, -1098, 906, -1105, 902, -1113, 900, -1116, 891, -1127, 886, -1131, 872, -1122, 866, -1119, 857, -1132, 855, -1132, 839, -1134, 829, -1143, 835, -1153, 835, -1157, 840, -1170, 842, -1180, 849, -1195, 849, -1205, 856, -1211, 852, -1217, 840, -1217, 830, -1220, 832, -1218, 821, -1221, 812, -1231, 820, -1234, 831, -1241, 833, -1250, 825, -1250, 835, -1254, 846, -1254, 859, -1262, 858, -1274, 854, -1282, 844, -1287, 841, -1296, 845, -1310, 845, -1323, 842, -1333, 835, -1327, 827, -1339, 828, -1354, 826, -1364, 821, -1360, 833, -1369, 840, -1381, 838, -1393, 832, -1398, 828, -1403, 824, -1413, 821, -1427, 821, -1438, 825, -1445, 817, -1440, 810, -1444, 806, -1454, 813, -1460, 802, -1453, 793, -1458, 795, -1470, 800, -1481, 797, -1491, 794, -1499, 792, -1506, 782, -1514, 772, -1514, 759, -1508, 750, -1517, 745, -1520, 734, -1520, 722, -1515, 711, -1523, 703, -1519, 690, -1508, 686, -1495, 687, -1486, 696, -1474, 690, -1461, 689, -1449, 694, -1436, 698, -1425, 703, -1412, 707, -1398, 709, -1384, 713, -1372, 718, -1367, 718, -1377, 711, -1390, 707, -1402, 701, -1411, 694, -1416, 681, -1409, 680, -1403, 679, -1393, 677, -1384, 684, -1375, 687, -1369, 687, -1362, 687, -1371, 680, -1378, 672, -1366, 669, -1357, 665, -1349, 665, -1343, 659, -1339, 657, -1352, 656, -1364, 654, -1362, 659, -1378, 659, -1390, 655, -1404, 654, -1412, 662, -1426, 659, -1436, 662, -1446, 660, -1448, 670, -1443, 683, -1453, 681, -1459, 671, -1460, 658, -1472, 660, -1473, 648, -1463, 645, -1450, 644, -1456, 635, -1452, 622, -1454, 608, -1448, 608, -1440, 618, -1434, 630, -1423, 636, -1413, 631, -1403, 625, -1394, 619, -1381, 618, -1373, 608, -1370, 594, -1367, 581, -1372, 568, -1382, 567, -1394, 572, -1409, 570, -1423, 568, -1435, 563, -1451, 563, -1463, 560, -1477, 558, -1492, 559, -1505, 557, -1510, 546, -1505, 542, -1492, 536, -1481, 534, -1470, 527, -1458, 526, -1450, 529, -1440, 522, -1431, 513, -1421, 505, -1415, 495, -1408, 484, -1403, 472, -1399, 460, -1396, 445, -1404, 437, -1405, 424, -1391, 422, -1379, 420, -1365, 419, -1350, 421, -1340, 428, -1341, 437, -1346, 445, -1344, 458, -1337, 449, -1328, 449, -1324, 456, -1330, 467, -1328, 473, -1323, 461, -1316, 453, -1304, 451, -1298, 442, -1288, 446, -1295, 440, -1281, 444, -1279, 457, -1276, 465, -1267, 458, -1258, 449, -1256, 441, -1251, 432, -1243, 422, -1238, 410, -1227, 412, -1212, 409, -1201, 416, -1193, 411, -1184, 404, -1171, 400, -1156, 398, -1141, 394, -1132, 390, -1126, 380, -1121, 368, -1111, 360, -1097, 361, -1085, 367, -1094, 375, -1081, 376, -1071, 383, -1063, 391, -1057, 393, -1064, 382, -1073, 374, -1080, 365, -1073, 363, -1061, 357, -1065, 355, -1078, 357, -1075, 355, -1062, 351, -1053, 346, -1044, 338, -1036, 337, -1031, 348, -1028, 353, -1020, 358, -1021, 373, -1024, 378, -1013, 377, -1011, 371, -1004, 368, -1003, 354, -1015, 350, -1027, 346, -1032, 335, -1031, 323, -1021, 315, -1014, 305, -1012, 290, -1016, 275, -1017, 263, -1015, 249, -1004, 246, -1004, 253, -1009, 263, -1012, 276, -1009, 292, -1010, 306, -1000, 301, -999, 293, -986, 297, -976, 297, -974, 310, -971, 296, -967, 299, -960, 296, -955, 291, -949, 290, -956, 300, -956, 313, -959, 325, -957, 330, -949, 320, -950, 310, -945, 307, -941, 303, -931, 303, -922, 306, -918, 316, -904, 316, -899, 321, -890, 321, -884, 313, -893, 316, -887, 308, -876, 301, -874, 306, -870, 312, -871, 320, -866, 308, -872, 297, -878, 289, -883, 279, -894, 278, -904, 279, -910, 282, -919, 280, -925, 284, -937, 288, -939, 280, -929, 275, -921, 265, -915, 254, -903, 251, -891, 256, -876, 257, -865, 255, -863, 267, -849, 264, -850, 272, -837, 273, -836, 270, -845, 262, -845, 259, -832, 262, -819, 265, -807, 262, -794, 257, -780, 253, -769, 253, -772, 252, -784, 251, -798, 250, -806, 245, -806, 231, -797, 229, -794, 219, -783, 215, -776, 207, -785, 208, -791, 203, -799, 212, -810, 205, -820, 198, -825, 192, -815, 185, -811, 172, -807, 169, -804, 173, -794, 165, -792, 153, -805, 151, -815, 158, -825, 155, -813, 149, -803, 144, -791, 138, -785, 147, -770, 145, -760, 137, -751, 129, -739, 126, -730, 134, -718, 139, -709, 148, -701, 158, -688, 158, -671, 158, -658, 162, -645, 157, -635, 150, -623, 149, -611, 143, -602, 135, -594, 125, -586, 116, -573, 109, -564, 105, -581, 107, -592, 114, -602, 120, -615, 126, -624, 135, -619, 139, -630, 143, -636, 141, -651, 144, -660, 149, -672, 144, -688, 143, -701, 140, -705, 126, -703, 114, -702, 99, -707, 86, -721, 84, -730, 76, -719, 70, -705, 68, -689, 66, -677, 59, -667, 53, -658, 44, -652, 33, -649, 22, -658, 13, -664, 1, -668, -12, -680, -17, -688, -27, -694, -35, -698, -48, -699, -64, -694, -76, -685, -85, -675, -93, -665, -100, -656, -109, -649, -120, -645, -132, -632, -138, -626, -149, -622, -158, -612, -166, -608, -178, -601, -187, -600, -199, -599, -213, -596, -227, -592, -239, -590, -229, -585, -223, -581, -236, -570, -243, -560, -251, -549, -258, -537, -256, -538, -267, -527, -271, -511, -272, -496, -274, -487, -283, -483, -296, -481, -310, -468, -312, -457, -310, -444, -310, -436, -319, -429, -320, -423, -323, -416, -333, -408, -342, -403, -339, -399, -325, -388, -320, -375, -323, -367, -333, -364, -346, -372, -355, -382, -362, -392, -369, -393, -380, -401, -391, -396, -403, -382, -402, -377, -412, -374, -421, -366, -428, -362, -441, -357, -452, -349, -462, -353, -474, -365, -472, -367, -479, -359, -488, -360, -499, -358, -510, -357, -524, -369, -524, -374, -534, -382, -538, -380, -551, -378, -565, -371, -576, -364, -586, -354, -594, -344, -602, -334, -610, -335, -610, -348, -605, -359, -597, -369, -590, -376, -579, -384, -571, -397, -572, -410, -576, -412, -591, -414, -607, -415, -619, -405, -616, -393, -622, -384, -631, -373, -637, -361, -643, -353, -652, -341, -659, -332, -667, -328, -680, -318, -688, -304, -692, -295, -700, -286, -708, -277, -718, -268, -726, -261, -736, -255, -748, -250, -760, -246, -772, -242, -785, -239, -798, -236, -812, -234, -826, -233, -841, -232, -856, -229, -869, -228, -884, -226, -898, -222, -911, -216, -922, -207, -931, -195, -937, -180, -941, -171, -949, -168, -959, -177, -951, -192, -946, -197, -950, -188, -958, -183, -970, -184, -986, -183, -1001, -185, -1008, -189, -995, -189, -980, -190, -965, -198, -955, -209, -948, -218, -939, -226, -930, -232, -919, -238, -908, -242, -895, -244, -881, -246, -867, -247, -852, -249, -838, -253, -825, -256, -812, -261, -801, -267, -789, -274, -779, -283, -770, -294, -763, -300, -752, -308, -742, -319, -735, -332, -730, -340, -722, -348, -713, -356, -704, -353, -689, -361, -684, -369, -694, -376, -706, -383, -717, -383, -733, -386, -749, -387, -766, -388, -782, -388, -797, -389, -814, -391, -831, -393, -848, -397, -864, -400, -879, -404, -895, -406, -912, -408, -929, -409, -945, -411, -962, -413, -979, -415, -996, -417, -1013, -419, -1029, -421, -1047, -424, -1063, -426, -1080, -428, -1097, -430, -1114, -430, -1130, -426, -1129, -426, -1113, -421, -1100, -414, -1089, -406, -1079, -401, -1065, -389, -1068, -380, -1076, -372, -1086, -362, -1094, -360, -1103, -354, -1114, -364, -1120, -378, -1122, -391, -1121, -402, -1116, -410, -1126, -414, -1140, -419, -1154, -427, -1165, -429, -1177, -426, -1190, -427, -1207, -430, -1223, -432, -1240, -435, -1255, -438, -1272, -440, -1288, -441, -1305, -445, -1320, -448, -1336, -452, -1352, -454, -1368, -457, -1385, -461, -1400, -465, -1415, -468, -1431, -471, -1447, -473, -1464, -476, -1480, -480, -1495, -485, -1509, -489, -1524, -491, -1540, -495, -1555, -497, -1572, -501, -1587, -505, -1603, -509, -1618, -513, -1633, -517, -1647, -523, -1659, -532, -1668, -542, -1676, -548, -1689, -556, -1699, -566, -1707, -577, -1712, -590, -1716, -604, -1718, -601, -1768, -573, -1778, -566, -1802, -549, -1802, -521, -1789, -517, -1793, -483, -1808, -498, -1871, -519, -1880, -502, -1904, -474, -1910, -463, -1866, -456, -1871, -452, -1891, -442, -1900, -421, -1901, -393, -1920, -375, -1916, -330, -1955, -288, -1951, -267, -1941, -256, -1951, -257, -1975, -239, -1985, -194, -2033, -176, -2009, -148, -2019, -102, -2000, -52, -2029, -42, -2029, -24, -2058, -7, -2067, 3, -2077, 81, -2053, 81, -2053, 95, -2058, 116, -2082, 127, -2077, 127, -2067, 144, -2062, 155, -2072, 187, -2076, 190, -2072, 236, -2071, 254, -2081, 261, -2076, 239, -2028, 246, -1994, 303, -2003, 335, -2027, 342, -2017, 370, -2026, 381, -2031, 384, -2031, 416, -2064, 448, -2059, 448, -2064, 480, -2054, 480, -2058, 516, -2115, 530, -2110, 530, -2096, 573, -2100, 573, -2095, 615, -2109, 612, -2118, 612, -2118, 630, -2128, 633, -2127, 647, -2122, 638, -2156, 670, -2184, 688, -2189, 699, -2217, 721, -2226, 724, -2221, 798, -2186, 855, -2203, 892, -2231, 927, -2225, 963, -2229, 972, -2195, 1011, -2193, 1032, -2173, 1081, -2162, 1081, -2162, 1100, -2180, 1123, -2185, 1139, -2160, 1132, -2149, 1125, -2139, 1118, -2128, 1107, -2121, 1097, -2113, 1094, -2100, 1092, -2086, 1090, -2072, 1087, -2058, 1077, -2055, 1079, -2044, 1087, -2053, 1089, -2038, 1090, -2024, 1090, -2008, 1087, -1994, 1075, -1989, 1061, -1986, 1056, -1974, 1063, -1965, 1072, -1955, 1074, -1940, 1088, -1943, 1089, -1932, 1077, -1925, 1072, -1913, 1080, -1903, 1078, -1914, 1085, -1921, 1090, -1908, 1092, -1891, 1098, -1878, 1100, -1864, 1088, -1862, 1086, -1848, 1089, -1838, 1100, -1841, 1092, -1850, 1100, -1859, 1107, -1848, 1114, -1838, 1121, -1827, 1128, -1815, 1134, -1804, 1140, -1792, 1151, -1787, 1161, -1779, 1171, -1772, 1180, -1763, 1189, -1755, 1202, -1751, 1215, -1752, 1230, -1753, 1236, -1740, 1243, -1730, 1252, -1720, 1259, -1710, 1268, -1701, 1280, -1695, 1292, -1691, 1301, -1682, 1311, -1675, 1321, -1667, 1331, -1660, 1339, -1650, 1348, -1641, 1357, -1632, 1366, -1624, 1365, -1619, 1355, -1626, 1347, -1636, 1338, -1644, 1330, -1654, 1321, -1662, 1311, -1670, 1300, -1676, 1294, -1673, 1306, -1668, 1317, -1661, 1325, -1652, 1329, -1637, 1342, -1633, 1348, -1625, 1357, -1616, 1369, -1611, 1381, -1605, 1391, -1598, 1403, -1594, 1416, -1591, 1421, -1593, 1413, -1602, 1400, -1605, 1387, -1609, 1375, -1614, 1385, -1612, 1399, -1609, 1414, -1607, 1430, -1610, 1439, -1618, 1443, -1631, 1447, -1644, 1458, -1651, 1473, -1654, 1488, -1653, 1505, -1654, 1521, -1657, 1536, -1657, 1549, -1654, 1563, -1652, 1579, -1653, 1593, -1658, 1603, -1666, 1598, -1679, 1595, -1691, 1607, -1698, 1623, -1698, 1638, -1697, 1653, -1696, 1669, -1697, 1682, -1692, 1675, -1682, 1663, -1676, 1652, -1668, 1646, -1657, 1648, -1640, 1646, -1626, 1643, -1613, 1636, -1602, 1633, -1593, 1642, -1602, 1648, -1612, 1653, -1625, 1652, -1641, 1651, -1658, 1658, -1668, 1670, -1675, 1682, -1681, 1693, -1686, 1697, -1680, 1690, -1671, 1698, -1662, 1710, -1657, 1724, -1659, 1734, -1664, 1744, -1663, 1757, -1660, 1763, -1651, 1761, -1637, 1750, -1631, 1743, -1620, 1747, -1607, 1748, -1595, 1757, -1604, 1771, -1604, 1781, -1610, 1782, -1621, 1792, -1628, 1803, -1627, 1814, -1620, 1820, -1629, 1815, -1638, 1808, -1649, 1798, -1656, 1786, -1659, 1771, -1661, 1758, -1664, 1748, -1672, 1748, -1685, 1756, -1695, 1770, -1697, 1784, -1697, 1799, -1696, 1811, -1694, 1825, -1694, 1836, -1688, 1847, -1682, 1861, -1682, 1869, -1691, 1871, -1705, 1870, -1717, 1876, -1727, 1871, -1740, 1879, -1749, 1895, -1749, 1908, -1749, 1919, -1750, 1932, -1748, 1942, -1748, 1950, -1758, 1962, -1763, 1972, -1755, 1988, -1755, 1992, -1766, 2002, -1772, 2014, -1776, 2023, -1779, 2033, -1784, 2031, -1791, 2023, -1800, 2034, -1804, 2043, -1812, 2058, -1813, 2064, -1801, 2077, -1800, 2072, -1795, 2063, -1787, 2067, -1780, 2079, -1776, 2081, -1785, 2094, -1785, 2108, -1782, 2114, -1789, 2127, -1786, 2143, -1788, 2147, -1801, 2134, -1805, 2139, -1810, 2153, -1808, 2166, -1806, 2158, -1798, 2158, -1782, 2166, -1771, 2181, -1771, 2193, -1766, 2207, -1770, 2215, -1780, 2227, -1784, 2230, -1775, 2227, -1762, 2236, -1753, 2248, -1750, 2260, -1744, 2274, -1742, 2282, -1733, 2293, -1726, 2307, -1729, 2314, -1740, 2322, -1731, 2326, -1720, 2336, -1714, 2328, -1706, 2334, -1694, 2338, -1684, 2325, -1684, 2311, -1685, 2299, -1684, 2310, -1677, 2321, -1671, 2326, -1661, 2332, -1650, 2342, -1644, 2345, -1629, 2347, -1613, 2358, -1609, 2369, -1612, 2384, -1611, 2394, -1605, 2402, -1596, 2410, -1586, 2415, -1573, 2417, -1562, 2420, -1550, 2431, -1544, 2444, -1542, 2454, -1535, 2466, -1530, 2476, -1536, 2477, -1522, 2475, -1507, 2479, -1493, 2488, -1484, 2501, -1481, 2507, -1469, 2519, -1465, 2532, -1461, 2538, -1467, 2545, -1461, 2547, -1452, 2559, -1449, 2570, -1442, 2578, -1432, 2588, -1426, 2594, -1416, 2604, -1370, 2645, -1323, 2664, -1273, 2634, -1247, 2564, -1273, 2484, -1266, 2415, -1229, 2412, -1196, 2373, -1151, 2381, -1126, 2358, -1099, 2360, -1080, 2387, -1034, 2385, -1015, 2404, -999, 2425, -1006, 2381, -933, 2363, -925, 2336, -928, 2337, -932, 2286, -898, 2287, -874, 2296, -859, 2289, -850, 2261, -848, 2248, -810, 2290, -787, 2311, -795, 2408, -738, 2402, -710, 2417, -656, 2366, -617, 2346, -575, 2337, -552, 2337, -552, 2337, -552, 2327, -553, 2295, -532, 2275, -495, 2286, -470, 2336, -432, 2339, -393, 2324, -370, 2299, -353, 2293, -363, 2293, -363, 2279, -355, 2284, -331, 2284, -331, 2253, -290, 2269, -236, 2237, -214, 2242, -195, 2195, -194, 2173, -205, 2153, -202, 2136, -204, 2134, -218, 2102, -230, 2092, -227, 2073, -242, 2063, -277, 2089, -275, 2088, -299, 2037, -327, 2013, -329, 1994, -335, 1994, -335, 1982, -312, 2026, -280, 2011, -257, 2025, -222, 2000, -205, 2000, -200, 1998, -176, 2022, -141, 2017, -117, 2014, -117, 2046, -71, 2105, -23, 2110, 38, 2102, 57, 2123, 78, 2123, 78, 2174, 92, 2184, 131, 2183, 136, 2226, 169, 2268, 259, 2280, 260, 2286, 275, 2243, 276, 2260, 311, 2257, 335, 2309, 340, 2317, 321, 2398, 333, 2446, 401, 2475, 404, 2475, 408, 2474, 413, 2445, 415, 2431, 457, 2432, 486, 2425, 490, 2435, 520, 2431, 525, 2438, 583, 2421, 663, 2441, 689, 2449, 738, 2463, 754, 2476, 847, 2476, 852, 2475, 895, 2502, 941, 2503, 965, 2503, 965, 2538, 998, 2551, 1047, 2576, 1084, 2481, 1113, 2473, 1107, 2473, 1107, 2443, 1114, 2432, 1103, 2400, 1109, 2389, 1123, 2346, 1138, 2338, 1156, 2301, 1148, 2301, 1148, 2300, 1133, 2282, 1117, 2216, 1121, 2196, 1162, 2168, 1165, 2168, 1165, 2142, 1134, 2104, 1140, 2055, 1227, 2002, 1261, 1978, 1259, 1926, 1274, 1894, 1248, 1872, 1246, 1853, 1259, 1821, 1266, 1823, 1281, 1823, 1281, 1807, 1289, 1714, 1268, 1718, 1264, 1699, 1306, 1680, 1314, 1677, 1314, 1661, 1317, 1640, 1350, 1609, 1352, 1582, 1384, 1550, 1392, 1535, 1391, 1538, 1391, 1507, 1399, 1507, 1399, 1513, 1442, 1503, 1461, 1484, 1469, 1500, 1557, 1481, 1561, 1481, 1556, 1446, 1525, 1436, 1491, 1436, 1491, 1367, 1453, 1370, 1458, 1370, 1458, 1326, 1465, 1301, 1464, 1279, 1472, 1282, 1472, 1301, 1521, 1269, 1548, 1269, 1548, 1270, 1582, 1270, 1587, 1234, 1638, 1225, 1633, 1160, 1639, 1145, 1624, 1133, 1628, 1124, 1681, 1102, 1699, 1078, 1698, 1086, 1717, 1067, 1721, 1047, 1706, 1047, 1706, 1013, 1700, 991, 1800, 956, 1846, 914, 1826, 890, 1801, 890, 1801, 851, 1799, 837, 1842, 819, 1851, 791, 1850, 784, 1883, 795, 1913, 795, 1913, 758, 1970, 759, 1970 }; + static public int[] Corse = { 3262, -1738, 3271, -1774, 3255, -1779, 3262, -1825, 3266, -1823, 3271, -1890, 3230, -1875, 3195, -1874, 3175, -1901, 3175, -1905, 3104, -1943, 3048, -2011, 3055, -2012, 3056, -2030, 3024, -2057, 3029, -2084, 3049, -2080, 3082, -2103, 3076, -2110, 3035, -2123, 3040, -2168, 3090, -2188, 3104, -2213, 3061, -2272, 3072, -2289, 3118, -2270, 3135, -2281, 3122, -2301, 3128, -2317, 3113, -2330, 3111, -2350, 3094, -2361, 3188, -2381, 3156, -2412, 3143, -2416, 3144, -2441, 3189, -2456, 3258, -2477, 3271, -2520, 3303, -2523, 3324, -2503, 3314, -2489, 3335, -2462, 3332, -2439, 3352, -2427, 3352, -2363, 3364, -2331, 3361, -2316, 3350, -2309, 3356, -2239, 3385, -2132, 3359, -1941, 3328, -1897, 3325, -1833, 3330, -1823, 3295, -1719, 3262, -1738 }; + static public int[] Ile = { -520, -359, -501, -383, -484, -383, -428, -408, -415, -399, -441, -379, -477, -374, -477, -364, -490, -369, -510, -359, -497, -354, -497, -354, -523, -359 }; + static public int[] Ile1 = { -465, -456, -436, -480, -409, -490, -406, -509, -397, -524, -400, -538, -403, -543, -397, -562, -404, -562, -413, -538, -456, -499, -465, -456 }; + static public int[] Ile2 = { -1612, 771, -1616, 766, -1636, 758, -1626, 757, -1623, 752, -1620, 757, -1600, 765, -1612, 771 }; + + /// + /// Xanthane is 1/8 Nm + /// + static float Ratio = (float)(8); + + static public void Draw(Graphics g, Pen p) + { + DrawLines(g, p, France); + DrawLines(g, p, Corse); + DrawLines(g, p, Ile); + DrawLines(g, p, Ile1); + DrawLines(g, p, Ile2); + } + + static private void DrawLines(Graphics g, Pen p, int[] lines) + { + for (int i = 0; i < (lines.Length - 2); i = i + 2) + { + try + { + g.DrawLine(p, (float)PanAndZoomX(lines[i] / Ratio), (float)PanAndZoomY(lines[i + 1] / Ratio), + (float)PanAndZoomX(lines[i + 2] / Ratio), (float)PanAndZoomY(lines[i + 3] / Ratio)); + } + catch (NullReferenceException ex) + { + ex.ToString(); + } + + /*int p1 = lines[i]; + int p2 = lines[i + 1]; + int p3 = lines[i + 2]; + int p4 = 0; + + if ((i+3) < lines.Length) + p4 = lines[i + 3]; + else + p4 = lines[i + 2]; + g.DrawLine(p, (float)PanAndZoomX(p1 / Ratio), (float)PanAndZoomY(p2 / Ratio), + (float)PanAndZoomX(p3 / Ratio), (float)PanAndZoomY(p4 / Ratio));*/ + } + } + + #region Delegate Pan And Zoom + + public delegate double PanAndZoom(double input); + + [NonSerialized] + static public PanAndZoom PanAndZoomX; + [NonSerialized] + static public PanAndZoom PanAndZoomY; + + #endregion + } + +} diff --git a/SimpleRadar/Program.cs b/SimpleRadar/Program.cs new file mode 100644 index 0000000..7ad8938 --- /dev/null +++ b/SimpleRadar/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace SimpleRadar +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FormSimpleRadar()); + } + } +} diff --git a/SimpleRadar/Properties/AssemblyInfo.cs b/SimpleRadar/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..458428f --- /dev/null +++ b/SimpleRadar/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SimpleRadar")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SimpleRadar")] +[assembly: AssemblyCopyright("Copyright © 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("40119ad7-125d-4372-9d2d-b82f2c4984e7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SimpleRadar/Properties/Resources.Designer.cs b/SimpleRadar/Properties/Resources.Designer.cs new file mode 100644 index 0000000..7152687 --- /dev/null +++ b/SimpleRadar/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.235 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SimpleRadar.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SimpleRadar.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/SimpleRadar/Properties/Resources.resx b/SimpleRadar/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/SimpleRadar/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SimpleRadar/Properties/Settings.Designer.cs b/SimpleRadar/Properties/Settings.Designer.cs new file mode 100644 index 0000000..24b2b12 --- /dev/null +++ b/SimpleRadar/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.235 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SimpleRadar.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/SimpleRadar/Properties/Settings.settings b/SimpleRadar/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/SimpleRadar/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SimpleRadar/SimpleRadar.csproj b/SimpleRadar/SimpleRadar.csproj new file mode 100644 index 0000000..9767450 --- /dev/null +++ b/SimpleRadar/SimpleRadar.csproj @@ -0,0 +1,128 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {5A475E82-0C2D-4A7A-A88D-C9D0F0D22C58} + WinExe + Properties + SimpleRadar + SimpleRadar + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + simpleRadar.ico + + + + ..\ProjectedStripBoard\bin\Debug\Ivy.dll + + + ..\ProjectedStripBoard\bin\Debug\IvyBus.IvyControl.dll + + + + + + + + + + + + + + + + Form + + + FormSimpleRadar.cs + + + + + + UserControl + + + UserControlRadarView.cs + + + FormSimpleRadar.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + UserControlRadarView.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {2C32E701-5024-4F4B-AB35-1D5DD0049A8E} + Data + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + + \ No newline at end of file diff --git a/SimpleRadar/SimpleRadar.csproj.user b/SimpleRadar/SimpleRadar.csproj.user new file mode 100644 index 0000000..a842c55 --- /dev/null +++ b/SimpleRadar/SimpleRadar.csproj.user @@ -0,0 +1,14 @@ + + + + ShowAllFiles + publish\ + + + + + + fr-FR + false + + \ No newline at end of file diff --git a/SimpleRadar/UserControlRadarView.Designer.cs b/SimpleRadar/UserControlRadarView.Designer.cs new file mode 100644 index 0000000..7fce91c --- /dev/null +++ b/SimpleRadar/UserControlRadarView.Designer.cs @@ -0,0 +1,49 @@ +using Data; +namespace SimpleRadar +{ + partial class UserControlRadarView : IAircraftView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // UserControlRadarView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "UserControlRadarView"; + this.Load += new System.EventHandler(this.UserControl1_Load); + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown); + this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove); + this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/SimpleRadar/UserControlRadarView.cs b/SimpleRadar/UserControlRadarView.cs new file mode 100644 index 0000000..9f6674c --- /dev/null +++ b/SimpleRadar/UserControlRadarView.cs @@ -0,0 +1,2554 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using Data; + +namespace SimpleRadar +{ + public partial class UserControlRadarView : UserControl + { + #region Attributes + + + + // public FormRadar formRadar; + public PointF AnotoPenDown = new PointF(-1, -1); + + public Label clockLabel; + public Label alidadeLabel; + + public float PanX = 0f; + public float PanY = 0f; + public float Zoom = Config.initialZoom; + + public Point PMouseDown; + public Boolean BMouseDown = false; + + public ContextMenu ctxtMenu; + + public Sector selectedSector = null; + + private Data.AppDatabase data; + + private Timer selectedAircraftTimer; + private double selectedAircraftRadius = Config.aircraftSelectedTimerRadius; + private string selectedAircraft = ""; + private double xSelectedAircraftPosition = (double)0; + private double ySelectedAircraftPosition = (double)0; + private float xCircleCenterPosition = 0f; + private float yCircleCenterPosition = 0f; + /*private bool selectedAircraftFound = false; + private int iterationsToFocus = 5; + private float xShift = (float)0; + private float yShift = (float)0;*/ + + private Timer aircraftModsTimer; + private Timer aircraftAlarmsTimer; + private ListBox alarmListBox; + + private int currentHour = 0; + private int currentMinute = 0; + private int currentSecond = 0; + + public List warningAircraftList = new List(); + + public List partAircraftList = new List(); + + public List aflFilterList = new List(); + public List aflFilterAircraftList = new List(); + public int aflSup = 0; + public int aflInf = 0; + + public Dictionary> aircraftModSDictionary = new Dictionary>(); + public Dictionary> aircraftInformationMessagesDictionary = new Dictionary>(); + public Dictionary> aircraftAlarmsDictionary = new Dictionary>(); + public Dictionary aircraftFollowedDictionary = new Dictionary(); + public Dictionary> aircraftTagMessagesDictionary = new Dictionary>(); + + public string aircraftCheckedContextualMenu = ""; + public string aircraftSelectedContextualMenu = ""; + + public bool alidadeActivate = false; + public bool alidadeFirstPointSet = false; + private PointF alidadeFirstPoint = new PointF(); + public bool alidadeSecondPointSet = false; + private PointF alidadeSecondPoint = new PointF(); + private PointF alidadeCurrentPoint = new PointF(); + + public Dictionary aircraftBeaconSeparationDictionary = new Dictionary(); + + public float separationAcOneX = 0f; + public float separationAcOneY = 0f; + public float separationAcTwoX = 0f; + public float separationAcTwoY = 0f; + public bool separationAcOneFound = false; + public bool separationAcTwoFound = false; + + #endregion + + #region Constructor + + + public UserControlRadarView() + { + InitializeComponent(); + + // this.formRadar = frmRadar; + + this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); + this.MouseWheel += new MouseEventHandler(Form1_MouseWheel); + + aircraftModsTimer = new Timer(); + aircraftModsTimer.Interval = Config.aircraftModsTimerInterval; + aircraftModsTimer.Tick += new EventHandler(aircraftModsTimer_Tick); + aircraftModsTimer.Enabled = true; + aircraftModsTimer.Start(); + + aircraftAlarmsTimer = new Timer(); + aircraftAlarmsTimer.Interval = Config.aircraftAlarmsTimerInterval; + aircraftAlarmsTimer.Tick += new EventHandler(aircraftAlarmsTimer_Tick); + aircraftAlarmsTimer.Enabled = true; + aircraftAlarmsTimer.Start(); + + alarmListBox = new ListBox(); + alarmListBox.Name = "alarmListBox"; + alarmListBox.Location = new Point(80, 10); + alarmListBox.Size = new Size(200, 70); + alarmListBox.Font = new Font("Tahoma", 10F, FontStyle.Bold); + alarmListBox.BackColor = Color.White; + alarmListBox.ForeColor = Color.Orange; + alarmListBox.Visible = false; + this.Controls.Add(alarmListBox); + + clockLabel = new Label(); + clockLabel.Size = new Size(Config.clockLabelWidth, Config.clockLabelHeight); + clockLabel.Location = new Point(this.ClientRectangle.Right - Config.clockLabelWidth - 10, this.ClientRectangle.Bottom - Config.clockLabelHeight - 10); + clockLabel.BackColor = Config.clockLabelBackColor; + clockLabel.ForeColor = Config.clockLabelForeColor; + clockLabel.Font = Config.clockLabelFont; + clockLabel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + clockLabel.Visible = true; + clockLabel.TextAlign = ContentAlignment.BottomRight; + this.Controls.Add(clockLabel); + + alidadeLabel = new Label(); + alidadeLabel.Size = new Size(Config.alidadeLabelWidth, Config.alidadeLabelHeight); + alidadeLabel.Location = new Point(10, this.ClientRectangle.Bottom - Config.alidadeLabelHeight - 10); + alidadeLabel.BackColor = Config.alidadeLabelUnselectedBackColor; + alidadeLabel.ForeColor = Config.alidadeLabelUnselectedForeColor; + alidadeLabel.Font = Config.alidadeLabelFont; + alidadeLabel.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + alidadeLabel.Text = Config.alidadeLabelUnselectedText; + alidadeLabel.TextAlign = ContentAlignment.BottomLeft; + alidadeLabel.Click += new EventHandler(alidadeLabel_Click); + alidadeLabel.Visible = true; + this.Controls.Add(alidadeLabel); + + this.aircraftTagMessagesDictionary.Add("1677", new Dictionary()); + this.aircraftTagMessagesDictionary.Add("1711", new Dictionary()); + this.aircraftTagMessagesDictionary.Add("1315", new Dictionary()); + this.aircraftTagMessagesDictionary.Add("1947", new Dictionary()); + + ////FOR TESTS + + ////Aircraft 1 => CallSign : EZY915B & Flight : 1203 + ////Aircraft 2 => CallSign : DAL86 & Flight : 1025 + ////Aircraft 3 => CallSign : N525AJ & Flight : 1254 + + ////select an aircraft + //manageSelectedAircraftTimer("add", "1203"); + + ////part an aircraft + //managePartAircraftList("add", "1203"); + + ////warn an aircraft + //manageWarningAircraftList("add", "1203"); + + ////add a flight level filter + //manageFlightLevelFilter("add", 300, 40); + //manageAircraftFlightLevelFilterList("add", "1254"); + + ////add a ModS on an aircraft + //manageAircraftModSDictionary("1203", "320", "BQ", "True"); + //manageAircraftModSDictionary("1203", "320", "BQ", "False"); + //manageAircraftModSDictionary("1025", "320", "BQ", "False"); + + ////follow an aircraft + //manageFollowedAircraftList("add", "1203"); + //manageFollowedAircraftList("add", "1025"); + //manageFollowedAircraftList("add", "1254"); + + ////add an alarm for an aircraft + //manageAircraftAlarmsDictionary("add", "1203", 6, 50, 5); + //manageAircraftAlarmsDictionary("add", "1025", 6, 50, 15); + + ////draw the separation and the distance between two aircraft and a beacon + //manageAircraftSeparationList("add", "1203", "CFA SOMTI", "10", "1025", "ADATU SOMTI", "10", "5", "104,61 -80,09 118,63 -74,02"); + /*manageAircraftSeparationList("add", "1199", "ABUSO ADATU", "236", "598,367500670139 -550,142785577549 613,301363364121 -555,885584985269 627,301859639728 -561,269459430006 642,23572233371 -567,012258837726 657,169585027692 -572,755058245445 671,1700813033 -578,138932690182 686,103943997281 -583,881732097901 700,104440272889 -589,265606542638 715,038302966871 -595,008405950358 729,972165660852 -600,751205358077 743,97266193646 -606,135079802814 758,906524630442 -611,877879210534 772,90702090605 -617,261753655271 787,840883600031 -623,00455306299 802,774746294013 -628,74735247071", + "1225", "ETAMO VALKU ADATU", "248", "771,081851944354 -82,2489994224776 777,106513947302 -95,9859367722013 783,131175950251 -109,722874121925 789,557482086728 -124,375607294964 795,582144089676 -138,112544644687 801,606806092625 -151,849481994411 807,631468095573 -165,586419344135 814,057774232051 -180,239152517173 820,082436234999 -193,976089866897 826,107098237947 -207,713027216621 832,131760240895 -221,449964566344 838,558066377373 -236,102697739383 844,582728380321 -249,839635089107 850,607390383269 -263,57657243883 857,033696519747 -278,229305611869", + "12");*/ + /*manageAircraftSeparationList("add", "1199", "ABUSO ADATU", "244", "700,104440272889 -589,265606542638 815,841876151247 -633,772301952464 931,579312029605 -678,27899736229", + "1225", "ETAMO VALKU ADATU", "256", "814,057774232051 -180,239152517173 863,058358522695 -291,966242961593 912,058942813339 -403,693333406012 941,368654432785 -520,178403186158", + "12");*/ + + ////add an information message to an aircraft + /*string firstWord, secondWord, thirdWord, fourthWord, fifthWord, sixthWord, seventhWord; + manageAircraftInformationMessagesDictionary("add", "1203", 3); + firstWord = "0 3669 518 3643 504 3627 504 3612 509 3598 518 3584 526 3573 536 3566 547 3562 556 3561 564 3563 569 3566 571 3575 575 " + + "3589 582 3605 590 3617 603 3627 615 3634 631 3635 643 3632 656 3623 666 3607 673 3592 676 3581 674 3573 671 3569 671 " + + "3569 671 3572 672 3575 672 3580 674 3588 676 3597 678 3608 677 3620 676 3634 675 3650 673 3665 669 3677 657 3687 644 " + + "3691 630 3690 617 3685 606 3676 601 3667 601 3659 607 3651 621 3647 637 3648 652 3651 660 3657 666 3662 667 3670 662 " + + "3681 650 3688 635 3690 624 3690 623 3691 626 3692 633 3694 640 3700 649 3707 653 3716 655"; + secondWord = "1 3714 572 3733 581 3744 580 3757 577 3771 569 3781 556 3787 542 3788 529 3784 517 3776 505 3765 502 3754 505 3744 514 " + + "3733 527 3729 546 3725 570 3724 593 3725 617 3728 636 3733 653 3738 666 3745 676 3754 681 3762 681 3773 676 3784 664 " + + "3793 649 3794 638 3792 633 3792 633 3791 634 3791 639 3790 648 3792 659 3796 666 3804 674 3813 678 3822 677 3833 670 " + + "3839 660 3839 646 3835 634 3832 630 3831 631 3832 637 3834 647 3838 663 3841 671 3846 677 3853 679 3861 678 3869 675"; + thirdWord = "2 3854 524 3866 582 3870 614 3874 645 3876 667 3878 683 3878 687 3878 685 3877 677 3875 661 3873 639 3871 621 3870 610 " + + "3872 606 3874 605 3878 605 3888 604 3902 603 3918 603 3932 601 3942 600 3949 599 3949 597"; + updateAircraftInformationMessage("1203", true, firstWord); + updateAircraftInformationMessage("1203", true, secondWord); + updateAircraftInformationMessage("1203", true, thirdWord); + updateAircraftInformationMessage("1203", false, "");*/ + + //manageSelectedAircraftTimer("add", "1203"); + + /*manageAircraftInformationMessagesDictionary("add", "1025", 7); + firstWord = "0 3581 1251 3558 1476 3559 1479 3562 1481 3567 1482 3579 1482 3596 1482 3616 1481 3637 1478 3652 1476 3659 1474 3660 1474 3660 1472 " + + "3659 1471 3657 1471"; + secondWord = "1 3665 1439 3662 1480 3660 1480"; + thirdWord = "2 3730 1409 3727 1399 3722 1397 3715 1398 3707 1402 3701 1406 3698 1413 3697 1419 3700 1424 3707 1432 3716 1441 3724 1449 3727 1459 " + + "3725 1466 3718 1473 3709 1479 3700 1478"; + fourthWord = "3 3906 1374 3883 1385 3873 1396 3864 1414 3859 1432 3859 1448 3864 1460 3873 1469 3888 1474 3909 1474 3930 1466 3944 1456 3948 1445 " + + "3946 1435 3937 1430 3925 1430 3915 1439 3909 1451 3908 1467 3914 1480 3923 1487 3935 1489 3950 1488 3965 1486 3978 1480"; + fifthWord = "4 4075 1416 4074 1461 4075 1473 4076 1481 4077 1483 4077 1482 4079 1475 4083 1461 4086 1442 4089 1428 4094 1421 4097 1421 4101 1428 " + + "4108 1444 4112 1462 4114 1479 4114 1489 4111 1494 4111 1493 4109 1489 4108 1471 4107 1444 4106 1419 4112 1405 4117 1405 4122 1410 " + + "4129 1424 4135 1444 4139 1463 4141 1475 4142 1480 4142 1480 4142 1477 4141 1464 4140 1443 4141 1419 4142 1409 4145 1409 4147 1412 " + + "4152 1425 4161 1440 4171 1455 4183 1469 4194 1476 4205 1478 4216 1470 4228 1461 4230 1446 4225 1434 4217 1431 4207 1434 4198 1447 " + + "4192 1464 4193 1479 4199 1492 4206 1497 4217 1501 4233 1500 4251 1496"; + sixthWord = "5 4292 1440 4300 1422 4302 1414 4302 1407 4299 1400 4295 1397 4289 1396 4281 1398 4273 1405 4269 1417 4269 1428 4272 1440 4280 1453 " + + "4288 1466 4291 1481 4289 1491 4281 1499 4274 1502 4270 1499 4267 1491 4271 1479 4281 1462 4294 1450 4307 1436 4321 1425 4333 1414 " + + "4339 1407 4339 1400 4336 1397 4331 1394 4325 1392 4320 1397 4318 1404 4319 1417 4324 1433 4330 1452 4335 1469 4336 1482 4334 1491 " + + "4328 1498 4321 1500 4316 1498 4311 1492 4312 1484 4317 1476 4327 1467 4342 1462 4356 1458 4373 1455 4387 1452 4399 1448 4404 1443 " + + "4403 1437 4398 1430 4387 1428 4374 1430 4364 1435 4356 1445 4353 1460 4355 1468 4359 1475 4366 1479 4374 1477 4387 1471 4399 1459 " + + "4404 1447 4405 1440 4406 1443 4406 1449 4408 1462 4411 1473 4417 1485 4422 1489"; + seventhWord = "6 4455 1447 4467 1449 4477 1449 4489 1444 4497 1437 4498 1430 4494 1421 4485 1414 4469 1409 4451 1414 4438 1427 4430 1443 4431 1457 " + + "4438 1467 4451 1471 4465 1469 4480 1459 4492 1444 4496 1435 4496 1430 4495 1432 4494 1438 4493 1450 4494 1471 4497 1502 4501 1534 " + + "4504 1558 4501 1576 4496 1589 4490 1591 4485 1586 4476 1577 4468 1557 4464 1534 4476 1505 4518 1474 4536 1456 4551 1438 4556 1424 " + + "4554 1416 4548 1411 4538 1412 4525 1423 4519 1441 4522 1462 4530 1476 4542 1489 4558 1494 4576 1488 4589 1477"; + updateAircraftInformationMessage("1025", true, firstWord); + updateAircraftInformationMessage("1025", true, secondWord); + updateAircraftInformationMessage("1025", true, thirdWord); + updateAircraftInformationMessage("1025", true, fourthWord); + updateAircraftInformationMessage("1025", true, fifthWord); + updateAircraftInformationMessage("1025", true, sixthWord); + updateAircraftInformationMessage("1025", true, seventhWord); + updateAircraftInformationMessage("1025", false, "");*/ + + ////add a tag to an empty tag aircraft + /*string firstTagWord, secondTagWord, thirdTagWord; + manageAircraftTagMessageDictionary("add", "1677", 1986, 0); + manageAircraftTagMessageDictionary("update", "1677", 0, 3); + firstTagWord = "0 3669 518 3643 504 3627 504 3612 509 3598 518 3584 526 3573 536 3566 547 3562 556 3561 564 3563 569 3566 571 3575 575 " + + "3589 582 3605 590 3617 603 3627 615 3634 631 3635 643 3632 656 3623 666 3607 673 3592 676 3581 674 3573 671 3569 671 " + + "3569 671 3572 672 3575 672 3580 674 3588 676 3597 678 3608 677 3620 676 3634 675 3650 673 3665 669 3677 657 3687 644 " + + "3691 630 3690 617 3685 606 3676 601 3667 601 3659 607 3651 621 3647 637 3648 652 3651 660 3657 666 3662 667 3670 662 " + + "3681 650 3688 635 3690 624 3690 623 3691 626 3692 633 3694 640 3700 649 3707 653 3716 655"; + secondTagWord = "1 3714 572 3733 581 3744 580 3757 577 3771 569 3781 556 3787 542 3788 529 3784 517 3776 505 3765 502 3754 505 3744 514 " + + "3733 527 3729 546 3725 570 3724 593 3725 617 3728 636 3733 653 3738 666 3745 676 3754 681 3762 681 3773 676 3784 664 " + + "3793 649 3794 638 3792 633 3792 633 3791 634 3791 639 3790 648 3792 659 3796 666 3804 674 3813 678 3822 677 3833 670 " + + "3839 660 3839 646 3835 634 3832 630 3831 631 3832 637 3834 647 3838 663 3841 671 3846 677 3853 679 3861 678 3869 675"; + thirdTagWord = "2 3854 524 3866 582 3870 614 3874 645 3876 667 3878 683 3878 687 3878 685 3877 677 3875 661 3873 639 3871 621 3870 610 " + + "3872 606 3874 605 3878 605 3888 604 3902 603 3918 603 3932 601 3942 600 3949 599 3949 597"; + updateAircraftTagMessage("1677", true, firstTagWord); + updateAircraftTagMessage("1677", true, secondTagWord); + updateAircraftTagMessage("1677", true, thirdTagWord); + updateAircraftTagMessage("1677", false, "");*/ + + /*manageAircraftTagMessageDictionary("add", "1711", 1986, 0); + manageAircraftTagMessageDictionary("update", "1711", 0, 3); + firstTagWord = "0 3669 518 3643 504 3627 504 3612 509 3598 518 3584 526 3573 536 3566 547 3562 556 3561 564 3563 569 3566 571 3575 575 " + + "3589 582 3605 590 3617 603 3627 615 3634 631 3635 643 3632 656 3623 666 3607 673 3592 676 3581 674 3573 671 3569 671 " + + "3569 671 3572 672 3575 672 3580 674 3588 676 3597 678 3608 677 3620 676 3634 675 3650 673 3665 669 3677 657 3687 644 " + + "3691 630 3690 617 3685 606 3676 601 3667 601 3659 607 3651 621 3647 637 3648 652 3651 660 3657 666 3662 667 3670 662 " + + "3681 650 3688 635 3690 624 3690 623 3691 626 3692 633 3694 640 3700 649 3707 653 3716 655"; + secondTagWord = "1 3714 572 3733 581 3744 580 3757 577 3771 569 3781 556 3787 542 3788 529 3784 517 3776 505 3765 502 3754 505 3744 514 " + + "3733 527 3729 546 3725 570 3724 593 3725 617 3728 636 3733 653 3738 666 3745 676 3754 681 3762 681 3773 676 3784 664 " + + "3793 649 3794 638 3792 633 3792 633 3791 634 3791 639 3790 648 3792 659 3796 666 3804 674 3813 678 3822 677 3833 670 " + + "3839 660 3839 646 3835 634 3832 630 3831 631 3832 637 3834 647 3838 663 3841 671 3846 677 3853 679 3861 678 3869 675"; + thirdTagWord = "2 3854 524 3866 582 3870 614 3874 645 3876 667 3878 683 3878 687 3878 685 3877 677 3875 661 3873 639 3871 621 3870 610 " + + "3872 606 3874 605 3878 605 3888 604 3902 603 3918 603 3932 601 3942 600 3949 599 3949 597"; + updateAircraftTagMessage("1711", true, firstTagWord); + updateAircraftTagMessage("1711", true, secondTagWord); + updateAircraftTagMessage("1711", true, thirdTagWord); + updateAircraftTagMessage("1711", false, "");*/ + } + + #endregion + + #region Events handlers + + private void UserControl1_Load(object sender, EventArgs e) + { + //Set the drawing deleagate for the Beacon drawing + FranceMap.PanAndZoomX = new FranceMap.PanAndZoom(PanAndZoomX); + FranceMap.PanAndZoomY = new FranceMap.PanAndZoom(PanAndZoomY); + + //Set the drawing deleagate for the Beacon drawing + Sector.PanAndZoomX = new Sector.PanAndZoom(PanAndZoomX); + Sector.PanAndZoomY = new Sector.PanAndZoom(PanAndZoomY); + + //Set the drawing deleagate for the Beacon drawing + Beacon.PanAndZoomX = new Beacon.PanAndZoom(PanAndZoomX); + Beacon.PanAndZoomY = new Beacon.PanAndZoom(PanAndZoomY); + + //Set the drawing deleagate for the Beacon drawing + Route.PanAndZoomX = new Route.PanAndZoom(PanAndZoomX); + Route.PanAndZoomY = new Route.PanAndZoom(PanAndZoomY); + } + + void Form1_MouseWheel(object sender, MouseEventArgs e) + { + //Store the original position + PointF orig = GetImageCoordinates(e.X, e.Y); + //Console.WriteLine("orig x " + orig.X + " orig y " + orig.Y); + if (e.Delta > 0) Zoom += 0.1f * Zoom; + if (e.Delta < 0) Zoom -= 0.1f * Zoom; + + if (Zoom < 0.1) Zoom = 0.1f; + if (Zoom > 20) Zoom = 20.0f; + + PointF newPos = GetScreenCoordinates(orig.X, orig.Y); + //Console.WriteLine("newPos x " + newPos.X + " newPos y " + newPos.Y); + + //Correct the pan + PanX -= (newPos.X - e.X) / Zoom; + PanY += (newPos.Y - e.Y) / Zoom; + + PointF Corrected = GetScreenCoordinates(e.X, e.Y); + //Console.WriteLine("Corrected x " + newPos.X + " Corrected y " + newPos.Y); + + this.Invalidate(); + } + + private void Form1_MouseDown(object sender, MouseEventArgs e) + { + this.PMouseDown = new Point(e.X, e.Y); + this.BMouseDown = true; + PointF orig = GetImageCoordinates(e.X, e.Y); + //Console.WriteLine("orig x " + orig.X + " orig y " + orig.Y); + + if (e.Button == System.Windows.Forms.MouseButtons.Right) + showAircraftContextualMenu(e.X, e.Y); + + if (this.alidadeActivate) + { + if (!this.alidadeFirstPointSet) + { + this.alidadeFirstPoint = GetImageCoordinates(e.X, e.Y); + this.alidadeFirstPointSet = true; + } + else if (this.alidadeSecondPointSet) + { + this.alidadeFirstPoint = GetImageCoordinates(e.X, e.Y); + this.alidadeSecondPointSet = false; + } + else + { + this.alidadeSecondPoint = GetImageCoordinates(e.X, e.Y); + this.alidadeSecondPointSet = true; + } + } + } + + private void Form1_MouseUp(object sender, MouseEventArgs e) + { + this.BMouseDown = false; + if (this.alidadeActivate && this.alidadeFirstPointSet) + { + this.alidadeSecondPoint = GetImageCoordinates(e.X, e.Y); + this.alidadeSecondPointSet = true; + } + } + + private void Form1_MouseMove(object sender, MouseEventArgs e) + { + if (this.alidadeActivate) + { + this.alidadeCurrentPoint = GetImageCoordinates(e.X, e.Y); + } + else if (this.BMouseDown) + { + PanX += (e.X - PMouseDown.X) / Zoom; + PanY -= (e.Y - PMouseDown.Y) / Zoom; + PMouseDown = new Point(e.X, e.Y); + this.Invalidate(); + } + } + + private void alidadeLabel_Click(object sender, EventArgs e) + { + this.alidadeFirstPointSet = false; + this.alidadeSecondPointSet = false; + if (this.alidadeActivate) + { + alidadeLabel.Text = Config.alidadeLabelUnselectedText; + alidadeLabel.ForeColor = Config.alidadeLabelUnselectedForeColor; + alidadeLabel.BackColor = Config.alidadeLabelUnselectedBackColor; + this.Cursor = Cursors.Arrow; + this.alidadeActivate = false; + } + else + { + alidadeLabel.Text = Config.alidadeLabelSelectedText; + alidadeLabel.ForeColor = Config.alidadeLabelSelectedForeColor; + alidadeLabel.BackColor = Config.alidadeLabelSelectedBackColor; + this.Cursor = Cursors.Cross; + this.alidadeActivate = true; + } + } + + private void partMenuItem_Click(Object sender, EventArgs e) + { + if (this.partAircraftList.Contains(aircraftSelectedContextualMenu)) + managePartAircraftList("remove", aircraftSelectedContextualMenu); + else + managePartAircraftList("add", aircraftSelectedContextualMenu); + } + + private void warningMenuItem_Click(Object sender, EventArgs e) + { + if (this.warningAircraftList.Contains(aircraftSelectedContextualMenu)) + manageWarningAircraftList("remove", aircraftSelectedContextualMenu); + else + manageWarningAircraftList("add", aircraftSelectedContextualMenu); + } + + private void selectedAircraftTimer_Tick(object source, EventArgs e) + { + if ((this.xSelectedAircraftPosition != 0) && (this.ySelectedAircraftPosition != 0)) + { + /*PointF selectedAircraftScreenCoord = GetScreenCoordinates((float)this.xSelectedAircraftPosition, (float)this.ySelectedAircraftPosition); + + if (this.selectedAircraftFound == false) + { + int xCenterScreenCoord = this.ClientRectangle.Right / 2; + int yCenterScreenCoord = this.ClientRectangle.Bottom / 2; + this.xShift = (selectedAircraftScreenCoord.X - xCenterScreenCoord) / iterationsToFocus; + this.yShift = (selectedAircraftScreenCoord.Y - yCenterScreenCoord) / iterationsToFocus; + this.xCircleCenterPosition = xCenterScreenCoord; + this.yCircleCenterPosition = yCenterScreenCoord; + this.selectedAircraftFound = true; + } + else + { + if (this.iterationsToFocus == 0) + { + this.xCircleCenterPosition = selectedAircraftScreenCoord.X; + this.yCircleCenterPosition = selectedAircraftScreenCoord.Y; + } + else + { + this.xCircleCenterPosition += xShift; + this.yCircleCenterPosition += yShift; + this.iterationsToFocus--; + } + } + + this.xCircleCenterPosition = selectedAircraftScreenCoord.X; + this.yCircleCenterPosition = selectedAircraftScreenCoord.Y;*/ + + int firstRadiusIncrease = -(Config.firstSelectedAircraftCircleRadiusDecrease); + int secondRadiusIncrease = -(Config.secondSelectedAircraftCircleRadiusDecrease); + int margin = 40; + int circleBorderX = 0; + int circleBorderY = 0; + int newRadiusX = 0; + int newRadiusY = 0; + PointF coord = GetScreenCoordinates((float)this.xSelectedAircraftPosition, (float)this.ySelectedAircraftPosition); + string screenPosition = getAircraftScreenLocation((float)this.xSelectedAircraftPosition, (float)this.ySelectedAircraftPosition); + int acX = (int)coord.X; + int acY = (int)coord.Y; + int top = this.ClientRectangle.Top; + int right = this.ClientRectangle.Right; + int bottom = this.ClientRectangle.Bottom; + int left = this.ClientRectangle.Left; + + switch (screenPosition) + { + case "C": + break; + case "N": + circleBorderY = acY + (int)this.selectedAircraftRadius / 2; + if (circleBorderY <= margin) + { + firstRadiusIncrease = 0; + secondRadiusIncrease = 0; + this.selectedAircraftRadius = (-acY + margin) * 2; + } + break; + case "NE": + circleBorderX = acX - (int)this.selectedAircraftRadius / 2; + circleBorderY = acY + (int)this.selectedAircraftRadius / 2; + if ((circleBorderX >= (right - margin)) || (circleBorderY <= margin)) + { + firstRadiusIncrease = 0; + secondRadiusIncrease = 0; + newRadiusX = (acX - (right - margin)) * 2; + newRadiusY = (-acY + margin) * 2; + this.selectedAircraftRadius = Math.Max(newRadiusX, newRadiusY); + } + break; + case "E": + circleBorderX = acX - (int)this.selectedAircraftRadius / 2; + if (circleBorderX >= (right - margin)) + { + firstRadiusIncrease = 0; + secondRadiusIncrease = 0; + this.selectedAircraftRadius = (acX - (right - margin)) * 2; + } + break; + case "SE": + circleBorderX = acX - (int)this.selectedAircraftRadius / 2; + circleBorderY = acY - (int)this.selectedAircraftRadius / 2; + if ((circleBorderX >= (right - margin)) || (circleBorderY >= (bottom - margin))) + { + firstRadiusIncrease = 0; + secondRadiusIncrease = 0; + newRadiusX = (acX - (right - margin)) * 2; + newRadiusY = (acY - (bottom - margin)) * 2; + this.selectedAircraftRadius = Math.Max(newRadiusX, newRadiusY); + } + break; + case "S": + circleBorderY = acY - (int)this.selectedAircraftRadius / 2; + if (circleBorderY >= (bottom - margin)) + { + firstRadiusIncrease = 0; + secondRadiusIncrease = 0; + this.selectedAircraftRadius = (acY - (bottom - margin)) * 2; + } + break; + case "SW": + circleBorderX = acX + (int)this.selectedAircraftRadius / 2; + circleBorderY = acY - (int)this.selectedAircraftRadius / 2; + if ((circleBorderX <= margin) || (circleBorderY >= (bottom - margin))) + { + firstRadiusIncrease = 0; + secondRadiusIncrease = 0; + newRadiusX = (-acX + margin) * 2; + newRadiusY = (acY - (bottom - margin)) * 2; + this.selectedAircraftRadius = Math.Max(newRadiusX, newRadiusY); + } + break; + case "W": + circleBorderX = acX + (int)this.selectedAircraftRadius / 2; + if (circleBorderX <= margin) + { + firstRadiusIncrease = 0; + secondRadiusIncrease = 0; + this.selectedAircraftRadius = (-acX + margin) * 2; + } + break; + case "NW": + circleBorderX = acX + (int)this.selectedAircraftRadius / 2; + circleBorderY = acY + (int)this.selectedAircraftRadius / 2; + if ((circleBorderX <= margin) || (circleBorderY <= margin)) + { + firstRadiusIncrease = 0; + secondRadiusIncrease = 0; + newRadiusX = (-acX + margin) * 2; + newRadiusY = (-acY + margin) * 2; + this.selectedAircraftRadius = Math.Max(newRadiusX, newRadiusY); + } + break; + default: + break; + } + + if ((this.selectedAircraftRadius + firstRadiusIncrease) >= (double)Config.aircraftSelectedCircleRadiusMinimumSize) + this.selectedAircraftRadius += (double)firstRadiusIncrease; + else if ((this.selectedAircraftRadius + secondRadiusIncrease) >= (double)Config.aircraftSelectedCircleRadiusMinimumSize) + this.selectedAircraftRadius += (double)secondRadiusIncrease; + + this.Invalidate(); + } + } + + private void aircraftModsTimer_Tick(object source, EventArgs e) + { + List aircraftToDeleteList = new List(); + + foreach (string aircraft in this.aircraftModSDictionary.Keys) + { + float xPos = (float)this.aircraftModSDictionary[aircraft]["xPos"]; + float yPos = (float)this.aircraftModSDictionary[aircraft]["yPos"]; + int timerLifetime = (int)this.aircraftModSDictionary[aircraft]["timeRemaining"]; + + if ((xPos != (float)0) && (yPos != (float)0) && (timerLifetime > 0)) + { + /*PointF aircraftScreenCoord = GetScreenCoordinates(xPos, yPos); + bool aircraftFound = (bool)this.aircraftModSDictionary[aircraft]["aircraftFound"]; + int iterations = (int)this.aircraftModSDictionary[aircraft]["iterationsToFocus"]; + + if (aircraftFound == false) + { + int xCenterScreenCoord = this.ClientRectangle.Right / 2; + int yCenterScreenCoord = this.ClientRectangle.Bottom / 2; + this.aircraftModSDictionary[aircraft]["xShift"] = (float)((aircraftScreenCoord.X - xCenterScreenCoord) / iterations); + this.aircraftModSDictionary[aircraft]["yShift"] = (float)((aircraftScreenCoord.Y - yCenterScreenCoord) / iterations); + this.aircraftModSDictionary[aircraft]["xCirclePosition"] = (float)xCenterScreenCoord; + this.aircraftModSDictionary[aircraft]["yCirclePosition"] = (float)yCenterScreenCoord; + this.aircraftModSDictionary[aircraft]["aircraftFound"] = true; + } + else + { + if (iterations == 0) + { + this.aircraftModSDictionary[aircraft]["xCirclePosition"] = (float)aircraftScreenCoord.X; + this.aircraftModSDictionary[aircraft]["yCirclePosition"] = (float)aircraftScreenCoord.Y; + } + else + { + this.aircraftModSDictionary[aircraft]["xCirclePosition"] = (float)((float)this.aircraftModSDictionary[aircraft]["xCirclePosition"] + (float)this.aircraftModSDictionary[aircraft]["xShift"]); + this.aircraftModSDictionary[aircraft]["yCirclePosition"] = (float)((float)this.aircraftModSDictionary[aircraft]["yCirclePosition"] + (float)this.aircraftModSDictionary[aircraft]["yShift"]); + iterations--; + this.aircraftModSDictionary[aircraft]["iterationsToFocus"] = (int)iterations; + } + }*/ + + int iterations = (int)this.aircraftModSDictionary[aircraft]["iterationsToFocus"]; + if (iterations > 0) + iterations--; + this.aircraftModSDictionary[aircraft]["iterationsToFocus"] = (int)iterations; + + timerLifetime -= this.aircraftModsTimer.Interval; + this.aircraftModSDictionary[aircraft]["timeRemaining"] = timerLifetime; + + /*double radius = (double)this.aircraftModSDictionary[aircraft]["radius"]; + if (radius > (double)60) + radius -= (double)40; + this.aircraftModSDictionary[aircraft]["radius"] = radius;*/ + } + + if (timerLifetime <= 0) + aircraftToDeleteList.Add(aircraft); + } + + foreach (string aircraft in aircraftToDeleteList) + this.aircraftModSDictionary.Remove(aircraft); + aircraftToDeleteList = null; + + this.Invalidate(); + } + + private void aircraftAlarmsTimer_Tick(object source, EventArgs e) + { + List aircraftToDeleteList = new List(); + //bool refresh = false; + this.alarmListBox.Items.Clear(); + + foreach (string aircraft in this.aircraftAlarmsDictionary.Keys) + { + float xPos = (float)this.aircraftAlarmsDictionary[aircraft]["xPos"]; + float yPos = (float)this.aircraftAlarmsDictionary[aircraft]["yPos"]; + int timerLifetime = (int)this.aircraftAlarmsDictionary[aircraft]["timeRemaining"]; + bool alarmLaunched = (bool)this.aircraftAlarmsDictionary[aircraft]["alarmLaunched"]; + + if ((xPos != (float)0) && (yPos != (float)0) && (timerLifetime > 0)) + { + if (alarmLaunched) + { + + /*refresh = true; + + PointF aircraftScreenCoord = GetScreenCoordinates(xPos, yPos); + bool aircraftFound = (bool)this.aircraftAlarmsDictionary[aircraft]["aircraftFound"]; + int iterations = (int)this.aircraftAlarmsDictionary[aircraft]["iterationsToFocus"]; + + if (aircraftFound == false) + { + int xCenterScreenCoord = this.ClientRectangle.Right / 2; + int yCenterScreenCoord = this.ClientRectangle.Bottom / 2; + this.aircraftAlarmsDictionary[aircraft]["xShift"] = (float)((aircraftScreenCoord.X - xCenterScreenCoord) / iterations); + this.aircraftAlarmsDictionary[aircraft]["yShift"] = (float)((aircraftScreenCoord.Y - yCenterScreenCoord) / iterations); + this.aircraftAlarmsDictionary[aircraft]["xCirclePosition"] = (float)xCenterScreenCoord; + this.aircraftAlarmsDictionary[aircraft]["yCirclePosition"] = (float)yCenterScreenCoord; + this.aircraftAlarmsDictionary[aircraft]["aircraftFound"] = true; + } + else + { + if (iterations == 0) + { + this.aircraftAlarmsDictionary[aircraft]["xCirclePosition"] = (float)aircraftScreenCoord.X; + this.aircraftAlarmsDictionary[aircraft]["yCirclePosition"] = (float)aircraftScreenCoord.Y; + } + else + { + this.aircraftAlarmsDictionary[aircraft]["xCirclePosition"] = (float)((float)this.aircraftAlarmsDictionary[aircraft]["xCirclePosition"] + (float)this.aircraftAlarmsDictionary[aircraft]["xShift"]); + this.aircraftAlarmsDictionary[aircraft]["yCirclePosition"] = (float)((float)this.aircraftAlarmsDictionary[aircraft]["yCirclePosition"] + (float)this.aircraftAlarmsDictionary[aircraft]["yShift"]); + iterations--; + this.aircraftAlarmsDictionary[aircraft]["iterationsToFocus"] = (int)iterations; + } + }*/ + + int iterations = (int)this.aircraftAlarmsDictionary[aircraft]["iterationsToFocus"]; + if (iterations > 0) + iterations--; + this.aircraftAlarmsDictionary[aircraft]["iterationsToFocus"] = (int)iterations; + + timerLifetime -= this.aircraftAlarmsTimer.Interval; + this.aircraftAlarmsDictionary[aircraft]["timeRemaining"] = timerLifetime; + + /*double radius = (double)this.aircraftAlarmsDictionary[aircraft]["radius"]; + if (radius > (double)60) + radius -= (double)40; + this.aircraftAlarmsDictionary[aircraft]["radius"] = radius;*/ + } + else + { + int feedbackLifetime = (int)this.aircraftAlarmsDictionary[aircraft]["feedbackTimeRemaining"]; + feedbackLifetime -= this.aircraftAlarmsTimer.Interval; + this.aircraftAlarmsDictionary[aircraft]["feedbackTimeRemaining"] = (int)feedbackLifetime; + } + } + + if (timerLifetime <= 0) + aircraftToDeleteList.Add(aircraft); + else if (alarmLaunched) + this.alarmListBox.Items.Add(this.aircraftAlarmsDictionary[aircraft]["hour"] + "h" + this.aircraftAlarmsDictionary[aircraft]["minute"] + "m" + this.aircraftAlarmsDictionary[aircraft]["second"] + "s --> Flight n°" + aircraft); + } + + foreach (string aircraft in aircraftToDeleteList) + this.aircraftAlarmsDictionary.Remove(aircraft); + aircraftToDeleteList = null; + + /*if (refresh) + { + alarmPictureBox.Visible = true; + alarmListBox.Visible = true; + } + else + { + alarmPictureBox.Visible = false; + alarmListBox.Visible = false; + }*/ + + this.Invalidate(); + } + + private void informationMessageLabel_Click(object sender, EventArgs e) + { + Label lbl = (sender as Label); + if (lbl != null) + { + lbl.Visible = false; + PictureBox pBox = (PictureBox)this.aircraftInformationMessagesDictionary[lbl.Name]["picturebox"]; + pBox.Visible = true; + this.Invalidate(); + } + } + + private void informationMessagePictureBox_Click(object sender, EventArgs e) + { + PictureBox pBox = (sender as PictureBox); + if (pBox != null) + { + if (!(this.selectedAircraft == pBox.Name)) + { + pBox.Visible = false; + Label lbl = (Label)this.aircraftInformationMessagesDictionary[pBox.Name]["label"]; + lbl.Visible = true; + this.Invalidate(); + } + } + } + + #endregion + + #region Drawing methods + + protected override void OnPaint(PaintEventArgs e) + { + Graphics g = e.Graphics; + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + + Pen drawPlotsPen = Config.defaultDrawPlotsPen; + SolidBrush fillPartRectangleBrush = new SolidBrush(Config.defaultFillPartRectangleColor); + Pen drawLinePen = Config.defaultDrawLinePen; + SolidBrush drawStringBrush = new SolidBrush(Config.defaultDrawStringColor); + Font aircraftTagFont = Config.defaultAircraftTagFont; + + alarmListBox.Location = new Point((this.Width - alarmListBox.Width - 10), 10); + + //Clear the view + g.FillRectangle(new SolidBrush(Color.FromArgb(255, ColorTranslator.FromHtml("#7a797c"))), 0, 0, Width, Height); + + + #region Sectors drawing + + //Draw the sectors + if (data != null) + { + //Console.WriteLine("Nombre de secteurs : " + Sectors.Length); + foreach (Sector s in data.getSectors()) + { + //Console.WriteLine("Nom du secteur : " + s.Name); + if (s.Name == Config.selectedSectorName) + { + s.isSectorSelected = true; + selectedSector = s; + } + s.Draw(g, false); + } + } + + #endregion + + #region Routes drawing + + //Draw the routes + if (data != null) + { + int existingRoutesNumber = 0; + foreach (Route r in data.getRoutes()) + { + if ((IsBeaconInBeaconsArray(data.getBeacons(), r.B1)) && (IsBeaconInBeaconsArray(data.getBeacons(), r.B2))) + { + r.Draw(g); + existingRoutesNumber++; + } + } + //Console.WriteLine("Correct routes number : " + existingRoutesNumber + " on " + Routes.Length); + } + + #endregion + + #region Aircraft drawing + + AircraftPosition selectedAircraft = null; + Rectangle selectedHotBox = Rectangle.Empty; + //Draw the aircraft + if (data != null) + { + foreach (var track in data.getAircraftList()) + { + drawPlotsPen = Config.defaultDrawPlotsPen; + fillPartRectangleBrush = new SolidBrush(Config.defaultFillPartRectangleColor); + drawLinePen = Config.defaultDrawLinePen; + drawStringBrush = new SolidBrush(Config.defaultDrawStringColor); + aircraftTagFont = Config.defaultAircraftTagFont; + + if (track.Value.Count > 0) + { + int dx = (int)(10 * Zoom) / 2; + AircraftPosition aircraft = track.Value[track.Value.Count - 1]; + + string aflTendancy = aircraft.AFL + " "; + + if (aircraft.Tendency == -1) + aflTendancy += Config.descentTendency; + else if (aircraft.Tendency == 0) + aflTendancy += Config.stableTendency; + else if (aircraft.Tendency == 1) + aflTendancy += Config.climbTendency; + + //for the followed aircraft + if (this.aircraftFollowedDictionary.ContainsKey(aircraft.Flight)) + { + PictureBox aircraftFollowedPictureBox = this.aircraftFollowedDictionary[aircraft.Flight]; + PointF coord = GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y); + string screenPosition = getAircraftScreenLocation((float)aircraft.X, (float)aircraft.Y); + int margin = 10; + int acX = (int)coord.X; + int acY = (int)coord.Y; + int pbWidth = aircraftFollowedPictureBox.Width; + int pbHeight = aircraftFollowedPictureBox.Height; + int top = this.ClientRectangle.Top; + int right = this.ClientRectangle.Right; + int bottom = this.ClientRectangle.Bottom; + int left = this.ClientRectangle.Left; + + try + { + aircraftFollowedPictureBox.Image = Image.FromFile(Config.picturesFolderName + "/" + screenPosition + Config.picturesUsedArrowsNamesSuffix); + } + catch { } + + switch (screenPosition) + { + case "C": + aircraftFollowedPictureBox.Visible = false; + break; + case "N": + aircraftFollowedPictureBox.Location = new Point(acX - pbWidth / 2, top + margin); + g.DrawString(aircraft.CallSign, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), acX - 40, top + margin + pbHeight + 10); + g.DrawString(aflTendancy, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), acX - 20, top + margin + pbHeight + 30); + aircraftFollowedPictureBox.Visible = true; + break; + case "NE": + aircraftFollowedPictureBox.Location = new Point(right - pbWidth - margin, top + margin); + g.DrawString(aircraft.CallSign, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), right - pbWidth - margin - 20, top + margin + pbHeight); + g.DrawString(aflTendancy, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), right - pbWidth - margin, top + margin + pbHeight + 20); + aircraftFollowedPictureBox.Visible = true; + break; + case "E": + aircraftFollowedPictureBox.Location = new Point(right - pbWidth - margin, acY - pbHeight / 2); + g.DrawString(aircraft.CallSign, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), right - pbWidth - margin - 80, acY - 20); + g.DrawString(aflTendancy, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), right - pbWidth - margin - 60, acY); + aircraftFollowedPictureBox.Visible = true; + break; + case "SE": + aircraftFollowedPictureBox.Location = new Point(right - pbWidth - margin, bottom - pbHeight - margin); + g.DrawString(aircraft.CallSign, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), right - pbWidth - margin - 20, bottom - pbHeight - margin - 40); + g.DrawString(aflTendancy, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), right - pbWidth - margin, bottom - pbHeight - margin - 20); + aircraftFollowedPictureBox.Visible = true; + break; + case "S": + aircraftFollowedPictureBox.Location = new Point(acX - pbWidth / 2, bottom - pbHeight - margin); + g.DrawString(aircraft.CallSign, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), acX - 40, bottom - pbHeight - margin - 40); + g.DrawString(aflTendancy, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), acX - 20, bottom - pbHeight - margin - 20); + aircraftFollowedPictureBox.Visible = true; + break; + case "SW": + aircraftFollowedPictureBox.Location = new Point(left + margin, bottom - pbHeight - margin); + g.DrawString(aircraft.CallSign, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), left + margin + pbWidth - 20, bottom - pbHeight - margin - 40); + g.DrawString(aflTendancy, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), left + margin + pbWidth, bottom - pbHeight - margin - 20); + aircraftFollowedPictureBox.Visible = true; + break; + case "W": + aircraftFollowedPictureBox.Location = new Point(left + margin, acY - pbHeight / 2); + g.DrawString(aircraft.CallSign, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), left + margin + pbWidth + 10, acY - 20); + g.DrawString(aflTendancy, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), left + margin + pbWidth + 30, acY); + aircraftFollowedPictureBox.Visible = true; + break; + case "NW": + aircraftFollowedPictureBox.Location = new Point(left + margin, top + margin); + g.DrawString(aircraft.CallSign, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), left + margin + pbWidth - 20, top + margin + pbHeight); + g.DrawString(aflTendancy, Config.followedAircraftFont, new SolidBrush(Config.followedAircraftColor), left + margin + pbWidth, top + margin + pbHeight + 20); + aircraftFollowedPictureBox.Visible = true; + break; + default: + break; + } + + if (!(this.Controls.Contains(aircraftFollowedPictureBox))) + this.Controls.Add(aircraftFollowedPictureBox); + } + + //Set coordinates of the separation concerned aircraft + if (this.aircraftBeaconSeparationDictionary.Count > 0) + { + if (aircraft.Flight == this.aircraftBeaconSeparationDictionary["aircraft1"]) + { + separationAcOneX = (float)aircraft.X; + separationAcOneY = (float)aircraft.Y; + separationAcOneFound = true; + } + if (aircraft.Flight == this.aircraftBeaconSeparationDictionary["aircraft2"]) + { + separationAcTwoX = (float)aircraft.X; + separationAcTwoY = (float)aircraft.Y; + separationAcTwoFound = true; + } + } + + //Determine pens and brush depending on flight level filter, if active + if (this.aflFilterList.Count == 2) + { + if (this.aflFilterList[1] < 0) + { + aflInf = this.aflFilterList[0] + this.aflFilterList[1]; + aflSup = this.aflFilterList[0]; + } + else + { + aflInf = this.aflFilterList[0]; + aflSup = this.aflFilterList[0] + this.aflFilterList[1]; + } + + if (this.aflFilterAircraftList.Contains(aircraft.Flight)) + { + aircraftTagFont = Config.filteredAircraftTagFont; + drawStringBrush = new SolidBrush(Config.defaultDrawStringColor); + drawLinePen = Config.filteredDrawLinePen; + drawPlotsPen = Config.defaultDrawPlotsPen; + } + else + { + if ((aircraft.AFL < aflInf) || (aircraft.AFL > aflSup)) + { + aircraftTagFont = Config.defaultAircraftTagFont; + drawStringBrush = new SolidBrush(Config.unfilteredDrawStringColor); + drawLinePen = Config.unfilteredDrawLinePen; + drawPlotsPen = Config.unfilteredDrawPlotsPen; + fillPartRectangleBrush = new SolidBrush(Config.unfilteredFillPartRectangleColor); + } + else + { + aircraftTagFont = Config.filteredAircraftTagFont; + drawStringBrush = new SolidBrush(Config.defaultDrawStringColor); + drawLinePen = Config.filteredDrawLinePen; + drawPlotsPen = Config.defaultDrawPlotsPen; + } + } + } + + SizeF s = g.MeasureString(aircraft.CallSign, Font); + + //Set selected aircraft coordinates, if one + if (this.SelectedAircraft == aircraft.Flight) + { + this.xSelectedAircraftPosition = aircraft.X; + this.ySelectedAircraftPosition = aircraft.Y; + PointF selectedAircraftScreenCoord = GetScreenCoordinates((float)this.xSelectedAircraftPosition, (float)this.ySelectedAircraftPosition); + this.xCircleCenterPosition = selectedAircraftScreenCoord.X; + this.yCircleCenterPosition = selectedAircraftScreenCoord.Y; + } + + //Highlight part aircraft + if (partAircraftList.Contains(aircraft.Flight)) + { + drawPlotsPen = Config.partDrawPlotsPen; + g.FillRectangle(fillPartRectangleBrush, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx, + s.Width, + s.Height); + } + + //Highlight warning aircraft + if (warningAircraftList.Contains(aircraft.Flight)) + { + drawPlotsPen = Config.warningDrawPlotsPen; + PointF p1 = new PointF(GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx + s.Width + 8, GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx); + PointF p2 = new PointF(GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx + s.Width + 13, GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + s.Height / 2); + PointF p3 = new PointF(GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx + s.Width + 8, GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + s.Height); + PointF p4 = new PointF(GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx + s.Width + 3, GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + s.Height / 2); + PointF[] warningLosangeArray = { p1, p2, p3, p4 }; + g.FillPolygon(new SolidBrush(Config.warningFillPolygonColor), + warningLosangeArray); + } + + //Draw aircraft tag if not anonymous : call sign + flight level + tendancy + ground speed + tag line + if (!(this.aircraftTagMessagesDictionary.ContainsKey(aircraft.Flight))) + { + g.DrawString(aircraft.CallSign, + aircraftTagFont, + drawStringBrush, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx); + + /*g.DrawString(aircraft.Sector, + aircraftTagFont, + drawStringBrush, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + 2 * s.Height);*/ + } + else + { + /*string stripNbr = ""; + if (this.aircraftTagMessagesDictionary[aircraft.Flight].ContainsKey("strip")) + stripNbr = " / Strip " + (int)this.aircraftTagMessagesDictionary[aircraft.Flight]["strip"];*/ + + g.DrawString(aircraft.Ssr, + aircraftTagFont, + drawStringBrush, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx); + + if (this.aircraftTagMessagesDictionary[aircraft.Flight].ContainsKey("picturebox")) + { + //bool buildingMessage = (bool)this.aircraftTagMessagesDictionary[aircraft.Flight]["buildingmessage"]; + //if (!buildingMessage) + //{ + PictureBox pBox = (PictureBox)this.aircraftTagMessagesDictionary[aircraft.Flight]["picturebox"]; + pBox.Location = new Point((int)GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + (int)GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + (int)(s.Height * 2.2)); + pBox.Visible = true; + if (!(this.Controls.Contains(pBox))) + this.Controls.Add(pBox); + //} + } + } + + g.DrawString("" + (int)(aircraft.GroundSpeed / 10), + aircraftTagFont, + drawStringBrush, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx - s.Height); + + g.DrawString(aflTendancy, + aircraftTagFont, + drawStringBrush, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + s.Height); + + g.DrawLine(drawLinePen, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + Font.Height / 2, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y); + + //Draw the ModS for the aircraft, if one + if (this.aircraftModSDictionary.ContainsKey(aircraft.Flight)) + { + this.aircraftModSDictionary[aircraft.Flight]["xPos"] = (float)aircraft.X; + this.aircraftModSDictionary[aircraft.Flight]["yPos"] = (float)aircraft.Y; + string modsPrefix = ""; + string modsSuffix = ""; + string succeed = (string)this.aircraftModSDictionary[aircraft.Flight]["succeed"]; + int iterations = (int)this.aircraftModSDictionary[aircraft.Flight]["iterationsToFocus"]; + + Color color = Config.modsNormalColor; + + if (iterations == 0) + { + if (succeed.ToLower() == "true") + { + color = Config.modsSucceedColor; + modsPrefix = Config.modsPrefix; + modsSuffix = Config.modsSuffix; + } + else + color = Config.modsUnsucceedColor; + } + + g.DrawString(modsPrefix + (string)this.aircraftModSDictionary[aircraft.Flight]["level"] + "M" + modsSuffix + " " + (string)this.aircraftModSDictionary[aircraft.Flight]["nextSector"], + Config.modsFont, + new SolidBrush(Color.FromArgb(255, color)), + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + 2 * s.Height); + } + + //Launch the alarm for the aircraft, if one + if (this.aircraftAlarmsDictionary.ContainsKey(aircraft.Flight)) + { + int hour = (int)this.aircraftAlarmsDictionary[aircraft.Flight]["hour"]; + int minute = (int)this.aircraftAlarmsDictionary[aircraft.Flight]["minute"]; + int second = (int)this.aircraftAlarmsDictionary[aircraft.Flight]["second"]; + + this.aircraftAlarmsDictionary[aircraft.Flight]["xPos"] = (float)aircraft.X; + this.aircraftAlarmsDictionary[aircraft.Flight]["yPos"] = (float)aircraft.Y; + + PictureBox pBox = (PictureBox)this.aircraftAlarmsDictionary[aircraft.Flight]["picturebox"]; + + if ((this.CurrentHour >= hour) && (this.CurrentMinute >= minute) && (this.CurrentSecond >= second)) + { + this.aircraftAlarmsDictionary[aircraft.Flight]["alarmLaunched"] = true; + pBox.Visible = false; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + } + else + { + pBox.Location = new Point((int)(GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx), (int)(GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx - 2 * s.Height)); + pBox.Visible = true; + + if (!(this.Controls.Contains(pBox))) + this.Controls.Add(pBox); + + int feedbackLifetime = (int)this.aircraftAlarmsDictionary[aircraft.Flight]["feedbackTimeRemaining"]; + if (feedbackLifetime > 0) + { + g.DrawString((int)this.aircraftAlarmsDictionary[aircraft.Flight]["hour"] + "h" + (int)this.aircraftAlarmsDictionary[aircraft.Flight]["minute"] + "m", + Config.alarmFont, + new SolidBrush(Config.alarmColor), + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx + 16, + GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx - 2 * s.Height); + } + /*else + { + pBox.Visible = false; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + }*/ + } + } + + //Check if an information message is associated + if (this.aircraftInformationMessagesDictionary.ContainsKey(aircraft.Flight)) + { + bool buildingMessage = (bool)this.aircraftInformationMessagesDictionary[aircraft.Flight]["buildingmessage"]; + + if (!buildingMessage) + { + Label lbl = (Label)this.aircraftInformationMessagesDictionary[aircraft.Flight]["label"]; + PictureBox pBox = (PictureBox)this.aircraftInformationMessagesDictionary[aircraft.Flight]["picturebox"]; + + if (!(this.Controls.Contains(lbl))) + { + lbl.Click += new EventHandler(informationMessageLabel_Click); + this.Controls.Add(lbl); + } + + if (!(this.Controls.Contains(pBox))) + { + pBox.Click += new EventHandler(informationMessagePictureBox_Click); + this.Controls.Add(pBox); + } + + lbl.Font = new Font(Config.iInformationMessageLabelFontFamily, (float)(Config.iInformationMessageLabelFontSizeCoefficient * dx), FontStyle.Bold); + lbl.Size = new Size(dx, dx); + lbl.Location = new Point((int)GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx + (int)(s.Width / 1.6), (int)GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + (int)(s.Height * 1.2)); + + pBox.Location = new Point((int)GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).X + dx + (int)(s.Width / 1.6), (int)GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y).Y - dx + (int)(s.Height * 1.2)); + + if (pBox.Visible == false) + lbl.Visible = true; + } + } + + //Get the bounding Hot Box : only the label + SizeF maxTextSize = g.MeasureString(aircraft.CallSign, Font); + PointF pt = GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y); + + Rectangle HotBoxRect = new Rectangle( (int)(pt.X) + dx, + (int)(pt.Y - dx - s.Height), + (int)(s.Width + 10), + (int)(s.Height * 3) ); + + if (HotBoxRect.Contains(new Point((int)AnotoPenDown.X, (int)AnotoPenDown.Y))) + { + selectedAircraft = aircraft; + selectedHotBox = HotBoxRect; + } + + } + + //Draw the aircraft plots + int pos = 0; + foreach (var plot in track.Value) + { + float dx = (pos * Zoom) / 5; + float x = GetScreenCoordinates((float)plot.X, (float)plot.Y).X - dx / 2; + float y = GetScreenCoordinates((float)plot.X, (float)plot.Y).Y - dx / 2; + g.DrawRectangle(drawPlotsPen, x, y, dx, dx); + pos++; + } + + //Draw the hot box area + } + } + + #endregion + + #region Magaged selected aircraft + + if (selectedAircraft != null) + { + SeleteAircraftFromRadarScreen(selectedAircraft.CallSign); + g.FillRectangle(new SolidBrush(Color.FromArgb(100, 100, 20, 20)), selectedHotBox); + } + + #endregion + + #region Beacons drawing + + //Draw the beacons + if (data != null) + { + foreach (Beacon b in data.getBeacons()) + { + if (selectedSector != null) + { + //Highlight the beacons in the selected sector + if (Sector.PointInPolygon(b.toPointF(), selectedSector)) + { + b.isBeaconSelected = true; + b.Draw(g); + } + else + { + b.isBeaconSelected = false; + if ((b.Code == "OTKOL") || (b.Code == "OBUBA")) + b.Draw(g); + } + } + else + { + b.isBeaconSelected = false; + //b.Draw(g); + } + } + } + + #endregion + + #region Separation drawing + + float previousBeacon1X = (float)0; + float previousBeacon1Y = (float)0; + float currentBeacon1X = (float)0; + float currentBeacon1Y = (float)0; + + float previousBeacon2X = (float)0; + float previousBeacon2Y = (float)0; + float currentBeacon2X = (float)0; + float currentBeacon2Y = (float)0; + + //Draw the separation between two aircraft and a beacon + the distance + if (this.aircraftBeaconSeparationDictionary.Count > 0) + { + if (separationAcOneFound && separationAcTwoFound && (data != null)) + { + char[] separationCharsArray = { ' ' }; + string[] beacons1Array = this.aircraftBeaconSeparationDictionary["route1"].Split(separationCharsArray); + string[] beacons2Array = this.aircraftBeaconSeparationDictionary["route2"].Split(separationCharsArray); + + previousBeacon1X = separationAcOneX; + previousBeacon1Y = separationAcOneY; + g.DrawString(this.aircraftBeaconSeparationDictionary["distance1"] + " NM", + Config.separationBeaconDistancesFont, + new SolidBrush(Config.separationBeaconDistanceOneColor), + GetScreenCoordinates(previousBeacon1X, previousBeacon1Y).X - 50, + GetScreenCoordinates(previousBeacon1X, previousBeacon1Y).Y); + for (int i = 0; i < beacons1Array.Length; i++) + { + foreach (Beacon b in data.getBeacons()) + { + if (b.Code == beacons1Array[i]) + { + currentBeacon1X = (float)(b.toPointF().X / 8); + currentBeacon1Y = (float)(b.toPointF().Y / 8); + g.DrawLine(Config.separationBeaconDistanceOnePen, + GetScreenCoordinates(previousBeacon1X, previousBeacon1Y).X, + GetScreenCoordinates(previousBeacon1X, previousBeacon1Y).Y, + GetScreenCoordinates(currentBeacon1X, currentBeacon1Y).X, + GetScreenCoordinates(currentBeacon1X, currentBeacon1Y).Y); + previousBeacon1X = currentBeacon1X; + previousBeacon1Y = currentBeacon1Y; + } + } + } + + previousBeacon2X = separationAcTwoX; + previousBeacon2Y = separationAcTwoY; + g.DrawString(this.aircraftBeaconSeparationDictionary["distance2"] + " NM", + Config.separationBeaconDistancesFont, + new SolidBrush(Config.separationBeaconDistanceTwoColor), + GetScreenCoordinates(previousBeacon2X, previousBeacon2Y).X - 50, + GetScreenCoordinates(previousBeacon2X, previousBeacon2Y).Y); + for (int i = 0; i < beacons2Array.Length; i++) + { + foreach (Beacon b in data.getBeacons()) + { + if (b.Code == beacons2Array[i]) + { + currentBeacon2X = (float)(b.toPointF().X / 8); + currentBeacon2Y = (float)(b.toPointF().Y / 8); + g.DrawLine(Config.separationBeaconDistanceTwoPen, + GetScreenCoordinates(previousBeacon2X, previousBeacon2Y).X, + GetScreenCoordinates(previousBeacon2X, previousBeacon2Y).Y, + GetScreenCoordinates(currentBeacon2X, currentBeacon2Y).X, + GetScreenCoordinates(currentBeacon2X, currentBeacon2Y).Y); + previousBeacon2X = currentBeacon2X; + previousBeacon2Y = currentBeacon2Y; + } + } + } + + char[] separationArray = { ' ' }; + + float x1CurrentThick = (float)0; + float y1CurrentThick = (float)0; + PointF location1PointF; + string thicks1 = (string)this.aircraftBeaconSeparationDictionary["thicks1"]; + string[] thicks1Array = thicks1.Split(separationArray); + for (int i = 0; i < (thicks1Array.Length - 1); i += 2) + { + try + { + x1CurrentThick = float.Parse(thicks1Array[i]); + y1CurrentThick = float.Parse(thicks1Array[i + 1]); + + location1PointF = new PointF(x1CurrentThick, y1CurrentThick); + + g.FillEllipse(new SolidBrush(Config.separationBeaconDistanceOneColor), + (float)PanAndZoomX(location1PointF.X / (float)8) - (Config.thicksOneEllipseSize / 2), + (float)PanAndZoomY(location1PointF.Y / (float)8) - (Config.thicksOneEllipseSize / 2), + Config.thicksOneEllipseSize, + Config.thicksOneEllipseSize); + } + catch { } + } + + float x2CurrentThick = (float)0; + float y2CurrentThick = (float)0; + PointF location2PointF; + string thicks2 = (string)this.aircraftBeaconSeparationDictionary["thicks2"]; + string[] thicks2Array = thicks2.Split(separationArray); + for (int i = 0; i < (thicks2Array.Length - 1); i += 2) + { + try + { + x2CurrentThick = float.Parse(thicks2Array[i]); + y2CurrentThick = float.Parse(thicks2Array[i + 1]); + + location2PointF = new PointF(x2CurrentThick, y2CurrentThick); + + g.FillEllipse(new SolidBrush(Config.separationBeaconDistanceTwoColor), + (float)PanAndZoomX(location2PointF.X / (float)8) - (Config.thicksTwoEllipseSize / 2), + (float)PanAndZoomY(location2PointF.Y / (float)8) - (Config.thicksTwoEllipseSize / 2), + Config.thicksTwoEllipseSize, + Config.thicksTwoEllipseSize); + } + catch { } + } + + int length = Math.Min(thicks1Array.Length, thicks2Array.Length); + for (int i = 0; i < (length - 1); i += 2) + { + try + { + x1CurrentThick = float.Parse(thicks1Array[i]); + y1CurrentThick = float.Parse(thicks1Array[i + 1]); + location1PointF = new PointF(x1CurrentThick, y1CurrentThick); + + x2CurrentThick = float.Parse(thicks2Array[i]); + y2CurrentThick = float.Parse(thicks2Array[i + 1]); + location2PointF = new PointF(x2CurrentThick, y2CurrentThick); + + Pen thicksJointPen = Config.thicksJointLinesPen; + thicksJointPen.DashStyle = Config.thicksJointLinesPenDashStyle; + + g.DrawLine(thicksJointPen, + (float)PanAndZoomX(location1PointF.X / (float)8), + (float)PanAndZoomY(location1PointF.Y / (float)8), + (float)PanAndZoomX(location2PointF.X / (float)8), + (float)PanAndZoomY(location2PointF.Y / (float)8)); + } + catch { } + } + + int distance = int.Parse(this.aircraftBeaconSeparationDictionary["distance"]); + + Color distColor = Config.goodSeparationDistanceColor; + if (distance <= Config.minimumAvailableDistance) + distColor = Config.wrongSeparationDistanceColor; + + g.DrawString(distance + " NM", + Config.separationBeaconDistancesFont, + new SolidBrush(distColor), + GetScreenCoordinates(currentBeacon2X, currentBeacon2Y).X - 50, + GetScreenCoordinates(currentBeacon2X, currentBeacon2Y).Y); + } + } + + #endregion + + #region Downing circles drawing + + //if an aircraft is selected + if ((this.xSelectedAircraftPosition != 0) && (this.ySelectedAircraftPosition != 0)) + { + Pen pen = Config.aircraftSelectedPen; + //SolidBrush brush = new SolidBrush(Color.FromArgb(50, Color.Blue)); + + g.DrawEllipse(pen, + //g.FillEllipse(brush, + //GetScreenCoordinates(xPos, yPos).X - radius / 2, + xCircleCenterPosition - (float)this.selectedAircraftRadius / 2, + //GetScreenCoordinates(xPos, yPos).Y - radius / 2, + yCircleCenterPosition - (float)this.selectedAircraftRadius / 2, + (float)this.selectedAircraftRadius, + (float)this.selectedAircraftRadius); + } + + /*foreach (string aircraft in this.aircraftModSDictionary.Keys) + { + float xPos = (float)this.aircraftModSDictionary[aircraft]["xPos"]; + float yPos = (float)this.aircraftModSDictionary[aircraft]["yPos"]; + int timerLifetime = (int)this.aircraftModSDictionary[aircraft]["timeRemaining"]; + bool aircraftFound = (bool)this.aircraftModSDictionary[aircraft]["aircraftFound"]; + int iterationsNbr = (int)this.aircraftModSDictionary[aircraft]["iterationsToFocus"]; + + PointF aircraftScreenCoord = GetScreenCoordinates(xPos, yPos); + this.aircraftModSDictionary[aircraft]["xCirclePosition"] = (float)aircraftScreenCoord.X; + this.aircraftModSDictionary[aircraft]["yCirclePosition"] = (float)aircraftScreenCoord.Y; + + if ((xPos != (float)0) && (yPos != (float)0) && (timerLifetime > 0)) + { + //float xCCPos = (float)this.aircraftModSDictionary[aircraft]["xCirclePosition"]; + //float yCCPos = (float)this.aircraftModSDictionary[aircraft]["yCirclePosition"]; + float xCCPos = (float)aircraftScreenCoord.X; + float yCCPos = (float)aircraftScreenCoord.Y; + double radius = (double)this.aircraftModSDictionary[aircraft]["radius"]; + string succeed = (string)this.aircraftModSDictionary[aircraft]["succeed"]; + Color color = Config.modsNormalColor; + + if (iterationsNbr == 0) + { + if (succeed.ToLower() == "true") + color = Config.modsSucceedColor; + else + color = Config.modsUnsucceedColor; + } + + //Pen pen = new Pen(Color.FromArgb(50, color), 2.5f); + SolidBrush brush = new SolidBrush(Color.FromArgb(50, color)); + + //g.DrawEllipse(pen, + g.FillEllipse(brush, + xCCPos - (float)radius / 2, + yCCPos - (float)radius / 2, + (float)radius, + (float)radius); + } + }*/ + + foreach (string aircraft in this.aircraftAlarmsDictionary.Keys) + { + float xPos = (float)this.aircraftAlarmsDictionary[aircraft]["xPos"]; + float yPos = (float)this.aircraftAlarmsDictionary[aircraft]["yPos"]; + int timerLifetime = (int)this.aircraftAlarmsDictionary[aircraft]["timeRemaining"]; + bool alarmLaunched = (bool)this.aircraftAlarmsDictionary[aircraft]["alarmLaunched"]; + bool aircraftFound = (bool)this.aircraftAlarmsDictionary[aircraft]["aircraftFound"]; + + PointF aircraftScreenCoord = GetScreenCoordinates(xPos, yPos); + this.aircraftAlarmsDictionary[aircraft]["xCirclePosition"] = (float)aircraftScreenCoord.X; + this.aircraftAlarmsDictionary[aircraft]["yCirclePosition"] = (float)aircraftScreenCoord.Y; + + if (alarmLaunched && (xPos != (float)0) && (yPos != (float)0) && (timerLifetime > 0)) + { + //float xCCPos = (float)this.aircraftAlarmsDictionary[aircraft]["xCirclePosition"]; + //float yCCPos = (float)this.aircraftAlarmsDictionary[aircraft]["yCirclePosition"]; + float xCCPos = (float)aircraftScreenCoord.X; + float yCCPos = (float)aircraftScreenCoord.Y; + + double radius = (double)this.aircraftAlarmsDictionary[aircraft]["radius"]; + + //Pen pen = new Pen(Color.FromArgb(50, Config.alarmColor), 2.5f); + SolidBrush brush = new SolidBrush(Color.FromArgb(50, Config.alarmCircleColor)); + + //g.DrawEllipse(pen, + g.FillEllipse(brush, + xCCPos - (float)radius / 2, + yCCPos - (float)radius / 2, + (float)radius, + (float)radius); + } + } + + #endregion + + #region CFL filter feedback drawing + + //Draw feedback with afl filter values + if (this.aflFilterList.Count == 2) + { + string aflSupStr = "" + aflSup; + string sepOne = "^"; + string sepTwo = "^"; + string aflInfStr = "" + aflInf; + + SolidBrush brush = new SolidBrush(Config.filterActiveColor); + Font font = Config.filterActiveFont; + + SizeF sizeAflSup = g.MeasureString(aflSupStr, font); + SizeF sizeSepOne = g.MeasureString(sepOne, font); + SizeF sizeSepTwo = g.MeasureString(sepTwo, font); + SizeF sizeAflInf = g.MeasureString(aflInfStr, font); + + int screenWidth = this.ClientRectangle.Right - this.ClientRectangle.Left; + int screenHeight = this.ClientRectangle.Bottom - this.ClientRectangle.Top; + + g.DrawString(aflSupStr, font, brush, ((screenWidth - sizeAflSup.Width) / 2), ((screenHeight - sizeAflSup.Height) / 2) - 80); + g.DrawString(sepOne, font, brush, ((screenWidth - sizeSepOne.Width) / 2), ((screenHeight - sizeSepOne.Height) / 2)); + g.DrawString(sepTwo, font, brush, ((screenWidth - sizeSepTwo.Width) / 2), ((screenHeight - sizeSepTwo.Height) / 2) + 40); + g.DrawString(aflInfStr, font, brush, ((screenWidth - sizeAflInf.Width) / 2), ((screenHeight - sizeAflInf.Height) / 2) + 100); + } + + #endregion + + #region France map drawing + + //Draw the map + FranceMap.Draw(g, Config.franceDrawingPen); + + #endregion + + #region Alidade drawing + + if (this.alidadeActivate && this.alidadeFirstPointSet) + { + PointF finalPoint = new PointF(); + + if (this.alidadeSecondPointSet) + finalPoint = alidadeSecondPoint; + else + finalPoint = alidadeCurrentPoint; + + g.DrawLine(Config.alidadePen, + GetScreenCoordinates((float)alidadeFirstPoint.X, (float)alidadeFirstPoint.Y).X, + GetScreenCoordinates((float)alidadeFirstPoint.X, (float)alidadeFirstPoint.Y).Y, + GetScreenCoordinates((float)finalPoint.X, (float)finalPoint.Y).X, + GetScreenCoordinates((float)finalPoint.X, (float)finalPoint.Y).Y); + + float dx = ((float)finalPoint.X - (float)alidadeFirstPoint.X); + float dy = ((float)finalPoint.Y - (float)alidadeFirstPoint.Y); + float dist = (float)Math.Round(Math.Sqrt(dx * dx + dy * dy), Config.alidadeDistancePrecision); + dist = dist * Config.alidadeDistanceCoefficient; + + if (dist > 0f) + g.DrawString(dist + Config.alidadeDistanceSuffix, + Config.alidadeDistanceFont, + new SolidBrush(Config.alidadeDistanceColor), + GetScreenCoordinates((float)finalPoint.X, (float)finalPoint.Y).X + Config.alidadeDistanceXShift, + GetScreenCoordinates((float)finalPoint.X, (float)finalPoint.Y).Y + Config.alidadeDistanceYShift); + } + + #endregion + + //Draw the pen down + g.FillEllipse(new SolidBrush(Color.FromArgb(150, 0, 100, 255)), AnotoPenDown.X - 12, AnotoPenDown.Y - 12, 24, 24); + + /* Point CalibrationTopLeft = new Point(100,100); + Point CalibrationBottomRight = new Point(this.Width-100, this.Height-100); + + //Draw Calibration + g.FillEllipse(Brushes.Yellow, CalibrationTopLeft.X-5, CalibrationTopLeft.Y-5, 10, 10); + g.FillEllipse(Brushes.Yellow, CalibrationBottomRight.X-5, CalibrationTopLeft.Y-5, 10, 10); + g.FillEllipse(Brushes.Yellow, CalibrationTopLeft.X-5, CalibrationBottomRight.Y-5, 10, 10); + g.FillEllipse(Brushes.Yellow, CalibrationBottomRight.X-5, CalibrationBottomRight.Y-5, 10, 10); + */ + + } + + + + #endregion + + string LastSelectedAircraftID = ""; + //Send the message that an aircraft as been selected form the radar screen + private void SeleteAircraftFromRadarScreen(string aircraftId) + { + if (LastSelectedAircraftID != aircraftId) + { + FormSimpleRadar.TheIvyBus.SendMsg("SeleteAircraftFromRadarScreen " + "AircraftId=" + aircraftId); + // IvyBus.ivy.BindMsg(@"SeleteAircraftFromRadarScreen AircraftId=(.*) ", SeleteAircraftFromRadarScreen, null); + LastSelectedAircraftID = aircraftId; + } + } + + + #region Other methods + + public void updateClock(int hour, int minute, int second) + { + if ((this.CurrentHour != hour) || (this.CurrentMinute != minute) || (this.CurrentSecond != second)) + { + this.CurrentHour = hour; + this.CurrentMinute = minute; + this.CurrentSecond = second; + string h = "" + this.CurrentHour; + if (h.Length == 1) + h = "0" + h; + string m = "" + this.CurrentMinute; + if (m.Length == 1) + m = "0" + m; + this.clockLabel.Text = h + ":" + m; + } + //Console.WriteLine(this.CurrentHour + "h " + this.CurrentMinute + "m " + this.CurrentSecond + "s"); + } + + public void setData(Data.AppDatabase data) + { + this.data = data; + } + + + public void showAircraftContextualMenu(int x, int y) + { + if (data != null) + { + foreach (var track in data.getAircraftList()) + { + if (track.Value.Count > 0) + { + int dx = (int)(10 * Zoom) / 2; + AircraftPosition aircraft = track.Value[track.Value.Count - 1]; + PointF acScreenCoord = GetScreenCoordinates((float)aircraft.X, (float)aircraft.Y); + int xScreenCoord = (int)acScreenCoord.X; + int yScreenCoord = (int)acScreenCoord.Y; + if ((xScreenCoord >= (x - 5)) && (xScreenCoord <= (x + 5))) + { + if ((yScreenCoord >= (y - 5)) && (yScreenCoord <= (y + 5))) + { + aircraftCheckedContextualMenu = aircraft.Flight; + } + } + } + } + } + + ctxtMenu = new ContextMenu(); + + MenuItem visuPisteMenuItem = new MenuItem(); + visuPisteMenuItem.Index = 0; + visuPisteMenuItem.Text = Config.visuPisteMenuItemCaption; + MenuItem montrerMenuItem = new MenuItem(); + montrerMenuItem.Index = 1; + montrerMenuItem.Text = Config.montrerMenuItemCaption; + MenuItem shootRequestMenuItem = new MenuItem(); + shootRequestMenuItem.Index = 2; + shootRequestMenuItem.Text = Config.shootRequestMenuItemCaption; + MenuItem flMenuItem = new MenuItem(); + flMenuItem.Index = 3; + flMenuItem.Text = Config.flMenuItemCaption; + MenuItem ripMenuItem = new MenuItem(); + ripMenuItem.Index = 4; + ripMenuItem.Text = Config.ripMenuItemCaption; + MenuItem mvtMenuItem = new MenuItem(); + mvtMenuItem.Index = 5; + mvtMenuItem.Text = Config.mvtMenuItemCaption; + MenuItem modMenuItem = new MenuItem(); + modMenuItem.Index = 6; + modMenuItem.Text = Config.modMenuItemCaption; + MenuItem partMenuItem = new MenuItem(); + partMenuItem.Index = 7; + partMenuItem.Text = Config.partMenuItemCaption; + partMenuItem.DefaultItem = true; + partMenuItem.Click += new EventHandler(partMenuItem_Click); + MenuItem warningMenuItem = new MenuItem(); + warningMenuItem.Index = 8; + warningMenuItem.Text = Config.warningMenuItemCaption; + warningMenuItem.Click += new EventHandler(warningMenuItem_Click); + MenuItem accesPlnMenuItem = new MenuItem(); + accesPlnMenuItem.Index = 9; + accesPlnMenuItem.Text = Config.accesPlnMenuItemCaption; + MenuItem cnlMenuItem = new MenuItem(); + cnlMenuItem.Index = 10; + cnlMenuItem.Text = Config.cnlMenuItemCaption; + MenuItem decorMenuItem = new MenuItem(); + decorMenuItem.Index = 11; + decorMenuItem.Text = Config.decorMenuItemCaption; + MenuItem lvolMenuItem = new MenuItem(); + lvolMenuItem.Index = 12; + lvolMenuItem.Text = Config.lvolMenuItemCaption; + + ctxtMenu.MenuItems.AddRange(new MenuItem[] { visuPisteMenuItem, montrerMenuItem, shootRequestMenuItem, flMenuItem, ripMenuItem, mvtMenuItem, modMenuItem, + partMenuItem, warningMenuItem, accesPlnMenuItem, cnlMenuItem, decorMenuItem, lvolMenuItem }); + + if (aircraftCheckedContextualMenu == "") + this.ContextMenu = null; + else + { + this.ContextMenu = ctxtMenu; + aircraftSelectedContextualMenu = aircraftCheckedContextualMenu; + aircraftCheckedContextualMenu = ""; + } + } + + public void manageSelectedAircraftTimer(string actionType, string aircraftFlight) + { + if (actionType == "add") + { + this.selectedAircraftRadius = Config.aircraftSelectedTimerRadius; + this.xSelectedAircraftPosition = 0; + this.ySelectedAircraftPosition = 0; + this.SelectedAircraft = aircraftFlight; + this.selectedAircraftTimer = new Timer(); + this.selectedAircraftTimer.Interval = Config.aircraftSelectedTimerInterval; + this.selectedAircraftTimer.Tick += new EventHandler(selectedAircraftTimer_Tick); + this.selectedAircraftTimer.Enabled = true; + this.selectedAircraftTimer.Start(); + if (this.aircraftInformationMessagesDictionary.ContainsKey(this.SelectedAircraft)) + { + PictureBox pBox = (PictureBox)this.aircraftInformationMessagesDictionary[aircraftFlight]["picturebox"]; + pBox.Visible = true; + Label lbl = (Label)this.aircraftInformationMessagesDictionary[aircraftFlight]["label"]; + lbl.Visible = false; + } + } + else if (actionType == "clear") + { + if (this.selectedAircraftTimer != null) + this.selectedAircraftTimer.Stop(); + this.Invalidate(); + this.selectedAircraftRadius = Config.aircraftSelectedTimerRadius; + this.SelectedAircraft = ""; + this.xSelectedAircraftPosition = 0; + this.ySelectedAircraftPosition = 0; + if (this.aircraftInformationMessagesDictionary.ContainsKey(aircraftFlight)) + { + PictureBox pBox = (PictureBox)this.aircraftInformationMessagesDictionary[aircraftFlight]["picturebox"]; + pBox.Visible = false; + Label lbl = (Label)this.aircraftInformationMessagesDictionary[aircraftFlight]["label"]; + lbl.Visible = true; + } + } + } + + public void manageAircraftModSDictionary(string aircraftFlight, string modsLevel, string nextSectorName, string modsSucceed) + { + if (this.aircraftModSDictionary.ContainsKey(aircraftFlight)) + this.aircraftModSDictionary.Remove(aircraftFlight); + Dictionary modSDictionary = new Dictionary(); + modSDictionary.Add("level", modsLevel); + modSDictionary.Add("succeed", modsSucceed); + modSDictionary.Add("radius", (double)Config.aircraftModsTimerRadius); + modSDictionary.Add("xPos", 0f); + modSDictionary.Add("yPos", 0f); + modSDictionary.Add("xCirclePosition", 0f); + modSDictionary.Add("yCirclePosition", 0f); + modSDictionary.Add("aircraftFound", false); + modSDictionary.Add("iterationsToFocus", Config.aircraftModsTimerIterationsToFocus); + modSDictionary.Add("xShift", 0f); + modSDictionary.Add("yShift", 0f); + modSDictionary.Add("nextSector", nextSectorName); + modSDictionary.Add("timeRemaining", (int)(Config.aircraftModsTimerSecondsLifeTime * 1000)); + this.aircraftModSDictionary.Add(aircraftFlight, modSDictionary); + } + + public void manageAircraftAlarmsDictionary(string actionType, string aircraftFlight, int hour, int minute, int second) + { + if (actionType == "add") + { + if (this.aircraftAlarmsDictionary.ContainsKey(aircraftFlight)) + { + PictureBox pBox = (PictureBox)this.aircraftAlarmsDictionary[aircraftFlight]["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + this.aircraftAlarmsDictionary.Remove(aircraftFlight); + } + + PictureBox aircraftAlarmPictureBox = new PictureBox(); + aircraftAlarmPictureBox.Size = new Size(16, 16); + aircraftAlarmPictureBox.SizeMode = PictureBoxSizeMode.CenterImage; + aircraftAlarmPictureBox.BackColor = Color.Transparent; + aircraftAlarmPictureBox.Visible = false; + try + { + aircraftAlarmPictureBox.Image = Image.FromFile(Config.picturesFolderName + "/" + Config.clockPictureName); + } + catch { } + + Dictionary alarmDictionary = new Dictionary(); + alarmDictionary.Add("hour", hour); + alarmDictionary.Add("minute", minute); + alarmDictionary.Add("second", second); + alarmDictionary.Add("radius", (double)Config.aircraftAlarmsTimerRadius); + alarmDictionary.Add("xPos", 0f); + alarmDictionary.Add("yPos", 0f); + alarmDictionary.Add("xCirclePosition", 0f); + alarmDictionary.Add("yCirclePosition", 0f); + alarmDictionary.Add("aircraftFound", false); + alarmDictionary.Add("iterationsToFocus", Config.aircraftAlarmsTimerIterationsToFocus); + alarmDictionary.Add("xShift", 0f); + alarmDictionary.Add("yShift", 0f); + alarmDictionary.Add("alarmLaunched", false); + alarmDictionary.Add("feedbackTimeRemaining", (int)(Config.aircraftAlarmsTimerFeedbackSecondsLifeTime * 1000)); + alarmDictionary.Add("timeRemaining", (int)(Config.aircraftAlarmsTimerSecondsLifeTime * 1000)); + alarmDictionary.Add("picturebox", aircraftAlarmPictureBox); + this.aircraftAlarmsDictionary.Add(aircraftFlight, alarmDictionary); + } + else if (actionType == "remove") + { + if (this.aircraftAlarmsDictionary.ContainsKey(aircraftFlight)) + { + PictureBox pBox = (PictureBox)this.aircraftAlarmsDictionary[aircraftFlight]["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + this.aircraftAlarmsDictionary.Remove(aircraftFlight); + } + } + else if (actionType == "clear") + { + foreach (Dictionary dico in this.aircraftAlarmsDictionary.Values) + { + PictureBox pBox = (PictureBox)dico["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + } + this.aircraftAlarmsDictionary.Clear(); + } + } + + public void manageFollowedAircraftList(string actionType, string aircraftFlight) + { + if (actionType == "add") + { + if (!(this.aircraftFollowedDictionary.ContainsKey(aircraftFlight))) + { + PictureBox aircraftFollowedPictureBox = new PictureBox(); + aircraftFollowedPictureBox.Name = aircraftFlight; + aircraftFollowedPictureBox.Size = new Size(80, 80); + aircraftFollowedPictureBox.SizeMode = PictureBoxSizeMode.CenterImage; + aircraftFollowedPictureBox.Location = new Point(10, 10); + aircraftFollowedPictureBox.BackColor = Color.Transparent; + aircraftFollowedPictureBox.Visible = false; + this.aircraftFollowedDictionary.Add(aircraftFlight, aircraftFollowedPictureBox); + } + } + else if (actionType == "remove") + { + if (this.aircraftFollowedDictionary.ContainsKey(aircraftFlight)) + { + PictureBox pBox = (PictureBox)this.aircraftFollowedDictionary[aircraftFlight]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + this.aircraftFollowedDictionary.Remove(aircraftFlight); + } + } + else if (actionType == "clear") + { + foreach (PictureBox pBox in this.aircraftFollowedDictionary.Values) + { + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + } + this.aircraftFollowedDictionary.Clear(); + } + } + + public string getAircraftScreenLocation(float aircraftXPosition, float aircraftYPosition) + { + string location = "N"; + PointF coord = GetScreenCoordinates(aircraftXPosition, aircraftYPosition); + int acX = (int)coord.X; + int acY = (int)coord.Y; + int top = this.ClientRectangle.Top; + int right = this.ClientRectangle.Right; + int bottom = this.ClientRectangle.Bottom; + int left = this.ClientRectangle.Left; + + if (acX < left) + { + if (acY < top) + { + location = "NW"; + } + else if ((acY >= top) && (acY <= bottom)) + { + location = "W"; + } + else if (acY > bottom) + { + location = "SW"; + } + } + else if ((acX >= left) && (acX <= right)) + { + if (acY < top) + { + location = "N"; + } + else if ((acY >= top) && (acY <= bottom)) + { + location = "C"; + } + else if (acY > bottom) + { + location = "S"; + } + } + else if (acX > right) + { + if (acY < top) + { + location = "NE"; + } + else if ((acY >= top) && (acY <= bottom)) + { + location = "E"; + } + else if (acY > bottom) + { + location = "SE"; + } + } + + return location; + } + + public void manageAircraftInformationMessagesDictionary(string actionType, string aircraftFlight, int wordsNumber) + { + if (actionType == "add") + { + if (this.aircraftInformationMessagesDictionary.ContainsKey(aircraftFlight)) + { + if (this.aircraftInformationMessagesDictionary[aircraftFlight].ContainsKey("label")) + { + Label lbl = (Label)this.aircraftInformationMessagesDictionary[aircraftFlight]["label"]; + if (this.Controls.Contains(lbl)) + this.Controls.Remove(lbl); + } + if (this.aircraftInformationMessagesDictionary[aircraftFlight].ContainsKey("picturebox")) + { + PictureBox pBox = (PictureBox)this.aircraftInformationMessagesDictionary[aircraftFlight]["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + } + this.aircraftInformationMessagesDictionary.Remove(aircraftFlight); + } + + Dictionary informationMessageDictionary = new Dictionary(); + informationMessageDictionary.Add("wordsNumber", wordsNumber); + informationMessageDictionary.Add("buildingmessage", true); + + Dictionary> messagePointsDictionary = new Dictionary>(); + for (int i = 0; i < wordsNumber; i++) + messagePointsDictionary[i] = new List(); + informationMessageDictionary.Add("messagepointsdictionary", messagePointsDictionary); + + Label informationMessageLabel = new Label(); + informationMessageLabel.Name = aircraftFlight; + informationMessageLabel.BackColor = Config.iInformationMessageLabelBackColor; + informationMessageLabel.ForeColor = Config.iInformationMessageLabelForeColor; + informationMessageLabel.Text = Config.iInformationMessageLabelText; + informationMessageLabel.TextAlign = ContentAlignment.TopLeft; + informationMessageLabel.Visible = false; + informationMessageDictionary.Add("label", informationMessageLabel); + + this.aircraftInformationMessagesDictionary.Add(aircraftFlight, informationMessageDictionary); + } + else if (actionType == "remove") + { + if (this.aircraftInformationMessagesDictionary.ContainsKey(aircraftFlight)) + { + if (this.aircraftInformationMessagesDictionary[aircraftFlight].ContainsKey("label")) + { + Label lbl = (Label)this.aircraftInformationMessagesDictionary[aircraftFlight]["label"]; + if (this.Controls.Contains(lbl)) + this.Controls.Remove(lbl); + } + if (this.aircraftInformationMessagesDictionary[aircraftFlight].ContainsKey("picturebox")) + { + PictureBox pBox = (PictureBox)this.aircraftInformationMessagesDictionary[aircraftFlight]["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + } + this.aircraftInformationMessagesDictionary.Remove(aircraftFlight); + } + } + else if (actionType == "clear") + { + foreach (Dictionary dico in this.aircraftInformationMessagesDictionary.Values) + { + if (dico.ContainsKey("label")) + { + Label lbl = (Label)dico["label"]; + if (this.Controls.Contains(lbl)) + this.Controls.Remove(lbl); + } + if (dico.ContainsKey("picturebox")) + { + PictureBox pBox = (PictureBox)dico["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + } + } + this.aircraftInformationMessagesDictionary.Clear(); + } + } + + public void updateAircraftInformationMessage(string aircraftFlight, bool buildingMessage, string word) + { + if (this.aircraftInformationMessagesDictionary.ContainsKey(aircraftFlight)) + { + this.aircraftInformationMessagesDictionary[aircraftFlight]["buildingmessage"] = buildingMessage; + if (buildingMessage) + { + char[] separationCharsArray = { ' ' }; + string[] wordArray = word.Split(separationCharsArray); + int wordNumber = int.Parse(wordArray[0]); + Dictionary> messagePointsDictionary = (Dictionary>)this.aircraftInformationMessagesDictionary[aircraftFlight]["messagepointsdictionary"]; + for (int i = 1; i < wordArray.Length; i++) + messagePointsDictionary[wordNumber].Add(int.Parse(wordArray[i])); + this.aircraftInformationMessagesDictionary[aircraftFlight]["messagepointsdictionary"] = messagePointsDictionary; + } + else + { + PictureBox informationMessagePictureBox = createBitmapInformationMessage(aircraftFlight, Config.informationMessageForeColor, Config.informationMessageBackColor, Config.informationMessageCompression); + informationMessagePictureBox.Name = aircraftFlight; + informationMessagePictureBox.Visible = false; + if (this.aircraftInformationMessagesDictionary[aircraftFlight].ContainsKey("picturebox")) + this.aircraftInformationMessagesDictionary[aircraftFlight].Remove("picturebox"); + this.aircraftInformationMessagesDictionary[aircraftFlight].Add("picturebox", informationMessagePictureBox); + } + } + } + + public PictureBox createBitmapInformationMessage(string aircraftFlight, Color foreColor, Color backColor, int compression) + { + Dictionary> dico = (Dictionary>)this.aircraftInformationMessagesDictionary[aircraftFlight]["messagepointsdictionary"]; + int xMin, xMax, yMin, yMax; + int genXMin = 1000000, genXMax = 0, genYMin = 1000000, genYMax = 0; + + foreach (List list in dico.Values) + { + xMin = getMinList(list, 0, 2); + xMax = getMaxList(list, 0, 2); + yMin = getMinList(list, 1, 2); + yMax = getMaxList(list, 1, 2); + if (xMin < genXMin) + genXMin = xMin; + if (xMax > genXMax) + genXMax = xMax; + if (yMin < genYMin) + genYMin = yMin; + if (yMax > genYMax) + genYMax = yMax; + } + + int ceilValue = Config.informationMessageLocationCeilValue; + genXMin = genXMin - (genXMin % ceilValue); + genXMax = genXMax - (genXMax % ceilValue) + ceilValue; + genYMin = genYMin - (genYMin % ceilValue); + genYMax = genYMax - (genYMax % ceilValue) + ceilValue; + + int maxWidth = genXMax - genXMin; + int maxHeight = genYMax - genYMin; + + Bitmap flag = new Bitmap(maxWidth / compression, maxHeight / compression); + for (int x = 0; x < flag.Width; ++x) + for (int y = 0; y < flag.Height; ++y) + flag.SetPixel(x, y, backColor); + + foreach (List list in dico.Values) + { + for (int i = 0; i < (list.Count - 1); i += 2) + { + int x1 = (list[i] - genXMin) / compression; + int y1 = (list[i + 1] - genYMin) / compression; + if (i < (list.Count - 3)) + { + int x2 = (list[i + 2] - genXMin) / compression; + int y2 = (list[i + 3] - genYMin) / compression; + flag.SetPixel(x2, y2, foreColor); + using (Graphics g = Graphics.FromImage(flag)) + { + g.DrawLine(new Pen(foreColor), new Point(x1, y1), new Point(x2, y2)); + } + } + } + } + + PictureBox pBox = new PictureBox(); + pBox.Size = new Size(maxWidth / compression, maxHeight / compression); + pBox.Image = flag; + + return pBox; + } + + public int getMinList(List list, int start, int incr) + { + int min = list[start]; + for (int i = (start + incr); i < list.Count; i += incr) + { + if (list[i] < min) + min = list[i]; + } + return min; + } + + public int getMaxList(List list, int start, int incr) + { + int max = list[start]; + for (int i = (start + incr); i < list.Count; i += incr) + { + if (list[i] > max) + max = list[i]; + } + return max; + } + + public void manageAircraftTagMessageDictionary(string actionType, string aircraftFlight, int stripNumber, int wordsNumber) + { + if (actionType == "add") + { + if (this.aircraftTagMessagesDictionary.ContainsKey(aircraftFlight)) + { + Dictionary tagMessageDictionary = new Dictionary(); + tagMessageDictionary.Add("strip", stripNumber); + + PictureBox emptyTagMessagePictureBox = createBitmapTagMessage(aircraftFlight, Config.tagMessageForeColor, Config.tagMessageBackColor, Config.tagMessageEmptyCompression, true); + emptyTagMessagePictureBox.Name = aircraftFlight; + emptyTagMessagePictureBox.BackColor = Config.emptyTagMessageBackColor; + emptyTagMessagePictureBox.Visible = false; + tagMessageDictionary.Add("picturebox", emptyTagMessagePictureBox); + + this.aircraftTagMessagesDictionary[aircraftFlight] = tagMessageDictionary; + + try + { + FormSimpleRadar.FormRadarInstance.sendIvyMessage("SetTag Flight=" + aircraftFlight + " Strip=" + stripNumber + " Confirmed"); + } + catch { } + } + } + else if (actionType == "update") + { + if (this.aircraftTagMessagesDictionary.ContainsKey(aircraftFlight)) + { + Dictionary tagMessageDictionary = this.aircraftTagMessagesDictionary[aircraftFlight]; + if (tagMessageDictionary.ContainsKey("wordsNumber")) + tagMessageDictionary.Remove("wordsNumber"); + tagMessageDictionary.Add("wordsNumber", wordsNumber); + if (tagMessageDictionary.ContainsKey("buildingmessage")) + tagMessageDictionary.Remove("buildingmessage"); + tagMessageDictionary.Add("buildingmessage", true); + + Dictionary> messagePointsDictionary = new Dictionary>(); + for (int i = 0; i < wordsNumber; i++) + messagePointsDictionary[i] = new List(); + if (tagMessageDictionary.ContainsKey("messagepointsdictionary")) + tagMessageDictionary.Remove("messagepointsdictionary"); + tagMessageDictionary.Add("messagepointsdictionary", messagePointsDictionary); + + this.aircraftTagMessagesDictionary[aircraftFlight] = tagMessageDictionary; + } + } + else if (actionType == "remove") + { + if (this.aircraftTagMessagesDictionary.ContainsKey(aircraftFlight)) + { + if (this.aircraftTagMessagesDictionary[aircraftFlight].ContainsKey("picturebox")) + { + PictureBox pBox = (PictureBox)this.aircraftTagMessagesDictionary[aircraftFlight]["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + } + //this.aircraftTagMessagesDictionary.Remove(aircraftFlight); + this.aircraftTagMessagesDictionary[aircraftFlight] = new Dictionary(); + } + } + else if (actionType == "clear") + { + foreach (Dictionary dico in this.aircraftTagMessagesDictionary.Values) + { + if (dico.ContainsKey("picturebox")) + { + PictureBox pBox = (PictureBox)dico["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + } + } + //this.aircraftTagMessagesDictionary.Clear(); + foreach (string key in this.aircraftTagMessagesDictionary.Keys) + { + Dictionary dico = new Dictionary(); + this.aircraftTagMessagesDictionary[key] = dico; + } + } + } + + public void updateAircraftTagMessage(string aircraftFlight, bool buildingMessage, string word) + { + if (this.aircraftTagMessagesDictionary.ContainsKey(aircraftFlight)) + { + if (this.aircraftTagMessagesDictionary[aircraftFlight].ContainsKey("buildingmessage")) + { + this.aircraftTagMessagesDictionary[aircraftFlight]["buildingmessage"] = buildingMessage; + if (buildingMessage) + { + char[] separationCharsArray = { ' ' }; + string[] wordArray = word.Split(separationCharsArray); + int wordNumber = int.Parse(wordArray[0]); + Dictionary> messagePointsDictionary = (Dictionary>)this.aircraftTagMessagesDictionary[aircraftFlight]["messagepointsdictionary"]; + for (int i = 1; i < wordArray.Length; i++) + messagePointsDictionary[wordNumber].Add(int.Parse(wordArray[i])); + if (this.aircraftTagMessagesDictionary[aircraftFlight].ContainsKey("messagepointsdictionary")) + this.aircraftTagMessagesDictionary[aircraftFlight]["messagepointsdictionary"] = messagePointsDictionary; + else + this.aircraftTagMessagesDictionary[aircraftFlight].Add("messagepointsdictionary", messagePointsDictionary); + } + else + { + PictureBox tagMessagePictureBox = createBitmapTagMessage(aircraftFlight, Config.tagMessageForeColor, Config.tagMessageBackColor, Config.tagMessageCompression, false); + tagMessagePictureBox.Name = aircraftFlight; + tagMessagePictureBox.Visible = false; + if (this.aircraftTagMessagesDictionary[aircraftFlight].ContainsKey("picturebox")) + { + PictureBox pBox = (PictureBox)this.aircraftTagMessagesDictionary[aircraftFlight]["picturebox"]; + if (this.Controls.Contains(pBox)) + this.Controls.Remove(pBox); + this.aircraftTagMessagesDictionary[aircraftFlight]["picturebox"] = tagMessagePictureBox; + } + else + this.aircraftTagMessagesDictionary[aircraftFlight].Add("picturebox", tagMessagePictureBox); + } + } + } + } + + public PictureBox createBitmapTagMessage(string aircraftFlight, Color foreColor, Color backColor, int compression, bool emptyBitmap) + { + Bitmap flag; + int maxWidth = 0; + int maxHeight = 0; + + if (!emptyBitmap) + { + Dictionary> dico = (Dictionary>)this.aircraftTagMessagesDictionary[aircraftFlight]["messagepointsdictionary"]; + int xMin, xMax, yMin, yMax; + int genXMin = 1000000, genXMax = 0, genYMin = 1000000, genYMax = 0; + + foreach (List list in dico.Values) + { + xMin = getMinList(list, 0, 2); + xMax = getMaxList(list, 0, 2); + yMin = getMinList(list, 1, 2); + yMax = getMaxList(list, 1, 2); + if (xMin < genXMin) + genXMin = xMin; + if (xMax > genXMax) + genXMax = xMax; + if (yMin < genYMin) + genYMin = yMin; + if (yMax > genYMax) + genYMax = yMax; + } + + int ceilValue = Config.tagMessageLocationCeilValue; + genXMin = genXMin - (genXMin % ceilValue); + genXMax = genXMax - (genXMax % ceilValue) + ceilValue; + genYMin = genYMin - (genYMin % ceilValue); + genYMax = genYMax - (genYMax % ceilValue) + ceilValue; + + maxWidth = genXMax - genXMin; + maxHeight = genYMax - genYMin; + + flag = new Bitmap(maxWidth / compression, maxHeight / compression); + for (int x = 0; x < flag.Width; ++x) + for (int y = 0; y < flag.Height; ++y) + flag.SetPixel(x, y, backColor); + + foreach (List list in dico.Values) + { + for (int i = 0; i < (list.Count - 1); i += 2) + { + int x1 = (list[i] - genXMin) / compression; + int y1 = (list[i + 1] - genYMin) / compression; + if (i < (list.Count - 3)) + { + int x2 = (list[i + 2] - genXMin) / compression; + int y2 = (list[i + 3] - genYMin) / compression; + flag.SetPixel(x2, y2, foreColor); + using (Graphics g = Graphics.FromImage(flag)) + { + g.DrawLine(new Pen(foreColor), new Point(x1, y1), new Point(x2, y2)); + } + } + } + } + } + else + { + maxWidth = 100; + maxHeight = 50; + + flag = new Bitmap(maxWidth / compression, maxHeight / compression); + for (int x = 0; x < flag.Width; ++x) + for (int y = 0; y < flag.Height; ++y) + flag.SetPixel(x, y, backColor); + } + + PictureBox pBox = new PictureBox(); + pBox.Size = new Size(maxWidth / compression, maxHeight / compression); + pBox.Image = flag; + + return pBox; + } + + public void manageAircraftFlightLevelFilterList(string actionType, string aircraftFlight) + { + if (actionType == "add") + { + if (!(this.aflFilterAircraftList.Contains(aircraftFlight))) + this.aflFilterAircraftList.Add(aircraftFlight); + } + else if (actionType == "remove") + { + if (this.aflFilterAircraftList.Contains(aircraftFlight)) + this.aflFilterAircraftList.Remove(aircraftFlight); + } + else if (actionType == "clear") + { + this.aflFilterAircraftList.Clear(); + } + } + + public void manageFlightLevelFilter(string actionType, int aflValue, int aflRange) + { + if (actionType == "add") + { + this.aflFilterList.Clear(); + this.aflFilterList.Add(aflValue); + this.aflFilterList.Add(aflRange); + } + else if (actionType == "clear") + { + this.aflFilterList.Clear(); + } + } + + public void manageAircraftSeparationList(string actionType, string ac1FlightName, string ac1Route, string ac1Distance, string thicks1, string ac2FlightName, string ac2Route, string ac2Distance, string thicks2, string distance) + { + if (actionType == "add") + { + this.aircraftBeaconSeparationDictionary.Clear(); + this.aircraftBeaconSeparationDictionary.Add("aircraft1", ac1FlightName); + this.aircraftBeaconSeparationDictionary.Add("route1", ac1Route); + this.aircraftBeaconSeparationDictionary.Add("distance1", ac1Distance); + this.aircraftBeaconSeparationDictionary.Add("thicks1", thicks1); + this.aircraftBeaconSeparationDictionary.Add("aircraft2", ac2FlightName); + this.aircraftBeaconSeparationDictionary.Add("route2", ac2Route); + this.aircraftBeaconSeparationDictionary.Add("distance2", ac2Distance); + this.aircraftBeaconSeparationDictionary.Add("thicks2", thicks2); + this.aircraftBeaconSeparationDictionary.Add("distance", distance); + } + else if (actionType == "clear") + { + this.aircraftBeaconSeparationDictionary.Clear(); + } + } + + public void manageWarningAircraftList(string actionType, string acFlightName) + { + if (actionType == "add") + { + if (!(this.warningAircraftList.Contains(acFlightName))) + this.warningAircraftList.Add(acFlightName); + } + else if (actionType == "remove") + { + if (this.warningAircraftList.Contains(acFlightName)) + this.warningAircraftList.Remove(acFlightName); + } + else if (actionType == "change") + { + if (!(this.warningAircraftList.Contains(acFlightName))) + //L'avion n'a pas de Warning associé : on l'ajoute à la liste: + this.warningAircraftList.Add(acFlightName); + else + //L'avion est en warning : on le retire de la liste : + this.warningAircraftList.Remove(acFlightName); + } + else if (actionType == "clear") + { + this.warningAircraftList.Clear(); + } + } + + public void managePartAircraftList(string actionType, string acFlightName) + { + if (actionType == "add") + { + if (!(this.partAircraftList.Contains(acFlightName))) + this.partAircraftList.Add(acFlightName); + } + else if (actionType == "remove") + { + if (this.partAircraftList.Contains(acFlightName)) + this.partAircraftList.Remove(acFlightName); + } + else if (actionType == "change") + { + if (!(this.partAircraftList.Contains(acFlightName))) + //L'avion n'est pas particularisé : on le particularise : + this.partAircraftList.Add(acFlightName); + else + //L'avion est particularisé : on le départicularise + this.partAircraftList.Remove(acFlightName); + } + else if (actionType == "clear") + { + this.partAircraftList.Clear(); + } + } + + public Boolean IsBeaconInBeaconsArray(Beacon[] array, string value) + { + Boolean result = false; + for (int i = 0; i < array.Length; i++) + { + if (array[i].Code == value) + { + result = true; + break; + } + } + return result; + } + + private double PanAndZoomX(double x) + { + //return GetImageCoordinates((float)x, 0).X; + return GetScreenCoordinates((float)x, 0).X; + } + + private double PanAndZoomY(double y) + { + //return GetImageCoordinates(0, (float)y).Y; + return GetScreenCoordinates(0, (float)y).Y; + } + + PointF GetScreenCoordinates(float Xi, float Yi) + { + //return new PointF(Zoom * (Xi + PanX), Zoom * (Yi + PanY)); + return new PointF(Zoom * (Xi + PanX), -Zoom * (Yi + PanY)); + } + + PointF GetImageCoordinates(float Xs, float Ys) + { + //return new PointF(Xs / Zoom - PanX, (Ys) / Zoom - PanY); + return new PointF(Xs / Zoom - PanX, -Ys / Zoom - PanY); + } + + #endregion + + #region Getters and Setters + + public string SelectedAircraft + { + get { return selectedAircraft; } + set { selectedAircraft = value; } + } + + public int CurrentHour + { + get { return currentHour; } + set { currentHour = value; } + } + + public int CurrentMinute + { + get { return currentMinute; } + set { currentMinute = value; } + } + + public int CurrentSecond + { + get { return currentSecond; } + set { currentSecond = value; } + } + + #endregion + + public void updateView(System.Collections.Generic.Dictionary> listOfAircrafts) + { + this.Invalidate(); + } + + internal void AddNewPenDown(PointF pointF) + { + + PointF calibratedTopLeft = new PointF(0.090f, 0.1f); + PointF calibratedBottomRight = new PointF(0.865f, 0.91f); + + + //Scale the value the the corrected scale + float correctedX = MathTools.GenericScaleF(pointF.X, calibratedTopLeft.X, 100, calibratedBottomRight.X, this.Width - 100); + float correctedY = MathTools.GenericScaleF(pointF.Y, calibratedTopLeft.Y, 100, calibratedBottomRight.Y, this.Height - 100); + + AnotoPenDown = new PointF(correctedX, correctedY); + + } + } +} diff --git a/SimpleRadar/UserControlRadarView.resx b/SimpleRadar/UserControlRadarView.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/SimpleRadar/UserControlRadarView.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SimpleRadar/balises.xml b/SimpleRadar/balises.xml new file mode 100644 index 0000000..daf6324 --- /dev/null +++ b/SimpleRadar/balises.xml @@ -0,0 +1,1949 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SimpleRadar/bin/Debug/Data.exe b/SimpleRadar/bin/Debug/Data.exe new file mode 100644 index 0000000..9f0369d Binary files /dev/null and b/SimpleRadar/bin/Debug/Data.exe differ diff --git a/SimpleRadar/bin/Debug/Data.pdb b/SimpleRadar/bin/Debug/Data.pdb new file mode 100644 index 0000000..baa3186 Binary files /dev/null and b/SimpleRadar/bin/Debug/Data.pdb differ diff --git a/SimpleRadar/bin/Debug/Ivy.dll b/SimpleRadar/bin/Debug/Ivy.dll new file mode 100644 index 0000000..e98260d Binary files /dev/null and b/SimpleRadar/bin/Debug/Ivy.dll differ diff --git a/SimpleRadar/bin/Debug/IvyBus.IvyControl.dll b/SimpleRadar/bin/Debug/IvyBus.IvyControl.dll new file mode 100644 index 0000000..1cb27aa Binary files /dev/null and b/SimpleRadar/bin/Debug/IvyBus.IvyControl.dll differ diff --git a/SimpleRadar/bin/Debug/SimpleRadar.exe b/SimpleRadar/bin/Debug/SimpleRadar.exe new file mode 100644 index 0000000..7aaaf0a Binary files /dev/null and b/SimpleRadar/bin/Debug/SimpleRadar.exe differ diff --git a/SimpleRadar/bin/Debug/SimpleRadar.pdb b/SimpleRadar/bin/Debug/SimpleRadar.pdb new file mode 100644 index 0000000..f5bb276 Binary files /dev/null and b/SimpleRadar/bin/Debug/SimpleRadar.pdb differ diff --git a/SimpleRadar/bin/Debug/SimpleRadar.vshost.exe b/SimpleRadar/bin/Debug/SimpleRadar.vshost.exe new file mode 100644 index 0000000..bb84a51 Binary files /dev/null and b/SimpleRadar/bin/Debug/SimpleRadar.vshost.exe differ diff --git a/SimpleRadar/bin/Debug/SimpleRadar.vshost.exe.manifest b/SimpleRadar/bin/Debug/SimpleRadar.vshost.exe.manifest new file mode 100644 index 0000000..f96b1d6 --- /dev/null +++ b/SimpleRadar/bin/Debug/SimpleRadar.vshost.exe.manifest @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SimpleRadar/bin/Debug/balises.xml b/SimpleRadar/bin/Debug/balises.xml new file mode 100644 index 0000000..daf6324 --- /dev/null +++ b/SimpleRadar/bin/Debug/balises.xml @@ -0,0 +1,1949 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SimpleRadar/bin/Debug/routes.xml b/SimpleRadar/bin/Debug/routes.xml new file mode 100644 index 0000000..43c8a5d --- /dev/null +++ b/SimpleRadar/bin/Debug/routes.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SimpleRadar/bin/Debug/sectors.xml b/SimpleRadar/bin/Debug/sectors.xml new file mode 100644 index 0000000..49ccab9 --- /dev/null +++ b/SimpleRadar/bin/Debug/sectors.xml @@ -0,0 +1,2824 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SimpleRadar/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache b/SimpleRadar/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000..1a7727c Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache differ diff --git a/SimpleRadar/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/SimpleRadar/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..e34662a Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/SimpleRadar/obj/x86/Debug/GenerateResource.read.1.tlog b/SimpleRadar/obj/x86/Debug/GenerateResource.read.1.tlog new file mode 100644 index 0000000..4aaccc3 Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/GenerateResource.read.1.tlog differ diff --git a/SimpleRadar/obj/x86/Debug/GenerateResource.write.1.tlog b/SimpleRadar/obj/x86/Debug/GenerateResource.write.1.tlog new file mode 100644 index 0000000..1099da2 Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/GenerateResource.write.1.tlog differ diff --git a/SimpleRadar/obj/x86/Debug/ResolveAssemblyReference.cache b/SimpleRadar/obj/x86/Debug/ResolveAssemblyReference.cache new file mode 100644 index 0000000..e2f16b4 Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/ResolveAssemblyReference.cache differ diff --git a/SimpleRadar/obj/x86/Debug/SimpleRadar.FormSimpleRadar.resources b/SimpleRadar/obj/x86/Debug/SimpleRadar.FormSimpleRadar.resources new file mode 100644 index 0000000..56a1826 Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/SimpleRadar.FormSimpleRadar.resources differ diff --git a/SimpleRadar/obj/x86/Debug/SimpleRadar.Properties.Resources.resources b/SimpleRadar/obj/x86/Debug/SimpleRadar.Properties.Resources.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/SimpleRadar.Properties.Resources.resources differ diff --git a/SimpleRadar/obj/x86/Debug/SimpleRadar.UserControlRadarView.resources b/SimpleRadar/obj/x86/Debug/SimpleRadar.UserControlRadarView.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/SimpleRadar.UserControlRadarView.resources differ diff --git a/SimpleRadar/obj/x86/Debug/SimpleRadar.csproj.FileListAbsolute.txt b/SimpleRadar/obj/x86/Debug/SimpleRadar.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..23918ca --- /dev/null +++ b/SimpleRadar/obj/x86/Debug/SimpleRadar.csproj.FileListAbsolute.txt @@ -0,0 +1,34 @@ +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\SimpleRadar.exe +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\SimpleRadar.pdb +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\Data.exe +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\Ivy.dll +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\IvyBus.IvyControl.dll +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\Data.pdb +E:\SaveData\Projects\Anoto\SimpleRadar\obj\x86\Debug\ResolveAssemblyReference.cache +E:\SaveData\Projects\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.FormSimpleRadar.resources +E:\SaveData\Projects\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.Properties.Resources.resources +E:\SaveData\Projects\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.UserControlRadarView.resources +E:\SaveData\Projects\Anoto\SimpleRadar\obj\x86\Debug\GenerateResource.read.1.tlog +E:\SaveData\Projects\Anoto\SimpleRadar\obj\x86\Debug\GenerateResource.write.1.tlog +E:\SaveData\Projects\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.exe +E:\SaveData\Projects\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.pdb +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\balises.xml +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\routes.xml +E:\SaveData\Projects\Anoto\SimpleRadar\bin\Debug\sectors.xml +C:\Anoto\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.exe +C:\Anoto\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.pdb +C:\Anoto\Anoto\SimpleRadar\bin\Debug\balises.xml +C:\Anoto\Anoto\SimpleRadar\bin\Debug\routes.xml +C:\Anoto\Anoto\SimpleRadar\bin\Debug\sectors.xml +C:\Anoto\Anoto\SimpleRadar\bin\Debug\SimpleRadar.exe +C:\Anoto\Anoto\SimpleRadar\bin\Debug\SimpleRadar.pdb +C:\Anoto\Anoto\SimpleRadar\bin\Debug\Data.exe +C:\Anoto\Anoto\SimpleRadar\bin\Debug\Ivy.dll +C:\Anoto\Anoto\SimpleRadar\bin\Debug\IvyBus.IvyControl.dll +C:\Anoto\Anoto\SimpleRadar\bin\Debug\Data.pdb +C:\Anoto\Anoto\SimpleRadar\obj\x86\Debug\ResolveAssemblyReference.cache +C:\Anoto\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.FormSimpleRadar.resources +C:\Anoto\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.Properties.Resources.resources +C:\Anoto\Anoto\SimpleRadar\obj\x86\Debug\SimpleRadar.UserControlRadarView.resources +C:\Anoto\Anoto\SimpleRadar\obj\x86\Debug\GenerateResource.read.1.tlog +C:\Anoto\Anoto\SimpleRadar\obj\x86\Debug\GenerateResource.write.1.tlog diff --git a/SimpleRadar/obj/x86/Debug/SimpleRadar.exe b/SimpleRadar/obj/x86/Debug/SimpleRadar.exe new file mode 100644 index 0000000..7aaaf0a Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/SimpleRadar.exe differ diff --git a/SimpleRadar/obj/x86/Debug/SimpleRadar.pdb b/SimpleRadar/obj/x86/Debug/SimpleRadar.pdb new file mode 100644 index 0000000..f5bb276 Binary files /dev/null and b/SimpleRadar/obj/x86/Debug/SimpleRadar.pdb differ diff --git a/SimpleRadar/routes.xml b/SimpleRadar/routes.xml new file mode 100644 index 0000000..43c8a5d --- /dev/null +++ b/SimpleRadar/routes.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SimpleRadar/sectors.xml b/SimpleRadar/sectors.xml new file mode 100644 index 0000000..49ccab9 --- /dev/null +++ b/SimpleRadar/sectors.xml @@ -0,0 +1,2824 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SimpleRadar/simpleRadar.ico b/SimpleRadar/simpleRadar.ico new file mode 100644 index 0000000..f072570 Binary files /dev/null and b/SimpleRadar/simpleRadar.ico differ -- cgit v1.1