1 /* 2 * Copyright 2004-2007, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Mike Berg <mike@berg-net.us> 7 * Julun <host.haiku@gmx.de> 8 */ 9 10 11 #include "BaseView.h" 12 13 #include <DateTime.h> 14 #include <OS.h> 15 16 #include "TimeMessages.h" 17 18 19 TTimeBaseView::TTimeBaseView(const char* name) 20 : 21 BGroupView(name, B_VERTICAL, 0), 22 fMessage(H_TIME_UPDATE) 23 { 24 SetFlags(Flags() | B_PULSE_NEEDED); 25 } 26 27 28 TTimeBaseView::~TTimeBaseView() 29 { 30 } 31 32 33 void 34 TTimeBaseView::Pulse() 35 { 36 if (IsWatched()) 37 _SendNotices(); 38 } 39 40 41 void 42 TTimeBaseView::AttachedToWindow() 43 { 44 SetViewUIColor(B_PANEL_BACKGROUND_COLOR); 45 SetLowUIColor(ViewUIColor()); 46 } 47 48 49 void 50 TTimeBaseView::ChangeTime(BMessage* message) 51 { 52 bool isTime; 53 if (message->FindBool("time", &isTime) != B_OK) 54 return; 55 56 BDateTime dateTime = BDateTime::CurrentDateTime(B_LOCAL_TIME); 57 58 if (isTime) { 59 BTime time = dateTime.Time(); 60 int32 hour; 61 if (message->FindInt32("hour", &hour) != B_OK) 62 hour = time.Hour(); 63 64 int32 minute; 65 if (message->FindInt32("minute", &minute) != B_OK) 66 minute = time.Minute(); 67 68 int32 second; 69 if (message->FindInt32("second", &second) != B_OK) 70 second = time.Second(); 71 72 time.SetTime(hour, minute, second); 73 dateTime.SetTime(time); 74 } else { 75 BDate date = dateTime.Date(); 76 int32 day; 77 if (message->FindInt32("day", &day) != B_OK) 78 day = date.Day(); 79 80 int32 year; 81 if (message->FindInt32("year", &year) != B_OK) 82 year = date.Year(); 83 84 int32 month; 85 if (message->FindInt32("month", &month) != B_OK) 86 month = date.Month(); 87 88 date.SetDate(year, month, day); 89 dateTime.SetDate(date); 90 } 91 92 set_real_time_clock(dateTime.Time_t()); 93 } 94 95 96 void 97 TTimeBaseView::_SendNotices() 98 { 99 fMessage.MakeEmpty(); 100 101 BDate date = BDate::CurrentDate(B_LOCAL_TIME); 102 fMessage.AddInt32("day", date.Day()); 103 fMessage.AddInt32("year", date.Year()); 104 fMessage.AddInt32("month", date.Month()); 105 106 BTime time = BTime::CurrentTime(B_LOCAL_TIME); 107 fMessage.AddInt32("hour", time.Hour()); 108 fMessage.AddInt32("minute", time.Minute()); 109 fMessage.AddInt32("second", time.Second()); 110 111 SendNotices(H_TM_CHANGED, &fMessage); 112 } 113 114