]> err.no Git - scalable-opengroupware.org/blob - UI/Scheduler/UIxTimeDateControl.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1045 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 {
74   NSTimeZone *timeZone;
75   int minuteValue;
76
77   timeZone = [[context activeUser] timeZone];
78   if (!_date)
79     _date = [NSCalendarDate date];
80   [_date setTimeZone: timeZone];
81   [self _setDate: _date];
82
83   minuteValue = [_date minuteOfHour];
84   if (minuteValue % 15)
85     minuteValue += 15 - (minuteValue % 15);
86   [self setHour: [NSNumber numberWithInt: [_date hourOfDay]]];
87   [self setMinute: [NSNumber numberWithInt: minuteValue]];
88   [self setYear: [NSNumber numberWithInt: [_date yearOfCommonEra]]];
89   [self setMonth: [NSNumber numberWithInt: [_date monthOfYear]]];
90   [self setDay: [NSNumber numberWithInt: [_date dayOfMonth]]];
91 }
92
93 - (void)_setDate:(NSCalendarDate *)_date {
94   ASSIGN(date, _date);
95 }
96
97 - (NSCalendarDate *)date {
98   return date;
99 }
100
101 - (void)setHour:(id)_hour {
102   NSLog (@"---------------- setHour:");
103   ASSIGN(hour, _hour);
104 }
105
106 - (id)hour {
107   return hour;
108 }
109 - (void)setMinute:(id)_minute {
110   ASSIGN(minute, _minute);
111 }
112 - (id)minute {
113   return minute;
114 }
115 - (void)setSecond:(id)_second {
116   ASSIGN(second, _second);
117 }
118 - (id)second {
119   return second;
120 }
121
122 - (void)setDay:(id)_day {
123   ASSIGN(day, _day);
124 }
125 - (id)day {
126   return day;
127 }
128 - (void)setMonth:(id)_month {
129   ASSIGN(month, _month);
130 }
131 - (id)month {
132   return month;
133 }
134 - (void)setYear:(id)_year {
135   ASSIGN(year, _year);
136 }
137 - (id)year {
138   return year;
139 }
140
141 - (void) setDayStartHour: (unsigned int) aStartHour
142 {
143   NSLog (@"******************** setDayStartHour...");
144   startHour = aStartHour;
145 }
146
147 - (void) setDayEndHour: (unsigned int) anEndHour
148 {
149   endHour = anEndHour;
150 }
151
152 - (void) setHourOption: (NSNumber *) option
153 {
154   currentHour = option;
155 }
156
157 - (BOOL) isCurrentHour
158 {
159   return [currentHour isEqual: hour];
160 }
161
162 - (BOOL) isCurrentMinute
163 {
164   return [currentMinute isEqual: minute];
165 }
166
167 - (int) hourValue
168 {
169   return [currentHour intValue];
170 }
171
172 - (NSString *) hourLabel
173 {
174   return [NSString stringWithFormat: @"%.2d", [currentHour intValue]];
175 }
176
177 - (NSArray *) selectableHours
178 {
179   NSMutableArray *hours;
180   unsigned int h;
181
182   hours = [NSMutableArray new];
183   [hours autorelease];
184
185   for (h = startHour; h < (endHour + 1); h++)
186     [hours addObject: [NSNumber numberWithInt: h]];
187
188   return hours;
189 }
190
191 - (NSString *) hourSelectId
192 {
193   return [[self controlID] stringByAppendingString:@"_time_hour"];
194 }
195
196 - (void) setMinuteOption: (NSNumber *) option
197 {
198   currentMinute = option;
199 }
200
201 - (int) minuteValue
202 {
203   return [currentMinute intValue];
204 }
205
206 - (NSString *) minuteLabel
207 {
208   return [NSString stringWithFormat: @"%.2d", [currentMinute intValue]];
209 }
210
211 - (NSArray *) selectableMinutes
212 {
213   NSMutableArray *minutes;
214   unsigned int m;
215
216   minutes = [NSMutableArray new];
217   [minutes autorelease];
218
219   for (m = 0; m < 60; m += 15)
220     [minutes addObject: [NSNumber numberWithInt: m]];
221
222   return minutes;
223 }
224
225 - (NSString *) minuteSelectId
226 {
227   return [[self controlID] stringByAppendingString:@"_time_minute"];
228 }
229
230 - (NSString *) timeID
231 {
232   return [[self controlID] stringByAppendingString:@"_time"];
233 }
234
235 - (NSString *) dateID
236 {
237   return [[self controlID] stringByAppendingString:@"_date"];
238 }
239
240 - (void) setDisplayTimeControl: (BOOL) _displayTimeControl
241 {
242   displayTimeControl = _displayTimeControl;
243 }
244
245 - (BOOL) displayTimeControl
246 {
247   return displayTimeControl;
248 }
249
250 /* processing request */
251
252 - (void) takeValuesFromRequest: (WORequest *) _rq
253                      inContext: (WOContext *) _ctx
254 {
255   NSCalendarDate *d;
256   unsigned _year, _month, _day, _hour, _minute, _second;
257   NSTimeZone *timeZone;
258
259   timeZone = [[context activeUser] timeZone];
260   /* call super, so that the form values are applied on the popups */
261   [super takeValuesFromRequest:_rq inContext:_ctx];
262
263   _year  = [[self year] intValue];
264   if (_year > 0)
265     {
266       [self setHour: [_rq formValueForKey: [self hourSelectId]]];
267       [self setMinute: [_rq formValueForKey: [self minuteSelectId]]];
268
269       _month  = [[self month] intValue];
270       _day    = [[self day] intValue];
271       _hour   = [[self hour] intValue];
272       _minute = [[self minute] intValue];
273       _second = [[self second] intValue];
274       
275       d = [NSCalendarDate dateWithYear: _year month:_month day:_day
276                           hour:_hour minute:_minute second:_second
277                           timeZone: timeZone];
278       [self _setDate: d];
279     }
280 }
281
282 - (void) setDisabled: (BOOL) disabled
283 {
284   isDisabled = disabled;
285 }
286
287 - (BOOL) disabled
288 {
289   return isDisabled;
290 }
291
292 @end /* UIxTimeDateControl */