📄 freeamptheme.cpp
字号:
m_fSecondsPerFrame = info->GetSecondsPerFrame();
if (info->GetBitRate() == 0)
sprintf(text, "VBR %ldkhz %s",
(long int)(info->GetSampleRate() / 1000),
info->GetChannels() ? "Stereo" : "Mono");
else
sprintf(text, "%ldkbps %ldkhz %s",
(long int)(info->GetBitRate() / 1000),
(long int)(info->GetSampleRate() / 1000),
info->GetChannels() ? "Stereo" : "Mono");
m_oStreamInfo = text;
m_pWindow->ControlStringValue("StreamInfo", true, m_oStreamInfo);
break;
}
case INFO_PlaylistRepeat:
{
PlaylistRepeatEvent *plre = (PlaylistRepeatEvent *) e;
int iState;
switch (plre->GetRepeatMode())
{
case kPlaylistMode_RepeatNone:
iState = 0;
break;
case kPlaylistMode_RepeatOne:
iState = 1;
break;
case kPlaylistMode_RepeatAll:
iState = 2;
break;
default:
break;
}
m_pWindow->ControlIntValue(string("Repeat"), true, iState);
break;
}
case INFO_PlaylistShuffle:
{
PlaylistShuffleEvent *plse = (PlaylistShuffleEvent *) e;
int iState;
iState = plse->GetShuffleMode() ? 1 : 0;
m_pWindow->ControlIntValue(string("Shuffle"), true, iState);
break;
}
case INFO_VolumeInfo:
{
m_iVolume = ((VolumeEvent *) e)->GetVolume();
m_pWindow->ControlIntValue(string("Volume"), true, m_iVolume);
break;
}
case INFO_PrefsChanged:
{
bool bValue;
ReloadTheme();
m_pContext->prefs->GetStayOnTop(&bValue);
m_pWindow->SetStayOnTop(bValue);
m_pContext->prefs->GetLiveInTray(&bValue);
m_pWindow->SetLiveInToolbar(bValue);
break;
}
case CMD_ShowPreferences:
{
ShowPreferencesEvent* prefsEvent = (ShowPreferencesEvent*)e;
ShowOptions(prefsEvent->GetDefaultPage());
break;
}
case CMD_LoadTheme:
{
char szSavedTheme[_MAX_PATH], szNewTheme[_MAX_PATH];
uint32 iLen = _MAX_PATH;
string oThemePath;
MessageDialog oBox(m_pContext);
string oMessage(szKeepThemeMessage);
LoadThemeEvent *pInfo = (LoadThemeEvent *)e;
URLToFilePath(pInfo->URL(), szNewTheme, &iLen);
iLen = _MAX_PATH;
m_pContext->prefs->GetPrefString(kThemePathPref, szSavedTheme, &iLen);
if (strcmp(szSavedTheme, szNewTheme))
{
m_pContext->prefs->SetPrefString(kThemePathPref, szNewTheme);
ReloadTheme();
}
else
strcpy(szSavedTheme, pInfo->SavedTheme());
if (oBox.Show(oMessage.c_str(), string(BRANDING), kMessageYesNo) ==
kMessageReturnYes)
{
ThemeManager oMan(m_pContext);
string oThemePath(szNewTheme);
if (!IsError(oMan.AddTheme(oThemePath)))
m_pContext->prefs->SetPrefString(kThemePathPref, oThemePath.c_str());
}
else
{
m_pContext->prefs->SetPrefString(kThemePathPref, szSavedTheme);
ReloadTheme();
}
break;
}
default:
break;
}
return 0;
}
Error FreeAmpTheme::HandleControlMessage(string &oControlName,
ControlMessageEnum eMesg)
{
if (m_bInOptions)
{
m_pWindow->BringWindowToFront();
return kError_NoErr;
}
if (eMesg == CM_MouseEnter)
{
string oName("Info"), oDesc("");
if (oControlName == string("Time") ||
oControlName == string("TimeRemaining"))
{
if (m_eTimeDisplayState == kTimeRemaining &&
m_pWindow->DoesControlExist("TimeRemaining"))
m_pWindow->ControlGetDesc("TimeRemaining", oDesc);
else
m_pWindow->ControlGetDesc("Time", oDesc);
}
else
m_pWindow->ControlGetDesc(oControlName, oDesc);
m_pWindow->ControlStringValue(oName, true, oDesc);
return kError_NoErr;
}
if (eMesg == CM_MouseLeave)
{
string oName("Info"), oEmpty("");
m_pWindow->ControlStringValue(oName, true, oEmpty);
return kError_NoErr;
}
if (oControlName == string("Minimize") && eMesg == CM_Pressed)
{
m_pWindow->Minimize();
return kError_NoErr;
}
if (oControlName == string("Volume") &&
(eMesg == CM_ValueChanged || eMesg == CM_SliderUpdate))
{
int iVol;
m_pWindow->ControlIntValue(oControlName, false, iVol);
SetVolume(iVol);
return kError_NoErr;
}
if (oControlName == string("VolumePlus") && eMesg == CM_Pressed)
{
int iVol;
iVol = min(m_iVolume + iVolumeChangeIncrement, 100);
SetVolume(iVol);
return kError_NoErr;
}
if (oControlName == string("VolumeMinus") && eMesg == CM_Pressed)
{
int iVol;
iVol = max(m_iVolume - iVolumeChangeIncrement, 0);
SetVolume(iVol);
return kError_NoErr;
}
if (oControlName == string("Seek") && eMesg == CM_ValueChanged)
{
string oName("Info"), oEmpty("");
int iValue, iFrame;
m_pWindow->ControlIntValue(oControlName, false, iValue);
iFrame = (int)(((float)iValue * (float)m_iTotalSeconds) /
((float)100 * m_fSecondsPerFrame));
m_bSeekInProgress = false;
m_pContext->target->AcceptEvent(new
VolumeEvent(CMD_ChangePosition, iFrame));
m_pWindow->ControlStringValue(oName, true, oEmpty);
return kError_NoErr;
}
if (oControlName == string("Seek") && eMesg == CM_SliderUpdate)
{
string oName("Time"), oText("");
int iValue, iTime;
m_pWindow->ControlIntValue(oControlName, false, iValue);
iTime = (iValue * m_iTotalSeconds) / 100;
UpdateTimeDisplay(iTime);
m_bSeekInProgress = true;
return kError_NoErr;
}
if (oControlName == string("PlayPause") && eMesg == CM_Pressed)
{
int iState = 0;
if (m_pContext->plm->CountItems() == 0)
{
m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
return kError_NoErr;
}
m_pWindow->ControlIntValue(oControlName, false, iState);
if (iState == 0)
m_pContext->target->AcceptEvent(new Event(CMD_Play));
else
m_pContext->target->AcceptEvent(new Event(CMD_Pause));
return kError_NoErr;
}
if (oControlName == string("PlayStop") && eMesg == CM_Pressed)
{
int iState = 0;
if (m_pContext->plm->CountItems() == 0)
{
m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
return kError_NoErr;
}
m_pWindow->ControlIntValue(oControlName, false, iState);
if (iState > 1)
iState = 1;
if (iState == 0)
m_pContext->target->AcceptEvent(new Event(CMD_Play));
else
m_pContext->target->AcceptEvent(new Event(CMD_Stop));
return kError_NoErr;
}
if (oControlName == string("Play") && eMesg == CM_Pressed)
{
if (m_pContext->plm->CountItems() == 0)
{
m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
return kError_NoErr;
}
m_pContext->target->AcceptEvent(new Event(CMD_Play));
return kError_NoErr;
}
if (oControlName == string("MPause") && eMesg == CM_Pressed)
{
int iState = 0;
m_pWindow->ControlIntValue(oControlName, false, iState);
if (iState == 0)
m_pContext->target->AcceptEvent(new Event(CMD_Pause));
else
m_pContext->target->AcceptEvent(new Event(CMD_Play));
return kError_NoErr;
}
if (oControlName == string("Pause") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new Event(CMD_Pause));
return kError_NoErr;
}
if (oControlName == string("Stop") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new Event(CMD_Stop));
return kError_NoErr;
}
if (oControlName == string("Next") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new Event(CMD_NextMediaPiece));
return kError_NoErr;
}
if (oControlName == string("Prev") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new Event(CMD_PrevMediaPiece));
return kError_NoErr;
}
if (oControlName == string("MyMusic") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
return kError_NoErr;
}
if (oControlName == string("Files") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new Event(CMD_AddFiles));
return kError_NoErr;
}
if (oControlName == string("Download") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new Event(CMD_ToggleDownloadUI));
return kError_NoErr;
}
if (oControlName == string("Options") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new ShowPreferencesEvent(0));
return kError_NoErr;
}
if (oControlName == string("Quit") && eMesg == CM_Pressed)
{
m_pContext->target->AcceptEvent(new Event(CMD_QuitPlayer));
return kError_NoErr;
}
if (eMesg == CM_ChangeWindow)
{
m_pWindow->ControlStringValue(oControlName, false, m_oCurrentWindow);
SwitchWindow(m_oCurrentWindow);
return kError_NoErr;
}
if (oControlName == string("ReloadTheme") && eMesg == CM_Pressed)
{
ReloadTheme();
return kError_NoErr;
}
if (oControlName == string("Shuffle") && eMesg == CM_Pressed)
{
int iState = 0;
string oName("Info"), oDesc("");
m_pWindow->ControlIntValue(oControlName, false, iState);
iState = (iState + 1) % 2;
m_pContext->plm->SetShuffleMode(iState == 1);
m_pWindow->ControlIntValue(oControlName, true, iState);
m_pWindow->ControlGetDesc(oControlName, oDesc);
m_pWindow->ControlStringValue(oName, true, oDesc);
return kError_NoErr;
}
if (oControlName == string("Repeat") && eMesg == CM_Pressed)
{
int iState = 0;
RepeatMode eMode = kPlaylistMode_RepeatNone;
string oName("Info"), oDesc("");
m_pWindow->ControlIntValue(oControlName, false, iState);
iState = (iState + 1) % 3;
m_pWindow->ControlIntValue(oControlName, true, iState);
switch(iState)
{
case 0:
eMode = kPlaylistMode_RepeatNone;
break;
case 1:
eMode = kPlaylistMode_RepeatOne;
break;
case 2:
eMode = kPlaylistMode_RepeatAll;
break;
}
m_pContext->plm->SetRepeatMode(eMode);
m_pWindow->ControlGetDesc(oControlName, oDesc);
m_pWindow->ControlStringValue(oName, true, oDesc);
return kError_NoErr;
}
if (oControlName == string("Time") && eMesg == CM_Pressed)
{
string oName("Info"), oDesc("");
if (m_iTotalSeconds < 0)
return kError_NoErr;
if (m_eTimeDisplayState == kNormal)
{
m_eTimeDisplayState = kTimeRemaining;
if (m_pWindow->DoesControlExist("TimeRemaining"))
m_pWindow->ControlStringValue("Time", true, oDesc);
}
else
{
m_eTimeDisplayState = kNormal;
if (m_pWindow->DoesControlExist("TimeRemaining"))
m_pWindow->ControlStringValue("TimeRemaining", true, oDesc);
}
m_pWindow->ControlStringValue("Info", true, oDesc);
UpdateTimeDisplay(m_iCurrentSeconds);
}
if (oControlName == string("Logo") && eMesg == CM_Pressed)
{
string oUrl;
m_pWindow->ControlStringValue("Logo", false, oUrl);
if (oUrl.length() == 0)
oUrl = BRANDING_URL;
#ifdef WIN32
Int32PropValue *pProp;
HWND hWnd;
if (IsError(m_pContext->props->GetProperty("MainWindow",
(PropValue **)&pProp)))
hWnd = NULL;
else
hWnd = (HWND)pProp->GetInt32();
ShellExecute(hWnd, "open", oUrl.c_str(),
NULL, NULL, SW_SHOWNORMAL);
#else
LaunchBrowser((char *)oUrl.c_str());
#endif
return kError_NoErr;
}
if (oControlName == string("Help") && eMesg == CM_Pressed)
{
ShowHelp();
return kError_NoErr;
}
if (oControlName == string("Credits") && eMesg == CM_Pressed)
{
ShowThemeCredits();
return kError_NoErr;
}
return kError_NoErr;
}
void FreeAmpTheme::InitControls(void)
{
bool bSet, bEnable;
int iState;
string oWelcome(szWelcomeMsg);
assert(m_pWindow);
// Set the volume control
if (m_iVolume >= 0)
{
bSet = true;
m_pWindow->ControlIntValue(string("Volume"), true, m_iVolume);
}
else
bSet = false;
m_pWindow->ControlEnable(string("Volume"), true, bSet);
m_pWindow->ControlEnable(string("VolumePlus"), true, bSet);
m_pWindow->ControlEnable(string("VolumeMinus"), true, bSet);
// Set the seek control
bSet = (m_iTotalSeconds < 0) ? false : true;
if (bSet)
m_pWindow->ControlIntValue(string("Seek"), true, m_iSeekPos);
m_pWindow->ControlEnable(string("Seek"), true, bSet);
// Set the Play/Pause buttons
iState = m_bPlayShown ? 0 : 1;
m_pWindow->ControlIntValue(string("PlayPause"), true, iState);
m_pWindow->ControlIntValue(string("PlayStop"), true, iState);
iState = m_bPaused ? 1 : 0;
m_pWindow->ControlIntValue(string("MPause"), true, iState);
bEnable = m_bPlayShown;
m_pWindow->ControlEnable(string("Play"), true, bEnable);
bEnable = !m_bPlayShown;
m_pWindow->ControlEnable(string("Pause"), true, bEnable);
m_pWindow->ControlEnable(string("Stop"), true, bEnable);
// Set the title text field to the current meta data, or if no
// is available, show the welcome message
if (m_oTitle.length() == 0)
m_pWindow->ControlStringValue(string("Title"), true, oWelcome);
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -