SigListCtrl.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. using DevExpress.Xpo;
  2. using DevExpress.XtraBars;
  3. using DevExpress.XtraEditors.Controls;
  4. using Ips.Library.Basic;
  5. using Ips.Library.Entity;
  6. using Ips.Sps.Emts;
  7. using Ips.Sps.IfeScans;
  8. using Ips.Sps.Maps;
  9. using Ips.Sps.Sats;
  10. using Ips.Sps.Tsks;
  11. using System.Data;
  12. namespace Ips.Sps.Sigs
  13. {
  14. public partial class SigListCtrl : DevExpress.XtraEditors.XtraUserControl
  15. {
  16. public SigListCtrl()
  17. {
  18. InitializeComponent();
  19. }
  20. public string CtrlCaption
  21. {
  22. get => txtListCaption.Caption;
  23. set => txtListCaption.Caption = value;
  24. }
  25. private SignalCategory? SigCategory { get; set; } = null;
  26. private SignalType? SigType { get; set; } = null;
  27. private bool ShowEditBar { get; set; } = true;
  28. private bool ShowScanFreq { get; set; } = false;
  29. private IList<Sat> SatList { get; set; }
  30. private IList<Emt> EmtList { get; set; }
  31. private XPBaseCollection sigList { get; set; }
  32. private Session _session { get; set; }
  33. private string _defaultMainSatText, _defaultMainAdjaSatText;
  34. private TskAdCard _adCard;
  35. private List<Sat> _adSatList
  36. {
  37. get
  38. {
  39. if (_adCard != null)
  40. {
  41. var adSatIds = _adCard.Channels.SelectMany(m => m.GetSatIds()).ToList();
  42. var adSatList = SatList.Where(m => adSatIds.Contains(m.Oid)).ToList();
  43. return adSatList;
  44. }
  45. return null;
  46. }
  47. }
  48. private int? _defaultMainSatId
  49. {
  50. get
  51. {
  52. if (_adCard != null && _adCard.Channels.IsNotNullOrEmpty() && _adSatList != null)
  53. {
  54. var satId = _adCard.Channels.OrderBy(m => m.ChNum).First().GetSatIds().FirstOrDefault();
  55. return satId == 0 ? null : satId;
  56. }
  57. return null;
  58. }
  59. }
  60. private void grdSigList_Load(object sender, EventArgs e)
  61. {
  62. }
  63. public void SetSigProperties(SignalCategory? sigCategory, SignalType? sigType, bool showEditBar, bool showScanFreq, IList<Sat> sats, IList<Emt> emts)
  64. {
  65. SigCategory = sigCategory;
  66. SigType = sigType;
  67. ShowEditBar = showEditBar;
  68. ShowScanFreq = showScanFreq;
  69. SatList = sats;
  70. EmtList = emts;
  71. InitCtrl();
  72. }
  73. public void SetDataSource(XPBaseCollection sigList)
  74. {
  75. _session = sigList.Session;
  76. this.sigList = sigList;
  77. bsSigList.DataSource = sigList;
  78. InitCtrl();
  79. }
  80. public void SetAdCardInfo(TskAdCard adCard)
  81. {
  82. _adCard = adCard;
  83. }
  84. public void SetDefaultSatText(string mainSatText, string adjaSatsText)
  85. {
  86. mainSatEdit.NullText = _defaultMainSatText = mainSatText;
  87. adjaSatEdit.NullText = _defaultMainAdjaSatText = adjaSatsText;
  88. }
  89. private void InitCtrl()
  90. {
  91. btnScanAdd.Visibility = ShowScanFreq ? BarItemVisibility.Always : BarItemVisibility.Never;
  92. barSigEdit.Visible = ShowEditBar;
  93. gvSigList.OptionsBehavior.Editable = ShowEditBar;
  94. bsEmtList.DataSource = EmtList;
  95. bsSatList.DataSource = SatList;
  96. colOid.Visible = false;
  97. colSigType.Visible = false;
  98. if (!SigCategory.HasValue)
  99. {
  100. colSigFreq.Visible = false;
  101. colFreqStart.Visible = false;
  102. colFreqEnd.Visible = false;
  103. colFreqStep.Visible = false;
  104. }
  105. else
  106. {
  107. colSigCategory.Visible = false;
  108. colRemark.Visible = !ShowEditBar;
  109. switch (SigCategory.Value)
  110. {
  111. case Library.Entity.SignalCategory.TarSig:
  112. case Library.Entity.SignalCategory.RefSig:
  113. colFreqStart.Visible = false;
  114. colFreqEnd.Visible = false;
  115. colFreqStep.Visible = false;
  116. colSigFreqText.Visible = false;
  117. break;
  118. case Library.Entity.SignalCategory.SctSig:
  119. colSigFreqText.Visible = false;
  120. colSigFreq.Visible = false;
  121. colEmtId.Visible = false;
  122. break;
  123. }
  124. }
  125. switch (SigType)
  126. {
  127. case SignalType.NORMAL:
  128. break;
  129. case SignalType.DAMA:
  130. colSigLen.Visible = false;
  131. colEmtId.Visible = false;
  132. break;
  133. }
  134. }
  135. private void btnImport_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  136. {
  137. SigSelectForm form = new SigSelectForm(SigCategory, SigType);
  138. if (form.ShowDialog() != DialogResult.OK || form.SelectSigList.IsNullOrEmpty()) return;
  139. if (bsSigList.ObjectType == typeof(TskSignal))
  140. {
  141. var tskSigList = bsSigList.DataSource as XPCollection<TskSignal>;
  142. var selectSigList = form.SelectSigList.Select(m =>
  143. {
  144. var tskSig = TskSignal.CreateFrom(m, _session);
  145. if (tskSig.AdjaSatIds.IsNotNullOrWhitespace())
  146. {
  147. var adjaSatIds = tskSig.AdjaSatIds.Split(",").Where(m => m.IsNotNullOrWhitespace()).Select(m => int.Parse(m));
  148. adjaSatIds = adjaSatIds.Where(m => SatList.Any(sat => sat.Oid == m));
  149. tskSig.AdjaSatIds = adjaSatIds.JoinAsString(",");
  150. }
  151. if (!tskSig.MainSatId.HasValue || !SatList.Any(m => m.Oid == tskSig.MainSatId))
  152. {
  153. tskSig.MainSatId = null;
  154. }
  155. tskSig.SigCategory = SigCategory ?? Library.Entity.SignalCategory.TarSig;
  156. return tskSig;
  157. }).ToList();
  158. tskSigList?.AddRange(selectSigList);
  159. }
  160. else if (bsSigList.ObjectType == typeof(Signal))
  161. {
  162. var sigList = bsSigList.DataSource as XPCollection<Signal>;
  163. sigList?.AddRange(form.SelectSigList);
  164. }
  165. }
  166. private void btnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  167. {
  168. gvSigList.AddNewRow();
  169. }
  170. private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  171. {
  172. var selectRows = gvSigList.GetSelectedRows();
  173. if (selectRows.Length > 0)
  174. {
  175. gvSigList.DeleteSelectedRows();
  176. }
  177. else if (gvSigList.FocusedRowHandle >= 0)
  178. {
  179. gvSigList.DeleteRow(gvSigList.FocusedRowHandle);
  180. }
  181. }
  182. private void sigRangeButtonEdit_ButtonClick(object sender, ButtonPressedEventArgs e)
  183. {
  184. var sig = gvSigList.GetFocusedRow() as SignalBasic;
  185. if (sig == null) return;
  186. if (e.Button.Kind == ButtonPredefines.Clear)
  187. {
  188. sig.HasRange = false;
  189. }
  190. else if (e.Button.Kind == ButtonPredefines.Ellipsis)
  191. {
  192. MapRangeSelectForm selectForm = new MapRangeSelectForm();
  193. if (sig.HasRange)
  194. {
  195. selectForm.SelectRange = new GeoRange(sig.SigLon, sig.SigLat, sig.SigAlt, sig.LonRange, sig.LatRange);
  196. }
  197. if (selectForm.ShowDialog() != DialogResult.OK) return;
  198. if (selectForm.SelectRange != null)
  199. {
  200. var range = selectForm.SelectRange;
  201. SetSigRange(sig, range);
  202. }
  203. else
  204. {
  205. sig.HasRange = false;
  206. }
  207. }
  208. }
  209. private void SetSigRange(SignalBasic sig, GeoRange range)
  210. {
  211. sig.SigLon = range.Lon;
  212. sig.SigLat = range.Lat;
  213. sig.SigAlt = range.Alt;
  214. sig.LonRange = range.LonRange;
  215. sig.LatRange = range.LatRange;
  216. sig.HasRange = true;
  217. }
  218. private void gvSigList_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
  219. {
  220. if (SigCategory.HasValue)
  221. {
  222. gvSigList.SetRowCellValue(e.RowHandle, colSigCategory, SigCategory);
  223. }
  224. if (SigType.HasValue)
  225. {
  226. gvSigList.SetRowCellValue(e.RowHandle, colSigType, SigType);
  227. }
  228. if (_adCard != null)
  229. {
  230. var adSatIds = _adCard.Channels.SelectMany(m => m.GetSatIds()).ToList();
  231. var adSatList = SatList.Where(m => adSatIds.Contains(m.Oid)).ToList();
  232. if (adSatList.IsNotNullOrEmpty())
  233. {
  234. mainSatEdit.DataSource = adSatList;
  235. adjaSatEdit.DataSource = adSatList;
  236. }
  237. var defaultChannel = _adCard.Channels.FirstOrDefault(m => m.SatIds.IsNotNullOrWhitespace());
  238. if (defaultChannel != null)
  239. {
  240. var defaultSatId = defaultChannel.GetSatIds()[0];
  241. gvSigList.SetRowCellValue(e.RowHandle, colMainSatId, defaultSatId);
  242. }
  243. }
  244. }
  245. private void emtLookUpEdit_EditValueChanged(object sender, EventArgs e)
  246. {
  247. var arg = e as ChangingEventArgs;
  248. if (arg == null || arg.NewValue == null) return;
  249. var emt = emtLookUpEdit.GetDataSourceRowByKeyValue(arg.NewValue) as Emt;
  250. if (emt != null && emt.EmtType == EmtType.FixSation)
  251. {
  252. var sig = gvSigList.GetFocusedRow() as SignalBasic;
  253. SetSigRange(sig, new GeoRange(emt.Lon, emt.Lat, emt.Alt, 3, 3));
  254. }
  255. }
  256. private void btnScanAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  257. {
  258. var form = new IfeScanForm() { StartPosition = FormStartPosition.CenterScreen };
  259. form.BindSatList(_adSatList ?? SatList, _defaultMainSatId);
  260. form.SetAdCardInfo(_adCard);
  261. if (form.ShowDialog() == DialogResult.OK)
  262. {
  263. foreach (var item in form.SelectedFreq)
  264. {
  265. var model = Activator.CreateInstance(bsSigList.ObjectType, sigList.Session) as SignalBasic;
  266. model.MainSatId = form.SatId;
  267. model.SigFreq = item.SigFreq;
  268. model.BandWidth = item.BandWidth;
  269. model.SigLen = 10;
  270. if (_adCard != null)
  271. {
  272. var adjaSatIds = _adCard.Channels.SelectMany(m => m.GetSatIds()).WhereIf(form.SatId.HasValue, m => m != form.SatId).Distinct();
  273. model.AdjaSatIds = adjaSatIds.JoinAsString(",");
  274. }
  275. sigList.BaseAdd(model);
  276. }
  277. }
  278. }
  279. private void gvSigList_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
  280. {
  281. if (e.Column == colAdjaSatIds)
  282. {
  283. if (e.DisplayText.IsNullOrWhitespace())
  284. {
  285. e.DisplayText = _defaultMainAdjaSatText.IfNullOrWhitespace("自动匹配");
  286. }
  287. }
  288. else if (e.Column == colMainSatId)
  289. {
  290. if (e.DisplayText.IsNullOrWhitespace())
  291. e.DisplayText = _defaultMainSatText.IfNullOrWhitespace("无");
  292. }
  293. }
  294. private void btnSetGR_ItemClick(object sender, ItemClickEventArgs e)
  295. {
  296. SetGREditForm editForm = new SetGREditForm();
  297. editForm.ShowDialog();
  298. }
  299. private void gvSigList_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
  300. {
  301. //参考信号不添加干扰信号
  302. if (SigCategory.HasValue && SigCategory.Value == SignalCategory.RefSig) return;
  303. if (e.Button == MouseButtons.Right && e.Clicks == 1)
  304. {
  305. popSigMenu.ShowPopup(Cursor.Position);
  306. }
  307. }
  308. }
  309. }