/// <summary> /// Update the prior row with the values from the unbound controls and load the values for the new row /// when the position changes. /// </summary> /// <param name="sender">The sender of the event</param> /// <param name="e">The event arguments</param> private void BindingSource_PositionChanged(object sender, EventArgs e) { VAlarm newItem = (VAlarm)this.BindingSource.Current; // If all deleted, ignore it if (newItem == null) { currentAlarm = null; return; } // Save changes to the unbound controls to the prior row this.StoreChanges(); // Load the new values into the unbound controls currentAlarm = newItem; if (currentAlarm.Trigger.ValueLocation == ValLocValue.Duration) { if (currentAlarm.Trigger.DurationValue != Duration.Zero) { txtTrigger.Text = currentAlarm.Trigger.DurationValue.ToString(Duration.MaxUnit.Weeks); } else { txtTrigger.Text = String.Empty; } chkFromEnd.Checked = currentAlarm.Trigger.RelatedToEnd; dtpTrigger.Checked = false; } else { txtTrigger.Text = String.Empty; chkFromEnd.Checked = false; if (currentAlarm.Trigger.TimeZoneDateTime == DateTime.MinValue) { dtpTrigger.Checked = false; } else { dtpTrigger.Value = currentAlarm.Trigger.TimeZoneDateTime; dtpTrigger.Checked = true; } } if (currentAlarm.Duration.DurationValue != Duration.Zero) { txtDuration.Text = currentAlarm.Duration.DurationValue.ToString(Duration.MaxUnit.Weeks); } else { txtDuration.Text = String.Empty; } // Set attendees and attachments ucAttendees.BindingSource.DataSource = new AttendeePropertyCollection().CloneRange(currentAlarm.Attendees); ucAttachments.SetValues(currentAlarm.Attachments); }
/// <summary> /// Processes VAlarm Trigger properties /// </summary> /// <param name="entry"></param> /// <param name="valarm"></param> private void ProcessTrigger(CalendarEntry entry, VAlarm valarm) { if (entry.Attributes.Count > 0) { foreach (AttributeData attr in entry.Attributes) { ParameterToken tkn = (ParameterToken)GetToken(_parameters, attr.Id); switch (tkn) { case ParameterToken.Related: valarm.Rel = ProcessRelated(entry, attr.Value); break; case ParameterToken.Value: switch ((ValueToken)GetToken(_values, attr.Value)) { case ValueToken.Date: valarm.Rel = Related.Date; valarm.Date = ProcessDateValue(entry, entry.Value); break; case ValueToken.DateTime: valarm.Rel = Related.Date; valarm.Date = ProcessDateTime(entry, entry.Value); break; case ValueToken.Duration: valarm.Duration = ProcessDuration(entry, entry.Value); break; } break; } } } else { valarm.Duration = ProcessDuration(entry, entry.Value); } }
/// <summary> /// Processes VAlarm component entries /// </summary> /// <param name="evData"></param> private void ProcessVAlarm(VEventData evData) { VAlarm valarm = new VAlarm(); CalendarEntry entry = GetNextEntry(); while (entry != null) { PropertyToken tkn = (PropertyToken)GetToken(_properties, entry.Id); switch (tkn) { case PropertyToken.Description: valarm.Description = entry.Value; break; case PropertyToken.End: if ((ComponentToken)GetToken(_components, entry.Value) != ComponentToken.VAlarm) ReportError(entry, "Expected \"END:VALARM\""); if (evData.VAlarms == null) evData.VAlarms = new List<VAlarm>(); evData.VAlarms.Add(valarm); return; case PropertyToken.Trigger: ProcessTrigger(entry, valarm); break; } entry = GetNextEntry(); } ReportError(entry, "Expected \"END:VALARM\""); }