using DevExpress.XtraEditors; using Ips.Library.Basic; using Ips.Library.DxpLib; using Ips.Sim.Interops; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using System.Windows.Forms; namespace Ips.Sps.Tools.SignalMerges { public partial class SignalMergeMainCtrl : DevExpress.XtraEditors.XtraUserControl { public SignalMergeMainCtrl() { InitializeComponent(); InFsButtonEdit.SetUnitText("M"); OutFsButtonEdit.SetUnitText("M"); gvMain.UseDefaultSettings(new GridViewDefaultSetting() { Editable = true, MultiSelect = true, DefaultEmptyDisplayText = false }); } string vmfile = Path.Combine(SpsConst.VmFolder, "signalmerge.json"); SignalMergeViewModel vm; private void SignalMergeMainCtrl_Load(object sender, EventArgs e) { if (File.Exists(vmfile)) { vm = JsonSerializer.Deserialize(File.ReadAllText(vmfile)); } else { vm = new SignalMergeViewModel(); } bsMain.DataSource = vm; } private void OutFileButtonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { string fileName = ToolDialog.SaveFile(OutFileButtonEdit.Text, "输出文件"); OutFileButtonEdit.EditValue = fileName; } private void inFileEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { string infile = ToolDialog.OpenFile("", "输入文件"); gvMain.ActiveEditor.EditValue = infile; } private void btnSigMerge_Click(object sender, EventArgs e) { if (!ValidateInput()) return; string vmjson = JsonSerializer.Serialize(vm, new JsonSerializerOptions() { WriteIndented = true }); File.WriteAllText(vmfile, vmjson); var mergeItems = vm.MergeItems.Where(m => m.FileName.IsNotNullOrWhitespace()).ToList(); var infs = vm.InFs.E6l(); var outfs = vm.OutFs.E6l(); var outfile = vm.OutFile; string outdir = Path.GetDirectoryName(outfile); DirectoryUtil.CreateIfNotExists(outdir); int res = -1; if (mergeItems.Count == 2) { var item1 = mergeItems[0]; var item2 = mergeItems[1]; res = SignalEmulationApi.mergeSignals(infs, item1.FileName, item1.Ffc.E6l(), item2.FileName, item2.Ffc.E6l(), outfs, outfile); } else if (mergeItems.Count == 3) { var item1 = mergeItems[0]; var item2 = mergeItems[1]; var item3 = mergeItems[2]; res = SignalEmulationApi.mergeSignalsEx_M(infs, item1.FileName, item1.Ffc.E6l(), item2.FileName, item2.Ffc.E6l(), item3.FileName, item3.Ffc.E6l(), outfs, outfile); } else { MsgHelper.ShowMsg("支持两个输入文件或三个输入文件"); } if (res != 0) { MsgHelper.ShowError($"合并失败,错误代码:{res}"); } else { bool openFolder = MsgHelper.ShowConfirm("合并成功,是否打开目录!"); if (openFolder) { Process.Start("explorer", outdir); } } } private bool ValidateInput() { dxError.ClearErrors(); if (vm.InFs == 0) dxError.SetError(InFsButtonEdit, "输入采样率不能为空!"); if (vm.OutFs == 0) dxError.SetError(OutFsButtonEdit, "输入采样率不能空!"); if (vm.OutFile.IsNullOrWhitespace()) dxError.SetError(OutFileButtonEdit, "输出文件不能空!"); if (!vm.MergeItems.Where(m => m.FileName.IsNotNullOrWhitespace()).Any()) dxError.SetError(grdMain, "必须包含输入文件信息!"); return dxError.HasErrors == false; } } }