/core/externals/update-engine/externals/gdata-objectivec-client/Examples/CalendarSample/EditEventWindowController.m

http://macfuse.googlecode.com/ · Objective C · 168 lines · 111 code · 34 blank · 23 comment · 13 complexity · add65eb2bbea94698f6e707fb186af74 MD5 · raw file

  1. /* Copyright (c) 2007 Google Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. //
  16. // EditEventWindowController.m
  17. //
  18. #import "EditEventWindowController.h"
  19. @implementation EditEventWindowController
  20. - (id)init {
  21. return [self initWithWindowNibName:@"EditEventWindow"];
  22. }
  23. - (void)awakeFromNib {
  24. if (mEvent) {
  25. // copy data from the event to our dialog's controls
  26. NSString *title = [[mEvent title] stringValue];
  27. NSString *desc = [[mEvent content] stringValue];
  28. GDataDateTime *startTime = nil;
  29. GDataDateTime *endTime = nil;
  30. NSArray *times = [mEvent times];
  31. GDataWhen *when = nil;
  32. if ([times count] > 0) {
  33. when = [times objectAtIndex:0];
  34. startTime = [when startTime];
  35. endTime = [when endTime];
  36. }
  37. NSString *reminderMinutesStr = nil;
  38. NSString *reminderMethod = nil;
  39. NSArray *reminders = [when reminders];
  40. if ([reminders count] > 0) {
  41. GDataReminder *reminder = [reminders objectAtIndex:0];
  42. reminderMinutesStr = [reminder minutes]; // note: reminders may be stored other ways too
  43. reminderMethod = [reminder method];
  44. }
  45. if (title) [mTitleField setStringValue:title];
  46. if (desc) [mDescriptionField setStringValue:desc];
  47. if (startTime) {
  48. [mStartDatePicker setDateValue:[startTime date]];
  49. [mStartDatePicker setTimeZone:[startTime timeZone]];
  50. }
  51. if (endTime) {
  52. [mEndDatePicker setDateValue:[endTime date]];
  53. [mEndDatePicker setTimeZone:[endTime timeZone]];
  54. }
  55. if (reminderMinutesStr) {
  56. [mReminderMinutesField setStringValue:reminderMinutesStr];
  57. }
  58. if (reminderMethod) {
  59. [mReminderMethodPopup selectItemWithTitle:reminderMethod];
  60. }
  61. }
  62. }
  63. - (void)dealloc {
  64. [mEvent release];
  65. [super dealloc];
  66. }
  67. #pragma mark -
  68. - (void)runModalForTarget:(id)target
  69. selector:(SEL)doneSelector
  70. event:(GDataEntryCalendarEvent *)event
  71. {
  72. mTarget = target;
  73. mDoneSEL = doneSelector;
  74. mEvent = [event retain];
  75. [NSApp beginSheet:[self window]
  76. modalForWindow:[mTarget window]
  77. modalDelegate:self
  78. didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
  79. contextInfo:nil];
  80. }
  81. - (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo {
  82. }
  83. - (void)closeDialog {
  84. // call the target to say we're done
  85. [mTarget performSelector:mDoneSEL
  86. withObject:[[self retain] autorelease]];
  87. [[self window] orderOut:self];
  88. [NSApp endSheet:[self window]];
  89. }
  90. - (IBAction)saveButtonClicked:(id)sender {
  91. mWasSaveClicked = YES;
  92. [self closeDialog];
  93. }
  94. - (IBAction)cancelButtonClicked:(id)sender {
  95. [self closeDialog];
  96. }
  97. - (GDataEntryCalendarEvent *)event {
  98. // copy from our dialog's controls into a copy of the original event
  99. NSString *title = [mTitleField stringValue];
  100. NSString *desc = [mDescriptionField stringValue];
  101. NSString *reminderMin = [mReminderMinutesField stringValue];
  102. NSString *reminderMethod = [[mReminderMethodPopup selectedItem] title];
  103. GDataEntryCalendarEvent *newEvent;
  104. if (mEvent) {
  105. newEvent = [[mEvent copy] autorelease];
  106. } else {
  107. newEvent = [GDataEntryCalendarEvent calendarEvent];
  108. }
  109. [newEvent setTitleWithString:title];
  110. [newEvent setContentWithString:desc];
  111. // times
  112. GDataDateTime *startDateTime = [GDataDateTime dateTimeWithDate:[mStartDatePicker dateValue]
  113. timeZone:[mStartDatePicker timeZone]];
  114. GDataDateTime *endDateTime = [GDataDateTime dateTimeWithDate:[mEndDatePicker dateValue]
  115. timeZone:[mEndDatePicker timeZone]];
  116. GDataWhen *when = [GDataWhen whenWithStartTime:startDateTime
  117. endTime:endDateTime];
  118. // reminders. Reminders are inside the GDWhen (except for recurring events,
  119. // where they're inside the event itself)
  120. NSMutableArray *reminders = [NSMutableArray array];
  121. if (reminderMin || reminderMethod) {
  122. GDataReminder *reminder = [GDataReminder reminder];
  123. [reminder setMinutes:reminderMin];
  124. [reminder setMethod:reminderMethod];
  125. [reminders addObject:reminder];
  126. }
  127. [when setReminders:reminders];
  128. [newEvent setTimes:[NSArray arrayWithObject:when]];
  129. return newEvent;
  130. }
  131. - (BOOL)wasSaveClicked {
  132. return mWasSaveClicked;
  133. }
  134. @end