public void RoastProfileSelChanged() { // if changed manually in picker (this function is also called, if we programmatically change RoastProfileSel)m // we want to remove formerly selected special (id >= 100) entry, so it connot be choosen manually in the picker again if (RoastProfileSel.isManualChoiceAllowed || // manually template choosen or (RoastProfileSel.Id != lastSelectedRoastProfile.Id)) // programmatically other special entry choosen { if ((lastSelectedRoastProfile?.Id > 100) || (lastSelectedRoastProfile?.Id == 0)) { RoastProfiles.Remove(lastSelectedRoastProfile); OnPropertyChanged(nameof(RoastProfiles)); } } if (!string.IsNullOrEmpty(RoastProfileSel.Data)) { // if (manually) template choosen -> load template byte[] mem = new byte[80]; int index = 16; string line = RoastProfileSel.Data; if (string.IsNullOrEmpty(line)) { return; } try { int j = 0; while ((j < line.Length) && (index < 80)) { if ((line[j] == ' ') || (line[j] == '\t')) { j++; continue; } mem[index++] = byte.Parse(line.Substring(j, 2), NumberStyles.HexNumber); j += 2; } } catch { Console.WriteLine("Error: unknown line format: {0}", line); } nPause = PauseDuration.GetSliderTicks(256 * mem[48] + mem[49]); SetControlsVisibility(mem[41], false); DataBag.SetData(mem); MessagingCenter.Send(this, "DataChanged", DataBag.GetData()); } lastSelectedRoastProfile = RoastProfileSel; }
public void SetControlsVisibility(byte Type, bool externalData = true) { RoastProfile r; switch (Type) { case 1: r = new RoastProfile() { Id = 101, Name = "(RGB from NFC or File)", Data = "", isManualChoiceAllowed = false }; nPauseEnabled = true; cbMultiUseEnabled = true; break; case 2: r = new RoastProfile() { Id = 102, Name = "(Roast from NFC or File)", Data = "", isManualChoiceAllowed = false }; nPauseEnabled = false; cbMultiUseEnabled = true; break; case 4: r = new RoastProfile() { Id = 104, Name = "(Grind from NFC or File)", Data = "", isManualChoiceAllowed = false }; nPauseEnabled = false; cbMultiUseEnabled = true; break; case 5: r = new RoastProfile() { Id = 103, Name = "(Grind/Brew from NFC or File)", Data = "", isManualChoiceAllowed = false }; nPauseEnabled = false; cbMultiUseEnabled = true; break; case 6: r = new RoastProfile() { Id = 105, Name = "(Brew from NFC or File)", Data = "", isManualChoiceAllowed = false }; nPauseEnabled = false; cbMultiUseEnabled = true; break; case 0x0f: r = new RoastProfile() { Id = 99, Name = "Reset air filter counter", Data = "AA96644B 05AA9641 3278AAAC 5F5005AA B6414696 376E5A2D 230F0F00 06018D7C 0000", isManualChoiceAllowed = true }; nPauseEnabled = false; cbMultiUseEnabled = true; break; case 0x12: r = new RoastProfile() { Id = 98, Name = "Clean grinder", Data = "AAB44B4B00 AAB432464E AAB44B5A99 AAB4324666 3C465A2D 32 12 1E 000501 8D5E 0005", isManualChoiceAllowed = true }; nPauseEnabled = false; cbMultiUseEnabled = true; break; case 0x13: r = new RoastProfile() { Id = 97, Name = "Descale brewsystem", Data = "AAB44B4B05 AAB44B465F AAB24B5005 AAB24B4687 37465A2D 23 13 2D 000601 7F56 0007", isManualChoiceAllowed = true }; nPauseEnabled = false; cbMultiUseEnabled = true; break; // RoastProfiles.Add(new RoastProfile() { Id = 101, Name = "(RGB from NFC or File)", Data = "", isManualChoiceAllowed = true}); // RoastProfiles.Add(new RoastProfile() { Id = 102, Name = "(Roast from NFC or File)", Data = "", isManualChoiceAllowed = true}); // RoastProfiles.Add(new RoastProfile() { Id = 103, Name = "(Grind/Brew from NFC or File)", Data = "", isManualChoiceAllowed = false}); // RoastProfiles.Add(new RoastProfile() { Id = 104, Name = "(Grind from NFC or File)", Data = "", isManualChoiceAllowed = false}); // RoastProfiles.Add(new RoastProfile() { Id = 105, Name = "(Brew from NFC or File)", Data = "", isManualChoiceAllowed = false}); default: r = new RoastProfile() { Id = 92, Name = "(unknown)", Data = "", isManualChoiceAllowed = false }; nPauseEnabled = false; cbMultiUseEnabled = true; break; } if (externalData) { if (RoastProfiles.Where(p => p.Id == r.Id).FirstOrDefault() == null) { RoastProfiles.Add(r); } // workaround for throwing OutOfRangeException in OnRoastProfileSelChanged on ios if ((lastSelectedRoastProfile?.Id > 100) || (lastSelectedRoastProfile?.Id == 0)) { RoastProfiles.Remove(lastSelectedRoastProfile); } RoastProfileSel = RoastProfiles.Where(p => p.Id == r.Id).First(); } }