//loads a route private static Route LoadRoute(XmlElement routeNode, Airline airline, Route.RouteType routetype = Route.RouteType.Passenger) { string id = routeNode.Attributes["id"].Value; Airport dest1 = Airports.GetAirport(routeNode.Attributes["destination1"].Value); Airport dest2 = Airports.GetAirport(routeNode.Attributes["destination2"].Value); Boolean isBanned = Convert.ToBoolean(routeNode.Attributes["isbanned"].Value); if (routeNode.HasAttribute("type")) routetype = (Route.RouteType)Enum.Parse(typeof(Route.RouteType), routeNode.Attributes["type"].Value); Route route; if (routetype == Route.RouteType.Passenger || routetype == Route.RouteType.Mixed) route = new PassengerRoute(id, dest1, dest2, DateTime.Now,0); else route = new CargoRoute(id, dest1, dest2, DateTime.Now,0); route.Banned = isBanned; /* foreach (StopoverRoute stopover in route.Stopovers) { XmlElement routeStopoverNode = xmlDoc.CreateElement("stopover"); routeStopoverNode.SetAttribute("airport", stopover.Stopover.Profile.ID); XmlElement stopoverLegsNode = xmlDoc.CreateElement("legs"); foreach (Route leg in stopover.Legs) { XmlElement stopoverLegNode = xmlDoc.CreateElement("leg"); stopoverLegNode.AppendChild(SaveRoute(xmlDoc, leg)); stopoverLegsNode.AppendChild(stopoverLegNode); } routeStopoverNode.AppendChild(stopoverLegsNode); routeStopoversNode.AppendChild(routeStopoverNode);*/ XmlNodeList routeStopoverList = routeNode.SelectNodes("stopovers/stopover"); foreach (XmlElement routeStopoverNode in routeStopoverList) { Airport stopoverAirport = Airports.GetAirportFromID(routeStopoverNode.Attributes["airport"].Value); StopoverRoute stopoverRoute = new StopoverRoute(stopoverAirport); XmlNodeList legsList = routeStopoverNode.SelectNodes("legs/leg"); foreach (XmlElement legNode in legsList) { stopoverRoute.addLeg(LoadRoute((XmlElement)legNode.SelectSingleNode("route"), airline, routetype)); } route.addStopover(stopoverRoute); } if (routetype == Route.RouteType.Passenger || routetype == Route.RouteType.Mixed) { ((PassengerRoute)route).Classes.Clear(); XmlNodeList routeClassList = routeNode.SelectNodes("routeclasses/routeclass"); foreach (XmlElement routeClassNode in routeClassList) { AirlinerClass.ClassType airlinerClassType = (AirlinerClass.ClassType)Enum.Parse(typeof(AirlinerClass.ClassType), routeClassNode.Attributes["type"].Value); double fareprice = Convert.ToDouble(routeClassNode.Attributes["fareprice"].Value,new CultureInfo("de-DE", false)); RouteAirlinerClass.SeatingType seatingType = (RouteAirlinerClass.SeatingType)Enum.Parse(typeof(RouteAirlinerClass.SeatingType), routeClassNode.Attributes["seating"].Value); RouteAirlinerClass rClass = new RouteAirlinerClass(airlinerClassType, RouteAirlinerClass.SeatingType.Reserved_Seating, fareprice); rClass.Seating = seatingType; foreach (RouteFacility.FacilityType ftype in Enum.GetValues(typeof(RouteFacility.FacilityType))) { if (routeClassNode.HasAttribute(ftype.ToString())) { RouteFacility facility = RouteFacilities.GetFacility(routeClassNode.Attributes[ftype.ToString()].Value); rClass.addFacility(facility); } } ((PassengerRoute)route).addRouteAirlinerClass(rClass); } } if (routetype == Route.RouteType.Mixed || routetype == Route.RouteType.Cargo) { XmlElement routeCargoNode = (XmlElement)routeNode.SelectSingleNode("cargo"); double unitPrice = Convert.ToDouble(routeCargoNode.Attributes["priceperunit"].Value,new CultureInfo("de-DE", false)); ((CargoRoute)route).PricePerUnit = unitPrice; } RouteTimeTable timeTable = new RouteTimeTable(route); XmlNodeList timetableList = routeNode.SelectNodes("timetable/timetableentry"); foreach (XmlElement entryNode in timetableList) { Airport entryDest = Airports.GetAirport(entryNode.Attributes["destination"].Value); string flightCode = entryNode.Attributes["flightcode"].Value; DayOfWeek day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), entryNode.Attributes["day"].Value); TimeSpan time = TimeSpan.Parse(entryNode.Attributes["time"].Value); FleetAirliner airliner = entryNode.Attributes["airliner"].Value == "-" ? null : airline.Fleet.Find(a => a.Airliner.ID == entryNode.Attributes["airliner"].Value); ; RouteTimeTableEntry entry = new RouteTimeTableEntry(timeTable, day, time, new RouteEntryDestination(entryDest, flightCode,null),null); if (entryNode.HasAttribute("id")) entry.ID = entryNode.Attributes["id"].Value; if (entryNode.HasAttribute("mainentry")) entry.MainEntry = airline.Routes.SelectMany(r => r.TimeTable.Entries).ToList().Find(e => e.ID == entryNode.Attributes["mainentry"].Value); entry.Airliner = airliner; if (airliner != null && !airliner.Routes.Contains(route)) airliner.Routes.Add(route); timeTable.addEntry(entry); } route.TimeTable = timeTable; XmlNodeList routeInvoiceList = routeNode.SelectNodes("invoices/invoice"); foreach (XmlElement routeInvoiceNode in routeInvoiceList) { Invoice.InvoiceType type = (Invoice.InvoiceType)Enum.Parse(typeof(Invoice.InvoiceType), routeInvoiceNode.Attributes["type"].Value); int invoiceYear = Convert.ToInt16(routeInvoiceNode.Attributes["year"].Value); int invoiceMonth = Convert.ToInt16(routeInvoiceNode.Attributes["month"].Value); double invoiceAmount = Convert.ToDouble(routeInvoiceNode.Attributes["amount"].Value, new CultureInfo("de-DE", false)); route.setRouteInvoice(type, invoiceYear, invoiceMonth, invoiceAmount); } return route; }
//creates the panel for a new route private void createRoutePanel() { panelRouteInfo.Children.Clear(); ListBox lbRouteInfo = new ListBox(); lbRouteInfo.ItemContainerStyleSelector = new ListBoxItemStyleSelector(); lbRouteInfo.SetResourceReference(ListBox.ItemTemplateProperty, "QuickInfoItem"); panelRouteInfo.Children.Add(lbRouteInfo); WrapPanel panelDestination1 = new WrapPanel(); cbDestination1 = createDestinationComboBox(); panelDestination1.Children.Add(cbDestination1); txtDestination1Gates = new TextBlock(); txtDestination1Gates.Margin = new Thickness(5, 0, 0, 0); txtDestination1Gates.VerticalAlignment = System.Windows.VerticalAlignment.Bottom; panelDestination1.Children.Add(txtDestination1Gates); lbRouteInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PanelNewRoute", "202"), panelDestination1)); WrapPanel panelDestination2 = new WrapPanel(); cbDestination2 = createDestinationComboBox(); panelDestination2.Children.Add(cbDestination2); txtDestination2Gates = new TextBlock(); txtDestination2Gates.Margin = new Thickness(5, 0, 0, 0); txtDestination2Gates.VerticalAlignment = System.Windows.VerticalAlignment.Bottom; panelDestination2.Children.Add(txtDestination2Gates); lbRouteInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PanelNewRoute", "203"), panelDestination2)); ucStopover1 = new ucStopover(); ucStopover1.ValueChanged += ucStopover_OnValueChanged; lbRouteInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PanelNewRoute", "1003"), ucStopover1)); ucStopover2 = new ucStopover(); ucStopover2.ValueChanged += ucStopover_OnValueChanged; lbRouteInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PanelNewRoute", "1003"), ucStopover2)); txtRoute = UICreator.CreateTextBlock(""); lbRouteInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PanelNewRoute", "1004"), txtRoute)); txtDistance = UICreator.CreateTextBlock("-"); lbRouteInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PanelNewRoute", "204"), txtDistance)); lbRouteInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PanelNewRoute", "205"), UICreator.CreateTextBlock(string.Format("{0:0} {1}", new NumberToUnitConverter().Convert(this.MaxDistance), new StringToLanguageConverter().Convert("km."))))); if (this.RouteType == Route.RouteType.Mixed || this.RouteType == Route.RouteType.Passenger) { this.Classes.Clear(); foreach (AirlinerClass.ClassType type in Enum.GetValues(typeof(AirlinerClass.ClassType))) { RouteAirlinerClass rClass = new RouteAirlinerClass(type, RouteAirlinerClass.SeatingType.Reserved_Seating, 1); foreach (RouteFacility.FacilityType ftype in Enum.GetValues(typeof(RouteFacility.FacilityType))) { if (GameObject.GetInstance().GameTime.Year >= (int)ftype) rClass.addFacility(RouteFacilities.GetBasicFacility(ftype)); } this.Classes.Add(type, rClass); WrapPanel panelClassButtons = new WrapPanel(); Button btnEdit = new Button(); btnEdit.Background = Brushes.Transparent; btnEdit.Tag = type; btnEdit.Click += new RoutedEventHandler(btnEdit_Click); Image imgEdit = new Image(); imgEdit.Width = 16; imgEdit.Source = new BitmapImage(new Uri(@"/Data/images/edit.png", UriKind.RelativeOrAbsolute)); RenderOptions.SetBitmapScalingMode(imgEdit, BitmapScalingMode.HighQuality); btnEdit.Content = imgEdit; panelClassButtons.Children.Add(btnEdit); Image imgInfo = new Image(); imgInfo.Width = 16; imgInfo.Source = new BitmapImage(new Uri(@"/Data/images/info.png", UriKind.RelativeOrAbsolute)); imgInfo.Margin = new Thickness(5, 0, 0, 0); imgInfo.VerticalAlignment = System.Windows.VerticalAlignment.Bottom; RenderOptions.SetBitmapScalingMode(imgInfo, BitmapScalingMode.HighQuality); Border brdToolTip = new Border(); brdToolTip.Margin = new Thickness(-4, 0, -4, -3); brdToolTip.Padding = new Thickness(5); brdToolTip.SetResourceReference(Border.BackgroundProperty, "HeaderBackgroundBrush2"); ContentControl lblClass = new ContentControl(); lblClass.SetResourceReference(ContentControl.ContentTemplateProperty, "RouteAirlinerClassItem"); lblClass.Content = rClass; brdToolTip.Child = lblClass; imgInfo.ToolTip = brdToolTip; panelClassButtons.Children.Add(imgInfo); lbRouteInfo.Items.Add(new QuickInfoValue(new TextUnderscoreConverter().Convert(type, null, null, null).ToString(), panelClassButtons)); } } if (this.RouteType == Route.RouteType.Mixed || this.RouteType == Route.RouteType.Cargo) { WrapPanel panelCargo = new WrapPanel(); txtCargo = UICreator.CreateTextBlock(new ValueCurrencyConverter().Convert(this.CargoPrice).ToString()); txtCargo.VerticalAlignment = System.Windows.VerticalAlignment.Bottom; panelCargo.Children.Add(txtCargo); Button btnEditCargo = new Button(); btnEditCargo.Margin = new Thickness(5, 0, 0, 0); btnEditCargo.Background = Brushes.Transparent; btnEditCargo.Click += new RoutedEventHandler(btnEditCargo_Click); Image imgEdit = new Image(); imgEdit.Width = 16; imgEdit.Source = new BitmapImage(new Uri(@"/Data/images/edit.png", UriKind.RelativeOrAbsolute)); RenderOptions.SetBitmapScalingMode(imgEdit, BitmapScalingMode.HighQuality); btnEditCargo.Content = imgEdit; panelCargo.Children.Add(btnEditCargo); lbRouteInfo.Items.Add(new QuickInfoValue(Translator.GetInstance().GetString("PanelNewRoute", "1007"), panelCargo)); } txtInvalidRoute = UICreator.CreateTextBlock(Translator.GetInstance().GetString("PanelNewRoute", "1001")); txtInvalidRoute.Foreground = Brushes.DarkRed; txtInvalidRoute.Visibility = System.Windows.Visibility.Collapsed; panelRouteInfo.Children.Add(txtInvalidRoute); WrapPanel panelButtons = new WrapPanel(); panelButtons.Margin = new Thickness(0, 5, 0, 0); panelRouteInfo.Children.Add(panelButtons); btnSave = new Button(); btnSave.SetResourceReference(Button.StyleProperty, "RoundedButton"); btnSave.Height = Double.NaN; btnSave.Width = Double.NaN; btnSave.Content = Translator.GetInstance().GetString("General", "113"); btnSave.SetResourceReference(Button.BackgroundProperty, "ButtonBrush"); btnSave.Click += new RoutedEventHandler(btnSave_Click); btnSave.IsEnabled = false; panelButtons.Children.Add(btnSave); btnLoad = new Button(); btnLoad.SetResourceReference(Button.StyleProperty, "RoundedButton"); btnLoad.Height = Double.NaN; btnLoad.Width = Double.NaN; btnLoad.Content = Translator.GetInstance().GetString("General", "115"); btnLoad.SetResourceReference(Button.BackgroundProperty, "ButtonBrush"); btnLoad.IsEnabled = false; btnLoad.Click += new RoutedEventHandler(btnLoad_Click); btnLoad.Margin = new Thickness(5, 0, 0, 0); btnLoad.Visibility = this.RouteType == Route.RouteType.Cargo ? Visibility.Collapsed : Visibility.Visible; panelButtons.Children.Add(btnLoad); }