protected override bool CanStartResize(SchedulingResizeState state)
		{
			if (!base.CanStartResize(state))
			{
				return false;
			}

			var task = state.ResizedItem as GanttTask;
			var now = DateTime.Now;

			if (!this.AllowModificationsInThePast && (!state.IsResizeFromEnd && task.Start <= now || state.IsResizeFromEnd && task.End <= now))
			{
				return false;
			}
			
			if (task.IsMilestone)
			{
				return this.CanResizeMilestones;
			}
			if (task.IsSummary)
			{
				return this.CanResizeSummaries;
			}

			return this.CanResizeTasks;
		}
		protected override bool CanStartResize(SchedulingResizeState state)
		{
			if (!base.CanStartResize(state))
			{
				return false;
			}

			return !((LockingTask)state.ResizedItem).IsResizeLocked;
		}
        protected override void Resize(SchedulingResizeState state)
        {
            if (state.IsResizeFromEnd)
            {
                state.DestinationSlot.End = SnappingHelper.RoundUpDateTime(state.DestinationSlot.End);
            }
            else
            {
                state.DestinationSlot.Start = SnappingHelper.RoundUpDateTime(state.DestinationSlot.Start);
            }

            base.Resize(state);
        }
        protected override void Resize(SchedulingResizeState state)
        {
            if (state.IsResizeFromEnd)
            {
                state.DestinationSlot.End = SnappingHelper.RoundUpDateTime(state.DestinationSlot.End);
            }
            else
            {
                state.DestinationSlot.Start = SnappingHelper.RoundUpDateTime(state.DestinationSlot.Start);
            }

            base.Resize(state);
        }
		protected override bool CanResize(SchedulingResizeState state)
		{
			var now = DateTime.Now;

			if (base.CanResize(state) && 
					(this.AllowModificationsInThePast || 
					!state.IsResizeFromEnd && state.DestinationSlot.Start > now || 
					state.IsResizeFromEnd && state.DestinationSlot.End > now))
			{
				if (this.SnapToDates)
				{
					if (state.IsResizeFromEnd)
					{
						var difference = state.DestinationSlot.End - state.DestinationSlot.End.Date;
						state.DestinationSlot.End = state.DestinationSlot.End.Date + TimeSpan.FromDays(Math.Round(difference.TotalDays));
					}
					else
					{
						var difference = state.DestinationSlot.Start - state.DestinationSlot.Start.Date;
						state.DestinationSlot.Start = state.DestinationSlot.Start.Date + TimeSpan.FromDays(Math.Round(difference.TotalDays));
					}
				}

				return true;
			}

			return false;
		}
		protected override bool CanResize(SchedulingResizeState state)
		{
			return false;
		}