| Quintiq file version 2.0 | 
| #parent: #root | 
| Method SetDuration ( | 
|   Duration duration_i | 
| ) as LibCal_Event | 
| { | 
|   Description: 'Set the duration of the event.' | 
|   TextBody: | 
|   [* | 
|     // Ignore seconds. | 
|     duration := duration_i.Round( Duration::Minutes( 1 ) ); | 
|      | 
|     // Use a FeedbackObject the collect the validation feedback. | 
|     feedback := LibCal_Validate::FeedbackObject(); | 
|      | 
|     moreInfo := this.GetEventInfo() + ", Duration = " + duration_i.Format( Translations::DurationFormat() ); | 
|     LibCal_Validate::RegisterError( LibCal_Validate::Event_Duration( duration ), moreInfo ); | 
|      | 
|     // Process the feedback that has been registered by the validation (if any). | 
|     LibCal_Util::ProcessFeedbackObject( feedback ); | 
|      | 
|     // The below is only executed when no validation errors were encountered. | 
|     leadPart := this.LeadingParticipation(); | 
|     if( not isnull( leadPart ) ) | 
|     { | 
|       isAllDay := this.IsAllDay(); | 
|        | 
|       if( this.Duration() <> duration ) | 
|       { | 
|         this.IsChanged( true ); | 
|       } | 
|      | 
|       // Set the Duration and the EndTimeOfDay of the Event... | 
|       this.Duration( duration ); | 
|        | 
|       endTimeOfDay := ( this.StartTimeOfDay() + duration ) mod Duration::Hours( 24 ); | 
|       this.EndTimeOfDay( endTimeOfDay ); | 
|        | 
|       // ...and the EndDate of the LeadingParticicpation. | 
|       endDate := leadPart.StartDate() + ( ( this.StartTimeOfDay() + duration ) div Duration::Hours( 24 ) ); | 
|       leadPart.Update( leadPart.StartDate(), endDate ); | 
|        | 
|       // Validate the resulting StartTime and EndTime. | 
|       leadPart.CalcStartTime(); | 
|       leadPart.CalcEndTime(); | 
|        | 
|       startTime := leadPart.StartTime(); | 
|       endTime   := leadPart.EndTime(); | 
|       timezone  := this.Calendar().GetTimeZone(); | 
|       convOps   := ConversionOptions::ISO() | 
|       moreInfo  := this.GetEventInfo() + ", StartTime = " + startTime.Format( Translations::DateTimeFormat(), convOps ) | 
|                                        + ", EndTime = "   + endTime  .Format( Translations::DateTimeFormat(), convOps ); | 
|       LibCal_Validate::RegisterError( LibCal_Validate::Event_StartTime_EndTime( startTime, endTime ), moreInfo ); | 
|      | 
|       // See if isAllDay was and still is applicable.   | 
|       isAllDay := isAllDay | 
|               and startTime.TimeOfDay( timezone ) = Duration::Zero() | 
|               and endTime.TimeOfDay( timezone )   = Duration::Zero() | 
|               and duration                        > Duration::Zero(); | 
|        | 
|       // Process the feedback that has been registered by the validation (if any). | 
|       LibCal_Util::ProcessFeedbackObject( feedback ); | 
|        | 
|       // The below is only executed when no validation errors were encountered. | 
|       this.IsAllDay( isAllDay ); | 
|     } | 
|      | 
|     // Make the API fluent. | 
|     return this; | 
|   *] | 
| } |