1/*
2 * Copyright 2004-2011, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		McCall <mccall@@digitalparadise.co.uk>
7 *		Mike Berg <mike@berg-net.us>
8 *		Julun <host.haiku@gmx.de>
9 *		Hamish Morrison <hamish@lavabit.com>
10 */
11#ifndef _DATE_TIME_EDIT_H
12#define _DATE_TIME_EDIT_H
13
14
15#include <DateTime.h>
16#include <Locale.h>
17#include <String.h>
18
19#include "SectionEdit.h"
20
21
22class TTimeEdit : public TSectionEdit {
23public:
24								TTimeEdit(const char* name,	uint32 sections);
25	virtual						~TTimeEdit();
26
27	virtual	void				KeyDown(const char* bytes, int32 numBytes);
28
29	virtual	void				InitView();
30	virtual	void				DrawSection(uint32 index, BRect bounds,
31									bool isfocus);
32	virtual	void				DrawSeparator(uint32 index, BRect bounds);
33
34	virtual	void				SectionFocus(uint32 index);
35	virtual float				MinSectionWidth();
36	virtual float				SeparatorWidth();
37
38	virtual float				PreferredHeight();
39	virtual	void				DoUpPress();
40	virtual	void				DoDownPress();
41
42	virtual	void				BuildDispatch(BMessage* message);
43
44			void				SetTime(int32 hour, int32 minute, int32 second);
45
46private:
47			void				_UpdateFields();
48			void				_CheckRange();
49			bool				_IsValidDoubleDigit(int32 value);
50			int32				_SectionValue(int32 index) const;
51
52			BDateTime			fTime;
53			bigtime_t			fLastKeyDownTime;
54			int32				fLastKeyDownInt;
55
56			BString				fText;
57
58			// TODO: morph the following into a proper class
59			BDateElement*		fFields;
60			int					fFieldCount;
61			int*				fFieldPositions;
62			int					fFieldPosCount;
63};
64
65
66class TDateEdit : public TSectionEdit {
67public:
68								TDateEdit(const char* name, uint32 sections);
69	virtual						~TDateEdit();
70	virtual	void				KeyDown(const char* bytes, int32 numBytes);
71
72	virtual void				InitView();
73	virtual void				DrawSection(uint32 index, BRect bounds,
74									bool isfocus);
75	virtual void				DrawSeparator(uint32 index, BRect bounds);
76
77	virtual void				SectionFocus(uint32 index);
78	virtual float				MinSectionWidth();
79	virtual float				SeparatorWidth();
80
81	virtual float				PreferredHeight();
82	virtual void				DoUpPress();
83	virtual void				DoDownPress();
84
85	virtual void				BuildDispatch(BMessage* message);
86
87
88			void				SetDate(int32 year, int32 month, int32 day);
89
90private:
91			void				_UpdateFields();
92			void				_CheckRange();
93			bool				_IsValidDoubleDigit(int32 value);
94			int32				_SectionValue(int32 index) const;
95
96			BDate				fDate;
97			bigtime_t			fLastKeyDownTime;
98			int32				fLastKeyDownInt;
99
100			BString				fText;
101
102			// TODO: morph the following into a proper class
103			BDateElement*		fFields;
104			int					fFieldCount;
105			int*				fFieldPositions;
106			int					fFieldPosCount;
107};
108
109
110#endif	// _DATE_TIME_EDIT_H
111
112