/// <summary> /// Vrátí seřazený výpis všech InBitů načtených z XML. /// To se hodí jako přehled před přidáváním dalších Ovládání a vstupů do rozsáhlejších XML souborů. /// </summary> /// <returns></returns> public string VypisInBitu() { SortedList <int, string> vstupyView = new SortedList <int, string>(); foreach (Object obj in Ovladanis) //vstupy z kolekce ovládání { Ovladani ovl = (obj as Ovladani); if (ovl != null) { foreach (Senzor sens in ovl.Senzory1) { vstupyView.Add(sens.InBit, String.Format("({0} - ovládání {1} {2})", sens.Nazev, ovl.Nazev, ovl.Popis)); } foreach (Senzor sens in ovl.Senzory2) { vstupyView.Add(sens.InBit, String.Format("({0} - ovládání {1} {2})", sens.Nazev, ovl.Nazev, ovl.Popis)); } } } foreach (Input inp in Inputs) { vstupyView.Add(inp.InBit, String.Format("({0} {1})", inp.Nazev, inp.Popis)); } StringBuilder sb = new StringBuilder(); foreach (KeyValuePair <int, string> vstupView in vstupyView) { sb.AppendLine(String.Format("{0}: {1}", vstupView.Key, vstupView.Value)); } return(sb.ToString()); }
//Reakce na stisknutí buttonu výstupu levým tlačítkem myši private void Button2_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Ovladani ovladani = ((FrameworkElement)sender).DataContext as Ovladani; ovladani.vystup1.Value = false; ovladani.vystup2.Value = true; }
/// <summary> /// Vytvoření senzoru pro objekt Ovládání na základě načteného XML elementu /// </summary> /// <param name="element"></param> /// <param name="ovladani"></param> /// <param name="xmlFile"></param> private void vytvoreniSenzoru(XElement element, ref Ovladani ovladani, string xmlFile) { string errMessage = ""; try { errMessage = "Atribut \"InBit\" nebyl nalezen, nebo má špatnou hodnotu. "; //Kontrola přítomnosti všech povinných atributů v elementu XML souboru int inBit = int.Parse(element.Attribute("InBit").Value); errMessage = "Atribut \"Name\" nebyl nalezen. "; string name = element.Attribute("Name").Value; errMessage = "Nepodařili se vytvořit objekt \"senzor\""; Senzor senzor = new Senzor(inBit, name); //Vytvoření senzoru ovládání if (element.Name == "Senzor1") { ovladani.Senzory1.Add(senzor); } if (element.Name == "Senzor2") { ovladani.Senzory2.Add(senzor); } errMessage = "U seznoru \"" + name + "\" ovládání \"" + ovladani.Nazev + "\" byla nalezena duplicitní hodnota pořadového čísla vstupního bitu (Hodnoty \"inBit1\" musí mít v celém XML souboru jedinečnou hodnotu)"; senzory.Add(inBit, senzor); } catch (Exception ex) { throw new Exception("Při načítání textů ze souboru \"" + xmlFile + "\" nastala chyba. " + "\n" + errMessage + "\n" + ex.Message); } }
/// <summary> /// Vytvoření jednoho objektu Ovládání na základě načteného XML elementu /// </summary> /// <param name="OutoutElement"></param> private void vytvoreniOvladani(XElement element, ref Ovladani ovladani, string xmlFile) { string errMessage = ""; try { errMessage = "Atribut \"OutBit1\" nebyl nalezen, nebo má špatnou hodnotu. "; //Kontrola přítomnosti všech povinných atributů v elementu XML souboru int outBit1 = int.Parse(element.Attribute("OutBit1").Value); errMessage = "Atribut \"OutBit2\" nebyl nalezen, nebo má špatnou hodnotu. "; int outBit2 = int.Parse(element.Attribute("OutBit2").Value); errMessage = "Atribut \"Text1\" nebyl nalezen. "; string text1 = element.Attribute("Text1").Value; errMessage = "Atribut \"Text2\" nebyl nalezen. "; string text2 = element.Attribute("Text2").Value; errMessage = "Atribut \"Name\" nebyl nalezen. "; string name = element.Attribute("Name").Value; errMessage = "Atribut \"Popis\" nebyl nalezen. "; string popis = element.Attribute("Popis").Value; errMessage = "Nepodařili se vytvořit objekt \"ovladani\""; ovladani = new Ovladani(outBit1, outBit2, text1, text2, name, popis); //Vytvoření ovládání errMessage = "U ovládání \"" + name + "\" byla nalezena duplicitní hodnota pořadového čísla výstupního bitu (Hodnoty \"outBit1\" společně s \"outBit2\" musí mít v celém XML souboru jedinečnou hodnotu)"; vystupy.Add(outBit1, ovladani.vystup1); vystupy.Add(outBit2, ovladani.vystup2); ovladanis.Add(ovladani); } catch (Exception ex) { throw new Exception("Při načítání textů ze souboru \"" + xmlFile + "\" nastala chyba. " + "\n" + errMessage + "\n" + ex.Message); } }
/// <summary> /// Načtení "Ovladani" z XML souboru /// </summary> /// <param name="xmlFile"></param> private void nacistOvladani(string xmlFile) { Ovladani ovladani = null; XDocument xmlXDoc; try { xmlXDoc = XDocument.Load(xmlFile); } catch (Exception ex) { throw new Exception("Chyba při načítání textů ze souboru \"" + xmlFile + ". " + ex.Message); } var query = from c in xmlXDoc.Elements("Data").Descendants() select c; foreach (XElement element in query) { if (element.Name == "Ovladani") { vytvoreniOvladani(element, ref ovladani, xmlFile); } if (element.Name == "Senzor1" | element.Name == "Senzor2") { vytvoreniSenzoru(element, ref ovladani, xmlFile); } if (element.Name == "Separator") { vytvoreniSeparatoru(element, xmlFile); } } }
//Reakce na kliknutí na 2. button private void Button2_Click(object sender, RoutedEventArgs e) { Ovladani ovladani = ((FrameworkElement)sender).DataContext as Ovladani; ovladani.vystup1.Value = false; ovladani.vystup2.Value = true; ovladani.UvolnitVystupy(); }
/// <summary> /// Ovládání šipkami klávesnice /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Ovladani_PreviewKeyDown(object sender, KeyEventArgs e) { Object item = ((FrameworkElement)sender).DataContext as Object; if (item is Ovladani) { Ovladani ovladani = ((FrameworkElement)sender).DataContext as Ovladani; if (e.Key == Key.Left) { ovladani.vystup1.Value = true; ovladani.vystup2.Value = false; ovladani.UvolnitVystupy(); } if (e.Key == Key.Right) { ovladani.vystup1.Value = false; ovladani.vystup2.Value = true; ovladani.UvolnitVystupy(); } } }
/// <summary> /// Vrátí seřazený výpis všech OutBitů načtených z XML. /// To se hodí jako přehled před přidáváním dalších Ovládání do rozsáhlejších XML souborů. /// </summary> /// <returns></returns> public string VypisOutBitu() { SortedList <int, string> vystupyView = new SortedList <int, string>(); foreach (Object obj in Ovladanis) { Ovladani ovl = (obj as Ovladani); if (ovl != null) { vystupyView.Add(ovl.vystup1.OutBit, String.Format("({0} {1} {2})", ovl.Text1, ovl.Nazev, ovl.Popis)); vystupyView.Add(ovl.vystup2.OutBit, String.Format("({0} {1} {2})", ovl.Text2, ovl.Nazev, ovl.Popis)); } } StringBuilder sb = new StringBuilder(); foreach (KeyValuePair <int, string> vystupView in vystupyView) { sb.AppendLine(String.Format("{0}: {1}", vystupView.Key, vystupView.Value)); } return(sb.ToString()); }
//Reakce na uvolnění buttonu výstupu levým tlačítkem myši private void Button_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { Ovladani ovladani = ((FrameworkElement)sender).DataContext as Ovladani; ovladani.UvolnitVystupy(); }