1/*
2 *	Copyright 1999, Be Incorporated. All Rights Reserved.
3 *	This file may be used under the terms of the Be Sample Code License.
4 */
5
6#include "cl_wind.h"
7#include "cl_view.h"
8
9#include <Application.h>
10#include <FindDirectory.h>
11#include <Path.h>
12#include <Screen.h>
13
14
15#include <fcntl.h>
16#include <unistd.h>
17#include <sys/stat.h>
18
19
20TClockWindow::TClockWindow(BRect frame, const char* title)
21	: BWindow(frame, title, B_TITLED_WINDOW,
22		B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AVOID_FRONT, B_ALL_WORKSPACES),
23	  fOnScreenView(NULL)
24{
25	_InitWindow();
26}
27
28
29TClockWindow::~TClockWindow()
30{
31}
32
33
34bool
35TClockWindow::QuitRequested()
36{
37	BPath path;
38	if (find_directory (B_USER_SETTINGS_DIRECTORY, &path, true) == B_OK) {
39		path.Append("Clock_settings");
40		int ref = creat(path.Path(), 0777);
41		if (ref >= 0) {
42			BPoint lefttop = Frame().LeftTop();
43			write(ref, (char *)&lefttop, sizeof(BPoint));
44			short face = fOnScreenView->ReturnFace();
45			write(ref, (char *)&face, sizeof(short));
46			bool seconds = fOnScreenView->ReturnSeconds();
47			write(ref, (char *)&seconds, sizeof(bool));
48			close(ref);
49		}
50	}
51	be_app->PostMessage(B_QUIT_REQUESTED);
52	return true;
53}
54
55
56void
57TClockWindow::_InitWindow()
58{
59	// half second pulse rate
60	SetPulseRate(500000);
61
62	fOnScreenView = new TOnscreenView(BRect(0, 0, 82, 82), "Clock", 22, 15, 41);
63	AddChild(fOnScreenView);
64
65	int ref;
66	BPath path;
67	if (find_directory (B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
68		path.Append("Clock_settings");
69		ref = open(path.Path(), O_RDONLY);
70		if (ref >= 0) {
71			BPoint leftTop;
72			read(ref, (char*)&leftTop, sizeof(leftTop));
73
74			short face;
75			read(ref, (char *)&face, sizeof(short));
76			fOnScreenView->UseFace(face);
77
78			bool secs;
79			read(ref, (char *)&secs, sizeof(bool));
80			fOnScreenView->ShowSecs(secs);
81
82			close(ref);
83
84			MoveTo(leftTop);
85
86			BRect frame = Frame();
87			frame.InsetBy(-4, -4);
88			// it's not visible so reposition. I'm not going to get
89			// fancy here, just place in the default location
90			if (!frame.Intersects(BScreen(this).Frame()))
91				MoveTo(100, 100);
92		}
93	}
94}
95
96