/// <summary>
        /// Gets vehicle to init route.
        /// </summary>
        /// <param name="list">Vehicles for first selection.</param>
        /// <param name="index">Vehicle index.</param>
        /// <returns>Vehicle object.</returns>
        private Vehicle _GetNextVehicle(IList <Vehicle> list, int index)
        {
            Vehicle obj = null;

            if (index < list.Count)
            {
                obj = list[index]; // get presented
            }
            else
            {   // create new object
                AppData.IDataObjectCollection <Vehicle> vehicles = DataKeeper.Project.Vehicles;

                obj      = new Vehicle(DataKeeper.Project.CapacitiesInfo);
                obj.Name = _GetNewName(App.Current.FindString("Vehicle"), vehicles);

                // init fuel type - use first presented
                AppData.IDataObjectCollection <FuelType> fuelTypes = DataKeeper.Project.FuelTypes;
                if (0 < fuelTypes.Count)
                {
                    obj.FuelType = fuelTypes[0];
                }

                vehicles.Add(obj);
            }

            return(obj);
        }
        /// <summary>
        /// Gets driver to init route.
        /// </summary>
        /// <param name="list">Drivers for first selection.</param>
        /// <param name="index">Driver index.</param>
        /// <returns>Driver object.</returns>
        private Driver _GetNextDriver(IList <Driver> list, int index)
        {
            Driver obj = null;

            if (index < list.Count)
            {
                obj = list[index]; // get presented
            }
            else
            {   // create new object
                AppData.IDataObjectCollection <Driver> drivers = DataKeeper.Project.Drivers;

                obj      = new Driver();
                obj.Name = _GetNewName(App.Current.FindString("Driver"), drivers);

                drivers.Add(obj);
            }

            return(obj);
        }
        /// <summary>
        /// Does grow list of routes.
        /// </summary>
        /// <param name="vehicleNumber">New vehicle number.</param>
        private void _DoGrowList(int vehicleNumber)
        {
            _EndEditTable();

            // select objects in use
            List <Driver>  driversInUse  = new List <Driver>();
            List <Vehicle> vehiclesInUse = new List <Vehicle>();

            AppData.IDataObjectCollection <Route> routes = DataKeeper.Routes;
            for (int index = 0; index < routes.Count; ++index)
            {
                Route route = routes[index];
                if (!_IsObjectPresentInCollection(route.Driver, driversInUse))
                {
                    driversInUse.Add(route.Driver);
                }
                if (!_IsObjectPresentInCollection(route.Vehicle, vehiclesInUse))
                {
                    vehiclesInUse.Add(route.Vehicle);
                }
            }

            Project project = DataKeeper.Project;

            // filter project objects - select not used objects
            IList <Driver>  drivers  = _GetNotUsedObjects(driversInUse, project.Drivers);
            IList <Vehicle> vehicles = _GetNotUsedObjects(vehiclesInUse, project.Vehicles);

            // use older as default location
            var sortCollection =
                from loc in project.Locations
                orderby loc.CreationTime
                select loc;
            Location defaultLocation = sortCollection.First();

            // create, init and add new routes
            int maxOrders         = _GetInputedMaxOrder();
            int maxWorkTime       = _GetInputedMaxWorkTime();
            int maxTravelDuration = _GetCorrectedMaxTravelDuration(maxWorkTime);

            int presentedVehicleNumber = DataKeeper.Routes.Count;

            int needAddCount = vehicleNumber - presentedVehicleNumber;

            for (int index = 0; index < needAddCount; ++index)
            {   // create route
                Route route = project.CreateRoute();
                // init route
                route.Name  = _GetNewName(App.Current.FindString("Route"), routes);
                route.Color = RouteColorManager.Instance.NextRouteColor(routes);

                route.StartLocation = defaultLocation;
                route.EndLocation   = defaultLocation;
                route.Driver        = _GetNextDriver(drivers, index);
                route.Vehicle       = _GetNextVehicle(vehicles, index);
                TimeWindow startTimeWindow = route.StartTimeWindow;
                startTimeWindow.From    = textBoxStart.Time;
                startTimeWindow.To      = textBoxEnd.Time;
                route.MaxOrders         = maxOrders;
                route.MaxTravelDuration = maxTravelDuration;
                route.MaxTotalDuration  = maxWorkTime;

                routes.Add(route);
            }

            _StoreChanges();
        }