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
RefreshSlider(BRect frame,float min,float max,uint32 resizingMode)27 RefreshSlider::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
~RefreshSlider()46 RefreshSlider::~RefreshSlider()
47 {
48 delete[] fStatus;
49 }
50
51
52 void
DrawFocusMark()53 RefreshSlider::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
71 void
KeyDown(const char * bytes,int32 numBytes)72 RefreshSlider::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
95 const char*
UpdateText() const96 RefreshSlider::UpdateText() const
97 {
98 if (fStatus != NULL)
99 snprintf(fStatus, 32, B_TRANSLATE("%.1f Hz"), (float)Value() / 10);
100
101 return fStatus;
102 }
103