コード例 #1
0
ファイル: Utils.cs プロジェクト: nbclark/commuter
        public static void RefreshRoutes(CommuteDefinition definition, bool reverseRoute)
        {
            Thread thread = new Thread(new ParameterizedThreadStart(_RefreshRoutesAsync));

            thread.IsBackground = true;
            thread.Start(new object[] { definition, reverseRoute });
        }
コード例 #2
0
        void definition_Updated(object sender, EventArgs e)
        {
            CommuteDefinition definition = (CommuteDefinition)sender;

            definition.Updated -= new EventHandler(definition_Updated);

            definition.Updated += new EventHandler(definitionReturn_Updated);
            Utils.RefreshRoutes(definition, true);
        }
コード例 #3
0
        void definitionReturn_Updated(object sender, EventArgs e)
        {
            CommuteDefinition definition = (CommuteDefinition)sender;

            definition.Updated -= new EventHandler(definitionReturn_Updated);

            this.Dispatcher.BeginInvoke(() =>
            {
                this.commuterList.ItemsSource = null;
                this.commuterList.ItemsSource = DataContextManager.Commutes;
            });

            DataContextManager.Save();
        }
コード例 #4
0
        private void deleteButton_Click(object sender, RoutedEventArgs e)
        {
            Button            button     = (Button)sender;
            CommuteDefinition definition = (CommuteDefinition)button.Tag;

            string szTitle   = definition.Name;
            string szMessage = "Are you sure you want to delete this commute?";

            if (MessageBox.Show(szMessage, szTitle, MessageBoxButton.OKCancel) == MessageBoxResult.OK)
            {
                DataContextManager.Commutes.Remove(definition);
                DataContextManager.Save();
            }
        }
コード例 #5
0
ファイル: Utils.cs プロジェクト: nbclark/commuter
        public static void RefreshRoute(CommuteDefinition definition, RouteDefinition route, bool reverseRoute)
        {
            Route restRoute = null;

            try
            {
                restRoute = RefreshRoute(definition.StartPoint, definition.EndPoint, route, reverseRoute);
            }
            catch
            {
            }

            if (null == restRoute)
            {
            }
            else
            {
                if (reverseRoute)
                {
                    route.EstimatedRetDistance = restRoute.TravelDistance;
                    route.EstimatedRetDuration = TimeSpan.FromSeconds(restRoute.TravelDuration);
                }
                else
                {
                    route.EstimatedDistance = restRoute.TravelDistance;
                    route.EstimatedDuration = TimeSpan.FromSeconds(restRoute.TravelDuration);
                }

                route.Directions.Clear();

                foreach (RouteLeg leg in restRoute.RouteLeg)
                {
                    foreach (ItineraryItem item in leg.ItineraryItem)
                    {
                        route.Directions.Add(new RouteDirection(item.Instruction));
                    }
                }

                route.RoutePoints.Clear();

                foreach (MobileSrc.Commuter.Shared.RouteServices.Rest.Point location in restRoute.RoutePath.Line.Point)
                {
                    route.RoutePoints.Add(Utils.CreateGpsLocation(location.Latitude, location.Longitude));
                }

                route.LastUpdated = DateTime.Now;
            }
            route.FireUpdated();
        }
コード例 #6
0
ファイル: Utils.cs プロジェクト: nbclark/commuter
        public static void _RefreshRoutesAsync(object param)
        {
            object[]          objs       = (object[])param;
            CommuteDefinition definition = (CommuteDefinition)objs[0];
            bool reverseRoute            = (bool)objs[1];

            double timeFromDeparture = Math.Abs((DateTime.Now.TimeOfDay - definition.DepartureTime.TimeOfDay).TotalMinutes);
            double timeFromReturn    = Math.Abs((DateTime.Now.TimeOfDay - definition.ReturnTime.TimeOfDay).TotalMinutes);

            int updatedRoutes = definition.Routes.Count;

            foreach (RouteDefinition route in definition.Routes)
            {
                route.Updated += new EventHandler((object sender, EventArgs e) =>
                {
                    updatedRoutes--;
                });
                RefreshRoute(definition, route, reverseRoute);
            }

            int counter = 30;

            while (updatedRoutes > 0)
            {
                Thread.Sleep(500);

                if (counter-- <= 0)
                {
                    break;
                }
            }

            if (reverseRoute)
            {
                definition.LastUpdatedRet = DateTime.Now;
            }
            else
            {
                definition.LastUpdated = DateTime.Now;
            }
            definition.FireUpdated();
        }
コード例 #7
0
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            bool isDeparture             = System.Convert.ToBoolean(parameter);
            CommuteDefinition definition = value as CommuteDefinition;

            RouteDefinition bestRoute = null;

            foreach (RouteDefinition route in definition.Routes)
            {
                if (bestRoute == null)
                {
                    bestRoute = route;
                }
                else
                {
                    TimeSpan durA = (!isDeparture) ? route.EstimatedRetDuration : route.EstimatedDuration;
                    TimeSpan durB = (!isDeparture) ? bestRoute.EstimatedRetDuration : bestRoute.EstimatedDuration;
                    if (durA < durB)
                    {
                        bestRoute = route;
                    }
                }
            }

            if (null != bestRoute)
            {
                if (isDeparture)
                {
                    return(string.Format("Departure: {1}, {0:0.00} min, {2:0.00} mile", bestRoute.EstimatedDurationMinutes, bestRoute.Name, bestRoute.EstimatedDistance));
                }
                else
                {
                    return(string.Format("Return: {1}, {0:0.00} min, {2:0.00} mile", bestRoute.EstimatedDurationRetMinutes, bestRoute.Name, bestRoute.EstimatedRetDistance));
                }
            }
            else
            {
                return(string.Format("no routes defined"));
            }
        }
コード例 #8
0
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            CommuteDefinition definition = value as CommuteDefinition;

            return(string.Format("{0} @ {1}{2}-{3}{4}", definition.DaysOfWeekString.Replace(" ", ""), definition.DepartureTime.ToString("h:mm"), definition.DepartureTime.Hour < 12 ? "am" : "pm", definition.ReturnTime.ToString("h:mm"), definition.ReturnTime.Hour < 12 ? "am" : "pm"));
        }