Author: axeld Date: 2009-10-28 20:00:58 +0100 (Wed, 28 Oct 2009) New Revision: 33816 Changeset: http://dev.haiku-os.org/changeset/33816/haiku Added: haiku/trunk/src/apps/mediaplayer/interface/PositionToolTip.cpp haiku/trunk/src/apps/mediaplayer/interface/PositionToolTip.h Modified: haiku/trunk/src/apps/mediaplayer/Jamfile haiku/trunk/src/apps/mediaplayer/MainWin.cpp haiku/trunk/src/apps/mediaplayer/TransportControlGroup.cpp haiku/trunk/src/apps/mediaplayer/TransportControlGroup.h Log: * Added a position tool tip to the seek slider. Modified: haiku/trunk/src/apps/mediaplayer/Jamfile =================================================================== --- haiku/trunk/src/apps/mediaplayer/Jamfile 2009-10-28 18:58:36 UTC (rev 33815) +++ haiku/trunk/src/apps/mediaplayer/Jamfile 2009-10-28 19:00:58 UTC (rev 33816) @@ -4,7 +4,7 @@ # for BRecentItems UsePublicHeaders [ FDirName be_apps Tracker ] ; -UsePrivateHeaders shared ; +UsePrivateHeaders interface shared ; # source directories local sourceDirs = @@ -27,6 +27,7 @@ # interface DrawingTidbits.cpp PeakView.cpp + PositionToolTip.cpp SeekSlider.cpp TransportButton.cpp VolumeSlider.cpp Modified: haiku/trunk/src/apps/mediaplayer/MainWin.cpp =================================================================== --- haiku/trunk/src/apps/mediaplayer/MainWin.cpp 2009-10-28 18:58:36 UTC (rev 33815) +++ haiku/trunk/src/apps/mediaplayer/MainWin.cpp 2009-10-28 19:00:58 UTC (rev 33816) @@ -480,8 +480,10 @@ case MSG_CONTROLLER_POSITION_CHANGED: { float position; - if (msg->FindFloat("position", &position) == B_OK) - fControls->SetPosition(position); + if (msg->FindFloat("position", &position) == B_OK) { + fControls->SetPosition(position, fController->TimePosition(), + fController->TimeDuration()); + } break; } case MSG_CONTROLLER_VOLUME_CHANGED: Modified: haiku/trunk/src/apps/mediaplayer/TransportControlGroup.cpp =================================================================== --- haiku/trunk/src/apps/mediaplayer/TransportControlGroup.cpp 2009-10-28 18:58:36 UTC (rev 33815) +++ haiku/trunk/src/apps/mediaplayer/TransportControlGroup.cpp 2009-10-28 19:00:58 UTC (rev 33816) @@ -3,10 +3,12 @@ * All rights reserved. Distributed under the terms of the MIT License. */ + // NOTE: Based on my code in the BeOS interface for the VLC media player // that I did during the VLC 0.4.3 - 0.4.6 times. Code not written by me // removed. -Stephan Aßmus + #include "TransportControlGroup.h" #include <stdio.h> @@ -17,6 +19,7 @@ #include "ButtonBitmaps.h" #include "PeakView.h" #include "PlaybackState.h" +#include "PositionToolTip.h" #include "SeekSlider.h" #include "TransportButton.h" #include "VolumeSlider.h" @@ -68,6 +71,9 @@ fSeekSlider->ResizeToPreferred(); AddChild(fSeekSlider); + fPositionToolTip = new PositionToolTip(); + fSeekSlider->SetToolTip(fPositionToolTip); + // Buttons if (useSkipButtons) { // Skip Back @@ -162,6 +168,8 @@ TransportControlGroup::~TransportControlGroup() { + if (!fSeekSlider->IsEnabled()) + delete fPositionToolTip; } @@ -342,6 +350,8 @@ return; fSeekSlider->SetEnabled(buttons & SEEK_ENABLED); + fSeekSlider->SetToolTip((buttons & SEEK_ENABLED) != 0 + ? fPositionToolTip : NULL); fVolumeSlider->SetEnabled(buttons & VOLUME_ENABLED); fMute->SetEnabled(buttons & VOLUME_ENABLED); @@ -443,11 +453,13 @@ void -TransportControlGroup::SetPosition(float value) +TransportControlGroup::SetPosition(float value, bigtime_t position, + bigtime_t duration) { if (fSeekSlider->IsTracking()) return; + fPositionToolTip->Update(position, duration); fSeekSlider->SetPosition(value); } Modified: haiku/trunk/src/apps/mediaplayer/TransportControlGroup.h =================================================================== --- haiku/trunk/src/apps/mediaplayer/TransportControlGroup.h 2009-10-28 18:58:36 UTC (rev 33815) +++ haiku/trunk/src/apps/mediaplayer/TransportControlGroup.h 2009-10-28 19:00:58 UTC (rev 33816) @@ -16,6 +16,7 @@ class PeakView; class PlayPauseButton; +class PositionToolTip; class TransportButton; class SeekSlider; class VolumeSlider; @@ -65,7 +66,8 @@ void SetMuted(bool mute); void SetVolume(float value); - void SetPosition(float value); + void SetPosition(float value, bigtime_t position, + bigtime_t duration); PeakView* GetPeakView() const { return fPeakView; } @@ -93,6 +95,7 @@ float _GainToDb(float gain); SeekSlider* fSeekSlider; + PositionToolTip* fPositionToolTip; PeakView* fPeakView; VolumeSlider* fVolumeSlider; Added: haiku/trunk/src/apps/mediaplayer/interface/PositionToolTip.cpp =================================================================== --- haiku/trunk/src/apps/mediaplayer/interface/PositionToolTip.cpp (rev 0) +++ haiku/trunk/src/apps/mediaplayer/interface/PositionToolTip.cpp 2009-10-28 19:00:58 UTC (rev 33816) @@ -0,0 +1,91 @@ +/* + * Copyright 2009, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx + * Distributed under the terms of the MIT License. + */ + + +#include "PositionToolTip.h" + +#include <stdio.h> + +#include <StringView.h> + + +class PositionToolTip::PositionView : public BStringView { +public: + PositionView() + : + BStringView("position", ""), + fPosition(0), + fDuration(0) + { + } + + virtual ~PositionView() + { + } + + virtual void AttachedToWindow() + { + BStringView::AttachedToWindow(); + Update(-1, -1); + } + + void Update(bigtime_t position, bigtime_t duration) + { + if (!LockLooper()) + return; + + if (position != -1) { + position /= 1000000L; + duration /= 1000000L; + if (position == fPosition && duration == fDuration) { + UnlockLooper(); + return; + } + + fPosition = position; + fDuration = duration; + } + + char text[64]; + snprintf(text, sizeof(text), "%02ld:%02ld / %02ld:%02ld", + fPosition / 60, fPosition % 60, fDuration / 60, fDuration % 60); + SetText(text); + + UnlockLooper(); + } + +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); +} Added: haiku/trunk/src/apps/mediaplayer/interface/PositionToolTip.h =================================================================== --- haiku/trunk/src/apps/mediaplayer/interface/PositionToolTip.h (rev 0) +++ haiku/trunk/src/apps/mediaplayer/interface/PositionToolTip.h 2009-10-28 19:00:58 UTC (rev 33816) @@ -0,0 +1,27 @@ +/* + * Copyright 2009, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx + * Distributed under the terms of the MIT License. + */ +#ifndef POSITION_TOOL_TIP_H +#define POSITION_TOOL_TIP_H + + +#include <ToolTip.h> + + +class PositionToolTip : public BToolTip { +public: + PositionToolTip(); + virtual ~PositionToolTip(); + + virtual BView* View() const; + + void Update(bigtime_t position, bigtime_t duration); + +private: + class PositionView; + + PositionView* fView; +}; + +#endif // POSITION_TOOL_TIP_H