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 16class PositionToolTip::PositionView : public BStringView { 17public: 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 Update(-1, -1); 34 } 35 36 void Update(bigtime_t position, bigtime_t duration) 37 { 38 if (!LockLooper()) 39 return; 40 41 if (position != -1) { 42 position /= 1000000L; 43 duration /= 1000000L; 44 if (position == fPosition && duration == fDuration) { 45 UnlockLooper(); 46 return; 47 } 48 49 fPosition = position; 50 fDuration = duration; 51 } 52 53 char positionText[32]; 54 duration_to_string(fPosition, positionText, sizeof(positionText)); 55 56 char durationText[32]; 57 duration_to_string(fDuration, durationText, sizeof(durationText)); 58 59 char text[64]; 60 snprintf(text, sizeof(text), "%s / %s", positionText, durationText); 61 SetText(text); 62 63 UnlockLooper(); 64 } 65 66private: 67 time_t fPosition; 68 time_t fDuration; 69}; 70 71 72// #pragma mark - 73 74 75PositionToolTip::PositionToolTip() 76{ 77 fView = new PositionView(); 78} 79 80 81PositionToolTip::~PositionToolTip() 82{ 83 delete fView; 84} 85 86 87BView* 88PositionToolTip::View() const 89{ 90 return fView; 91} 92 93 94void 95PositionToolTip::Update(bigtime_t position, bigtime_t duration) 96{ 97 fView->Update(position, duration); 98} 99