tcp: Fix 64 bit build with debugging features enabled.
[haiku.git] / src / preferences / time / BaseView.cpp
blobeec15e44ecaaa55f9f00dfe77c35b039b97ff433
1 /*
2 * Copyright 2004-2007, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
5 * Authors:
6 * Mike Berg <mike@berg-net.us>
7 * Julun <host.haiku@gmx.de>
8 */
11 #include "BaseView.h"
13 #include <DateTime.h>
14 #include <OS.h>
16 #include "TimeMessages.h"
19 TTimeBaseView::TTimeBaseView(const char* name)
21 BGroupView(name, B_VERTICAL, 0),
22 fMessage(H_TIME_UPDATE)
24 SetFlags(Flags() | B_PULSE_NEEDED);
28 TTimeBaseView::~TTimeBaseView()
33 void
34 TTimeBaseView::Pulse()
36 if (IsWatched())
37 _SendNotices();
41 void
42 TTimeBaseView::AttachedToWindow()
44 SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
48 void
49 TTimeBaseView::ChangeTime(BMessage* message)
51 bool isTime;
52 if (message->FindBool("time", &isTime) != B_OK)
53 return;
55 BDateTime dateTime = BDateTime::CurrentDateTime(B_LOCAL_TIME);
57 if (isTime) {
58 BTime time = dateTime.Time();
59 int32 hour;
60 if (message->FindInt32("hour", &hour) != B_OK)
61 hour = time.Hour();
63 int32 minute;
64 if (message->FindInt32("minute", &minute) != B_OK)
65 minute = time.Minute();
67 int32 second;
68 if (message->FindInt32("second", &second) != B_OK)
69 second = time.Second();
71 time.SetTime(hour, minute, second);
72 dateTime.SetTime(time);
73 } else {
74 BDate date = dateTime.Date();
75 int32 day;
76 if (message->FindInt32("day", &day) != B_OK)
77 day = date.Day();
79 int32 year;
80 if (message->FindInt32("year", &year) != B_OK)
81 year = date.Year();
83 int32 month;
84 if (message->FindInt32("month", &month) != B_OK)
85 month = date.Month();
87 if (year >= 1970 && year <= 2037) {
88 date.SetDate(year, month, day);
89 dateTime.SetDate(date);
93 set_real_time_clock(dateTime.Time_t());
97 void
98 TTimeBaseView::_SendNotices()
100 fMessage.MakeEmpty();
102 BDate date = BDate::CurrentDate(B_LOCAL_TIME);
103 fMessage.AddInt32("day", date.Day());
104 fMessage.AddInt32("year", date.Year());
105 fMessage.AddInt32("month", date.Month());
107 BTime time = BTime::CurrentTime(B_LOCAL_TIME);
108 fMessage.AddInt32("hour", time.Hour());
109 fMessage.AddInt32("minute", time.Minute());
110 fMessage.AddInt32("second", time.Second());
112 SendNotices(H_TM_CHANGED, &fMessage);