using ImGuiNET; using skyscraper5.Skyscraper; using skyscraper5.Skyscraper.Equipment; using skyscraper5.Skyscraper.Gps; using skyscraper5.Skyscraper.IO; using skyscraper8.Skyscraper.FrequencyListGenerator; using skyscraper8.Skyscraper.Scraper.Storage; using skyscraper8.UI.SDL2.Jobs; namespace SDL2Demo.Jobs { internal class InheritedBlindscanConfigWindow : IRenderable { private bool windowOpen; private List tuners; private List satellites; private List lnbs; private List dishes; private readonly TaskQueue _taskQueue; public int settingsWindowBLScanTunerSelection; public bool settingsWindowUseDifferentTunerForSetFilter; public int settingsWindowSetFilterTunerSelection; public int settingsWindowDiseqc; public bool settingsWindowCollectIqGraphs; public bool settingsWindowCollectRfSpectrum; public bool settingsWindowCaptureFile; public int settingsWindowSatellite; public int settingsWindowLNB; public int settingsWindowDish; public bool settingsWindowScanHorizontalLow; public bool settingsWindowScanHorizontalHigh; public bool settingsWindowScanVerticalLow; public bool settingsWindowScanVerticalHigh; private DataStorage dataStorage; private ObjectStorage objectStorage; private IGpsReceiver gpsReceiver; private Ini ini; private IStreamReader streamReader; private void StoreSettings() { dataStorage.InsertUiBlindscanSettingHistory(settingsWindowBLScanTunerSelection, settingsWindowUseDifferentTunerForSetFilter, settingsWindowSetFilterTunerSelection, settingsWindowDiseqc, settingsWindowCollectIqGraphs, settingsWindowCollectRfSpectrum, settingsWindowCaptureFile, settingsWindowSatellite, settingsWindowLNB, settingsWindowDish, settingsWindowScanHorizontalLow, settingsWindowScanHorizontalHigh, settingsWindowScanVerticalLow, settingsWindowScanVerticalHigh); } public InheritedBlindscanConfigWindow(List tunerMetadatas, List satellitePositions, List lnbTypes, List dishTypes, DataStorage dataStorage, ObjectStorage objectStorage, IGpsReceiver gps, Ini ini, IStreamReader streamReader, TaskQueue taskQueue) { tuners = tunerMetadatas; satellites = satellitePositions; lnbs = lnbTypes; dishes = dishTypes; windowOpen = true; settingsWindowDiseqc = 1; this.dataStorage = dataStorage; this.objectStorage = objectStorage; this.gpsReceiver = gps; this.ini = ini; this.streamReader = streamReader; _taskQueue = taskQueue; object[] previousSettings = dataStorage.GetLastUiBlindscanSettings(); if (previousSettings != null) { settingsWindowBLScanTunerSelection = (int)previousSettings[1]; settingsWindowUseDifferentTunerForSetFilter = (bool)previousSettings[2]; settingsWindowSetFilterTunerSelection = (int)previousSettings[3]; settingsWindowDiseqc = (int)previousSettings[4]; settingsWindowCollectIqGraphs = (bool)previousSettings[5]; settingsWindowCollectRfSpectrum = (bool)previousSettings[6]; settingsWindowCaptureFile = (bool)previousSettings[7]; settingsWindowSatellite = (int)previousSettings[8]; settingsWindowLNB = (int)previousSettings[9]; settingsWindowDish = (int)previousSettings[10]; settingsWindowScanHorizontalLow = (bool)previousSettings[11]; settingsWindowScanHorizontalHigh = (bool)previousSettings[12]; settingsWindowScanVerticalLow = (bool)previousSettings[13]; settingsWindowScanVerticalHigh = (bool)previousSettings[14]; } } public bool IsWindowOpen() { return windowOpen; } public BlindscanJobConfiguration GetConfiguration() { if (!okButtonClicked) return null; BlindscanJobConfiguration bjc = new BlindscanJobConfiguration(); bjc.DataStorage = dataStorage; bjc.DiseqcIndex = settingsWindowDiseqc; bjc.DoHorizontalLow = settingsWindowScanHorizontalLow; bjc.DoHorizontalHigh = settingsWindowScanHorizontalHigh; bjc.DoVerticalLow = settingsWindowScanVerticalLow; bjc.DoVerticalHigh = settingsWindowScanHorizontalHigh; bjc.DoCollectIqGraphs = settingsWindowCollectIqGraphs; bjc.DoCollectRfSpectrum = settingsWindowCollectRfSpectrum; bjc.DoRecordTs = settingsWindowCaptureFile; bjc.Gps = gpsReceiver; bjc.Ini = ini; bjc.LnbType = lnbs[settingsWindowLNB]; bjc.ObjectStorage = objectStorage; bjc.SatellitePosition = satellites[settingsWindowSatellite]; if (settingsWindowUseDifferentTunerForSetFilter) bjc.StreamReader = new CoopBlindscanStreamReader(streamReader, settingsWindowBLScanTunerSelection, settingsWindowSetFilterTunerSelection); else bjc.StreamReader = streamReader; bjc.TunerMetadata = tuners[settingsWindowBLScanTunerSelection]; bjc.Ui = new InheritedBlindscanUiJunction(); bjc.Ui.Tasks = _taskQueue; return bjc; } private bool okButtonClicked; public void Render() { if (ImGui.Begin("Blindscan", ref windowOpen, ImGuiWindowFlags.AlwaysAutoResize)) { ImGui.PushID("tunerA"); if (ImGui.BeginCombo("Tuner for BLScanEx and RFScan", tuners[settingsWindowBLScanTunerSelection].Name)) { for (int i = 0; i < tuners.Count; i++) { bool isSelected = settingsWindowBLScanTunerSelection == i; if (ImGui.Selectable(tuners[i].Name, isSelected)) { settingsWindowBLScanTunerSelection = i; } } ImGui.EndCombo(); } ImGui.PopID(); if (tuners[settingsWindowBLScanTunerSelection].IsSatellite()) { ImGui.Checkbox("Use different Tuner for IQScan and SetFilter", ref settingsWindowUseDifferentTunerForSetFilter); if (settingsWindowUseDifferentTunerForSetFilter) { ImGui.Text("This assumes that both tuners are connected to the same antenna set-up, using e.g. a splitter."); ImGui.PushID("tunerB"); if (ImGui.BeginCombo("Tuner for BLScanEx and RFScan", tuners[settingsWindowSetFilterTunerSelection].Name)) { for (int i = 0; i < tuners.Count; i++) { bool isSelected = settingsWindowSetFilterTunerSelection == i; if (ImGui.Selectable(tuners[i].Name, isSelected)) { settingsWindowSetFilterTunerSelection = i; } } ImGui.EndCombo(); } ImGui.PopID(); } ImGui.Text("DiSEqC"); ImGui.SameLine(); ImGui.RadioButton("A", ref settingsWindowDiseqc, 1); ImGui.SameLine(); ImGui.RadioButton("B", ref settingsWindowDiseqc, 2); ImGui.SameLine(); ImGui.RadioButton("C", ref settingsWindowDiseqc, 3); ImGui.SameLine(); ImGui.RadioButton("D", ref settingsWindowDiseqc, 4); if (ImGui.BeginCombo("Target Satellite", satellites[settingsWindowSatellite].name)) { for (int i = 0; i < satellites.Count; i++) { bool isSelected = settingsWindowSatellite == i; if (ImGui.Selectable(satellites[i].name, isSelected)) { settingsWindowSatellite = i; } } ImGui.EndCombo(); } if (ImGui.BeginCombo("LNB", lnbs[settingsWindowLNB].Name)) { for (int i = 0; i < lnbs.Count; i++) { bool isSelected = settingsWindowLNB == i; if (ImGui.Selectable(lnbs[i].Name, isSelected)) { settingsWindowLNB = i; } } ImGui.EndCombo(); } if (ImGui.BeginCombo("Dish", dishes[settingsWindowDish].Name)) { for (int i = 0; i < dishes.Count; i++) { bool isSelected = settingsWindowDish == i; if (ImGui.Selectable(dishes[i].Name, isSelected)) { settingsWindowDish = i; } } ImGui.EndCombo(); } if (lnbs[settingsWindowLNB].LofSw != 0) { ImGui.Checkbox("Scan Horizontal Low Band", ref settingsWindowScanHorizontalLow); ImGui.Checkbox("Scan Horizontal High Band", ref settingsWindowScanHorizontalHigh); ImGui.Checkbox("Scan Vertical Low Band", ref settingsWindowScanVerticalLow); ImGui.Checkbox("Scan Vertical High Band", ref settingsWindowScanVerticalHigh); } else { ImGui.Checkbox("Scan Left circular Band", ref settingsWindowScanHorizontalLow); ImGui.Checkbox("Scan Right circular Band", ref settingsWindowScanVerticalLow); } } ImGui.Checkbox("Capture Packets to files", ref settingsWindowCaptureFile); ImGui.Checkbox("Collect IQ Graphs", ref settingsWindowCollectIqGraphs); ImGui.Checkbox("Collect RF Spectrum", ref settingsWindowCollectRfSpectrum); if (ImGui.Button("OK")) { windowOpen = false; okButtonClicked = true; StoreSettings(); } } } } }