1/*
2 * Copyright 2001-2006, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Rafael Romo
7 *		Stefano Ceccherini (burton666@libero.it)
8 *		Axel D��rfler, axeld@pinc-software.de
9 */
10
11
12#include "RefreshSlider.h"
13#include "Constants.h"
14
15#include <Catalog.h>
16#include <String.h>
17#include <Window.h>
18
19#include <new>
20#include <stdio.h>
21
22
23#undef B_TRANSLATION_CONTEXT
24#define B_TRANSLATION_CONTEXT "Screen"
25
26
27RefreshSlider::RefreshSlider(BRect frame, float min, float max, uint32 resizingMode)
28	: BSlider(frame, B_TRANSLATE("Screen"), B_TRANSLATE("Refresh rate:"),
29		new BMessage(SLIDER_INVOKE_MSG), (int32)rintf(min * 10), (int32)rintf(max * 10),
30		B_BLOCK_THUMB, resizingMode),
31	fStatus(new (std::nothrow) char[32])
32{
33	BString minRefresh;
34	minRefresh << (uint32)min;
35	BString maxRefresh;
36	maxRefresh << (uint32)max;
37	SetLimitLabels(minRefresh.String(), maxRefresh.String());
38
39	SetHashMarks(B_HASH_MARKS_BOTTOM);
40	SetHashMarkCount(uint32(max - min) / 5 + 1);
41
42	SetKeyIncrementValue(1);
43}
44
45
46RefreshSlider::~RefreshSlider()
47{
48	delete[] fStatus;
49}
50
51
52void
53RefreshSlider::DrawFocusMark()
54{
55	if (IsFocus()) {
56		rgb_color blue = { 0, 0, 229, 255 };
57
58		BRect rect(ThumbFrame());
59		BView *view = OffscreenView();
60
61		rect.InsetBy(2.0, 2.0);
62		rect.right--;
63		rect.bottom--;
64
65		view->SetHighColor(blue);
66		view->StrokeRect(rect);
67	}
68}
69
70
71void
72RefreshSlider::KeyDown(const char *bytes, int32 numBytes)
73{
74	switch (*bytes) {
75		case B_LEFT_ARROW:
76		{
77			SetValue(Value() - 1);
78			Invoke();
79			break;
80		}
81
82		case B_RIGHT_ARROW:
83		{
84			SetValue(Value() + 1);
85			Invoke();
86			break;
87		}
88
89		default:
90			break;
91	}
92}
93
94
95const char*
96RefreshSlider::UpdateText() const
97{
98	if (fStatus != NULL)
99		snprintf(fStatus, 32, B_TRANSLATE("%.1f Hz"), (float)Value() / 10);
100
101	return fStatus;
102}
103