| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344 | using DevExpress.Xpo;using DevExpress.XtraBars;using DevExpress.XtraEditors.Controls;using Ips.Library.Basic;using Ips.Library.Entity;using Ips.Sps.Emts;using Ips.Sps.IfeScans;using Ips.Sps.Maps;using Ips.Sps.Sats;using Ips.Sps.Tsks;using System.Data;namespace Ips.Sps.Sigs{    public partial class SigListCtrl : DevExpress.XtraEditors.XtraUserControl    {        public SigListCtrl()        {            InitializeComponent();        }        public string CtrlCaption        {            get => txtListCaption.Caption;            set => txtListCaption.Caption = value;        }        private SignalCategory? SigCategory { get; set; } = null;        private SignalType? SigType { get; set; } = null;        private bool ShowEditBar { get; set; } = true;        private bool ShowScanFreq { get; set; } = false;        private IList<Sat> SatList { get; set; }        private IList<Emt> EmtList { get; set; }        private XPBaseCollection sigList { get; set; }        private Session _session { get; set; }        private string _defaultMainSatText, _defaultMainAdjaSatText;        private TskAdCard _adCard;        private List<Sat> _adSatList        {            get            {                if (_adCard != null)                {                    var adSatIds = _adCard.Channels.SelectMany(m => m.GetSatIds()).ToList();                    var adSatList = SatList.Where(m => adSatIds.Contains(m.Oid)).ToList();                    return adSatList;                }                return null;            }        }        private int? _defaultMainSatId        {            get            {                if (_adCard != null && _adCard.Channels.IsNotNullOrEmpty() && _adSatList != null)                {                    var satId = _adCard.Channels.OrderBy(m => m.ChNum).First().GetSatIds().FirstOrDefault();                    return satId == 0 ? null : satId;                }                return null;            }        }        private void grdSigList_Load(object sender, EventArgs e)        {        }        public void SetSigProperties(SignalCategory? sigCategory, SignalType? sigType, bool showEditBar, bool showScanFreq, IList<Sat> sats, IList<Emt> emts)        {            SigCategory = sigCategory;            SigType = sigType;            ShowEditBar = showEditBar;            ShowScanFreq = showScanFreq;            SatList = sats;            EmtList = emts;            InitCtrl();        }        public void SetDataSource(XPBaseCollection sigList)        {            _session = sigList.Session;            this.sigList = sigList;            bsSigList.DataSource = sigList;            InitCtrl();        }        public void SetAdCardInfo(TskAdCard adCard)        {            _adCard = adCard;        }        public void SetDefaultSatText(string mainSatText, string adjaSatsText)        {            mainSatEdit.NullText = _defaultMainSatText = mainSatText;            adjaSatEdit.NullText = _defaultMainAdjaSatText = adjaSatsText;        }        private void InitCtrl()        {            btnScanAdd.Visibility = ShowScanFreq ? BarItemVisibility.Always : BarItemVisibility.Never;            barSigEdit.Visible = ShowEditBar;            gvSigList.OptionsBehavior.Editable = ShowEditBar;            bsEmtList.DataSource = EmtList;            bsSatList.DataSource = SatList;            colOid.Visible = false;            colSigType.Visible = false;            if (!SigCategory.HasValue)            {                colSigFreq.Visible = false;                colFreqStart.Visible = false;                colFreqEnd.Visible = false;                colFreqStep.Visible = false;            }            else            {                colSigCategory.Visible = false;                colRemark.Visible = !ShowEditBar;                switch (SigCategory.Value)                {                    case Library.Entity.SignalCategory.TarSig:                    case Library.Entity.SignalCategory.RefSig:                        colFreqStart.Visible = false;                        colFreqEnd.Visible = false;                        colFreqStep.Visible = false;                        colSigFreqText.Visible = false;                        break;                    case Library.Entity.SignalCategory.SctSig:                        colSigFreqText.Visible = false;                        colSigFreq.Visible = false;                        colEmtId.Visible = false;                        break;                }            }            switch (SigType)            {                case SignalType.NORMAL:                    break;                case SignalType.DAMA:                    colSigLen.Visible = false;                    colEmtId.Visible = false;                    break;            }        }        private void btnImport_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)        {            SigSelectForm form = new SigSelectForm(SigCategory, SigType);            if (form.ShowDialog() != DialogResult.OK || form.SelectSigList.IsNullOrEmpty()) return;            if (bsSigList.ObjectType == typeof(TskSignal))            {                var tskSigList = bsSigList.DataSource as XPCollection<TskSignal>;                var selectSigList = form.SelectSigList.Select(m =>                {                    var tskSig = TskSignal.CreateFrom(m, _session);                    if (tskSig.AdjaSatIds.IsNotNullOrWhitespace())                    {                        var adjaSatIds = tskSig.AdjaSatIds.Split(",").Where(m => m.IsNotNullOrWhitespace()).Select(m => int.Parse(m));                        adjaSatIds = adjaSatIds.Where(m => SatList.Any(sat => sat.Oid == m));                        tskSig.AdjaSatIds = adjaSatIds.JoinAsString(",");                    }                    if (!tskSig.MainSatId.HasValue || !SatList.Any(m => m.Oid == tskSig.MainSatId))                    {                        tskSig.MainSatId = null;                    }                    tskSig.SigCategory = SigCategory ?? Library.Entity.SignalCategory.TarSig;                    return tskSig;                }).ToList();                tskSigList?.AddRange(selectSigList);            }            else if (bsSigList.ObjectType == typeof(Signal))            {                var sigList = bsSigList.DataSource as XPCollection<Signal>;                sigList?.AddRange(form.SelectSigList);            }        }        private void btnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)        {            gvSigList.AddNewRow();        }        private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)        {            var selectRows = gvSigList.GetSelectedRows();            if (selectRows.Length > 0)            {                gvSigList.DeleteSelectedRows();            }            else if (gvSigList.FocusedRowHandle >= 0)            {                gvSigList.DeleteRow(gvSigList.FocusedRowHandle);            }        }        private void sigRangeButtonEdit_ButtonClick(object sender, ButtonPressedEventArgs e)        {            var sig = gvSigList.GetFocusedRow() as SignalBasic;            if (sig == null) return;            if (e.Button.Kind == ButtonPredefines.Clear)            {                sig.HasRange = false;            }            else if (e.Button.Kind == ButtonPredefines.Ellipsis)            {                MapRangeSelectForm selectForm = new MapRangeSelectForm();                if (sig.HasRange)                {                    selectForm.SelectRange = new GeoRange(sig.SigLon, sig.SigLat, sig.SigAlt, sig.LonRange, sig.LatRange);                }                if (selectForm.ShowDialog() != DialogResult.OK) return;                if (selectForm.SelectRange != null)                {                    var range = selectForm.SelectRange;                    SetSigRange(sig, range);                }                else                {                    sig.HasRange = false;                }            }        }        private void SetSigRange(SignalBasic sig, GeoRange range)        {            sig.SigLon = range.Lon;            sig.SigLat = range.Lat;            sig.SigAlt = range.Alt;            sig.LonRange = range.LonRange;            sig.LatRange = range.LatRange;            sig.HasRange = true;        }        private void gvSigList_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)        {            if (SigCategory.HasValue)            {                gvSigList.SetRowCellValue(e.RowHandle, colSigCategory, SigCategory);            }            if (SigType.HasValue)            {                gvSigList.SetRowCellValue(e.RowHandle, colSigType, SigType);            }            if (_adCard != null)            {                var adSatIds = _adCard.Channels.SelectMany(m => m.GetSatIds()).ToList();                var adSatList = SatList.Where(m => adSatIds.Contains(m.Oid)).ToList();                if (adSatList.IsNotNullOrEmpty())                {                    mainSatEdit.DataSource = adSatList;                    adjaSatEdit.DataSource = adSatList;                }                var defaultChannel = _adCard.Channels.FirstOrDefault(m => m.SatIds.IsNotNullOrWhitespace());                if (defaultChannel != null)                {                    var defaultSatId = defaultChannel.GetSatIds()[0];                    gvSigList.SetRowCellValue(e.RowHandle, colMainSatId, defaultSatId);                }            }        }        private void emtLookUpEdit_EditValueChanged(object sender, EventArgs e)        {            var arg = e as ChangingEventArgs;            if (arg == null || arg.NewValue == null) return;            var emt = emtLookUpEdit.GetDataSourceRowByKeyValue(arg.NewValue) as Emt;            if (emt != null && emt.EmtType == EmtType.FixSation)            {                var sig = gvSigList.GetFocusedRow() as SignalBasic;                SetSigRange(sig, new GeoRange(emt.Lon, emt.Lat, emt.Alt, 3, 3));            }        }        private void btnScanAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)        {            var form = new IfeScanForm() { StartPosition = FormStartPosition.CenterScreen };            form.BindSatList(_adSatList ?? SatList, _defaultMainSatId);            form.SetAdCardInfo(_adCard);            if (form.ShowDialog() == DialogResult.OK)            {                foreach (var item in form.SelectedFreq)                {                    var model = Activator.CreateInstance(bsSigList.ObjectType, sigList.Session) as SignalBasic;                    model.MainSatId = form.SatId;                    model.SigFreq = item.SigFreq;                    model.BandWidth = item.BandWidth;                    model.SigLen = 10;                    if (_adCard != null)                    {                        var adjaSatIds = _adCard.Channels.SelectMany(m => m.GetSatIds()).WhereIf(form.SatId.HasValue, m => m != form.SatId).Distinct();                        model.AdjaSatIds = adjaSatIds.JoinAsString(",");                    }                    sigList.BaseAdd(model);                }            }        }        private void gvSigList_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)        {            if (e.Column == colAdjaSatIds)            {                if (e.DisplayText.IsNullOrWhitespace())                {                    e.DisplayText = _defaultMainAdjaSatText.IfNullOrWhitespace("自动匹配");                }            }            else if (e.Column == colMainSatId)            {                if (e.DisplayText.IsNullOrWhitespace())                    e.DisplayText = _defaultMainSatText.IfNullOrWhitespace("无");            }        }        private void btnSetGR_ItemClick(object sender, ItemClickEventArgs e)        {            SetGREditForm editForm = new SetGREditForm();            editForm.ShowDialog();        }        private void gvSigList_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)        {            //参考信号不添加干扰信号            if (SigCategory.HasValue && SigCategory.Value == SignalCategory.RefSig) return;            if (e.Button == MouseButtons.Right && e.Clicks == 1)            {                popSigMenu.ShowPopup(Cursor.Position);            }        }    }}
 |