private void LandrunControl_DataValid()
        {
            LandRunTask landRun = (plUserControl.Controls["taskControl"] as LandRunControl).LandRun;

            if (DoesTaskNumberAlreadyExists(landRun.TaskNumber))
            {
                Log(LogSeverityType.Error, $"Failed to create {landRun}: A task with the number '{landRun.TaskNumber}' already exists");
            }
            else
            {
                if (!lbTaskList.Items.Contains(landRun))
                {
                    lbTaskList.Items.Add(landRun);
                    Log(LogSeverityType.Info, $"{landRun} created/modified");
                }
            }
        }
        private void btImportTask_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.DefaultExt  = "json";
            openFileDialog.Filter      = "json files(*.json) | *.json";
            openFileDialog.FilterIndex = 1;
            if (!string.IsNullOrWhiteSpace(tbCompetitionFolder.Text))
            {
                openFileDialog.InitialDirectory = tbCompetitionFolder.Text;
            }
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if (openFileDialog.FileName.Contains("(Donut)"))
                    {
                        string jsonString = File.ReadAllText(openFileDialog.FileName);
                        //DonutTask donut = JsonSerializer.Deserialize<DonutTask>(jsonString);
                        DonutTask donut = JsonConvert.DeserializeObject <DonutTask>(jsonString, new JsonSerializerSettings()
                        {
                            TypeNameHandling = TypeNameHandling.Auto
                        });
                        DonutControl donutControl = new DonutControl(donut);
                        SuspendLayout();
                        plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                        donutControl.Location   = TaskControlLocation;
                        donutControl.Name       = "taskControl";
                        donutControl.DataValid += DonutControl_DataValid;
                        plUserControl.Controls.Add(donutControl);
                        ResumeLayout();
                    }
                    else if (openFileDialog.FileName.Contains("(Pie)"))
                    {
                        string jsonString = File.ReadAllText(openFileDialog.FileName);
                        //PieTask pie = JsonSerializer.Deserialize<PieTask>(jsonString);
                        PieTask pie = JsonConvert.DeserializeObject <PieTask>(jsonString, new JsonSerializerSettings()
                        {
                            TypeNameHandling = TypeNameHandling.Auto
                        });
                        PieControl pieControl = new PieControl(pie);
                        SuspendLayout();
                        plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                        pieControl.Location   = TaskControlLocation;
                        pieControl.Name       = "taskControl";
                        pieControl.DataValid += PieControl_DataValid;
                        plUserControl.Controls.Add(pieControl);
                        ResumeLayout();
                    }
                    else if (openFileDialog.FileName.Contains("(Elbow)"))
                    {
                        string jsonString = File.ReadAllText(openFileDialog.FileName);
                        //ElbowTask elbow = JsonSerializer.Deserialize<ElbowTask>(jsonString);
                        ElbowTask elbow = JsonConvert.DeserializeObject <ElbowTask>(jsonString, new JsonSerializerSettings()
                        {
                            TypeNameHandling = TypeNameHandling.Auto
                        });
                        ElbowControl elbowControl = new ElbowControl(elbow);
                        SuspendLayout();
                        plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                        elbowControl.Location   = TaskControlLocation;
                        elbowControl.Name       = "taskControl";
                        elbowControl.DataValid += ElbowControl_DataValid;
                        plUserControl.Controls.Add(elbowControl);
                        ResumeLayout();
                    }
                    else if (openFileDialog.FileName.Contains("(Land Run)"))
                    {
                        string jsonString = File.ReadAllText(openFileDialog.FileName);
                        //LandRunTask landRun = JsonSerializer.Deserialize<LandRunTask>(jsonString);
                        LandRunTask landRun = JsonConvert.DeserializeObject <LandRunTask>(jsonString, new JsonSerializerSettings()
                        {
                            TypeNameHandling = TypeNameHandling.Auto
                        });
                        LandRunControl landrunControl = new LandRunControl(landRun);
                        SuspendLayout();
                        plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                        landrunControl.Location   = TaskControlLocation;
                        landrunControl.Name       = "taskControl";
                        landrunControl.DataValid += LandrunControl_DataValid;
                        plUserControl.Controls.Add(landrunControl);
                        ResumeLayout();
                    }
                    else
                    {
                        Log(LogSeverityType.Error, "Failed import task: Unkown task type");
                        return;
                    }
                }
                catch (Exception ex)
                {
                    Log(LogSeverityType.Error, $"Failed to import task: {ex.Message}");
                    return;
                }
            }
        }
 /// <summary>
 /// Constructor which pre-fills controls from existing land run task
 /// </summary>
 /// <param name="landRun">the existing land run task</param>
 public LandRunControl(LandRunTask landRun)
 {
     LandRun = landRun;
     InitializeComponent();
     Prefill();
 }