📄 freeamptheme.cpp
字号:
break;
case 'M':
case 'm':
m_pContext->target->AcceptEvent(new Event(CMD_ToggleMusicBrowserUI));
break;
case 'n':
case 'N':
m_pContext->target->AcceptEvent(new Event(CMD_NextMediaPiece));
break;
case 'r':
case 'R':
m_pContext->target->AcceptEvent(new Event(CMD_PrevMediaPiece));
break;
case 'd':
case 'D':
m_pContext->target->AcceptEvent(new Event(CMD_ToggleDownloadUI));
break;
case 'o':
case 'O':
m_pContext->target->AcceptEvent(new ShowPreferencesEvent(0));
break;
case 'c':
case 'C':
ShowThemeCredits();
break;
case 't':
case 'T':
ReloadTheme();
break;
case 'h':
case 'H':
ShowHelp();
break;
case '@':
{
string oText("23:59:59");
m_pWindow->ControlStringValue("Time", true, oText);
break;
}
case '!':
{
m_bShowBuffers = !m_bShowBuffers;
break;
}
}
}
bool FreeAmpTheme::HandleMenuCommand(uint32 uCommand)
{
switch(uCommand)
{
case kMCMyMusic:
m_pContext->target->AcceptEvent(
new Event(CMD_ToggleMusicBrowserUI));
return true;
case kMCPlay:
m_pContext->target->AcceptEvent(
new Event(CMD_Play));
return true;
case kMCStop:
m_pContext->target->AcceptEvent(
new Event(CMD_Stop));
return true;
case kMCPause:
m_pContext->target->AcceptEvent(
new Event(CMD_Pause));
return true;
case kMCNext:
m_pContext->target->AcceptEvent(
new Event(CMD_NextMediaPiece));
return true;
case kMCPrev:
m_pContext->target->AcceptEvent(
new Event(CMD_PrevMediaPiece));
return true;
case kMCExit:
m_pContext->target->AcceptEvent(
new Event(CMD_QuitPlayer));
return true;
}
return false;
}
void FreeAmpTheme::VolumeChanged(void)
{
if (!m_bVolumeChangeInProgress)
m_pContext->target->AcceptEvent(new Event(CMD_GetVolume));
}
void FreeAmpTheme::UpdateTimeDisplay(int iCurrentSeconds)
{
string oText;
char szText[20];
int iSeconds;
if (m_eTimeDisplayState == kTimeRemaining && m_iTotalSeconds >= 0)
{
iSeconds = m_iTotalSeconds - iCurrentSeconds - 1;
if (iSeconds > 3600)
sprintf(szText, "-%d:%02d:%02d",
iSeconds / 3600,
(iSeconds % 3600) / 60,
iSeconds % 60);
else
if (iSeconds <= 0)
sprintf(szText, "0:00");
else
sprintf(szText, "-%d:%02d",
(iSeconds % 3600) / 60,
iSeconds % 60);
}
else
if (iCurrentSeconds >= 0)
{
if (iCurrentSeconds > 3600)
sprintf(szText, "%d:%02d:%02d",
iCurrentSeconds / 3600,
(iCurrentSeconds % 3600) / 60,
iCurrentSeconds % 60);
else
sprintf(szText, "%d:%02d",
(iCurrentSeconds % 3600) / 60,
iCurrentSeconds % 60);
}
else
sprintf(szText, "0:00");
oText = string(szText);
if (m_eTimeDisplayState == kTimeRemaining &&
m_pWindow->DoesControlExist("TimeRemaining") &&
m_iTotalSeconds >= 0)
m_pWindow->ControlStringValue("TimeRemaining", true, oText);
else
m_pWindow->ControlStringValue("Time", true, oText);
}
void FreeAmpTheme::UpdateMetaData(const PlaylistItem *pItem)
{
if (pItem->GetMetaData().Title().length() > 0 ||
pItem->GetMetaData().Artist().length() > 0)
{
string oText;
m_oTitle = pItem->GetMetaData().Title();
if (pItem->GetMetaData().Artist().length() > 0)
m_oTitle += string(" - ") + pItem->GetMetaData().Artist();
oText = string(BRANDING": ") + m_oTitle;
m_pWindow->SetTitle(oText);
}
else
m_oTitle = "";
m_pWindow->ControlStringValue(string("Title"), true, m_oTitle);
}
void FreeAmpTheme::DropFiles(vector<string> *pFileList)
{
char *ext;
char *url;
uint32 length, countbefore;
vector<string>::iterator i;
bool bPlay;
int iItems;
ext = new char[_MAX_PATH];
url = new char[_MAX_PATH + 7];
m_pContext->prefs->GetPlayImmediately(&bPlay);
iItems = m_pContext->plm->CountItems();
countbefore = m_pContext->plm->CountItems();
for(i = pFileList->begin(); i != pFileList->end(); i++)
{
char *pExtension = NULL;
vector<char*> fileList;
struct _stat st;
_stat((*i).c_str(), &st);
if(st.st_mode & _S_IFDIR)
{
vector<string> oList, oQuery;
oQuery.push_back(string("*.mp1"));
oQuery.push_back(string("*.mp2"));
oQuery.push_back(string("*.mp3"));
FindMusicFiles(i->c_str(), oList, oQuery);
if (oList.size() > 0)
{
if (bPlay)
{
m_pContext->target->AcceptEvent(new Event(CMD_Stop));
m_pContext->plm->RemoveAll();
}
m_pContext->plm->AddItems(oList);
if (iItems == 0 || bPlay)
m_pContext->target->AcceptEvent(new Event(CMD_Play));
}
}
else
{
PlaylistFormatInfo oInfo;
char ext[_MAX_PATH];
int j;
Error eRet = kError_NoErr;
pExtension = strrchr((*i).c_str(), '.');
if (!pExtension)
continue;
strcpy(ext, pExtension + 1);
ToUpper(ext);
for(j = 0; ; j++)
{
eRet = m_pContext->plm->GetSupportedPlaylistFormats(&oInfo, j);
if (IsError(eRet))
break;
if (strcasecmp(oInfo.GetExtension(), ext) == 0)
break;
}
if (!IsError(eRet))
{
length = _MAX_PATH + 7;
FilePathToURL((*i).c_str(), url, &length);
if (bPlay)
{
m_pContext->target->AcceptEvent(new Event(CMD_Stop));
m_pContext->plm->RemoveAll();
}
m_pContext->plm->ReadPlaylist(url);
if (iItems == 0 || bPlay)
m_pContext->target->AcceptEvent(new Event(CMD_Play));
}
else
if (m_pContext->player->IsSupportedExtension(ext))
{
length = _MAX_PATH + 7;
FilePathToURL((*i).c_str(), url, &length);
if (bPlay)
{
m_pContext->target->AcceptEvent(new Event(CMD_Stop));
m_pContext->plm->RemoveAll();
}
m_pContext->plm->AddItem(url);
if (iItems == 0 || bPlay)
m_pContext->target->AcceptEvent(new Event(CMD_Play));
}
}
}
if (countbefore == 0)
m_pContext->target->AcceptEvent(new Event(CMD_Play));
delete ext;
delete url;
}
void FreeAmpTheme::PostWindowCreate(void)
{
#ifdef WIN32
Int32PropValue *pProp;
pProp = new Int32PropValue((int)((Win32Window *)m_pWindow)->GetWindowHandle());
m_pContext->props->SetProperty("MainWindow", pProp);
#endif
string winTitle = string(BRANDING);
m_pWindow->SetTitle(winTitle);
}
void FreeAmpTheme::ShowHelp(void)
{
string oHelpFile;
char *dir;
uint32 len = _MAX_PATH;
dir = new char[_MAX_PATH];
m_pContext->prefs->GetInstallDirectory(dir, &len);
oHelpFile = string(dir);
oHelpFile += string(DIR_MARKER_STR);
#ifdef unix
oHelpFile += string("../share/");
#endif
oHelpFile += string(HELP_FILE);
#ifdef WIN32
Int32PropValue *pProp;
HWND hWnd;
if (IsError(m_pContext->props->GetProperty("MainWindow",
(PropValue **)&pProp)))
hWnd = NULL;
else
hWnd = (HWND)pProp->GetInt32();
WinHelp(hWnd, oHelpFile.c_str(), HELP_FINDER, FreeAmp_Main_Window);
#endif
#ifdef HAVE_GTK
struct _stat st;
if (_stat(oHelpFile.c_str(), &st) == 0 && st.st_mode & S_IFREG)
LaunchBrowser((char *)oHelpFile.c_str());
else
{
MessageDialog oBox(m_pContext);
string oMessage(szCantFindHelpError);
oBox.Show(oMessage.c_str(), string(BRANDING), kMessageOk, true);
}
#endif
delete dir;
}
void FreeAmpTheme::update_thread(void* arg)
{
FreeAmpTheme* _this = (FreeAmpTheme*)arg;
_this->UpdateThread();
}
void FreeAmpTheme::UpdateThread()
{
#ifdef WIN32
m_pUpdateMan->RetrieveLatestVersionInfo();
if(m_pUpdateMan->IsUpdateAvailable())
{
if(0 < DialogBoxParam(g_hinst,
MAKEINTRESOURCE(IDD_UPDATEAVAILABLE),
NULL,
::UpdateAvailableDlgProc,
(LPARAM) 0))
{
ShowOptions(4);
}
}
#endif
delete m_pUpdateThread;
}
void FreeAmpTheme::ShowOptions(uint32 defaultPage)
{
OptionsArgs *oArgs = new OptionsArgs;
if (m_bInOptions)
return;
if (m_pOptionsThread)
{
delete m_pOptionsThread;
m_pOptionsThread = NULL;
}
oArgs->pThis = this;
oArgs->uDefaultPage = defaultPage;
m_pOptionsThread = Thread::CreateThread();
m_pOptionsThread->Create(options_thread, oArgs);
}
void FreeAmpTheme::options_thread(void* arg)
{
OptionsArgs *pArgs = (OptionsArgs *)arg;
pArgs->pThis->OptionsThread(pArgs->uDefaultPage);
delete pArgs;
}
void FreeAmpTheme::OptionsThread(uint32 defaultPage)
{
PreferenceWindow *pWindow;
m_bInOptions = true;
#ifdef WIN32
pWindow = new Win32PreferenceWindow(m_pContext, m_pThemeMan, m_pUpdateMan, defaultPage);
#elif defined(__BEOS__)
pWindow = new BeOSPreferenceWindow(m_pContext, m_pThemeMan);
#else
pWindow = new GTKPreferenceWindow(m_pContext, m_pThemeMan, defaultPage);
#endif
pWindow->Show(m_pWindow);
delete pWindow;
m_bInOptions = false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -