patch by Julun:

* further cleanup of code to apply style guide
* removed now obsolete clock bitmaps
* some restructuring of the code
* adjusted layout of the time zone pane


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22222 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2007-09-12 06:08:42 +00:00
parent 9382f57691
commit 42b3a11f19
17 changed files with 465 additions and 1025 deletions
+67 -68
View File
@@ -1,26 +1,30 @@
/* /*
BaseView.cpp * Copyright 2004-2007, Haiku, Inc. All Rights Reserved.
by Mike Berg (inseculous) * Distributed under the terms of the MIT License.
*/ *
* Authors:
#include <Alert.h> * Mike Berg (inseculous)
#include <OS.h> * Julun <[email protected]>
*/
#include "BaseView.h" #include "BaseView.h"
#include "TimeMessages.h" #include "TimeMessages.h"
#include <Message.h>
#include <OS.h>
TTimeBaseView::TTimeBaseView(BRect frame, const char *name) TTimeBaseView::TTimeBaseView(BRect frame, const char *name)
: BView(frame, name, B_FOLLOW_ALL_SIDES, B_PULSE_NEEDED), : BView(frame, name, B_FOLLOW_ALL_SIDES, B_PULSE_NEEDED),
fMessage(NULL) fIsGMT(false),
fMessage(H_TIME_UPDATE)
{ {
fMessage = new BMessage(H_TIME_UPDATE);
} }
TTimeBaseView::~TTimeBaseView() TTimeBaseView::~TTimeBaseView()
{ {
delete fMessage;
} }
@@ -47,76 +51,71 @@ TTimeBaseView::SetGMTime(bool gmt)
void void
TTimeBaseView::DispatchMessage() TTimeBaseView::ChangeTime(BMessage *message)
{ {
if (fMessage == NULL) bool isTime;
if (message->FindBool("time", &isTime) != B_OK)
return; return;
time_t current = time(NULL); time_t tmp = time(NULL);
struct tm *tm_struct = localtime(&tmp);
struct tm *ltime; if (isTime) {
int32 hour = 0;
if (message->FindInt32("hour", &hour) == B_OK)
tm_struct->tm_hour = hour;
if (fIsGMT) int32 minute = 0;
ltime = gmtime(&current); if (message->FindInt32("minute", &minute) == B_OK)
else tm_struct->tm_min = minute;
ltime = localtime(&current);
int32 month = ltime->tm_mon;
int32 day = ltime->tm_mday;
int32 year = ltime->tm_year;
int32 hour = ltime->tm_hour;
int32 minute = ltime->tm_min;
int32 second = ltime->tm_sec;
fMessage->MakeEmpty();
fMessage->AddInt32("month", month);
fMessage->AddInt32("day", day);
fMessage->AddInt32("year", year);
fMessage->AddInt32("hour", hour);
fMessage->AddInt32("minute", minute);
fMessage->AddInt32("second", second);
SendNotices(H_TM_CHANGED, fMessage); int32 second = 0;
if (message->FindInt32("second", &second) == B_OK)
tm_struct->tm_sec = second;
bool isAM = false;
if (message->FindBool("isam", &isAM) == B_OK) {
if (!isAM)
tm_struct->tm_hour += 12;
}
} else {
int32 month = 0;
if (message->FindInt32("month", &month) == B_OK)
tm_struct->tm_mon = month;
int32 day = 0;
if (message->FindInt32("day", &day) == B_OK)
tm_struct->tm_mday = day;
int32 year = 0;
if (message->FindInt32("year", &year) == B_OK)
tm_struct->tm_year = year;
}
tmp = mktime(tm_struct);
set_real_time_clock(tmp);
} }
void void
TTimeBaseView::ChangeTime(BMessage *message) TTimeBaseView::DispatchMessage()
{ {
bool istime; time_t tmp = time(NULL);
if (message->FindBool("time", &istime) != B_OK) struct tm *tm_struct = localtime(&tmp);
return;
time_t atime = time(NULL); if (fIsGMT)
struct tm *_tm = localtime(&atime); tm_struct = gmtime(&tmp);
int32 hour = 0; fMessage.MakeEmpty();
int32 minute = 0;
int32 second = 0; fMessage.AddInt32("month", tm_struct->tm_mon);
int32 month = 0; fMessage.AddInt32("day", tm_struct->tm_mday);
int32 day = 0; fMessage.AddInt32("year", tm_struct->tm_year);
int32 year = 0;
bool isam = false; fMessage.AddInt32("hour", tm_struct->tm_hour);
if (istime) { fMessage.AddInt32("minute", tm_struct->tm_min);
if (message->FindInt32("hour", &hour) == B_OK) fMessage.AddInt32("second", tm_struct->tm_sec);
_tm->tm_hour = hour;
if (message->FindInt32("minute", &minute) == B_OK) SendNotices(H_TM_CHANGED, &fMessage);
_tm->tm_min = minute;
if (message->FindInt32("second", &second) == B_OK)
_tm->tm_sec = second;
if (message->FindBool("isam", &isam) == B_OK) {
if (!isam)
_tm->tm_hour += 12;
}
} else {
if (message->FindInt32("month", &month) == B_OK)
_tm->tm_mon = month;
if (message->FindInt32("day", &day) == B_OK)
_tm->tm_mday = day;
if (message->FindInt32("year", &year) == B_OK)
_tm->tm_year = year;
}
time_t atime2 = mktime(_tm);
set_real_time_clock(atime2);
} }
+23 -11
View File
@@ -1,25 +1,37 @@
/*
* Copyright 2004-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Mike Berg (inseculous)
* Julun <[email protected]>
*/
#ifndef TIMEBASE_H #ifndef TIMEBASE_H
#define TIMEBASE_H #define TIMEBASE_H
#include <Message.h>
#include <View.h> #include <View.h>
#include <Message.h>
class TTimeBaseView: public BView { class TTimeBaseView: public BView {
public: public:
TTimeBaseView(BRect frmae, const char *name); TTimeBaseView(BRect frame, const char *name);
virtual ~TTimeBaseView(); virtual ~TTimeBaseView();
virtual void Pulse(); virtual void Pulse();
virtual void AttachedToWindow(); virtual void AttachedToWindow();
void SetGMTime(bool gmtTime);
void ChangeTime(BMessage *message);
void ChangeTime(BMessage *);
void SetGMTime(bool);
protected: protected:
virtual void DispatchMessage(); virtual void DispatchMessage();
private: private:
BMessage *fMessage; bool fIsGMT;
bool fIsGMT; BMessage fMessage;
}; };
#endif //TIMEBASE_H #endif // TIMEBASE_H
+13 -3
View File
@@ -1,13 +1,23 @@
#include <Bitmap.h> /*
* Copyright 2004-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Julun <[email protected]>
*/
#include "Bitmaps.h"
#include <Debug.h> #include <Debug.h>
#include <Screen.h> #include <Screen.h>
#include "Bitmaps.h"
void void
ReplaceTransparentColor(BBitmap *bitmap, rgb_color with) ReplaceTransparentColor(BBitmap *bitmap, rgb_color with)
{ {
ASSERT(bitmap->ColorSpace() == B_COLOR_8_BIT); // other color spaces not implemented yet // other color spaces not implemented yet
ASSERT(bitmap->ColorSpace() == B_COLOR_8_BIT);
BScreen screen(B_MAIN_SCREEN_ID); BScreen screen(B_MAIN_SCREEN_ID);
uint32 withIndex = screen.IndexForColor(with); uint32 withIndex = screen.IndexForColor(with);
+16 -505
View File
@@ -1,510 +1,19 @@
/*
* Copyright 2004-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Julun <[email protected]>
*/
#ifndef ANALOG_CLOCK_H
#define ANALOG_CLOCK_H
#include <Bitmap.h>
void ReplaceTransparentColor(BBitmap *bitmap, rgb_color with); void ReplaceTransparentColor(BBitmap *bitmap, rgb_color with);
const int32 kClockFaceWidth = 85;
const int32 kClockFaceHeight = 85;
const color_space kClockFaceColorSpace = B_CMAP8;
const unsigned char kClockFaceBits [] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x1d,0x3f,0x3f,0x3f,0x1e,0xff,0x18,0x16,0x13,0x12,0x11,
0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x13,0x16,0x18,0x1a,0x1d,0x3f,0x1d,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1d,0x3f,0x3f,0x1e,0x1a,0x17,
0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x13,0x17,0x19,0x1e,0x1d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x1e,0x3f,0x3f,0x1a,0x16,0x12,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,
0x16,0x19,0x1e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x1e,0x18,0x13,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x13,0x16,0x1c,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x3f,0x1e,0x18,
0x12,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0d,0x0b,0x09,0x07,0x06,0x05,0x04,
0x03,0x03,0x03,0x04,0x05,0x06,0x07,0x09,0x0b,0x0d,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x12,0x15,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0x1d,0x3f,0x3f,0x19,0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x0e,0x0b,0x08,
0x05,0x03,0x05,0x08,0x0c,0x11,0x15,0x19,0x1c,0x1e,0x3f,0x1e,0x1c,0x19,0x15,0x11,
0x0c,0x08,0x08,0x08,0x0b,0x0e,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x13,0x15,
0x1d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x1b,0x14,0x10,0x10,0x10,
0x10,0x10,0x10,0x0c,0x08,0x05,0x04,0x08,0x0f,0x17,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x17,0x0f,0x0b,0x0a,0x0c,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x17,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1c,
0x3f,0x3f,0x18,0x11,0x10,0x10,0x10,0x10,0x0f,0x0b,0x07,0x03,0x06,0x0f,0x19,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x19,0x0f,0x0c,0x0b,0x0f,0x10,0x10,0x10,0x10,0x10,
0x10,0x11,0x14,0x1c,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0x1d,0x3f,0x1d,0x15,0x10,0x10,0x10,0x10,0x10,0x0b,
0x07,0x03,0x08,0x13,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x13,0x0e,0x0c,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x18,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1d,0x3f,0x1b,
0x13,0x10,0x10,0x10,0x10,0x0d,0x08,0x03,0x08,0x13,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x14,0x0e,0x0d,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x16,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0x1e,0x3f,0x1a,0x12,0x10,0x10,0x10,0x10,0x0a,0x05,0x05,0x10,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,
0x3f,0x3f,0xda,0x2b,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x13,0x0e,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0x3f,0x19,0x11,0x10,
0x10,0x10,0x0e,0x08,0x03,0x0a,0x18,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x2b,0x3f,0x3f,0x2b,0x3f,0x3f,0x2b,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x18,0x10,
0x0e,0x10,0x10,0x10,0x10,0x10,0x0f,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0x1d,0x3f,0x19,0x11,0x10,0x10,0x10,0x0d,0x07,0x04,0x0f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,
0x3f,0x3f,0x3f,0x3f,0x1d,0x2b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x13,0x0f,0x10,0x10,0x10,0x10,0x10,0x0f,
0x13,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1d,0x3f,0x1a,0x11,0x10,0x10,0x10,
0x0c,0x06,0x06,0x13,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x3f,0x3f,0x3f,0x3f,0x2b,0xda,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x16,0x10,0x10,0x10,0x10,0x10,0x10,0x0e,0x13,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x1c,0x3f,0x1b,0x12,0x10,0x10,0x10,0x0c,0x05,0x06,0x16,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,
0x3f,0x3f,0x3f,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x18,0x10,0x10,0x10,0x10,0x10,
0x10,0x0e,0x14,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x1d,0x13,0x10,0x10,0x10,0x0c,0x05,
0x07,0x18,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x3f,0x3f,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x1a,0x11,0x10,0x10,0x10,0x10,0x10,0x0e,0x16,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,
0x3f,0x15,0x10,0x10,0x10,0x0d,0x06,0x06,0x18,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x2b,
0x2b,0x3f,0x2b,0x2b,0x2b,0x2b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xad,
0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1a,0x11,0x10,0x10,
0x10,0x10,0x10,0x0e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0x1d,0x3f,0x18,0x10,0x10,0x10,0x0e,0x07,0x06,0x16,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x24,0x24,0x24,0x60,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x24,0x24,0x24,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x19,0x11,0x10,0x10,0x10,0x10,0x0d,0x10,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x1b,
0x11,0x10,0x10,0x10,0x08,0x04,0x13,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xad,
0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x17,0x11,
0x10,0x10,0x10,0x10,0x0d,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0x1e,0x3f,0x14,0x10,0x10,0x10,0x0a,0x03,0x0f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x15,0x10,0x10,0x10,0x10,0x10,0x0d,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0x3f,0x19,0x10,
0x10,0x10,0x0d,0x05,0x0a,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x13,0x10,0x10,0x10,0x10,0x0c,0x10,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0x3f,0x1e,0x13,0x10,0x10,0x10,0x08,0x05,0x18,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1a,0x12,0x10,0x10,0x10,0x10,0x0c,0x17,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0x3f,0x18,0x10,0x10,
0x10,0x0b,0x03,0x10,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x16,0x10,0x10,0x10,0x10,0x0d,0x0e,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0x1e,0x1e,0x12,0x10,0x10,0x0f,0x07,0x08,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1e,0x14,0x10,0x10,0x10,0x10,0x0b,
0x17,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0x3f,0x18,0x10,0x10,0x10,
0x0b,0x03,0x13,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x18,0x10,0x10,0x10,0x10,0x0c,0x0e,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0x1d,0x3f,0x13,0x10,0x10,0x10,0x07,0x08,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x15,0x10,0x10,0x10,0x10,
0x0a,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0x3f,0x1a,0x10,0x10,0x10,0x0c,
0x03,0x13,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x18,0x10,0x10,0x10,0x10,0x0a,0x11,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0x3f,0x16,0x10,0x10,0x10,0x08,0x06,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x13,0x10,0x10,0x10,
0x0d,0x0b,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0x1d,0x1e,0x12,0x10,0x10,0x0e,0x05,
0x0f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x24,0x24,0x24,0x60,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x24,0x24,0x24,0x60,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x17,0x10,0x10,0x10,0x10,0x09,0x18,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0x3f,0x1a,0x10,0x10,0x10,0x0b,0x04,0x19,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1c,0x11,0x10,0x10,
0x10,0x09,0x11,0xff,0xff,0x3f,0x3f,0x3f,0xff,0x3f,0x17,0x10,0x10,0x10,0x08,0x08,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x14,0x10,0x10,0x10,0x0c,0x0b,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0x3f,0x13,0x10,0x10,0x10,0x05,0x0f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x18,0x10,0x10,
0x10,0x0e,0x08,0xff,0xff,0x3f,0x3f,0x3f,0xff,0x1e,0x10,0x10,0x10,0x0d,0x03,0x17,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x1b,0x10,0x10,0x10,0x10,0x07,0x17,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0x10,0x10,0x10,0x0b,0x05,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x11,0x10,
0x10,0x10,0x08,0x12,0xff,0x3f,0x3f,0x3f,0xff,0x18,0x10,0x10,0x10,0x09,0x08,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x14,0x10,0x10,0x10,0x0a,0x0d,0xff,0x3f,0x3f,0x3f,
0xff,0x16,0x10,0x10,0x10,0x07,0x0c,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x17,0x10,
0x10,0x10,0x0b,0x0a,0xff,0x3f,0x3f,0x3f,0xff,0x13,0x10,0x10,0x10,0x06,0x11,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x19,0x10,0x10,0x10,0x0d,0x08,0xff,0x3f,0x3f,0x3f,
0xff,0x12,0x10,0x10,0x10,0x05,0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1b,0x10,
0x10,0x10,0x0e,0x06,0xff,0x3f,0x3f,0x3f,0xff,0x11,0x10,0x10,0x10,0x04,0x19,0x3f,
0x3f,0x3f,0x3f,0xda,0x2b,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xda,0x2b,
0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x1d,0x10,0x10,0x10,0x0f,0x05,0xff,0x3f,0x3f,0x3f,
0xff,0x10,0x10,0x10,0x10,0x03,0x1c,0x3f,0x3f,0x3f,0x3f,0x2b,0x3f,0x3f,0x2b,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x3f,0x3f,0x2b,0x3f,0x3f,0x3f,0x3f,0x1e,0x10,
0x10,0x10,0x0f,0x03,0xff,0x3f,0x3f,0x3f,0xff,0x10,0x10,0x10,0x10,0x03,0x1e,0x3f,
0x3f,0x3f,0x3f,0x2b,0x3f,0x3f,0x2b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x2b,0x3f,0x3f,0x3f,0x3f,0x3f,0x10,0x10,0x10,0x10,0x03,0xff,0x3f,0x3f,0x3f,
0xff,0x10,0x10,0x10,0x10,0x03,0x3f,0x3f,0x3f,0x3f,0x3f,0xda,0x2b,0x2b,0x2b,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x3f,0x10,
0x10,0x10,0x0f,0x03,0xff,0x3f,0x3f,0x3f,0xff,0x10,0x10,0x10,0x10,0x04,0x1e,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0xda,0x2b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x2b,0x3f,0x3f,0x3f,0x3f,0x3f,0x10,0x10,0x10,0x0f,0x03,0xff,0x3f,0x3f,0x3f,
0xff,0x10,0x10,0x10,0x10,0x05,0x1c,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0xda,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x3f,0x3f,0x2b,0x3f,0x3f,0x3f,0x3f,0x1e,0x10,
0x10,0x10,0x0e,0x03,0xff,0x3f,0x3f,0x3f,0xff,0x11,0x10,0x10,0x10,0x06,0x19,0x3f,
0x3f,0x3f,0x3f,0x3f,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xda,0x2b,
0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x1d,0x10,0x10,0x10,0x0d,0x05,0xff,0x3f,0x3f,0x3f,
0xff,0x12,0x10,0x10,0x10,0x07,0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1b,0x10,
0x10,0x10,0x0b,0x06,0xff,0x3f,0x3f,0x3f,0xff,0x13,0x10,0x10,0x10,0x09,0x11,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x19,0x10,0x10,0x10,0x0a,0x08,0xff,0x3f,0x3f,0x3f,
0xff,0x16,0x10,0x10,0x10,0x0b,0x0c,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x17,0x10,
0x10,0x10,0x08,0x0a,0xff,0x3f,0x3f,0x3f,0xff,0x18,0x10,0x10,0x10,0x0d,0x08,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x14,0x10,0x10,0x10,0x06,0x0d,0xff,0x3f,0x3f,0x3f,
0xff,0x1a,0x10,0x10,0x10,0x10,0x08,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x11,0x10,
0x10,0x0e,0x04,0x12,0xff,0x3f,0x3f,0x3f,0xff,0x1d,0x10,0x10,0x10,0x10,0x08,0x17,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x1c,0x10,0x10,0x10,0x0c,0x04,0x17,0xff,0x3f,0x3f,0x3f,
0xff,0x3f,0x13,0x10,0x10,0x10,0x0b,0x0f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x18,0x10,0x10,
0x10,0x09,0x07,0xff,0xff,0x3f,0x3f,0x3f,0xff,0x1d,0x17,0x10,0x10,0x10,0x0e,0x0b,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x14,0x10,0x10,0x10,0x06,0x0b,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0x19,0x10,0x10,0x10,0x10,0x0a,0x19,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1d,0x11,0x10,0x10,
0x0d,0x04,0x11,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0x1e,0x12,0x10,0x10,0x10,0x0c,
0x0f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x24,0x24,0x24,0x60,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x24,0x24,0x24,0x60,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x18,0x10,0x10,0x10,0x0a,0x05,0x18,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0x1d,0x16,0x10,0x10,0x10,0x10,0x0c,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x13,0x10,0x10,0x10,
0x06,0x0a,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0x19,0x10,0x10,0x10,0x10,
0x0b,0x13,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x1a,0x10,0x10,0x10,0x0c,0x03,0x11,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0x1e,0x13,0x10,0x10,0x10,0x0f,0x0e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x14,0x10,0x10,0x10,0x08,
0x07,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0x16,0x10,0x10,0x10,
0x10,0x0c,0x14,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x1a,0x10,0x10,0x10,0x0d,0x04,0x0e,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0x1c,0x12,0x10,0x10,0x10,0x10,0x0e,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x14,0x10,0x10,0x10,0x08,0x06,
0x17,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0x15,0x10,0x10,
0x10,0x10,0x0d,0x13,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x18,0x10,0x10,0x10,0x0c,0x04,0x0d,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0x13,0x10,0x10,0x10,0x10,0x0e,0x18,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1c,0x12,0x10,0x10,0x10,0x07,0x06,0x17,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x15,0x10,
0x10,0x10,0x10,0x10,0x10,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x15,0x10,0x10,0x10,0x0b,0x03,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0x1d,0x12,0x10,0x10,0x10,0x10,0x0e,0x13,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x18,0x10,0x10,0x10,0x0d,0x06,0x09,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x17,
0x11,0x10,0x10,0x10,0x10,0x0f,0x16,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xad,
0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1a,0x11,
0x10,0x10,0x10,0x08,0x05,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x18,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x24,0x24,0x24,0x60,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x24,0x24,0x24,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x1b,0x12,0x10,0x10,0x10,0x0a,0x03,0x0d,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x1c,0x12,0x10,0x10,0x10,0x10,0x10,0x10,0x1a,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0xad,0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0xda,0x2b,0x2b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xad,
0x24,0xad,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1c,0x13,0x10,0x10,
0x10,0x0c,0x05,0x0a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0x10,0x10,0x10,0x10,0x10,0x10,
0x11,0x1a,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xda,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x60,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x1c,0x13,0x10,0x10,0x10,0x0d,0x06,0x07,0x16,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0x16,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x19,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1b,0x13,0x10,0x10,0x10,0x0d,
0x07,0x06,0x12,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x14,0x0f,0x10,0x10,0x10,
0x10,0x10,0x11,0x17,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x2b,0x2b,0xda,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x1a,0x12,0x10,0x10,0x10,0x0e,0x07,0x05,0x10,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0x13,0x0f,0x10,0x10,0x10,0x10,0x10,0x11,0x15,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x2b,0x3f,0x3f,0x2b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x18,0x11,0x10,0x10,0x10,0x0d,0x07,0x05,
0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x13,0x0e,0x10,
0x10,0x10,0x10,0x10,0x10,0x13,0x1a,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x2b,0x1d,0x3f,0x2b,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1c,0x15,
0x10,0x10,0x10,0x10,0x0d,0x07,0x05,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0x13,0x0e,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x16,
0x1e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0xda,0x2b,0x2b,0xda,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x18,0x12,0x10,0x10,0x10,0x10,0x0c,0x06,0x06,0x10,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x14,
0x0e,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0x18,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1a,0x14,0x10,0x10,0x10,
0x10,0x10,0x0a,0x05,0x07,0x12,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x16,0x0e,0x0d,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x15,0x18,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x1a,0x14,0x10,0x10,0x10,0x10,0x10,0x0d,0x08,0x03,0x0a,0x16,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0x10,0x0d,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x13,0x17,0x1c,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1d,0x18,0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x0b,
0x06,0x05,0x0d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x13,0x0d,0x0c,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x14,0x18,0x1b,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x1c,0x18,0x14,0x11,0x10,
0x10,0x10,0x10,0x10,0x10,0x0c,0x07,0x03,0x09,0x13,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x10,0x0c,0x0d,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x11,0x14,0x17,0x19,0x1b,0x1d,0x1e,0x3f,0x3f,0x3f,0x1e,0x1d,0x1b,0x19,
0x17,0x14,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0d,0x08,0x04,0x06,0x0f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x17,0x0e,
0x0b,0x0c,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x0c,0x08,0x04,0x06,0x0d,0x17,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x17,0x0e,0x0a,0x0a,0x0d,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x0d,0x0a,0x06,0x03,0x07,0x0e,0x17,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0x11,0x0b,0x09,0x09,0x0c,0x0e,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0e,0x0c,0x09,0x06,0x04,0x05,
0x0a,0x11,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0x11,0x0b,
0x08,0x07,0x08,0x0a,0x0b,0x0d,0x0e,0x0f,0x0f,0x10,0x0f,0x0f,0x0e,0x0d,0x0b,0x0a,
0x08,0x06,0x04,0x04,0x07,0x0b,0x11,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x17,0x12,0x0d,0x0a,0x08,0x06,0x05,
0x03,0x03,0x03,0x03,0x03,0x05,0x06,0x08,0x0a,0x0d,0x12,0x17,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f,0x3f
};
const int32 kCenterWidth = 7;
const int32 kCenterHeight = 7;
const color_space kCenterColorSpace = B_CMAP8;
const unsigned char kCenterBits [] = {
0x3f,0x3f,0x0a,0x0a,0x0a,0x3f,0x3f,0x3f,
0x3f,0x0a,0x15,0x15,0x15,0x0a,0x3f,0x0a,
0x0a,0x15,0x0a,0x0a,0x0a,0x15,0x0a,0x0a,
0x0a,0x15,0x0a,0x00,0x0a,0x15,0x0a,0x0a,
0x0a,0x15,0x0a,0x0a,0x0a,0x15,0x0a,0x0a,
0x3f,0x0a,0x15,0x15,0x15,0x0a,0x3f,0x3f,
0x3f,0x3f,0x0a,0x0a,0x0a,0x3f,0x3f};
const int32 kCapWidth = 5;
const int32 kCapHeight = 5;
const color_space kCapColorSpace = B_CMAP8;
const unsigned char kCapBits [] = {
0x0a, 0x15, 0x15, 0x15, 0x0a, 0x00, 0x00, 0x00,
0x15, 0x0a, 0x0a, 0x0a, 0x15, 0x00, 0x00, 0x00,
0x15, 0x0a, 0x00, 0x0a, 0x15, 0x00, 0x00, 0x00,
0x15, 0x0a, 0x0a, 0x0a, 0x15, 0x00, 0x00, 0x00,
0x0a, 0x15, 0x15, 0x15, 0x0a, 0x00, 0x00, 0x00
};
const int32 kUpArrowWidth = 16; const int32 kUpArrowWidth = 16;
const int32 kUpArrowHeight = 7; const int32 kUpArrowHeight = 7;
const color_space kUpArrowColorSpace = B_CMAP8; const color_space kUpArrowColorSpace = B_CMAP8;
@@ -533,3 +42,5 @@ const unsigned char kDownArrowBits [] = {
0xff,0xff,0xff,0xff,0xff,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0x3f,0xff,0xff 0xff,0xff,0xff,0xff,0xff,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0x3f,0xff,0xff
}; };
#endif // ANALOG_CLOCK_H
+9 -8
View File
@@ -1,12 +1,11 @@
/* /*
* Copyright 2004-2005, Haiku. * Copyright 2004-2007, Haiku.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors: * Authors:
* Michael Berg <[email protected]> * Michael Berg <[email protected]>
*/ */
#include <String.h> #include <String.h>
#include <Window.h> #include <Window.h>
@@ -455,12 +454,14 @@ void
TCalendarView::DispatchMessage() TCalendarView::DispatchMessage()
{ {
// send message to update timedate // send message to update timedate
BMessage *msg = new BMessage(H_USER_CHANGE); BMessage msg(H_USER_CHANGE);
msg->AddBool("time", false); msg.AddBool("time", false);
msg->AddInt32("month", f_month); msg.AddInt32("month", f_month);
msg.AddInt32("year", f_year);
if (f_cday != NULL) if (f_cday != NULL)
msg->AddInt32("day", f_cday->Day()); msg.AddInt32("day", f_cday->Day());
msg->AddInt32("year", f_year);
Window()->PostMessage(msg); Window()->PostMessage(&msg);
} }
-2
View File
@@ -299,5 +299,3 @@ TSectionEdit::DoDownPress()
{ {
} }
//---//
+12 -29
View File
@@ -13,6 +13,7 @@
#include "DateTimeEdit.h" #include "DateTimeEdit.h"
#include "TimeMessages.h" #include "TimeMessages.h"
#include <Entry.h> #include <Entry.h>
#include <File.h> #include <File.h>
#include <FindDirectory.h> #include <FindDirectory.h>
@@ -25,7 +26,7 @@
TSettingsView::TSettingsView(BRect frame) TSettingsView::TSettingsView(BRect frame)
: BView(frame,"Settings", B_FOLLOW_ALL, : BView(frame,"Settings", B_FOLLOW_ALL,
B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP), B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP),
fGmtTime(NULL) fGmtTime(NULL)
{ {
InitView(); InitView();
} }
@@ -109,17 +110,6 @@ TSettingsView::InitView()
fCalendar = new TCalendarView(frameLeft, "calendar", B_FOLLOW_NONE, B_WILL_DRAW); fCalendar = new TCalendarView(frameLeft, "calendar", B_FOLLOW_NONE, B_WILL_DRAW);
AddChild(fCalendar); AddChild(fCalendar);
frameLeft.top = fCalendar->Frame().bottom + 10;
BStringView *text = new BStringView(frameLeft, "timezone", "Timezone:");
AddChild(text);
text->ResizeToPreferred();
frameLeft.left += 20.0f;
frameLeft.top = text->Frame().bottom + 5;
fTimeZone = new BStringView(frameLeft, "label", " ");
AddChild(fTimeZone);
// right side // right side
BRect frameRight(Bounds()); BRect frameRight(Bounds());
frameRight.left = frameRight.Width() / 2; frameRight.left = frameRight.Width() / 2;
@@ -144,14 +134,15 @@ TSettingsView::InitView()
// clock radio buttons // clock radio buttons
frameRight.left = left; frameRight.left = left;
frameRight.top = fClock->Frame().bottom + 10; frameRight.top = fClock->Frame().bottom + 10;
text = new BStringView(frameRight, "clockis", "Clock set to:"); BStringView *text = new BStringView(frameRight, "clockis", "Clock set to:");
AddChild(text); AddChild(text);
text->ResizeToPreferred(); text->ResizeToPreferred();
frameRight.left += 20.0f; frameRight.left += 10.0f;
frameRight.top = text->Frame().bottom + 5; frameRight.top = text->Frame().bottom + 5;
fLocalTime = new BRadioButton(frameRight, "local", "Local time", new BMessage(H_RTC_CHANGE)); fLocalTime = new BRadioButton(frameRight, "local", "Local time",
new BMessage(H_RTC_CHANGE));
AddChild(fLocalTime); AddChild(fLocalTime);
fLocalTime->ResizeToPreferred(); fLocalTime->ResizeToPreferred();
@@ -200,14 +191,6 @@ TSettingsView::GMTime()
} }
void
TSettingsView::SetTimeZone(const char *timezone)
{
fTimeZone->SetText(timezone);
fTimeZone->ResizeToPreferred();
}
void void
TSettingsView::UpdateDateTime(BMessage *message) TSettingsView::UpdateDateTime(BMessage *message)
{ {
@@ -239,9 +222,9 @@ void
TSettingsView::ReadRTCSettings() TSettingsView::ReadRTCSettings()
{ {
BPath path; BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK) { if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
return; // NO USER SETTINGS DIRECTORY!!! return;
}
path.Append("RTC_time_settings"); path.Append("RTC_time_settings");
BFile file; BFile file;
@@ -249,9 +232,9 @@ TSettingsView::ReadRTCSettings()
if (entry.Exists()) { if (entry.Exists()) {
file.SetTo(&entry, B_READ_ONLY); file.SetTo(&entry, B_READ_ONLY);
if (file.InitCheck() == B_OK) { if (file.InitCheck() == B_OK) {
char buff[6]; char localTime[6];
file.Read(buff, 6); file.Read(localTime, 6);
BString text(buff); BString text(localTime);
if (text.Compare("local\n", 5) == 0) if (text.Compare("local\n", 5) == 0)
fIsLocalTime = true; fIsLocalTime = true;
else else
+2 -4
View File
@@ -18,7 +18,7 @@ class TTimeEdit;
class TCalendarView; class TCalendarView;
class TAnalogClock; class TAnalogClock;
class BRadioButton; class BRadioButton;
class BStringView;
class TSettingsView : public BView { class TSettingsView : public BView {
public: public:
@@ -32,7 +32,6 @@ class TSettingsView : public BView {
void ChangeRTCSetting(); void ChangeRTCSetting();
bool GMTime(); bool GMTime();
void SetTimeZone(const char *timezone);
private: private:
void InitView(); void InitView();
@@ -46,8 +45,7 @@ class TSettingsView : public BView {
TCalendarView *fCalendar; TCalendarView *fCalendar;
TAnalogClock *fClock; TAnalogClock *fClock;
bool fIsLocalTime; bool fIsLocalTime;
BStringView *fTimeZone;
}; };
#endif #endif // SETTINGS_VIEW_H
+21 -24
View File
@@ -1,31 +1,34 @@
/* /*
* Copyright 2002-2006, Haiku. All rights reserved. * Copyright 2002-2007, Haiku. All rights reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors in chronological order: * Authors:
* Andrew McCall, mccall@digitalparadise.co.uk * Andrew McCall, mccall@digitalparadise.co.uk
* Mike Berg * Mike Berg (inseculous)
* Julun <host.haiku@gmx.de>
*/ */
#include "Time.h" #include "Time.h"
#include "TimeSettings.h"
#include "TimeMessages.h" #include "TimeMessages.h"
#include "TimeSettings.h"
#include "TimeWindow.h"
#include <Alert.h> #include <Alert.h>
#include <Message.h>
TimeApplication::TimeApplication() TimeApplication::TimeApplication()
: BApplication(HAIKU_APP_SIGNATURE) : BApplication(HAIKU_APP_SIGNATURE),
fWindow(NULL)
{ {
fSettings = new TimeSettings(); BPoint pt = TimeSettings().LeftTop();
fWindow = new TTimeWindow(); fWindow = new TTimeWindow(pt);
} }
TimeApplication::~TimeApplication() TimeApplication::~TimeApplication()
{ {
delete fSettings;
} }
@@ -33,12 +36,12 @@ void
TimeApplication::MessageReceived(BMessage *message) TimeApplication::MessageReceived(BMessage *message)
{ {
switch (message->what) { switch (message->what) {
case ERROR_DETECTED: case UPDATE_SETTINGS:
(new BAlert("Error", "Something has gone wrong!", "OK", {
NULL, NULL, B_WIDTH_AS_USUAL, B_OFFSET_SPACING, BPoint pt;
B_WARNING_ALERT))->Go(); if (message->FindPoint("LeftTop", &pt) == B_OK)
be_app->PostMessage(B_QUIT_REQUESTED); TimeSettings().SetLeftTop(pt);
break; } break;
default: default:
BApplication::MessageReceived(message); BApplication::MessageReceived(message);
@@ -57,14 +60,8 @@ TimeApplication::ReadyToRun()
void void
TimeApplication::AboutRequested() TimeApplication::AboutRequested()
{ {
(new BAlert("about", "...by Andrew Edward McCall\n...Mike Berg too", "Big Deal"))->Go(); BAlert alert("about", "Time & Date, by\n\nAndrew Edward McCall\nMike Berg", "OK");
} alert.Go();
void
TimeApplication::SetWindowCorner(BPoint corner)
{
fSettings->SetWindowCorner(corner);
} }
@@ -72,7 +69,7 @@ TimeApplication::SetWindowCorner(BPoint corner)
int int
main(int, char**) main(int argc, char** argv)
{ {
TimeApplication app; TimeApplication app;
app.Run(); app.Run();
+15 -18
View File
@@ -1,38 +1,35 @@
/* /*
* Copyright 2002-2006, Haiku. All rights reserved. * Copyright 2002-2007, Haiku. All rights reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors in chronological order: * Authors:
* Andrew McCall, mccall@digitalparadise.co.uk * Andrew McCall, mccall@digitalparadise.co.uk
* Mike Berg * Mike Berg (inseculous)
* Julun <host.haiku@gmx.de>
*/ */
#ifndef TIME_H #ifndef TIME_H
#define TIME_H #define TIME_H
#include "TimeSettings.h"
#include "TimeWindow.h"
#include <Application.h> #include <Application.h>
class BMessage;
class TTimeWindow;
class TimeApplication : public BApplication { class TimeApplication : public BApplication {
public: public:
TimeApplication(); TimeApplication();
virtual ~TimeApplication(); virtual ~TimeApplication();
void MessageReceived(BMessage* message); virtual void MessageReceived(BMessage* message);
virtual void ReadyToRun();
void ReadyToRun(); virtual void AboutRequested();
void AboutRequested();
void SetWindowCorner(BPoint corner);
BPoint WindowCorner() const
{ return fSettings->WindowCorner(); }
private: private:
TimeSettings *fSettings; TTimeWindow *fWindow;
TTimeWindow *fWindow;
}; };
#endif // TIME_H #endif // TIME_H
+12 -6
View File
@@ -1,15 +1,18 @@
/* /*
* Copyright 2002-2007, Haiku. All rights reserved.
TimeMessages.h * Distributed under the terms of the MIT License.
*
*/ * Authors:
* Andrew McCall, mccall@digitalparadise.co.uk
* Mike Berg (inseculous)
* Julun <host.haiku@gmx.de>
*/
#ifndef TIME_MESSAGES_H #ifndef TIME_MESSAGES_H
#define TIME_MESSAGES_H #define TIME_MESSAGES_H
#define HAIKU_APP_SIGNATURE "application/x-vnd.Be-TIME" #define HAIKU_APP_SIGNATURE "application/x-vnd.Be-TIME"
const uint32 ERROR_DETECTED = 'ERor'; const uint32 UPDATE_SETTINGS = 'TDUS';
//Timezone messages //Timezone messages
const uint32 H_REGION_CHANGED = 'h_RC'; const uint32 H_REGION_CHANGED = 'h_RC';
@@ -38,5 +41,8 @@ const uint32 H_USER_CHANGE = 'obUC';
// local/gmt radiobuttons // local/gmt radiobuttons
const uint32 H_RTC_CHANGE = 'obRC'; const uint32 H_RTC_CHANGE = 'obRC';
// sunday/monday radio button
const uint32 kWeekStart = '_kws';
#endif //TIME_MESSAGES_H #endif //TIME_MESSAGES_H
+36 -37
View File
@@ -1,66 +1,65 @@
/* /*
* Copyright 2002-2006, Haiku. All rights reserved. * Copyright 2002-2007, Haiku. All rights reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors in chronological order: * Authors:
* Andrew McCall, mccall@digitalparadise.co.uk * Andrew McCall, mccall@digitalparadise.co.uk
* Mike Berg * Mike Berg (inseculous)
* Julun <host.haiku@gmx.de>
*/ */
#include "TimeSettings.h" #include "TimeSettings.h"
#include "TimeMessages.h" #include "TimeMessages.h"
#include <Application.h>
#include <FindDirectory.h>
#include <File.h> #include <File.h>
#include <FindDirectory.h>
#include <Path.h> #include <Path.h>
#include <String.h>
#include <stdio.h>
const char TimeSettings::kTimeSettingsFile[] = "Time_settings";
TimeSettings::TimeSettings() TimeSettings::TimeSettings()
: fSettingsFile("Time_settings")
{ {
BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY,&path) == B_OK) {
path.Append(kTimeSettingsFile);
BFile file(path.Path(), B_READ_ONLY);
if (file.InitCheck() == B_OK) {
// Now read in the data
if (file.Read(&fCorner, sizeof(BPoint)) != sizeof(BPoint)) {
fCorner.x = 50;
fCorner.y = 50;
}
} else {
fCorner.x = 50;
fCorner.y = 50;
}
} else
be_app->PostMessage(ERROR_DETECTED);
} }
TimeSettings::~TimeSettings() TimeSettings::~TimeSettings()
{
}
BPoint
TimeSettings::LeftTop() const
{ {
BPath path; BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) < B_OK) BPoint leftTop(50.0, 50.0);
return;
path.Append(kTimeSettingsFile); if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
path.Append(fSettingsFile.String());
BFile file(path.Path(), B_WRITE_ONLY | B_CREATE_FILE);
if (file.InitCheck() == B_OK) { BFile file(path.Path(), B_READ_ONLY);
file.Write(&fCorner, sizeof(BPoint)); if (file.InitCheck() == B_OK) {
BPoint tmp;
if (file.Read(&tmp, sizeof(BPoint)) == sizeof(BPoint))
leftTop = tmp;
}
} }
return leftTop;
} }
void void
TimeSettings::SetWindowCorner(BPoint corner) TimeSettings::SetLeftTop(const BPoint leftTop)
{ {
fCorner = corner; BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
return;
path.Append(fSettingsFile.String());
BFile file(path.Path(), B_WRITE_ONLY | B_CREATE_FILE);
if (file.InitCheck() == B_OK)
file.Write(&leftTop, sizeof(BPoint));
} }
+11 -9
View File
@@ -1,29 +1,31 @@
/* /*
* Copyright 2002-2006, Haiku. All rights reserved. * Copyright 2002-2007, Haiku. All rights reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
* *
* Authors in chronological order: * Authors:
* Andrew McCall, mccall@digitalparadise.co.uk * Andrew McCall, mccall@digitalparadise.co.uk
* Mike Berg * Mike Berg (inseculous)
* Julun <host.haiku@gmx.de>
*/ */
#ifndef TIME_SETTINGS_H #ifndef TIME_SETTINGS_H
#define TIME_SETTINGS_H #define TIME_SETTINGS_H
#include <Point.h> #include <Point.h>
#include <String.h>
class TimeSettings { class TimeSettings {
public : public :
TimeSettings(); TimeSettings();
~TimeSettings(); ~TimeSettings();
BPoint WindowCorner() const { return fCorner; } BPoint LeftTop() const;
void SetWindowCorner(BPoint corner); void SetLeftTop(const BPoint leftTop);
private: private:
static const char kTimeSettingsFile[]; BString fSettingsFile;
BPoint fCorner;
}; };
#endif // TIME_SETTINGS_H #endif // TIME_SETTINGS_H
+24 -29
View File
@@ -6,32 +6,28 @@
* mccall@@digitalparadise.co.uk * mccall@@digitalparadise.co.uk
* Julun <host.haiku@gmx.de> * Julun <host.haiku@gmx.de>
*/ */
#include "TimeWindow.h"
#include "BaseView.h"
#include "SettingsView.h"
#include "TimeMessages.h"
#include "ZoneView.h"
#include <Application.h> #include <Application.h>
#include <Message.h> #include <Message.h>
#include <Screen.h> #include <Screen.h>
#include <TabView.h> #include <TabView.h>
#include <stdio.h>
#include "BaseView.h" #define WINDOW_RIGHT 400
#include "SettingsView.h" #define WINDOW_BOTTOM 227
#include "Time.h"
#include "TimeMessages.h"
#include "TimeWindow.h"
#include "TimeSettings.h"
#include "ZoneView.h"
#define TIME_WINDOW_RIGHT 400 //332
#define TIME_WINDOW_BOTTOM 227 //208
TTimeWindow::TTimeWindow() TTimeWindow::TTimeWindow(const BPoint leftTop)
: BWindow(BRect(0, 0, TIME_WINDOW_RIGHT, TIME_WINDOW_BOTTOM), : BWindow(BRect(leftTop, leftTop + BPoint(WINDOW_RIGHT, WINDOW_BOTTOM)),
"Time & Date", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE ) "Time & Date", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_NOT_ZOOMABLE)
{ {
MoveTo(dynamic_cast<TimeApplication *>(be_app)->WindowCorner());
BRect frame = Frame(); BRect frame = Frame();
BRect bounds = Bounds(); BRect bounds = Bounds();
BRect screenFrame = BScreen().Frame(); BRect screenFrame = BScreen().Frame();
@@ -40,7 +36,7 @@ TTimeWindow::TTimeWindow()
MoveTo((screenFrame.right - bounds.right) * 0.5f, MoveTo((screenFrame.right - bounds.right) * 0.5f,
(screenFrame.bottom - bounds.bottom) * 0.5f); (screenFrame.bottom - bounds.bottom) * 0.5f);
InitWindow(); _InitWindow();
SetPulseRate(500000); SetPulseRate(500000);
} }
@@ -51,8 +47,8 @@ TTimeWindow::MessageReceived(BMessage *message)
switch(message->what) { switch(message->what) {
case H_USER_CHANGE: case H_USER_CHANGE:
{ {
bool istime; bool isTime;
if (message->FindBool("time", &istime) == B_OK) if (message->FindBool("time", &isTime) == B_OK)
fBaseView->ChangeTime(message); fBaseView->ChangeTime(message);
break; break;
} }
@@ -60,7 +56,7 @@ TTimeWindow::MessageReceived(BMessage *message)
case H_RTC_CHANGE: case H_RTC_CHANGE:
fBaseView->SetGMTime(fTimeSettings->GMTime()); fBaseView->SetGMTime(fTimeSettings->GMTime());
break; break;
default: default:
BWindow::MessageReceived(message); BWindow::MessageReceived(message);
break; break;
@@ -71,7 +67,9 @@ TTimeWindow::MessageReceived(BMessage *message)
bool bool
TTimeWindow::QuitRequested() TTimeWindow::QuitRequested()
{ {
dynamic_cast<TimeApplication *>(be_app)->SetWindowCorner(BPoint(Frame().left,Frame().top)); BMessage msg(UPDATE_SETTINGS);
msg.AddPoint("LeftTop", Frame().LeftTop());
be_app->PostMessage(&msg);
fBaseView->StopWatchingAll(fTimeSettings); fBaseView->StopWatchingAll(fTimeSettings);
fBaseView->StopWatchingAll(fTimeZones); fBaseView->StopWatchingAll(fTimeZones);
@@ -79,12 +77,11 @@ TTimeWindow::QuitRequested()
be_app->PostMessage(B_QUIT_REQUESTED); be_app->PostMessage(B_QUIT_REQUESTED);
return BWindow::QuitRequested(); return BWindow::QuitRequested();
} }
void void
TTimeWindow::InitWindow() TTimeWindow::_InitWindow()
{ {
BRect bounds(Bounds()); BRect bounds(Bounds());
@@ -99,12 +96,10 @@ TTimeWindow::InitWindow()
bounds.bottom -= tabview->TabHeight(); bounds.bottom -= tabview->TabHeight();
fTimeSettings = new TSettingsView(bounds); fTimeSettings = new TSettingsView(bounds);
if (fBaseView->StartWatchingAll(fTimeSettings) != B_OK) fBaseView->StartWatchingAll(fTimeSettings);
printf("StartWatchingAll(TimeSettings) failed!!!\n");
fTimeZones = new TZoneView(bounds); fTimeZones = new TZoneView(bounds);
if (fBaseView->StartWatchingAll(fTimeZones) != B_OK) fBaseView->StartWatchingAll(fTimeZones);
printf("TimeZones->StartWatchingAll(TimeZone) failed!!!\n");
// add tabs // add tabs
BTab *tab = new BTab(); BTab *tab = new BTab();
@@ -121,6 +116,6 @@ TTimeWindow::InitWindow()
float height; float height;
fTimeSettings->GetPreferredSize(&width, &height); fTimeSettings->GetPreferredSize(&width, &height);
// width/ height from settingsview + all InsetBy etc.. // width/ height from settingsview + all InsetBy etc..
ResizeTo(width +10, height + tabview->TabHeight() +25); ResizeTo(width +5, height + tabview->TabHeight() +25);
} }
+22 -10
View File
@@ -1,27 +1,39 @@
/* /*
* Copyright 2004-2007, Haiku, Inc. All Rights Reserved. * Copyright 2004-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*
* Authors:
* mccall@@digitalparadise.co.uk
* Julun <host.haiku@gmx.de>
*/ */
#ifndef TIME_WINDOW_H #ifndef TIME_WINDOW_H
#define TIME_WINDOW_H #define TIME_WINDOW_H
#include <Window.h> #include <Window.h>
class BMessage;
class TSettingsView; class TSettingsView;
class TTimeBaseView; class TTimeBaseView;
class TZoneView; class TZoneView;
class TTimeWindow : public BWindow { class TTimeWindow : public BWindow {
public: public:
TTimeWindow(); TTimeWindow(const BPoint topLeft);
virtual ~TTimeWindow() {}
bool QuitRequested();
virtual void MessageReceived(BMessage *message);
private:
void InitWindow();
TTimeBaseView *fBaseView; virtual bool QuitRequested();
TSettingsView *fTimeSettings; virtual void MessageReceived(BMessage *message);
TZoneView *fTimeZones;
private:
void _InitWindow();
TTimeBaseView *fBaseView;
TSettingsView *fTimeSettings;
TZoneView *fTimeZones;
}; };
#endif #endif // TIME_WINDOW_H
+147 -212
View File
@@ -6,6 +6,7 @@
* Mike Berg (inseculous) * Mike Berg (inseculous)
* Julun <host.haiku@gmx.de> * Julun <host.haiku@gmx.de>
*/ */
/* /*
Exceptions: Exceptions:
doesn't calc "Time in" time. doesn't calc "Time in" time.
@@ -17,61 +18,49 @@
inital info so I can get exact duplication. inital info so I can get exact duplication.
*/ */
#include <Button.h> #include "ZoneView.h"
#include "TimeMessages.h"
#include "TZDisplay.h"
#include <Button.h>
#include <Directory.h> #include <Directory.h>
#include <Entry.h> #include <Entry.h>
#include <FindDirectory.h> #include <FindDirectory.h>
#include <ListItem.h>
#include <ListView.h> #include <ListView.h>
#include <MenuField.h> #include <MenuField.h>
#include <MenuItem.h> #include <MenuItem.h>
#include <MenuBar.h> #include <MenuBar.h>
#include <PopUpMenu.h> #include <PopUpMenu.h>
#include <ScrollView.h> #include <ScrollView.h>
#include <stdio.h>
#include <stdlib.h>
#include <StorageDefs.h> #include <StorageDefs.h>
#include <String.h> #include <String.h>
#include <View.h> #include <View.h>
#include <Window.h>
#include "TimeMessages.h"
#include "ZoneView.h"
/*=====> TZoneItem <=====*/ #include <stdio.h>
TZoneItem::TZoneItem(const char *text, const char *zone) #include <stdlib.h>
:BStringItem(text),
fZone(new BPath(zone))
{
}
TZoneItem::~TZoneItem() class TZoneItem: public BStringItem {
{ public:
delete fZone; TZoneItem(const char *text, const char *zone)
} : BStringItem(text), fZone(new BPath(zone)) { }
~TZoneItem() { delete fZone; }
const char *Zone() const { return fZone->Leaf(); }
const char *Path() const { return fZone->Path(); }
private:
BPath *fZone;
};
const char *
TZoneItem::Zone() const
{
return fZone->Leaf();
}
const char *
TZoneItem::Path() const
{
return fZone->Path();
}
/*=====> TZoneView <=====*/
TZoneView::TZoneView(BRect frame) TZoneView::TZoneView(BRect frame)
: BView(frame, B_EMPTY_STRING, B_FOLLOW_ALL, B_WILL_DRAW|B_NAVIGABLE_JUMP) : BView(frame, B_EMPTY_STRING, B_FOLLOW_ALL, B_WILL_DRAW | B_NAVIGABLE_JUMP),
, f_first(true) fNotInitialized(true)
{ {
ReadTimeZoneLink(); ReadTimeZoneLink();
InitView(); InitView();
@@ -83,36 +72,30 @@ TZoneView::~TZoneView()
} }
void
TZoneView::AllAttached()
{
BView::AllAttached();
}
void void
TZoneView::AttachedToWindow() TZoneView::AttachedToWindow()
{ {
if (Parent()) if (Parent())
SetViewColor(Parent()->ViewColor()); SetViewColor(Parent()->ViewColor());
if (f_first) { if (fNotInitialized) {
// stupid hack // stupid hack
f_regionpopup->SetTargetForItems(this); fRegionPopUp->SetTargetForItems(this);
f_setzone->SetTarget(this); fSetZone->SetTarget(this);
f_citylist->SetTarget(this); fCityList->SetTarget(this);
// update displays // update displays
BPath parent; BPath parent;
f_currentzone.GetParent(&parent); fCurrentZone.GetParent(&parent);
int czone = FillCityList(parent.Path()); int32 czone = FillCityList(parent.Path());
if (czone> -1) { if (czone > -1) {
f_citylist->Select(czone); fCityList->Select(czone);
f_current->SetText( ((TZoneItem *)f_citylist->ItemAt(czone))->Text() ); fCurrent->SetText(((TZoneItem *)fCityList->ItemAt(czone))->Text());
} }
f_first = false; fNotInitialized = false;
ResizeTo(Bounds().Width(), Bounds().Height() +40);
} }
f_citylist->ScrollToSelection(); fCityList->ScrollToSelection();
} }
@@ -155,27 +138,27 @@ TZoneView::MessageReceived(BMessage *message)
const char* const char*
TZoneView::TimeZone() TZoneView::TimeZone()
{ {
return f_current->Text(); return fCurrent->Text();
} }
void void
TZoneView::UpdateDateTime(BMessage *message) TZoneView::UpdateDateTime(BMessage *message)
{ {
// only need hour and minute int32 hour;
int32 hour, minute; int32 minute;
// only need hour and minute
if (message->FindInt32("hour", &hour) == B_OK if (message->FindInt32("hour", &hour) == B_OK
&& message->FindInt32("minute", &minute) == B_OK) { && message->FindInt32("minute", &minute) == B_OK) {
if (f_hour != hour || f_minute != minute) { if (fHour != hour || fMinute != minute) {
f_hour = hour; fHour = hour;
f_minute = minute; fMinute = minute;
f_current->SetTo(hour, minute); fCurrent->SetTo(hour, minute);
if (f_citylist->CurrentSelection()> -1) { // do calc to get other zone time
// do calc to get other zone time if (fCityList->CurrentSelection() > -1)
SetPreview(); SetPreview();
}
} }
} }
} }
@@ -184,99 +167,80 @@ TZoneView::UpdateDateTime(BMessage *message)
void void
TZoneView::InitView() TZoneView::InitView()
{ {
font_height finfo; font_height fontHeight;
be_plain_font->GetHeight(&finfo); be_plain_font->GetHeight(&fontHeight);
float text_height = finfo.ascent +finfo.descent +finfo.leading; float textHeight = fontHeight.descent + fontHeight.ascent + fontHeight.leading;
BRect bounds(Bounds().InsetByCopy(4, 2));
BRect frame(bounds);
// Zone menu // Zone menu
f_regionpopup = new BPopUpMenu(B_EMPTY_STRING, true, true, B_ITEMS_IN_COLUMN); fRegionPopUp = new BPopUpMenu(B_EMPTY_STRING, true, true, B_ITEMS_IN_COLUMN);
float widest = 0; BuildRegionMenu();
BuildRegionMenu(&widest);
frame.right = frame.left +widest +25; // left side
frame.bottom = frame.top +text_height -1; BRect frameLeft(Bounds());
frameLeft.right = frameLeft.Width() / 2;
frameLeft.InsetBy(10.0f, 10.0f);
BMenuField *mField; BMenuField *menuField = new BMenuField(frameLeft, "regions", NULL, fRegionPopUp, false);
mField= new BMenuField(frame, "regions", NULL, f_regionpopup, true); AddChild(menuField);
mField->MenuBar()->SetBorder(B_BORDER_CONTENTS); menuField->ResizeToPreferred();
mField->MenuBar()->ResizeToPreferred();
AddChild(mField);
frameLeft.top = menuField->Frame().bottom +10;
frameLeft.right -= B_V_SCROLL_BAR_WIDTH;
// City Listing // City Listing
fCityList = new BListView(frameLeft, "cityList", B_SINGLE_SELECTION_LIST,
B_FOLLOW_ALL, B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS);
fCityList->SetSelectionMessage(new BMessage(H_CITY_CHANGED));
fCityList->SetInvocationMessage(new BMessage(H_SET_TIME_ZONE));
frame = mField->MenuBar()->Frame(); BScrollView *scrollList = new BScrollView("scroll_list", fCityList,
frame.top += frame.bottom +1; B_FOLLOW_ALL, 0, false, true);
frame.right = mField->Bounds().Width() -B_V_SCROLL_BAR_WIDTH +2;
frame.bottom = bounds.bottom;
frame.OffsetBy(2, 0);
frame.InsetBy(3, 5);
f_citylist = new BListView(frame, "cities", B_SINGLE_SELECTION_LIST,
B_FOLLOW_LEFT|B_FOLLOW_TOP,
B_WILL_DRAW|B_NAVIGABLE|B_FRAME_EVENTS);
BMessage *citychange = new BMessage(H_CITY_CHANGED);
f_citylist->SetSelectionMessage(citychange);
BMessage *cityinvoke = new BMessage(H_SET_TIME_ZONE);
f_citylist->SetInvocationMessage(cityinvoke);
BScrollView *scrollList;
scrollList = new BScrollView("scroll_list", f_citylist,
B_FOLLOW_LEFT|B_FOLLOW_TOP, 0, false, true);
AddChild(scrollList); AddChild(scrollList);
// right side
BRect frameRight(Bounds());
frameRight.left = frameRight.Width() / 2;
frameRight.InsetBy(10.0f, 10.0f);
frameRight.top = frameLeft.top;
// Time Displays // Time Displays
fCurrent = new TTZDisplay(frameRight, "current",
B_FOLLOW_NONE, B_WILL_DRAW, "Current time zone:", B_EMPTY_STRING);
AddChild(fCurrent);
fCurrent->ResizeToPreferred();
frame.OffsetBy(scrollList->Bounds().Width() +9, 3); frameRight.OffsetBy(0, (textHeight) * 3 +10.0);
frame.bottom = frame.top +text_height *2; fPreview = new TTZDisplay(frameRight, "preview",
frame.right = bounds.right -6; B_FOLLOW_NONE, B_WILL_DRAW, "Time in: ", B_EMPTY_STRING);
f_current = new TTZDisplay(frame, "current", AddChild(fPreview);
B_FOLLOW_LEFT|B_FOLLOW_TOP, B_WILL_DRAW, fPreview->ResizeToPreferred();
"Current time zone:", B_EMPTY_STRING);
f_current->ResizeToPreferred();
frame.OffsetBy(0, (text_height *3) +2);
f_preview = new TTZDisplay(frame, "timein",
B_FOLLOW_LEFT|B_FOLLOW_TOP, B_WILL_DRAW,
"Time in: ", B_EMPTY_STRING);
f_preview->ResizeToPreferred();
AddChild(f_current);
AddChild(f_preview);
// set button // set button
fSetZone = new BButton(frameRight, "set", "Set Timezone",
frame.Set(bounds.right -75, bounds.bottom -24, new BMessage(H_SET_TIME_ZONE), B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM);
bounds.right, bounds.bottom); AddChild(fSetZone);
frame.OffsetBy(-2, -2); fSetZone->SetEnabled(false);
f_setzone = new BButton(frame, "set", "Set", new BMessage(H_SET_TIME_ZONE)); fSetZone->ResizeToPreferred();
f_setzone->SetEnabled(false);
AddChild(f_setzone); fSetZone->MoveTo(frameRight.right - fSetZone->Bounds().Width(),
scrollList->Frame().bottom - fSetZone->Bounds().Height());
} }
void void
TZoneView::BuildRegionMenu(float *widest) TZoneView::BuildRegionMenu()
{ {
BPath path; BPath path;
// return if /etc directory is not found if (find_directory(B_BEOS_ETC_DIRECTORY, &path) != B_OK)
if (!(find_directory(B_BEOS_ETC_DIRECTORY, &path) == B_OK))
return; return;
path.Append("timezones"); path.Append("timezones");
// get current region // get current region
BPath region; BPath region;
f_currentzone.GetParent(&region); fCurrentZone.GetParent(&region);
float width = 0;
bool markit; bool markit;
BEntry entry; BEntry entry;
BMenuItem *item; BMenuItem *item;
@@ -303,42 +267,37 @@ TZoneView::BuildRegionMenu(float *widest)
||itemtext.Compare("Indian", 6) == 0) ||itemtext.Compare("Indian", 6) == 0)
itemtext.Append(" Ocean"); itemtext.Append(" Ocean");
itemtext = itemtext.ReplaceAll('_', ' '); // underscores are spaces // underscores are spaces
itemtext = itemtext.ReplaceAll('_', ' ');
width = be_plain_font->StringWidth(itemtext.String());
if (width > *widest)
*widest = width;
BMessage *msg = new BMessage(H_REGION_CHANGED); BMessage *msg = new BMessage(H_REGION_CHANGED);
msg->AddString("region", path.Path()); msg->AddString("region", path.Path());
item = new BMenuItem(itemtext.String(), msg); item = new BMenuItem(itemtext.String(), msg);
item->SetMarked(markit); item->SetMarked(markit);
f_regionpopup->AddItem(item); fRegionPopUp->AddItem(item);
} }
} }
} }
int int32
TZoneView::FillCityList(const char *area) TZoneView::FillCityList(const char *area)
{ {
// clear list // clear list
int32 count = fCityList->CountItems();
// MakeEmpty() doesn't free items so... if (count > 0) {
int32 idx = f_citylist->CountItems(); for (int32 idx = count; idx >= 0; idx--)
if (idx>= 1) delete fCityList->RemoveItem(idx);
for (; idx>= 0; idx--) fCityList->MakeEmpty();
delete f_citylist->RemoveItem(idx); }
//Enter time zones directory. Find subdir with name that matches string stored in area. // Enter time zones directory. Find subdir with name that matches string
//Enter subdirectory and count the items. For each item, add a StringItem to f_CityList // stored in area. Enter subdirectory and count the items. For each item,
//Time zones directory // add a StringItem to fCityList Time zones directory
BPath path; BPath path;
if (find_directory(B_BEOS_ETC_DIRECTORY, &path) != B_OK)
// return if /etc directory is not found
if (!(find_directory(B_BEOS_ETC_DIRECTORY, &path) == B_OK))
return 0; return 0;
path.Append("timezones"); path.Append("timezones");
@@ -349,16 +308,14 @@ TZoneView::FillCityList(const char *area)
BStringItem *city; BStringItem *city;
BString city_name; BString city_name;
BEntry entry; BEntry entry;
int index = -1; int32 index = -1;
//locate subdirectory:
//locate subdirectory:
if ( zoneDir.Contains(Area.Leaf(), B_DIRECTORY_NODE)) { if (zoneDir.Contains(Area.Leaf(), B_DIRECTORY_NODE)) {
cityDir.SetTo(&zoneDir, Area.Leaf()); cityDir.SetTo(&zoneDir, Area.Leaf());
//There is a subdir with a name that matches 'area'. That's the one!!
// There is a subdir with a name that matches 'area'. That's the one!!
// Iterate over the items in the subdir, fill listview with TZoneItems
//iterate over the items in the subdir and fill the listview with TZoneItems:
while(cityDir.GetNextEntry(&entry) == B_NO_ERROR) { while(cityDir.GetNextEntry(&entry) == B_NO_ERROR) {
if (!entry.IsDirectory()) { if (!entry.IsDirectory()) {
BPath zone(&entry); BPath zone(&entry);
@@ -368,9 +325,9 @@ TZoneView::FillCityList(const char *area)
city_name.ReplaceAll("__", ", "); city_name.ReplaceAll("__", ", ");
city_name.ReplaceAll("_", " "); city_name.ReplaceAll("_", " ");
city = new TZoneItem(city_name.String(), zone.Path()); city = new TZoneItem(city_name.String(), zone.Path());
f_citylist->AddItem(city); fCityList->AddItem(city);
if (strcmp(f_currentzone.Leaf(), zone.Leaf()) == 0) if (strcmp(fCurrentZone.Leaf(), zone.Leaf()) == 0)
index = f_citylist->IndexOf(city); index = fCityList->IndexOf(city);
} }
} }
} }
@@ -401,14 +358,13 @@ TZoneView::ReadTimeZoneLink()
_kern_get_tzfilename(tzFileName, B_OS_PATH_LENGTH, &isGMT); _kern_get_tzfilename(tzFileName, B_OS_PATH_LENGTH, &isGMT);
tzLink.SetTo(tzFileName); tzLink.SetTo(tzFileName);
#else #else
/* reads the timezone symlink from B_USER_SETTINGS_DIRECTORY /* reads the timezone symlink from B_USER_SETTINGS_DIRECTORY currently
currently this sets f_currentzone to the symlink value. this sets fCurrentZone to the symlink value, this is wrong. The
this is wrong. the original can get users timezone without original can get users timezone without a timezone symlink present.
a timezone symlink present.
defaults are set to different values to clue in on what error was returned Defaults are set to different values to clue in on what error was returned
GMT is set when the link is invalid GMT is set when the link is invalid EST is set when the settings dir can't
EST is set when the settings dir can't be found **should never happen** be found what should never happen.
*/ */
@@ -428,7 +384,7 @@ TZoneView::ReadTimeZoneLink()
} }
#endif #endif
// we need something in the current zone // we need something in the current zone
f_currentzone.SetTo(&tzLink); fCurrentZone.SetTo(&tzLink);
} }
@@ -436,9 +392,9 @@ void
TZoneView::SetPreview() TZoneView::SetPreview()
{ {
// calc and display time based on users selection in city list // calc and display time based on users selection in city list
int32 selection = f_citylist->CurrentSelection(); int32 selection = fCityList->CurrentSelection();
if (selection>= 0) { if (selection>= 0) {
TZoneItem *item = (TZoneItem *)f_citylist->ItemAt(selection); TZoneItem *item = (TZoneItem *)fCityList->ItemAt(selection);
BString text; BString text;
text = item->Text(); text = item->Text();
@@ -450,12 +406,12 @@ TZoneView::SetPreview()
SetTimeZone(item->Path()); SetTimeZone(item->Path());
current = time(0); current = time(0);
ltime = localtime(&current); ltime = localtime(&current);
SetTimeZone(f_currentzone.Path()); SetTimeZone(fCurrentZone.Path());
f_preview->SetTo(ltime->tm_hour, ltime->tm_min); fPreview->SetTo(ltime->tm_hour, ltime->tm_min);
f_preview->SetText(text.String()); fPreview->SetText(text.String());
f_setzone->SetEnabled((strcmp(f_current->Text(), text.String()) != 0)); fSetZone->SetEnabled((strcmp(fCurrent->Text(), text.String()) != 0));
} }
} }
@@ -463,45 +419,39 @@ TZoneView::SetPreview()
void void
TZoneView::SetCurrent(const char *text) TZoneView::SetCurrent(const char *text)
{ {
SetTimeZone(f_currentzone.Path()); SetTimeZone(fCurrentZone.Path());
time_t current = time(0); time_t current = time(0);
struct tm *ltime = localtime(&current); struct tm *ltime = localtime(&current);
f_current->SetTo(ltime->tm_hour, ltime->tm_min); fCurrent->SetTo(ltime->tm_hour, ltime->tm_min);
f_current->SetText(text); fCurrent->SetText(text);
} }
void void
TZoneView::SetTimeZone() TZoneView::SetTimeZone()
{ {
/* /* set time based on supplied timezone. How to do this?
set time based on supplied timezone. How to do this? 1) replace symlink "timezone" in B_USER_SETTINGS_DIR with a link to the new timezone
1) replace symlink, "timezone", in B_USER_SETTINGS_DIR with a link to the new timezone 2) set TZ environment var
2) set TZ environment var 3) call settz()
3) call settz() 4) call set_timezone from OS.h passing path to timezone file
4) call set_timezone from OS.h passing path to timezone file
*/ */
// update/create timezone symlink in B_USER_SETTINGS_DIRECTORY
// get path to current link // get path to current link
// update/create timezone symlink in B_USER_SETTINGS_DIRECTORY
BPath path; BPath path;
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK) if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
return; return;
path.Append("timezone"); path.Append("timezone");
// build target for new link // build target for new link
int32 selection = fCityList->CurrentSelection();
int32 selection = f_citylist->CurrentSelection();
if (selection < 0) if (selection < 0)
// nothing selected??
return; return;
BPath target( ((TZoneItem *)f_citylist->ItemAt(selection))->Path()); BPath target(((TZoneItem *)fCityList->ItemAt(selection))->Path());
// remove old // remove old
BEntry entry(path.Path()); BEntry entry(path.Path());
@@ -514,49 +464,34 @@ TZoneView::SetTimeZone()
fprintf(stderr, "timezone not linked\n"); fprintf(stderr, "timezone not linked\n");
// update environment // update environment
SetTimeZone(target.Path());
char tz[B_PATH_NAME_LENGTH];
sprintf(tz, "TZ=%s", target.Path());
putenv( tz);
tzset();
// update display // update display
time_t current = time(0); time_t current = time(0);
struct tm *ltime = localtime(&current); struct tm *ltime = localtime(&current);
char tza[B_PATH_NAME_LENGTH]; char tza[B_PATH_NAME_LENGTH];
sprintf(tza, "%s", target.Path()); sprintf(tza, "%s", target.Path());
set_timezone(tza); set_timezone(tza);
// disable button // disable button
f_setzone -> SetEnabled(false); fSetZone->SetEnabled(false);
time_t newtime = mktime(ltime); time_t newtime = mktime(ltime);
ltime = localtime(&newtime); ltime = localtime(&newtime);
stime(&newtime); stime(&newtime);
f_hour = ltime->tm_hour; fHour = ltime->tm_hour;
f_minute = ltime->tm_min; fMinute = ltime->tm_min;
f_currentzone.SetTo(target.Path()); fCurrentZone.SetTo(target.Path());
SetCurrent(((TZoneItem *)f_citylist->ItemAt(selection))->Text()); SetCurrent(((TZoneItem *)fCityList->ItemAt(selection))->Text());
} }
void void
TZoneView::SetTimeZone(const char *zone) TZoneView::SetTimeZone(const char *zone)
{ {
BString tz; putenv(BString("TZ=").Append(zone).String());
tz << "TZ=" << zone;
putenv(tz.String());
tzset(); tzset();
} }
//---//
+35 -50
View File
@@ -6,72 +6,57 @@
* Mike Berg (inseculous) * Mike Berg (inseculous)
* Julun <host.haiku@gmx.de> * Julun <host.haiku@gmx.de>
*/ */
#ifndef ZONE_VIEW_H #ifndef ZONE_VIEW_H
#define ZONE_VIEW_H #define ZONE_VIEW_H
#include <ListItem.h>
#include <ListView.h>
#include <Path.h>
#include <PopUpMenu.h>
#include <View.h> #include <View.h>
#include <Path.h>
#include "TZDisplay.h"
class TZoneItem: public BStringItem { class BMessage;
class BPopUpMenu;
class BListView;
class BButton;
class TTZDisplay;
class TZoneView : public BView {
public: public:
TZoneItem(const char *text, const char *zone); TZoneView(BRect frame);
virtual ~TZoneItem(); virtual ~TZoneView();
const char *Zone() const; virtual void AttachedToWindow();
const char *Path() const; virtual void MessageReceived(BMessage *message);
private:
BPath *fZone;
};
class TZoneView: public BView {
public:
TZoneView(BRect frame);
virtual ~TZoneView();
virtual void AttachedToWindow();
virtual void AllAttached();
virtual void MessageReceived(BMessage *message);
const char* TimeZone(); const char* TimeZone();
protected:
void UpdateDateTime(BMessage *message);
void ChangeRegion(BMessage *);
void SetTimeZone();
void SetTimeZone(const char *zone);
void SetPreview();
void SetCurrent(const char *text);
private: private:
virtual void InitView(); void UpdateDateTime(BMessage *message);
void ReadTimeZoneLink(); void ChangeRegion(BMessage *);
void SetTimeZone();
// set widest to font width of longest item void SetTimeZone(const char *zone);
void BuildRegionMenu(float *widest); void SetPreview();
void SetCurrent(const char *text);
void InitView();
void ReadTimeZoneLink();
void BuildRegionMenu();
// returns index of current zone // returns index of current zone
int FillCityList(const char *area); int32 FillCityList(const char *area);
BPopUpMenu *f_regionpopup; private:
BListView *f_citylist; BPopUpMenu *fRegionPopUp;
BButton *f_setzone; BListView *fCityList;
TTZDisplay *f_current; BButton *fSetZone;
TTZDisplay *f_preview; TTZDisplay *fCurrent;
TTZDisplay *fPreview;
BPath f_currentzone; int32 fHour;
int32 f_hour; int32 fMinute;
int32 f_minute; BPath fCurrentZone;
int32 f_diff; bool fNotInitialized;
bool f_first;
}; };
#endif //Zone_View_H #endif //Zone_View_H