xref: /haiku/src/apps/mediaplayer/interface/PositionToolTip.cpp (revision 13581b3d2a71545960b98fefebc5225b5bf29072)
1 /*
2  * Copyright 2009, Axel Dörfler, axeld@pinc-software.de.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 
7 #include "PositionToolTip.h"
8 
9 #include <stdio.h>
10 
11 #include <StringView.h>
12 
13 #include "DurationToString.h"
14 
15 
16 class PositionToolTip::PositionView : public BStringView {
17 public:
18 	PositionView()
19 		:
20 		BStringView("position", ""),
21 		fPosition(0),
22 		fDuration(0)
23 	{
24 	}
25 
26 	virtual ~PositionView()
27 	{
28 	}
29 
30 	virtual void AttachedToWindow()
31 	{
32 		BStringView::AttachedToWindow();
33 		AdoptParentColors();
34 		Update(-1, -1);
35 	}
36 
37 	void Update(bigtime_t position, bigtime_t duration)
38 	{
39 		if (!LockLooper())
40 			return;
41 
42 		if (position != -1) {
43 			position /= 1000000L;
44 			duration /= 1000000L;
45 			if (position == fPosition && duration == fDuration) {
46 				UnlockLooper();
47 				return;
48 			}
49 
50 			fPosition = position;
51 			fDuration = duration;
52 		}
53 
54 		char positionText[32];
55 		duration_to_string(fPosition, positionText, sizeof(positionText));
56 
57 		char durationText[32];
58 		duration_to_string(fDuration, durationText, sizeof(durationText));
59 
60 		char text[66];
61 		snprintf(text, sizeof(text), "%s / %s", positionText, durationText);
62 		SetText(text);
63 
64 		UnlockLooper();
65 	}
66 
67 private:
68 	time_t		fPosition;
69 	time_t		fDuration;
70 };
71 
72 
73 // #pragma mark -
74 
75 
76 PositionToolTip::PositionToolTip()
77 {
78 	fView = new PositionView();
79 }
80 
81 
82 PositionToolTip::~PositionToolTip()
83 {
84 	delete fView;
85 }
86 
87 
88 BView*
89 PositionToolTip::View() const
90 {
91 	return fView;
92 }
93 
94 
95 void
96 PositionToolTip::Update(bigtime_t position, bigtime_t duration)
97 {
98 	fView->Update(position, duration);
99 }
100