using Database; using KlassenBIB; using SanSystem.Einstellungen; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace SanSystem { /// /// /// public partial class frmStrassenList : Form { StreetListSettings streetListSetting = new StreetListSettings(); string aktuallStreetName = string.Empty; /// /// /// public frmStrassenList() { InitializeComponent(); } bool mehrereOrteAktiv() { return Datenbank.Instance.loadedProjekt.Objekte.Select(x => x.OrtName).Distinct().Count() > 1; } private void buildStreetList() { trv_street.Nodes.Clear(); if (Datenbank.Instance.loadedProjekt == null) return; rdbtn_ort.Enabled = mehrereOrteAktiv(); if (!mehrereOrteAktiv()) rdbtn_street.Checked = true; if (rdbtn_street.Checked) buildUnsortedStreetList(); if (rdbtn_ort.Checked) buildSortedSteetList(); } private void buildSortedSteetList() { List ortteile = Datenbank.Instance.loadedProjekt.Objekte.Select(x => x.OrtName).Distinct().ToList(); int aktuellOpened = -1; bool aktuelleStrasse = false; foreach (string ort in ortteile) { List strassen = Datenbank.Instance.loadedProjekt.Objekte.Where(y => y.OrtName != null && y.OrtName.Equals(ort)).Select(x => x.StrasseName).Distinct().ToList(); TreeNode[] streetnodes = new TreeNode[strassen.Count]; for(int i = 0; i < strassen.Count; i++) { streetnodes[i] = new TreeNode(); Tuple x = getStatikFromStreet(strassen[i]); streetnodes[i].Text = string.Format("{0} ({1} / {2})", strassen[i], x.Item1, x.Item2); if (strassen[i].Equals(aktuallStreetName)) aktuelleStrasse = true; streetnodes[i].Tag = strassen[i]; } TreeNode node = new TreeNode(ort, streetnodes); int looper = trv_street.Nodes.Add(node); if(aktuelleStrasse) { aktuelleStrasse = false; aktuellOpened = looper; } } if(aktuellOpened != -1) { trv_street.Nodes[aktuellOpened].ExpandAll(); } } private Tuple getStatikFromStreet(string strassename) { IEnumerable objekte = Datenbank.Instance.loadedProjekt.Objekte.Where(x => x.StrasseName.Equals(strassename)); int counter = 0; foreach (var objekt in objekte) { bool fertig = false; foreach (var x in objekt.Sanierung) { AbstractSanieren abstractSanieren = (AbstractSanieren)x; if (abstractSanieren.Fertig == true) { fertig = true; } else { fertig = false; break; } } if (fertig) { counter++; } } return new Tuple(objekte.Count(), counter); } private void buildUnsortedStreetList() { List strassen = Datenbank.Instance.loadedProjekt.Objekte.Select(x => x.StrasseName).Distinct().ToList(); List streets = new List(); foreach (string strassename in strassen) { string streetname = string.Empty; Tuple x = getStatikFromStreet(strassename); trv_street.Nodes.Add(new TreeNode() { Text = string.Format("{0} ({1} / {2})", strassename, x.Item1, x.Item2), Tag = strassename }); } } private void frmStrassenList_Load(object sender, EventArgs e) { this.Height = this.MdiParent.Height - 120; if(streetListSetting.SortedSelected()) { rdbtn_street.Checked = false; rdbtn_ort.Checked = true; } else { rdbtn_street.Checked = true; rdbtn_ort.Checked = false; } buildStreetList(); btn_add.Text = Global.Instance.language.Labels["add_objekt"]; } private void btn_add_Click(object sender, EventArgs e) { KlassenBIB.Inspektionsobjekt inspektionsobjekt = new KlassenBIB.Inspektionsobjekt(); inspektionsobjekt.Projektnummer = Global.Instance.ProjektNummer; Datenbank.Instance.loadedProjekt.Objekte.Add(inspektionsobjekt); frmObjektEdit frmObjektEdit = new frmObjektEdit(inspektionsobjekt,true); frmObjektEdit.MdiParent = this.MdiParent; frmObjektEdit.FormClosed += FrmObjekt_FormClosed; frmObjektEdit.Show(); } private void FrmObjekt_FormClosed(object sender, FormClosedEventArgs e) { buildStreetList(); } private void trv_street_DoubleClick(object sender, EventArgs e) { if ((sender as TreeView).SelectedNode == null) return; string selectedStreetName = (string)(sender as TreeView).SelectedNode.Tag; if (selectedStreetName == null || selectedStreetName.Equals("")) return; aktuallStreetName = selectedStreetName; frmObjekteList frmObjekteList = new frmObjekteList(selectedStreetName); frmObjekteList.MdiParent = this.MdiParent; frmObjekteList.FormClosed += FrmObjekt_FormClosed; frmObjekteList.Show(); } private void rdbtn_street_CheckedChanged(object sender, EventArgs e) { if (rdbtn_ort.Checked) { streetListSetting.SetRadioButton("Sorted"); } else if (rdbtn_street.Checked) { streetListSetting.SetRadioButton("Unsorted"); } buildStreetList(); } private void frmStrassenList_FormClosing(object sender, FormClosingEventArgs e) { streetListSetting.SaveSettings(); } } }