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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<BString> trackTitles;
|
||||
query.GetTitles(&title, &trackTitles, 10000000);
|
||||
|
||||
printf("CD Title: %s, ID: %lx\n", title.String(), discID);
|
||||
int32 index = 0;
|
||||
for (vector<BString>::iterator iterator = trackTitles.begin();
|
||||
iterator != trackTitles.end(); index++, iterator++)
|
||||
printf("%ld: %s\n", index, (*iterator).String());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -48,6 +48,7 @@ private:
|
||||
void HandlePlayState(void);
|
||||
void UpdateCDInfo(void);
|
||||
void UpdateTimeInfo(void);
|
||||
void AdjustButtonStates(void);
|
||||
|
||||
CDEngine *engine;
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -29,6 +29,9 @@ public:
|
||||
int16 GetNextTrack(void);
|
||||
int16 GetPreviousTrack(void);
|
||||
|
||||
int16 GetFirstTrack(void);
|
||||
int16 GetLastTrack(void);
|
||||
|
||||
private:
|
||||
void Randomize(void);
|
||||
void Unrandomize(void);
|
||||
|
||||
Reference in New Issue
Block a user