]> err.no Git - scalable-opengroupware.org/blob - UI/Scheduler/UIxTimeDateControl.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1196 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / Scheduler / UIxTimeDateControl.m
1 /*
2   Copyright (C) 2004 SKYRIX Software AG
3
4   This file is part of OpenGroupware.org.
5
6   OGo is free software; you can redistribute it and/or modify it under
7   the terms of the GNU Lesser General Public License as published by the
8   Free Software Foundation; either version 2, or (at your option) any
9   later version.
10
11   OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12   WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14   License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with OGo; see the file COPYING.  If not, write to the
18   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19   02111-1307, USA.
20 */
21
22 #import <Foundation/NSArray.h>
23 #import <Foundation/NSString.h>
24 #import <Foundation/NSValue.h>
25
26 #import <NGObjWeb/SoObjects.h>
27
28 #import <SOGo/NSCalendarDate+SOGo.h>
29
30 #import "UIxTimeDateControl.h"
31
32 @implementation UIxTimeDateControl
33
34 - (id)init {
35   self = [super init];
36   if (self) {
37     displayTimeControl = YES;
38     isDisabled = NO;
39   }
40   return self;
41 }
42
43 - (void)dealloc {
44   [controlID release];
45   [label     release];
46   [date      release];
47   [hour      release];
48   [minute    release];
49   [second    release];
50   [day       release];
51   [month     release];
52   [year      release];
53   [super dealloc];
54 }
55
56 /* accessors */
57
58 - (void)setControlID:(NSString *)_controlID {
59   ASSIGNCOPY(controlID, _controlID);
60 }
61 - (NSString *)controlID {
62   return controlID;
63 }
64 - (void)setLabel:(NSString *)_label {
65   ASSIGNCOPY(label, _label);
66 }
67 - (NSString *)label {
68   return label;
69 }
70
71 - (void) setDate: (NSCalendarDate *) _date
72 {
73   NSTimeZone *timeZone;
74   int minuteValue;
75
76   timeZone = [[context activeUser] timeZone];
77   if (!_date)
78     _date = [NSCalendarDate date];
79   [_date setTimeZone: timeZone];
80   [self _setDate: _date];
81
82   minuteValue = [_date minuteOfHour];
83   if (minuteValue % 15)
84     minuteValue += 15 - (minuteValue % 15);
85   [self setHour: [NSNumber numberWithInt: [_date hourOfDay]]];
86   [self setMinute: [NSNumber numberWithInt: minuteValue]];
87   [self setYear: [NSNumber numberWithInt: [_date yearOfCommonEra]]];
88   [self setMonth: [NSNumber numberWithInt: [_date monthOfYear]]];
89   [self setDay: [NSNumber numberWithInt: [_date dayOfMonth]]];
90 }
91
92 - (void)_setDate:(NSCalendarDate *)_date {
93   ASSIGN(date, _date);
94 }
95
96 - (NSCalendarDate *)date {
97   return date;
98 }
99
100 - (void)setHour:(id)_hour {
101   ASSIGN(hour, _hour);
102 }
103
104 - (id)hour {
105   return hour;
106 }
107 - (void)setMinute:(id)_minute {
108   ASSIGN(minute, _minute);
109 }
110 - (id)minute {
111   return minute;
112 }
113 - (void)setSecond:(id)_second {
114   ASSIGN(second, _second);
115 }
116 - (id)second {
117   return second;
118 }
119
120 - (void)setDay:(id)_day {
121   ASSIGN(day, _day);
122 }
123 - (id)day {
124   return day;
125 }
126 - (void)setMonth:(id)_month {
127   ASSIGN(month, _month);
128 }
129 - (id)month {
130   return month;
131 }
132 - (void)setYear:(id)_year {
133   ASSIGN(year, _year);
134 }
135 - (id)year {
136   return year;
137 }
138
139 - (void) setDayStartHour: (unsigned int) aStartHour
140 {
141   startHour = aStartHour;
142 }
143
144 - (void) setDayEndHour: (unsigned int) anEndHour
145 {
146   endHour = anEndHour;
147 }
148
149 - (void) setHourOption: (NSNumber *) option
150 {
151   currentHour = option;
152 }
153
154 - (BOOL) isCurrentHour
155 {
156   return [currentHour isEqual: hour];
157 }
158
159 - (BOOL) isCurrentMinute
160 {
161   return [currentMinute isEqual: minute];
162 }
163
164 - (int) hourValue
165 {
166   return [currentHour intValue];
167 }
168
169 - (NSString *) hourLabel
170 {
171   return [NSString stringWithFormat: @"%.2d", [currentHour intValue]];
172 }
173
174 - (NSArray *) selectableHours
175 {
176   NSMutableArray *hours;
177   unsigned int h;
178
179   hours = [NSMutableArray new];
180   [hours autorelease];
181
182   for (h = startHour; h < (endHour + 1); h++)
183     [hours addObject: [NSNumber numberWithInt: h]];
184
185   return hours;
186 }
187
188 - (NSString *) hourSelectId
189 {
190   return [[self controlID] stringByAppendingString:@"_time_hour"];
191 }
192
193 - (void) setMinuteOption: (NSNumber *) option
194 {
195   currentMinute = option;
196 }
197
198 - (int) minuteValue
199 {
200   return [currentMinute intValue];
201 }
202
203 - (NSString *) minuteLabel
204 {
205   return [NSString stringWithFormat: @"%.2d", [currentMinute intValue]];
206 }
207
208 - (NSArray *) selectableMinutes
209 {
210   NSMutableArray *minutes;
211   unsigned int m;
212
213   minutes = [NSMutableArray new];
214   [minutes autorelease];
215
216   for (m = 0; m < 60; m += 15)
217     [minutes addObject: [NSNumber numberWithInt: m]];
218
219   return minutes;
220 }
221
222 - (NSString *) minuteSelectId
223 {
224   return [[self controlID] stringByAppendingString:@"_time_minute"];
225 }
226
227 - (NSString *) timeID
228 {
229   return [[self controlID] stringByAppendingString:@"_time"];
230 }
231
232 - (NSString *) dateID
233 {
234   return [[self controlID] stringByAppendingString:@"_date"];
235 }
236
237 - (void) setDisplayTimeControl: (BOOL) _displayTimeControl
238 {
239   displayTimeControl = _displayTimeControl;
240 }
241
242 - (BOOL) displayTimeControl
243 {
244   return displayTimeControl;
245 }
246
247 /* processing request */
248
249 - (void) takeValuesFromRequest: (WORequest *) _rq
250                      inContext: (WOContext *) _ctx
251 {
252   NSCalendarDate *d;
253   unsigned _year, _month, _day, _hour, _minute, _second;
254   NSTimeZone *timeZone;
255
256   timeZone = [[context activeUser] timeZone];
257   /* call super, so that the form values are applied on the popups */
258   [super takeValuesFromRequest:_rq inContext:_ctx];
259
260   _year  = [[self year] intValue];
261   if (_year > 0)
262     {
263       [self setHour: [_rq formValueForKey: [self hourSelectId]]];
264       [self setMinute: [_rq formValueForKey: [self minuteSelectId]]];
265
266       _month  = [[self month] intValue];
267       _day    = [[self day] intValue];
268       _hour   = [[self hour] intValue];
269       _minute = [[self minute] intValue];
270       _second = [[self second] intValue];
271       
272       d = [NSCalendarDate dateWithYear: _year month:_month day:_day
273                           hour:_hour minute:_minute second:_second
274                           timeZone: timeZone];
275       [self _setDate: d];
276     }
277 }
278
279 - (void) setDisabled: (BOOL) disabled
280 {
281   isDisabled = disabled;
282 }
283
284 - (BOOL) disabled
285 {
286   return isDisabled;
287 }
288
289 @end /* UIxTimeDateControl */