From c552d63dc56fb787b56bc81faf1afcb59309b6e6 Mon Sep 17 00:00:00 2001 From: DarkWyrm Date: Tue, 12 Jul 2005 15:23:30 +0000 Subject: [PATCH] Removed some commented-out test code from CDButton Time display is updated when player is stopped Turning off shuffle really takes it out of shuffle mode Can change tracks while the CD player is not playing Improved responsiveness of screen updates when changing tracks Total disc time calculation is fixed git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13644 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/cdplayer/CDAudioDevice.cpp | 4 +- src/apps/cdplayer/CDDBSupport.cpp | 47 --------- src/apps/cdplayer/CDEngine.cpp | 61 ++++++++--- src/apps/cdplayer/CDEngine.h | 5 +- src/apps/cdplayer/CDPlayer.cpp | 136 ++++++++++++++----------- src/apps/cdplayer/CDPlayer.h | 1 + src/apps/cdplayer/CDPlayer.rdef | 151 +++++++++++----------------- src/apps/cdplayer/PlayList.cpp | 37 +++++++ src/apps/cdplayer/PlayList.h | 3 + 9 files changed, 226 insertions(+), 219 deletions(-) diff --git a/src/apps/cdplayer/CDAudioDevice.cpp b/src/apps/cdplayer/CDAudioDevice.cpp index bd91b6a513..eaf5e6d072 100644 --- a/src/apps/cdplayer/CDAudioDevice.cpp +++ b/src/apps/cdplayer/CDAudioDevice.cpp @@ -442,8 +442,8 @@ CDAudioDevice::GetTimeForDisc(cdaudio_time &disc) int16 trackcount = toc.toc_data[3] - toc.toc_data[2] + 1; TrackDescriptor *desc = (TrackDescriptor*)&(toc.toc_data[4]); - disc.minutes = desc[trackcount-1].min; - disc.seconds = desc[trackcount-1].sec; + disc.minutes = desc[trackcount].min; + disc.seconds = desc[trackcount].sec; return true; } diff --git a/src/apps/cdplayer/CDDBSupport.cpp b/src/apps/cdplayer/CDDBSupport.cpp index dc643c6766..07854bc5e2 100644 --- a/src/apps/cdplayer/CDDBSupport.cpp +++ b/src/apps/cdplayer/CDDBSupport.cpp @@ -565,50 +565,3 @@ CDDBQuery::FindOrCreateContentFileForDisk(BFile *file, entry_ref *fileRef, int32 } return false; } - -/* - -#include "CDEngine.h" - -bool -PrintSite(const char *site, int port, const char *latitude, - const char *longitude, const char *description, void *) -{ - printf("server:%s port:%d latitude:%s longitude:%s description: %s\n", - site, port, latitude, longitude, description); - return false; -} - -int -main() -{ - CDDBQuery query("us.freedb.org", 888, true); - - int32 device = CDEngine::FindCDPlayerDevice(); - if (!device) - { - printf("no device %s\n", strerror(device)); - return 0; - } - - scsi_toc toc; - - ioctl(device, B_SCSI_GET_TOC, &toc); - int32 discID = query.GetDiscID(&toc); - - query.SetToCD(&toc); - - BString title; - vector trackTitles; - query.GetTitles(&title, &trackTitles, 10000000); - - printf("CD Title: %s, ID: %lx\n", title.String(), discID); - int32 index = 0; - for (vector::iterator iterator = trackTitles.begin(); - iterator != trackTitles.end(); index++, iterator++) - printf("%ld: %s\n", index, (*iterator).String()); - - return 0; -} - -*/ diff --git a/src/apps/cdplayer/CDEngine.cpp b/src/apps/cdplayer/CDEngine.cpp index d7812b0f82..9ca3def651 100644 --- a/src/apps/cdplayer/CDEngine.cpp +++ b/src/apps/cdplayer/CDEngine.cpp @@ -36,14 +36,15 @@ void PeriodicWatcher::DoPulse() { // control the period here - if (UpdateState()) + if(UpdateState()) Notify(); } void PeriodicWatcher::UpdateNow() { - UpdateState(); + if(UpdateState()) + Notify(); } @@ -69,6 +70,7 @@ PlayState::UpdateState(void) } } + /* if(state == kPlaying && fEngine->GetState() == kStopped) { // This happens when the CD drive is started by R5's player @@ -118,11 +120,18 @@ TrackState::UpdateState() // As a result, we want to make sure this hasn't happened. If it has, then we // need to update the playlist's position. - int16 cdTrack = sCDDevice.GetTrack(); - - if(cdTrack != sPlayList.GetCurrentTrack()) - sPlayList.SetCurrentTrack(cdTrack); + int16 cdTrack; + if(sCDDevice.GetState() == kPlaying) + { + cdTrack = sCDDevice.GetTrack(); + if(cdTrack != sPlayList.GetCurrentTrack()) + sPlayList.SetCurrentTrack(cdTrack); + return CurrentState(cdTrack); + } + + // If we're not playing, just monitor the current track in the playlist + cdTrack = sPlayList.GetCurrentTrack(); return CurrentState(cdTrack); } @@ -170,8 +179,7 @@ TimeState::UpdateState() track.seconds = -1; disc.minutes = -1; disc.seconds = -1; - CurrentState(disc,disc,track,track); - return false; + return CurrentState(disc,disc,track,track); } } @@ -373,31 +381,56 @@ void CDEngine::SkipOneForward() { int16 track = sPlayList.GetNextTrack(); + if(track <= 0) - return; + { + // force a "wrap around" when possible. This makes it + // possible for the user to be able to, for example, jump + // back to the first track from the last one with 1 button push + track = sPlayList.GetFirstTrack(); + + if(track <= 0) + return; + } CDState state = sCDDevice.GetState(); if(state == kPlaying) sCDDevice.Play(track); -// if(state == kPaused) -// sCDDevice.Pause(); + if(state == kPaused) + { + sCDDevice.Play(track); + sCDDevice.Pause(); + } + trackState.UpdateNow(); } void CDEngine::SkipOneBackward() { int16 track = sPlayList.GetPreviousTrack(); + if(track <= 0) - return; + { + // force a "wrap around" when possible. This way the user + // can search backwards to get to a later track + track = sPlayList.GetLastTrack(); + + if(track <= 0) + return; + } CDState state = sCDDevice.GetState(); if(state == kPlaying) sCDDevice.Play(track); -// if(state == kPaused) -// sCDDevice.Pause(); + if(state == kPaused) + { + sCDDevice.Play(track); + sCDDevice.Pause(); + } + trackState.UpdateNow(); } void diff --git a/src/apps/cdplayer/CDEngine.h b/src/apps/cdplayer/CDEngine.h index 9de0f3711d..b8d8641049 100644 --- a/src/apps/cdplayer/CDEngine.h +++ b/src/apps/cdplayer/CDEngine.h @@ -40,7 +40,6 @@ public: protected: virtual bool UpdateState() = 0; - CDEngine *engine; }; @@ -70,7 +69,7 @@ public: int32 GetTrack() const; int32 GetNumTracks() const; - + private: bool UpdateState(); bool CurrentState(int32); @@ -126,10 +125,10 @@ class VolumeState : public PeriodicWatcher public: VolumeState(void); - bool UpdateState(); int32 GetVolume() const; private: + bool UpdateState(); int32 fVolume; }; diff --git a/src/apps/cdplayer/CDPlayer.cpp b/src/apps/cdplayer/CDPlayer.cpp index c3b0c35c16..209be4232e 100644 --- a/src/apps/cdplayer/CDPlayer.cpp +++ b/src/apps/cdplayer/CDPlayer.cpp @@ -175,6 +175,7 @@ void CDPlayer::BuildGUI(void) fRewind->MoveTo(fNextTrack->Frame().right + 10, Bounds().bottom - 5 - fRewind->Frame().Height()); fRewind->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"rew_disabled")); AddChild(fRewind); + fRewind->SetEnabled(false); fFastFwd = new DrawButton( BRect(0,0,1,1), "FastFwd", BTranslationUtils::GetBitmap(B_PNG_FORMAT,"ffwd_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT,"ffwd_down"), new BMessage(M_NEXT_TRACK), @@ -183,6 +184,7 @@ void CDPlayer::BuildGUI(void) fFastFwd->MoveTo(fRewind->Frame().right + 2, Bounds().bottom - 5 - fFastFwd->Frame().Height()); fFastFwd->SetDisabled(BTranslationUtils::GetBitmap(B_PNG_FORMAT,"ffwd_disabled")); AddChild(fFastFwd); + fFastFwd->SetEnabled(false); fEject = new DrawButton( BRect(0,0,1,1), "Eject", BTranslationUtils::GetBitmap(B_PNG_FORMAT,"eject_up"), BTranslationUtils::GetBitmap(B_PNG_FORMAT,"eject_down"), new BMessage(M_EJECT), @@ -364,87 +366,34 @@ CDPlayer::HandlePlayState(void) { case kNoCD: { - if(fStop->IsEnabled()) - { - fStop->SetEnabled(false); - fPlay->SetEnabled(false); - fNextTrack->SetEnabled(false); - fPrevTrack->SetEnabled(false); - fFastFwd->SetEnabled(false); - fRewind->SetEnabled(false); - fSave->SetEnabled(false); - } + AdjustButtonStates(); fCurrentTrack->SetHighColor(fStopColor); + fCurrentTrack->Invalidate(); break; } case kStopped: { - if(!fStop->IsEnabled()) - { - fStop->SetEnabled(true); - fPlay->SetEnabled(true); - fNextTrack->SetEnabled(true); - fPrevTrack->SetEnabled(true); - fFastFwd->SetEnabled(true); - fRewind->SetEnabled(true); - - // TODO: Enable when Save is implemented -// fSave->SetEnabled(true); - } + AdjustButtonStates(); fCurrentTrack->SetHighColor(fStopColor); + fCurrentTrack->Invalidate(); break; } case kPaused: { - // TODO: Set play button to Pause - if(!fStop->IsEnabled()) - { - fStop->SetEnabled(true); - fPlay->SetEnabled(true); - fNextTrack->SetEnabled(true); - fPrevTrack->SetEnabled(true); - fFastFwd->SetEnabled(true); - fRewind->SetEnabled(true); - - // TODO: Enable when Save is implemented -// fSave->SetEnabled(true); - } + AdjustButtonStates(); fCurrentTrack->SetHighColor(fPlayColor); break; } case kPlaying: { - if(!fStop->IsEnabled()) - { - fStop->SetEnabled(true); - fPlay->SetEnabled(true); - fNextTrack->SetEnabled(true); - fPrevTrack->SetEnabled(true); - fFastFwd->SetEnabled(true); - fRewind->SetEnabled(true); - - // TODO: Enable when Save is implemented -// fSave->SetEnabled(true); - } - fPlay->SetState(1); + AdjustButtonStates(); fCurrentTrack->SetHighColor(fPlayColor); fCurrentTrack->Invalidate(); break; } case kSkipping: { - if(!fStop->IsEnabled()) - { - fStop->SetEnabled(true); - fPlay->SetEnabled(true); - fNextTrack->SetEnabled(true); - fPrevTrack->SetEnabled(true); - fFastFwd->SetEnabled(true); - fRewind->SetEnabled(true); - - // TODO: Enable when Save is implemented -// fSave->SetEnabled(true); - } + AdjustButtonStates(); fCurrentTrack->SetHighColor(fStopColor); break; } @@ -455,6 +404,73 @@ CDPlayer::HandlePlayState(void) } } +void +CDPlayer::AdjustButtonStates(void) +{ + CDState state = engine->GetState(); + + switch(state) + { + case kNoCD: + { + // Everything needs to be disabled when there is no CD + fStop->SetEnabled(false); + fPlay->SetEnabled(false); + fNextTrack->SetEnabled(false); + fPrevTrack->SetEnabled(false); + fFastFwd->SetEnabled(false); + fRewind->SetEnabled(false); + fSave->SetEnabled(false); + break; + } + case kStopped: + { + fStop->SetEnabled(true); + fPlay->SetEnabled(true); + fNextTrack->SetEnabled(true); + fPrevTrack->SetEnabled(true); + + fFastFwd->SetEnabled(false); + fRewind->SetEnabled(false); + + // TODO: Enable when Save is implemented +// fSave->SetEnabled(true); + + fPlay->SetState(0); + break; + } + case kPaused: + { + // We can only pause when everything is enabled, so this is all we should do. + fFastFwd->SetEnabled(false); + fRewind->SetEnabled(false); + fPlay->SetState(0); + break; + } + case kPlaying: + { + fStop->SetEnabled(true); + fPlay->SetEnabled(true); + fNextTrack->SetEnabled(true); + fPrevTrack->SetEnabled(true); + + fFastFwd->SetEnabled(true); + fRewind->SetEnabled(true); + + // TODO: Enable when Save is implemented +// fSave->SetEnabled(true); + + fPlay->SetState(1); + break; + } + case kSkipping: + default: + { + break; + } + } +} + void CDPlayer::UpdateCDInfo(void) { diff --git a/src/apps/cdplayer/CDPlayer.h b/src/apps/cdplayer/CDPlayer.h index 60cc2f6b40..4bd67ae1d3 100644 --- a/src/apps/cdplayer/CDPlayer.h +++ b/src/apps/cdplayer/CDPlayer.h @@ -48,6 +48,7 @@ private: void HandlePlayState(void); void UpdateCDInfo(void); void UpdateTimeInfo(void); + void AdjustButtonStates(void); CDEngine *engine; diff --git a/src/apps/cdplayer/CDPlayer.rdef b/src/apps/cdplayer/CDPlayer.rdef index dac5556f25..3f5648da63 100644 --- a/src/apps/cdplayer/CDPlayer.rdef +++ b/src/apps/cdplayer/CDPlayer.rdef @@ -351,120 +351,85 @@ resource(24, "save_disabled") #'PNG ' array { }; resource(25, "repeat_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308030000015A7A74" - $"5000000012504C5445FFFFFF000000E6E6E6DCDCDC6C6C6C008300BB001C5100" - $"0000096F464673000000000000000000DA2AB6CE000000097048597300000FA0" - $"00000FA001A06A8C770000007E49444154789CAD8F510EC0200843ADD5FB5F79" - $"90AA1B62B264593FB6525E104A9148D0BFE4ACCDA9244CAB6D662026A80976A8" - $"E9FDA39B16F31723448A21C2D49885A49255C930AC59A24334A8C31204889F93" - $"6DC5B6BDEEC961E77A96E1320DE98CE7D3E8DDCE1283CC605562B6AD9F10FF66" - $"4ED01DE5BBB29C696FC205B240065004A187160000000049454E44AE426082" + $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" + $"F4000000A049444154789CED96CD0DC3200C461F15A3782486F104886118893B" + $"1BE44A0F154A0FADF86922A2A8EF6CACC767846C4A29850B608CC102E49C978A" + $"78EF015E3200DBB62D93A93C560BBC735F191121C6387DFEF06454755AC8B64B" + $"7644A45B48550921E09CEBEE7FEA9B51D5EE0BC0C9322104524ADDF543636A35" + $"AE298C8EA7727832B32230984C8B91917CE2BE9FDEAFFC65BE6161DF27566380" + $"4B6C7A004F04A22A52A51390770000000049454E44AE426082" }; resource(26, "repeat_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308030000015A7A74" - $"5000000012504C5445000000FFFFFF6C6C6CE6E6E6BEBEBE0083004C8424AC00" - $"0000096F464673000000000000000000DA2AB6CE000000097048597300000FA0" - $"00000FA001A06A8C770000007C49444154789CAD90510EC0200843CBACF7BFF2" - $"40D40D313159D60F85478320E022413BF5EEB991963632CB4631245E04AB7851" - $"B58F4688714584E86240F3B9DE4B92907591A15951E28B78A30A2508267E26CB" - $"886579DDC866E6EBA022698DF041B5EA5AEE41F66066EE59A67E9BF8B767677A" - $"50DE2BCB3CE524B9012C9D0763558616CC0000000049454E44AE426082" + $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" + $"F4000000A449444154789CED96410D03211045DF3698C0080290800E041014A0" + $"0A012B041BD34343DA4BCB4269D86CFAAE0393C71F42D800E10488080AC07BBF" + $"5424C608F0900170CE2D93A9DC560BBC725D196B2DFBBE0FEF9F9E4C08615848" + $"B5973CB1D61E16024829618C39DCFFA777268470F800D0994C2FBDC974C9E49C" + $"3FD66B0ABD1295E9631A1581C9636A25D7E2BA8FDEB7FC65DEB101524A59ED81" + $"D61A25728A8F1E0077F2B428384A1FEECA0000000049454E44AE426082" }; resource(27, "repeat_up_on") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308030000015A7A74" - $"5000000012504C5445FFFFFF000000E6E6E66C6C6CDCDCDC00FF00911226CA00" - $"0000096F464673000000000000000000DA2AB6CE000000097048597300000FA0" - $"00000FA001A06A8C770000007B49444154789CAD8FDB0EC0200843AD96FFFFE5" - $"6110276262B2AC0F0AE5844B292612EC2FE9B9469612AA59D660202A58111458" - $"B1D78F9187F02F5A88148305D7E885A49255C9D0ACA963875823813A08103F3B" - $"DB8A6D9BDE9DC3CEF5A28674C63A1A227A9631C80C6666CCB6F50AF16FE604BD" - $"56BE2BAB33ED263C9CF907A6D61A86EF0000000049454E44AE426082" + $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" + $"F4000000E849444154789CCD96410E832010451F8D47992371983981E1301C69" + $"F6DEC0AD5D588C6DD102B6D59FB011828F99FF096E9AA6890BC8394707300CC3" + $"A9207DDF03CC3000E3389E0693D47D5EB2AD1823AAFAF6DDCC9AF6BBB5428848" + $"160440448831FE1E26578D10C23292541511A9DABBBA4D6B901002DEFBA779EF" + $"FD13B08814B7ADAA32EBD2E740D640EB2A95AA0A269D760F240754DAAE2603E7" + $"54EB8F9C9A6054359B9657A0ADB46DA9CAC066B6FC702FD6C9B0697DA981ABD3" + $"D40254AAA63699D96E5AFE7A03C39C16335BC651904330391D01812FC21C0581" + $"8781D37BE26C39E0122F3D803B2D1971A06BDE4E510000000049454E44AE4260" + $"82" }; resource(28, "repeat_down_on") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308030000015A7A74" - $"5000000012504C5445000000FFFFFF6C6C6CE6E6E6BEBEBE00FF00CF0E125600" - $"0000096F464673000000000000000000DA2AB6CE000000097048597300000FA0" - $"00000FA001A06A8C770000007C49444154789CAD90510EC0200843CBACF7BFF2" - $"40D40D313159D60F85478320E022413BF5EEB991963632CB4631245E04AB7851" - $"B58F4688714584E86240F3B9DE4B92907591A15951E28B78A30A2508267E26CB" - $"886579DDC866E6EBA022698DF041B5EA5AEE41F66066EE59A67E9BF8B767677A" - $"50DE2BCB3CE524B9012C9D0763558616CC0000000049454E44AE426082" -}; - -resource(29, "repeat_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000B749444154789C8D90BD15C3200C843FF254" - $"658E8CA13A63A574ED22D3B8D618A18D37704B0AC008E2FCA841EF743A4E1712" - $"8010310D290221011281134048D100AD634C330520483400BD111E05BB9CA8D5" - $"BAB20BA6E57134C0401D5FF781E4E1080FB51B6A7BEBD6E9EB2C59482D0B2D10" - $"9E4BAF38779E86133E2392459D45F9E2B5795E8F071B9C0198EE02FD194E76B3" - $"85ABE6846AAC1D57B31DA5A4E828B5D54AE2E8AEF7FA97D3F218FC789D83843C" - $"244C3FFF7A014CCF345764741A860000000049454E44AE426082" + $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" + $"F4000000FF49444154789CCD96E16DC4200C46DF5559820D328107F008998301" + $"5026602A066090AC417FB4AE92964B8144BAFBA4281120787CB6210FA0F0062A" + $"A5300178EF5F0AB2AE2BC0170CC0B22C2F83314DFF0F79AE9C3321843FED29A5" + $"A1F93E462154B50A02A0AAE49CBBE7ED76A6E6468CF1E7DBFAECDDE35237CC1E" + $"24C688881CFA534A0760556D06EA0AD3DEFA1A8849440E6EB5AA0BC6767B0652" + $"0352D5FB61CED4BAE09986604208D56AF90DF4ACDA6E81D927A201D95303B2F1" + $"AD09FC008AF7BEEB046E09494F49CFF38C736E2C4C29A5D36A193D8187AF0311" + $"392C6A6E8D82C08DD504D740E04698AB20F09DC0DBB65DA7B928E71C53296FF1" + $"A307C02781096F058F7CB3C80000000049454E44AE426082" }; resource(30, "shuffle_up") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308030000015A7A74" - $"5000000012504C5445FFFFFF000000E6E6E66C6C6CDCDCDC0083001298103000" - $"0000096F464673000000000000000000DA2AB6CE000000097048597300000FA0" - $"00000FA001A06A8C770000008E49444154789C85925B16802008449DC4FD6F39" - $"E46581E57C100EF720786A4D452C8F715E26113803C05F4758B0228DC8088D21" - $"E19E5EA4DEAD5842CDEE8012D22559DABFA8555DE9BE9E9C81EC5061D4818C02" - $"1B881D9845E1F86131A5CF66E6EBA08EBCC67BA73178AD7F46063B3132E064E0" - $"3BC9EBFBABEB91EC2EAD58D9330DD830FE2B44D8311F77F5937003992A073AE8" - $"E0FDC50000000049454E44AE426082" + $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" + $"F40000007D49444154789CDD96B90DC0200C00CF11A3302B53D2B3012D292224" + $"37F9142343AE85E2EC6B2CADB5C604880801A094E22A9252023864006AAD6E32" + $"9DCD5B4013EEBF408CF1F42DE76C26B3DE662CA7BFE2918C6664B2F532694626" + $"7B2DA3B14EB676268D75B24F321A8B64FFC9A4B14836DF66FA3DE18D00535C7A" + $"003B6C0624445116DF550000000049454E44AE426082" }; resource(31, "shuffle_down") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308030000015A7A74" - $"5000000012504C5445000000FFFFFF6C6C6CE6E6E6BEBEBE0083004C8424AC00" - $"0000096F464673000000000000000000DA2AB6CE000000097048597300000FA0" - $"00000FA001A06A8C770000008749444154789C85925B168020084487C4FD6F39" - $"792847B09C0F8E0CD7800A30F1D08C2B0F5312F3B19021F222F775621248B9DD" - $"DB846A298518430FD9528A8A50F5A47E2D391DD9E1C29803D8C63A86DC825BBC" - $"9C9904539E7398F9B9A8515E63DFA9F7B1D63FA383DD181D509878D9B00FCE91" - $"B2F7B28A97E7C9020E8CFF0A114ECC47AF7613BD278906D3979AD3BB00000000" - $"49454E44AE426082" + $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" + $"F40000008649444154789CDD96B90DC0200C008F8825588711988309188E7158" + $"C329A2486EF2298E805C6B1787AFC101C20088081E20E7DC55A49402B0C900A4" + $"94BAC9EC2CBD0534FE7A05628C87B35AAB99CC7C97B17CFD19B764345F269B2F" + $"93E6CB648F6534D6C9E6CEA4B14EF64A466391EC3F993416C986BA8C03A4B5D6" + $"DB8310025E64888F1E002BA1FC23C06E93FD8D0000000049454E44AE426082" }; resource(32, "shuffle_up_on") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308030000015A7A74" - $"5000000012504C5445FFFFFF000000E6E6E66C6C6CDCDCDC00FF00911226CA00" - $"0000096F464673000000000000000000DA2AB6CE000000097048597300000FA0" - $"00000FA001A06A8C770000008E49444154789C85925B16802008449DC4FD6F39" - $"E46581E57C100EF720786A4D452C8F715E26113803C05F4758B0228DC8088D21" - $"E19E5EA4DEAD5842CDEE8012D22559DABFA8555DE9BE9E9C81EC5061D4818C02" - $"1B881D9845E1F86131A5CF66E6EBA08EBCC67BA73178AD7F46063B3132E064E0" - $"3BC9EBFBABEB91EC2EAD58D9330DD830FE2B44D8311F77F5937003992A073AE8" - $"E0FDC50000000049454E44AE426082" + $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" + $"F40000007D49444154789CDD96B10DC0200C04CF11A3302B53D2B301AD534428" + $"3421141070AE85E2FC2F904555950D10111C404A69A9480801E09201C8392F93" + $"291CAB056ADCFB15F0DE3F9EC51887C9D84B66E4F42DBA646A665666AFA69A99" + $"953565BE7A45053B35F54C3F323D3BC9F4F0DB1F782B1907F73EB11A01B6D8F4" + $"004E58642442B55F4BCA0000000049454E44AE426082" }; resource(33, "shuffle_down_on") #'PNG ' array { - $"89504E470D0A1A0A0000000D49484452000000230000001308030000015A7A74" - $"5000000012504C5445000000FFFFFF6C6C6CE6E6E6BEBEBE00FF00CF0E125600" - $"0000096F464673000000000000000000DA2AB6CE000000097048597300000FA0" - $"00000FA001A06A8C770000008749444154789C85925B168020084487C4FD6F39" - $"792847B09C0F8E0CD7800A30F1D08C2B0F5312F3B19021F222F775621248B9DD" - $"DB846A298518430FD9528A8A50F5A47E2D391DD9E1C29803D8C63A86DC825BBC" - $"9C9904539E7398F9B9A8515E63DFA9F7B1D63FA383DD181D509878D9B00FCE91" - $"B2F7B28A97E7C9020E8CFF0A114ECC47AF7613BD278906D3979AD3BB00000000" - $"49454E44AE426082" -}; - -resource(34, "shuffle_disabled") #'PNG ' array { - $"89504E470D0A1A0A0000000D494844520000002300000013080000000148CFDB" - $"BE000000096F464673000000000000000000DA2AB6CE00000009704859730000" - $"0FA000000FA001A06A8C77000000C449444154789C7D91B115C2301043BFFD3C" - $"0A63A8661B56A0A4A66001D648AD31480B1BA43585ED042721AA2C9DDE597717" - $"324062042200210369E6218F0058213F4156B50084548A5C09AFAA9DA2B131FC" - $"68AD4B83758AF410440CD8002E8FB431ED610E34237DA6FEBFFBAAD300E13DF5" - $"DA7D9D091218614018998885D112262217E29667D3792FF3677F9819B74782E9" - $"6FD903676D36D4A3A63CF4D43922D86DFF06B743148A8B07C958AA2AA2D13A7D" - $"BF43999EEF781065CBB29703877C394C0D3CBE855E4A1104D8C6E70000000049" - $"454E44AE426082" + $"89504E470D0A1A0A0000000D49484452000000230000001308060000001AA3B4" + $"F40000008649444154789CDD96D10DC01014004F6309EB18C11C26309C71ACF1" + $"FAD148A4495513AA7ABF7C1C475080F00144040DE0BD9F2A1242003864009C73" + $"D36432DB6C81127D3F05ACB5976331C66E32EBED4CCFD5D768922919996CBD4C" + $"2523935565DEBA45997532BD758B328FCFCC999E29D7C9D4C26F9F0305484A69" + $"B607C618B4C8273E7A00EC731B23C09F9ED4020000000049454E44AE426082" }; resource(35, "pause_up") #'PNG ' array { diff --git a/src/apps/cdplayer/PlayList.cpp b/src/apps/cdplayer/PlayList.cpp index cf933e15e3..9930bbf08a 100644 --- a/src/apps/cdplayer/PlayList.cpp +++ b/src/apps/cdplayer/PlayList.cpp @@ -83,6 +83,8 @@ PlayList::SetShuffle(const bool &random) else Unrandomize(); + fRandom = random; + fLocker.Unlock(); } @@ -185,6 +187,41 @@ PlayList::GetPreviousTrack(void) return value; } +int16 +PlayList::GetLastTrack(void) +{ + fLocker.Lock(); + + if(fTrackCount < 1) + { + fLocker.Unlock(); + return -1; + } + + fTrackIndex = fTrackCount - 1; + int16 value = fTrackList[fTrackIndex]; + fLocker.Unlock(); + return value; +} + +int16 +PlayList::GetFirstTrack(void) +{ + fLocker.Lock(); + + if(fTrackCount < 1) + { + fLocker.Unlock(); + return -1; + } + + fTrackIndex = 0; + int16 value = fTrackList[fTrackIndex]; + + fLocker.Unlock(); + return value; +} + void PlayList::Randomize(void) { diff --git a/src/apps/cdplayer/PlayList.h b/src/apps/cdplayer/PlayList.h index 9efe4516e0..fbf3a67b50 100644 --- a/src/apps/cdplayer/PlayList.h +++ b/src/apps/cdplayer/PlayList.h @@ -29,6 +29,9 @@ public: int16 GetNextTrack(void); int16 GetPreviousTrack(void); + int16 GetFirstTrack(void); + int16 GetLastTrack(void); + private: void Randomize(void); void Unrandomize(void);