/// <exception cref="Exception"></exception>
        private void FindRoutePrivate()
        {
            var orig = origProvider.Icao;
            var dest = destProvider.Icao;

            EnsureAirportExists(orig);
            EnsureAirportExists(dest);

            var sid  = origProvider.GetSelectedProcedures().ToList();
            var star = destProvider.GetSelectedProcedures().ToList();

            var finder = new RouteFinderFacade(
                airwayNetwork.WptList,
                airwayNetwork.AirportList,
                AppOptions.NavDataLocation,
                checkedCodesLocator.Instance,
                windCalcGetter());

            Route = new RouteGroup(
                finder.FindRoute(
                    orig, origProvider.Rwy, sid,
                    dest, destProvider.Rwy, star),
                airwayNetwork.TracksInUse);

            view.ShowRouteTxt(Route, AppOptions);
        }
예제 #2
0
        public static Route BestRoute(RouteGroup selectedRouteGroup)
        {
            var recentEntry = CommonComponent.Current.UB.History.GetRecentRoute(selectedRouteGroup);

            if (recentEntry != null)
            {
                return(recentEntry.Route);
            }
            else
            {
                var route = CommonComponent.Current.UB.History.TimetableEntries
                            .Where(h => h.Route.RouteGroup == selectedRouteGroup)
                            .GroupBy(x => x.Route)
                            .Select(x => new { Route = x.Key, Rating1 = x.Min(y => HistoryHelpers.DayPartDistance(y)), Rating2 = x.Sum(y => y.CurrentCount) })
                            .OrderByDescending(x => x.Rating2).OrderBy(x => x.Rating1)
                            .FirstOrDefault();
                if (route != null && route.Rating2 > RouteHistoryCountLimit)
                {
                    return(route.Route);
                }
                else
                {
                    return(selectedRouteGroup.Routes.First());
                }
            }
        }
        public void AnalyzeRoute()
        {
            try
            {
                var orig = origProvider.Icao;
                var dest = destProvider.Icao;

                EnsureAirportExists(orig);
                EnsureAirportExists(dest);

                var input = view.Route.ToUpper();

                var result = RouteAnalyzerFacade.AnalyzeWithCommands(
                    input,
                    orig,
                    origProvider.Rwy,
                    dest,
                    destProvider.Rwy,
                    AppOptions.NavDataLocation,
                    airwayNetwork.AirportList,
                    airwayNetwork.WptList);

                Route = new RouteGroup(result, airwayNetwork.TracksInUse);
                view.ShowRouteTxt(Route, AppOptions);
                view.RouteIsValid = true;
            }
            catch (Exception ex)
            {
                view.ShowMessage(ex.Message, MessageLevel.Warning);
            }
        }
예제 #4
0
        public ActionResult Create(RouteGroup group, HttpPostedFileBase iconFile)
        {
            var  json      = new JsonResult();
            User loginUser = null;

            try
            {
                string iconFileName = "";
                if (iconFile != null)
                {
                    iconFileName = SaveIcon(iconFile);
                }
                using (var ctx = new GlsunViewEntities())
                {
                    loginUser = (from u in ctx.User
                                 where u.ULoginName == HttpContext.User.Identity.Name
                                 select u).FirstOrDefault();
                    group.CreatorID    = loginUser.ID;
                    group.CreationTime = DateTime.Now;
                    //图标没值
                    if (string.IsNullOrWhiteSpace(group.RGIcon))
                    {
                        group.RGIcon = iconFileName;
                    }
                    ctx.RouteGroup.Add(group);
                    ctx.SaveChanges();
                }
                json.Data = new { Code = "", Data = "", Message = "保存成功" };
            }
            catch (Exception ex)
            {
                json.Data = new { Code = "Exception", Data = "", Message = ex.Message };
            }
            return(json);
        }
        public static void ExportRouteFiles(
            IMessageDisplay view,
            RouteGroup Route,
            IEnumerable <ExportCommand> cmds,
            AirportManager airportList)
        {
            if (Route == null)
            {
                view.ShowMessage("Please find or analyze a route first.", MessageLevel.Info);
                return;
            }

            var writer = new FileExporter(Route.Expanded, airportList, cmds);
            IEnumerable <FileExporter.Status> reports = null;

            try
            {
                reports = writer.Export();
            }
            catch (Exception ex)
            {
                view.ShowMessage(ex.Message, MessageLevel.Warning);
                return;
            }

            ShowReports(view, reports.ToList());
        }
예제 #6
0
        public static void ExportRouteFiles(
            IMessageDisplay view,
            RouteGroup Route,
            IEnumerable <ExportCommand> cmds,
            MultiMap <string, Navaid> Navaids,
            AirportManager airportList,
            ExportMenu menu)
        {
            if (Route == null)
            {
                view.ShowMessage("Please find or analyze a route first.", MessageLevel.Info);
                return;
            }

            using (var frm = GetForm(new Size(1, 1)))
            {
                menu.Location    = new Point(0, 0);
                menu.Route       = Route;
                menu.Navaids     = Navaids;
                menu.AirportList = airportList;

                frm.AutoSizeMode    = AutoSizeMode.GrowAndShrink;
                frm.AutoSize        = true;
                frm.FormBorderStyle = FormBorderStyle.FixedToolWindow;
                frm.Controls.Add(menu);
                frm.ShowDialog();
                frm.Controls.Remove(menu);
            }
        }
예제 #7
0
        // Can throw exceptions.
        private void FindRoute()
        {
            var orig = origController.Icao;
            var dest = destController.Icao;

            if (AirportList[orig] == null)
            {
                throw new ArgumentException("Cannot find origin airport in Nav Data.");
            }

            if (AirportList[dest] == null)
            {
                throw new ArgumentException("Cannot find destination airport in Nav Data.");
            }

            var sid  = origController.GetSelectedProcedures();
            var star = destController.GetSelectedProcedures();

            var finder = new RouteFinderFacade(
                airwayNetwork.WptList,
                airwayNetwork.AirportList,
                AppSettings.NavDataLocation,
                checkedCodesLocator.Instance,
                windCalcGetter());

            Route = new RouteGroup(
                finder.FindRoute(
                    orig, origController.Rwy, sid,
                    dest, destController.Rwy, star),
                airwayNetwork.TracksInUse);

            ShowRouteTxt();
        }
예제 #8
0
 public void OnNavDataChange()
 {
     view.OrigRow.OnNavDataChange();
     view.DestRow.OnNavDataChange();
     view.RouteIsValid = false;
     Route             = null;
 }
예제 #9
0
        public void AnalyzeRoute()
        {
            Debug.Assert(view.IsAirportToAirport());

            try
            {
                EnsureOrigAirportExists();
                EnsureDestAirportExists();

                var input         = view.Route.ToUpper();
                var airwayNetwork = model.FuelPlanningModel.AirwayNetwork;

                var result = RouteAnalyzerFacade.AnalyzeWithCommands(
                    input,
                    view.OrigIcao,
                    view.OrigRwy,
                    view.DestIcao,
                    view.DestRwy,
                    model.FuelPlanningModel.AppOption.Instance.NavDataLocation,
                    airwayNetwork.AirportList,
                    airwayNetwork.WptList);

                Route = ToRouteGroup(result);
                ShowRouteTxt();
                view.RouteIsValid = true;
            }
            catch (Exception ex)
            {
                view.ShowMessage(ex.Message, MessageLevel.Warning);
            }
        }
예제 #10
0
        /// <summary>
        /// Initialize the program.
        /// </summary>
        ///
        /// A new empty route is created.
        /// The window title is set.
        ///
        private void InitializeProgram()
        {
            RouteGroup programModes = new RouteGroup();

            programModes.AutonomousModes.Add(new AutonomousRoute("new"));
            SetWindowTitle("");
            AddNewRoute(programModes);
        }
예제 #11
0
        // GET: RouteGroup/Create
        public ActionResult Create()
        {
            RouteGroup group = new RouteGroup {
                RGIcon = "group.png"
            };

            return(View(group));
        }
예제 #12
0
 public static double GetCustomTypePriority(this RouteGroup routeGroup)
 {
     if (CommonComponent.Current.Config.CustomTypePriority != null)
     {
         return(CommonComponent.Current.Config.CustomTypePriority(routeGroup));
     }
     return(routeGroup.TypePriority);
 }
예제 #13
0
        private void Category_Tap(object sender, TappedRoutedEventArgs e)
        {
            RouteGroup RouteGroup = (RouteGroup)DataContext;

            if (Click != null && RouteGroup.Routes.Count > 0)
            {
                Click(RouteGroup, new EventArgs());
            }
        }
예제 #14
0
        private void Category_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            RouteGroup RouteGroup = (RouteGroup)DataContext;

            if (Click != null && RouteGroup.Routes.Count > 0)
            {
                Click(RouteGroup, new EventArgs());
            }
        }
        public static void ShowRouteTxt(this ISupportActionContextMenu view,
                                        RouteGroup route, AppOptions o)
        {
            var selected = o.ShowTrackIdOnly ? route.Folded : route.Expanded;
            var showDct  = !o.HideDctInRoute;

            view.Route        = selected.ToString(showDct);
            view.DistanceInfo = RouteDistanceDisplay.GetDisplay(route.Expanded, Style.Long);
        }
예제 #16
0
        private void RouteGroupClicked(object sender, EventArgs e)
        {
            RouteGroup selected = sender as RouteGroup;

            if (RouteGroupSelected != null)
            {
                RouteGroupSelected(this, selected);
            }
        }
예제 #17
0
        private void GetRouteWaypointToWaypoint()
        {
            Route = new RouteGroup(
                new RouteFinder(wptList, checkedCodesLocator.Instance)
                .FindRoute(GetWptIndexFrom(), GetWptIndexTo()),
                tracksInUse);

            ShowRoute();
        }
        public static void ShowMapBrowser(this ISupportActionContextMenu view, RouteGroup route)
        {
            if (route == null)
            {
                view.ShowMessage("Please find a route first.", MessageLevel.Info);
                return;
            }

            view.ShowMapBrowser(route.Expanded);
        }
예제 #19
0
 public IRecentEntry GetRecentRoute(RouteGroup routeGroup)
 {
     lock (ctx)
     {
         DateTime now = DateTime.Now; TimeSpan twelveHours = TimeSpan.FromHours(12);
         return(ctx.RecentEntries.ToList()
                .Where(e => e.Route.RouteGroup == routeGroup && now - e.CreationTime < twelveHours)
                .MaxBy(e => e.CreationTime));
     }
 }
예제 #20
0
        /// <summary>
        /// Save the current data to the specified file.
        /// </summary>
        ///
        /// <param name="filename">The name and path of the file to save to</param>
        ///
        private void SaveFile(String filename)
        {
            RouteGroup programList = mProgramModes;

            if (programList != null)
            {
                programList.Save(filename);
                SaveFilename = filename;
            }
        }
예제 #21
0
        // GET: RouteGroup/Details/5
        public ActionResult Details(int id)
        {
            RouteGroup group = null;

            using (var ctx = new GlsunViewEntities())
            {
                group = ctx.RouteGroup.Find(id);
            }
            ViewBag.Action = "Details";
            return(View("Create", group));
        }
예제 #22
0
        private async void HistoryList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (HistoryList.SelectedItem != null)
            {
                await Task.Delay(100);

                RouteGroup selected = HistoryList.SelectedItem as RouteGroup;
                MainPage.Current.NavigationService.Navigate(new Uri("/HistoryItemPage.xaml?id=" + selected.ID, UriKind.Relative));
                HistoryList.SelectedItem = null;
            }
        }
        private ObservableCollection <string> LoadTasksForDropDowns(string filepath)
        {
            RouteGroup tasks = RouteGroup.Load(filepath);

            ObservableCollection <string> taskNames = new ObservableCollection <string>();

            foreach (AutonomousRoute task in tasks.AutonomousModes)
            {
                taskNames.Add(task.Name);
            }

            return(taskNames);
        }
예제 #24
0
 public void FindRoute()
 {
     try
     {
         Route = ToRouteGroup(FindRoutePrivate());
         ShowRouteTxt();
         view.RouteIsValid = true;
     }
     catch (Exception e)
     {
         view.ShowMessage(e.Message, MessageLevel.Warning);
     }
 }
예제 #25
0
        public async Task SetContent(string searchText, bool full, Func <object, bool> searchFilter = null)
        {
            searchFilter = searchFilter ?? (o => true);

            this.SearchKey = searchText;

            IEnumerable <StopModel>  stops  = new StopModel[0];
            IEnumerable <RouteGroup> routes = new RouteGroup[0];

            if (searchText.Length > 0)
            {
                routes = await Task.Run(() =>
                                        CommonComponent.Current.TB.Logic.FindRoutes(searchText)
                                        .OrderByText(r => r.Name)
                                        .ToList()
                                        );
            }

            if (searchText.Length >= 3)
            {
                //elvileg nem teljesen pontos, mert lehetnek azonos route-ok a szummában de közelítésnek megteszi
                //+ A megálló végállomásként is számít
                stops = await Task.Run(() =>
                                       CommonComponent.Current.TB.Logic
                                       .FindStops(searchText)
                                       .Select(s => new StopModel(s, true, true))
                                       .OrderByText(s => s.Name)
                                       .OrderByDescending(s => s.RouteCount)
                                       .OrderBy(s => s.HighestPriority)
                                       .ToList()
                                       );
            }

            if (stops.Take(1).Count() == 0)
            {
                ResultItems = full ? routes.Where(o => searchFilter(o)).ToList() : routes.Take(5).ToList();
            }
            else if (routes.Take(1).Count() == 0)
            {
                var stops1 = full ? stops.ToList() : stops.Take(5).ToList();
                ResultItems = stops1.Where(searchFilter).ToList();
            }
            else
            {
                var firstRoutes    = routes.Where(r => r.Name.Normalize().Contains(searchText.Normalize())).Cast <object>().ToList();
                var lastRoutes     = routes.Cast <object>().Except(firstRoutes);
                var routesAndStops = firstRoutes.Concat(stops).Concat(lastRoutes).ToList();
                ResultItems = full ? routesAndStops.Where(searchFilter).ToList() : routesAndStops.Take(5).ToList();
            }
            SetSearchResult(stops.Select(s => s.Stop), routes);
        }
예제 #26
0
        private async void HistoryList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (HistoryList.SelectedItem != null)
            {
                await Task.Delay(100);

                RouteGroup selected = HistoryList.SelectedItem as RouteGroup;
                if (HistoryItemSelected != null)
                {
                    HistoryItemSelected(this, selected);
                }
                HistoryList.SelectedItem = null;
            }
        }
예제 #27
0
        private void GetRouteAirportToWaypoint()
        {
            var sids = fromGroup.controller.GetSelectedProcedures();

            Route = new RouteGroup(
                GetRouteFinder().FindRoute(
                    origin,
                    fromRwyComboBox.Text,
                    sids,
                    GetWptIndexTo()),
                tracksInUse);

            ShowRoute();
        }
예제 #28
0
        private void GetRouteWaypointToAirport()
        {
            var stars = toGroup.controller.GetSelectedProcedures();

            Route = new RouteGroup(
                GetRouteFinder().FindRoute(
                    GetWptIndexFrom(),
                    destination,
                    toRwyComboBox.Text,
                    stars),
                tracksInUse);

            ShowRoute();
        }
예제 #29
0
        private async void RecentList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (RecentList.SelectedItem != null)
            {
                await Task.Delay(100);

                RouteGroup selected = RecentList.SelectedItem as RouteGroup;
                Route      route    = UserEstimations.BestRoute(selected);
                StopGroup  stop     = UserEstimations.BestStop(route);
                MainPage.Current.NavigationService.Navigate(new Uri("/TimeTablePage.xaml?stopID=" + stop.ID + "&routeID=" + route.ID, UriKind.Relative));
                //MainPage.NavigateToRouteStop(MainPage.Current, route, stop);
                RecentList.SelectedItem = null;
            }
        }
예제 #30
0
        /// <summary>
        /// Handle user request to save a file
        /// </summary>
        ///
        /// This function will save the data in memory to a file.
        ///
        /// If a filename hasn't been specified before (by a load or
        /// previous save) this function will prompt for the name.
        ///
        /// <param name="sender"></param>
        /// <param name="e"></param>
        ///
        private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            RouteGroup programList = mProgramModes;

            if (programList != null)
            {
                if (String.IsNullOrEmpty(SaveFilename))
                {
                    SaveAsButton_Click(sender, e);
                }
                else
                {
                    SaveFile(SaveFilename);
                }
            }
        }