kopia lustrzana https://github.com/dl2alf/AirScout
258 wiersze
9.8 KiB
C#
258 wiersze
9.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using ScoutBase.Stations;
|
|
|
|
namespace AirScout
|
|
{
|
|
public partial class WatchlistDlg : Form
|
|
{
|
|
List<LocationDesignator> AllLocations = new List<LocationDesignator>();
|
|
|
|
DataTable AllCallsigns = new DataTable();
|
|
DataTable SelectedCallsigns = new DataTable();
|
|
|
|
public WatchlistDlg()
|
|
{
|
|
InitializeComponent();
|
|
AllCallsigns.Columns.Add("Call");
|
|
AllCallsigns.Columns.Add("Locator");
|
|
AllCallsigns.DefaultView.Sort = "Call ASC";
|
|
SelectedCallsigns.Columns.Add("Call");
|
|
SelectedCallsigns.Columns.Add("Locator");
|
|
SelectedCallsigns.DefaultView.Sort = "Call ASC";
|
|
}
|
|
|
|
private void WatchlistDlg_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void WatchlistDlg_Shown(object sender, EventArgs e)
|
|
{
|
|
// initially fill tables
|
|
bw_Watchlist_Fill.RunWorkerAsync();
|
|
}
|
|
|
|
private void FillCallsigns (string filter)
|
|
{
|
|
try
|
|
{
|
|
AllCallsigns.Rows.Clear();
|
|
dgv_Watchlist_Callsigns.DataSource = null;
|
|
foreach (LocationDesignator ld in AllLocations)
|
|
{
|
|
if (Properties.Settings.Default.Location_RestrictToAreaOfInterest)
|
|
{
|
|
if (ld.Lat < Properties.Settings.Default.MinLat)
|
|
continue;
|
|
if (ld.Lat > Properties.Settings.Default.MaxLat)
|
|
continue;
|
|
if (ld.Lon < Properties.Settings.Default.MinLon)
|
|
continue;
|
|
if (ld.Lon > Properties.Settings.Default.MaxLon)
|
|
continue;
|
|
}
|
|
DataRow row = AllCallsigns.NewRow();
|
|
row[0] = ld.Call;
|
|
row[1] = ld.Loc;
|
|
AllCallsigns.Rows.Add(row);
|
|
}
|
|
dgv_Watchlist_Callsigns.DataSource = AllCallsigns;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("Watchlist.FillItems: " + ex.ToString());
|
|
}
|
|
}
|
|
|
|
private void FillSelected(string filter)
|
|
{
|
|
try
|
|
{
|
|
SelectedCallsigns.Rows.Clear();
|
|
dgv_Watchlist_Selected.DataSource = null;
|
|
foreach (WatchlistItem item in Properties.Settings.Default.Watchlist)
|
|
{
|
|
DataRow row = SelectedCallsigns.NewRow();
|
|
row[0] = item.Call;
|
|
row[1] = item.Loc;
|
|
SelectedCallsigns.Rows.Add(row);
|
|
}
|
|
dgv_Watchlist_Selected.DataSource = SelectedCallsigns;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("Watchlist.FillItems: " + ex.ToString());
|
|
}
|
|
}
|
|
|
|
private void btn_Watchlist_Add_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (dgv_Watchlist_Callsigns.SelectedRows != null)
|
|
{
|
|
foreach (DataGridViewRow selectedrow in dgv_Watchlist_Callsigns.SelectedRows)
|
|
{
|
|
// search row content in selected calls first
|
|
string sql = "Call = '" + selectedrow.Cells[0].Value.ToString() + "' AND Locator = '" + selectedrow.Cells[1].Value.ToString() + "'";
|
|
DataRow[] result = SelectedCallsigns.Select(sql);
|
|
if ((result == null) || (result.Length == 0))
|
|
{
|
|
DataRow row = SelectedCallsigns.NewRow();
|
|
row[0] = selectedrow.Cells[0].Value;
|
|
row[1] = selectedrow.Cells[1].Value;
|
|
SelectedCallsigns.Rows.Add(row);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// do nothing
|
|
}
|
|
}
|
|
|
|
private void btn_Watchlist_Remove_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (dgv_Watchlist_Selected.SelectedRows != null)
|
|
{
|
|
// keep the selected rows in a separate List as the selection changes dynamically when deleting rows from table
|
|
List<DataRow> SelectedRows = new List<DataRow>();
|
|
foreach (DataGridViewRow selectedrow in dgv_Watchlist_Selected.SelectedRows)
|
|
{
|
|
DataRow row = SelectedCallsigns.NewRow();
|
|
row[0] = selectedrow.Cells[0].Value.ToString();
|
|
row[1] = selectedrow.Cells[1].Value.ToString();
|
|
SelectedRows.Add(row);
|
|
}
|
|
SelectedCallsigns.AcceptChanges();
|
|
foreach (DataRow selectedrow in SelectedRows)
|
|
{
|
|
foreach (DataRow row in SelectedCallsigns.Rows)
|
|
{
|
|
if ((row[0].ToString() == selectedrow[0].ToString()) && (row[1].ToString() == selectedrow[1].ToString()))
|
|
{
|
|
// row found --> delete row in table, commit changes immediately and exit iteration
|
|
row.Delete();
|
|
SelectedCallsigns.AcceptChanges();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// do nothing
|
|
}
|
|
}
|
|
|
|
private void btn_Watchlist_RemoveAll_Click(object sender, EventArgs e)
|
|
{
|
|
SelectedCallsigns.Rows.Clear();
|
|
}
|
|
|
|
private void tb_Watchlist_Callsigns_TextChanged(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
AllCallsigns.DefaultView.RowFilter = "[Call] LIKE '" + tb_Watchlist_Callsigns.Text + "%'";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// do nothing
|
|
}
|
|
}
|
|
|
|
private void tb_Watchlist_Selected_TextChanged(object sender, EventArgs e)
|
|
{
|
|
SelectedCallsigns.DefaultView.RowFilter = "[Call] LIKE '" + tb_Watchlist_Selected.Text + "%'";
|
|
}
|
|
|
|
private void bw_Watchlist_Fill_DoWork(object sender, DoWorkEventArgs e)
|
|
{
|
|
bw_Watchlist_Fill.ReportProgress(0, "Lists are being populated. Please wait...");
|
|
// get all available callsigns from database
|
|
lock (AllLocations)
|
|
{
|
|
AllLocations = StationData.Database.LocationGetAll(bw_Watchlist_Fill, Properties.Settings.Default.MinLat, Properties.Settings.Default.MinLon, Properties.Settings.Default.MaxLat, Properties.Settings.Default.MaxLon);
|
|
}
|
|
}
|
|
|
|
private void bw_Watchlist_Fill_ProgressChanged(object sender, ProgressChangedEventArgs e)
|
|
{
|
|
// report message
|
|
if (e.ProgressPercentage <= 0)
|
|
{
|
|
tsl_Watchlist_Main.Text = (string)e.UserState;
|
|
ss_Watchlist_Main.Refresh();
|
|
}
|
|
}
|
|
|
|
private void bw_Watchlist_Fill_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
|
{
|
|
tsl_Watchlist_Main.Text = "Adding callsigns to list. Please wait...";
|
|
ss_Watchlist_Main.Refresh();
|
|
FillCallsigns(tb_Watchlist_Callsigns.Text);
|
|
FillSelected(tb_Watchlist_Selected.Text);
|
|
tsl_Watchlist_Main.Text = "";
|
|
btn_Watchlist_Add.Enabled = true;
|
|
btn_Watchlist_Remove.Enabled = true;
|
|
btn_Watchlist_RemoveAll.Enabled = true;
|
|
btn_Watchlist_OK.Enabled = true;
|
|
tsl_Watchlist_Main.Text = "Ready.";
|
|
ss_Watchlist_Main.Refresh();
|
|
}
|
|
|
|
private void dgv_Watchlist_Callsigns_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
|
|
{
|
|
if (e.ColumnIndex < 0)
|
|
return;
|
|
if (e.RowIndex < 0)
|
|
return;
|
|
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
|
|
var r = e.CellBounds;
|
|
e.Graphics.DrawLine(Pens.LightGray, r.Left, r.Top, r.Right, r.Top);
|
|
e.Graphics.DrawLine(Pens.LightGray, r.Left, r.Top, r.Left, r.Bottom);
|
|
e.Graphics.DrawLine(Pens.LightGray, r.Left, r.Bottom, r.Right, r.Bottom);
|
|
e.Graphics.DrawLine(Pens.LightGray, r.Right, r.Top, r.Right, r.Bottom);
|
|
e.Handled = true;
|
|
}
|
|
|
|
private void dgv_Watchlist_Selected_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
|
|
{
|
|
if (e.ColumnIndex < 0)
|
|
return;
|
|
if (e.RowIndex < 0)
|
|
return;
|
|
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
|
|
var r = e.CellBounds;
|
|
e.Graphics.DrawLine(Pens.LightGray, r.Left, r.Top, r.Right, r.Top);
|
|
e.Graphics.DrawLine(Pens.LightGray, r.Left, r.Top, r.Left, r.Bottom);
|
|
e.Graphics.DrawLine(Pens.LightGray, r.Left, r.Bottom, r.Right, r.Bottom);
|
|
e.Graphics.DrawLine(Pens.LightGray, r.Right, r.Top, r.Right, r.Bottom);
|
|
e.Handled = true;
|
|
}
|
|
|
|
private void dgv_Watchlist_Callsigns_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
btn_Watchlist_Add_Click(this, null);
|
|
}
|
|
|
|
private void dgv_Watchlist_Selected_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
btn_Watchlist_Remove_Click(this, null);
|
|
}
|
|
}
|
|
}
|