]> err.no Git - scalable-opengroupware.org/blob - UI/Scheduler/UIxTimeDateControl.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1033 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 // $Id$
22
23 #import <Foundation/NSArray.h>
24 #import <Foundation/NSString.h>
25 #import <Foundation/NSValue.h>
26
27 #import <NGObjWeb/SoObjects.h>
28
29 #import <SOGo/NSCalendarDate+SOGo.h>
30
31 #import "UIxTimeDateControl.h"
32
33 @implementation UIxTimeDateControl
34
35 - (id)init {
36   self = [super init];
37   if (self) {
38     displayTimeControl = YES;
39     isDisabled = NO;
40   }
41   return self;
42 }
43
44 - (void)dealloc {
45   [controlID release];
46   [label     release];
47   [date      release];
48   [hour      release];
49   [minute    release];
50   [second    release];
51   [day       release];
52   [month     release];
53   [year      release];
54   [super dealloc];
55 }
56
57 /* accessors */
58
59 - (void)setControlID:(NSString *)_controlID {
60   ASSIGNCOPY(controlID, _controlID);
61 }
62 - (NSString *)controlID {
63   return controlID;
64 }
65 - (void)setLabel:(NSString *)_label {
66   ASSIGNCOPY(label, _label);
67 }
68 - (NSString *)label {
69   return label;
70 }
71
72 - (void)setDate:(NSCalendarDate *)_date {
73   NSLog (@"^^^^^^ %@: setDate: %@", self, _date);
74   int minuteValue;
75   if (!_date)
76     _date = [NSCalendarDate date];
77   [_date setTimeZone: [[self clientObject] userTimeZone]];
78   [self _setDate: _date];
79
80   minuteValue = [_date minuteOfHour];
81   if (minuteValue % 15)
82     minuteValue += 15 - (minuteValue % 15);
83   [self setHour: [NSNumber numberWithInt: [_date hourOfDay]]];
84   [self setMinute: [NSNumber numberWithInt: minuteValue]];
85   [self setYear: [NSNumber numberWithInt: [_date yearOfCommonEra]]];
86   [self setMonth: [NSNumber numberWithInt: [_date monthOfYear]]];
87   [self setDay: [NSNumber numberWithInt: [_date dayOfMonth]]];
88 }
89
90 - (void)_setDate:(NSCalendarDate *)_date {
91   ASSIGN(date, _date);
92 }
93
94 - (NSCalendarDate *)date {
95   return date;
96 }
97
98 - (void)setHour:(id)_hour {
99   NSLog (@"---------------- setHour:");
100   ASSIGN(hour, _hour);
101 }
102
103 - (id)hour {
104   return hour;
105 }
106 - (void)setMinute:(id)_minute {
107   ASSIGN(minute, _minute);
108 }
109 - (id)minute {
110   return minute;
111 }
112 - (void)setSecond:(id)_second {
113   ASSIGN(second, _second);
114 }
115 - (id)second {
116   return second;
117 }
118
119 - (void)setDay:(id)_day {
120   ASSIGN(day, _day);
121 }
122 - (id)day {
123   return day;
124 }
125 - (void)setMonth:(id)_month {
126   ASSIGN(month, _month);
127 }
128 - (id)month {
129   return month;
130 }
131 - (void)setYear:(id)_year {
132   ASSIGN(year, _year);
133 }
134 - (id)year {
135   return year;
136 }
137
138 - (void) setDayStartHour: (unsigned int) aStartHour
139 {
140   NSLog (@"******************** setDayStartHour...");
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
255   NSLog (@"******************** %@: take values...", self);
256   /* call super, so that the form values are applied on the popups */
257   [super takeValuesFromRequest:_rq inContext:_ctx];
258
259   _year  = [[self year] intValue];
260   if (_year > 0)
261     {
262       [self setHour: [_rq formValueForKey: [self hourSelectId]]];
263       [self setMinute: [_rq formValueForKey: [self minuteSelectId]]];
264
265       _month  = [[self month] intValue];
266       _day    = [[self day] intValue];
267       _hour   = [[self hour] intValue];
268       _minute = [[self minute] intValue];
269       _second = [[self second] intValue];
270       
271       d = [NSCalendarDate dateWithYear: _year month:_month day:_day
272                           hour:_hour minute:_minute second:_second
273                           timeZone: [[self clientObject] userTimeZone]];
274       [self _setDate: d];
275     }
276 }
277
278 - (void) setDisabled: (BOOL) disabled
279 {
280   isDisabled = disabled;
281 }
282
283 - (BOOL) disabled
284 {
285   return isDisabled;
286 }
287
288 @end /* UIxTimeDateControl */