⛏️ index : haiku.git

/*
 * Copyright 2009, Axel DΓΆrfler, axeld@pinc-software.de.
 * Distributed under the terms of the MIT License.
 */


#include "PositionToolTip.h"

#include <stdio.h>

#include <Autolock.h>
#include <StringView.h>

#include "DurationToString.h"


class PositionToolTip::PositionView : public BStringView {
public:
	PositionView()
		:
		BStringView("position", ""),
		fPosition(0),
		fDuration(0)
	{
	}

	virtual ~PositionView()
	{
	}

	virtual void AttachedToWindow()
	{
		BStringView::AttachedToWindow();
		AdoptParentColors();
		Update(-1, -1);
	}

	void Update(bigtime_t position, bigtime_t duration)
	{
		BAutolock locker(Looper());
		if (Looper() != NULL && !locker.IsLocked())
			return;

		if (position != -1) {
			position /= 1000000L;
			duration /= 1000000L;
			if (position == fPosition && duration == fDuration)
				return;

			fPosition = position;
			fDuration = duration;
		}

		char positionText[32];
		duration_to_string(fPosition, positionText, sizeof(positionText));

		char durationText[32];
		duration_to_string(fDuration, durationText, sizeof(durationText));

		char text[66];
		snprintf(text, sizeof(text), "%s / %s", positionText, durationText);
		SetText(text);
	}

private:
	time_t		fPosition;
	time_t		fDuration;
};


// #pragma mark -


PositionToolTip::PositionToolTip()
{
	fView = new PositionView();
}


PositionToolTip::~PositionToolTip()
{
	delete fView;
}


BView*
PositionToolTip::View() const
{
	return fView;
}


void
PositionToolTip::Update(bigtime_t position, bigtime_t duration)
{
	fView->Update(position, duration);
}