📄 freeampui.cpp
字号:
ResolveLink(file, sizeof(file));
}
List<char*> fileList;
struct stat st;
stat(file, &st);
if(st.st_mode & _S_IFDIR)
{
HANDLE findFileHandle = NULL;
WIN32_FIND_DATA findData;
char findPath[MAX_PATH + 1];
strcpy(findPath, file);
strcat(findPath, "\\*.mp?");
findFileHandle = FindFirstFile(findPath, &findData);
if(findFileHandle != INVALID_HANDLE_VALUE)
{
do
{
strcpy(findPath, file);
strcat(findPath, "\\");
strcat(findPath, findData.cFileName);
m_plm->AddItem(findPath,0);
}while(FindNextFile(findFileHandle, &findData));
FindClose(findFileHandle);
}
}
else
{
pExtension = strrchr(file, '.');
if(pExtension && strcasecmp(pExtension, ".m3u") == 0)
{
Error error;
error = m_plm->ExpandM3U(file, fileList);
if(IsError(error))
{
MessageBox(NULL, "Cannot open playlist file", file, MB_OK);
}
else
{
char* item = NULL;
int32 i = 0;
while(item = fileList.ItemAt(i++))
{
m_plm->AddItem(item,0);
}
}
}
else
{
/*OutputDebugString(file);
OutputDebugString("\r\n");*/
m_plm->AddItem(file,0);
}
}
}
if(!originalCount)
{
m_target->AcceptEvent(new Event(CMD_Play));
}
}
void
FreeAmpUI::
Command(int32 command,
View* source)
{
switch(command)
{
case kPlayControl:
{
m_target->AcceptEvent(new Event(CMD_Play));
break;
}
case kStopControl:
{
m_target->AcceptEvent(new Event(CMD_Stop));
break;
}
case kPauseControl:
{
m_target->AcceptEvent(new Event(CMD_TogglePause));
break;
}
case kLastControl:
{
m_target->AcceptEvent(new Event(CMD_PrevMediaPiece));
break;
}
case kNextControl:
{
m_target->AcceptEvent(new Event(CMD_NextMediaPiece));
break;
}
case kModeControl:
{
break;
}
case kMinimizeControl:
{
bool liveInTray;
m_prefs->GetPrefBoolean(kLiveInTrayPref, &liveInTray);
if(liveInTray)
ShowWindow(m_hwnd, SW_HIDE);
else
ShowWindow(m_hwnd, SW_MINIMIZE);
break;
}
case kCloseControl:
{
DestroyWindow( m_hwnd );
break;
}
case kRepeatControl:
{
m_plm->ToggleRepeat();
break;
}
case kShuffleControl:
{
m_plm->ToggleShuffle();
break;
}
case kAddControl:
{
List<char*> fileList;
if(FileOpenDialog( m_hwnd,
kOpenAudioFileTitle,
kAudioFileFilter,
&fileList,
m_prefs))
{
AddFileListToPlayList(&fileList);
}
break;
}
case kDeleteControl:
{
m_playlistView->DeleteSelection();
break;
}
case kSaveControl:
{
char file[MAX_PATH + 1];
uint32 size = sizeof(file);
if(FileSaveDialog( m_hwnd,
kSavePlaylistFileTitle,
kPlaylistFileFilter,
file,
&size,
m_prefs))
{
if(strcmp(file, kSaveToRio))
{
m_plm->ExportToM3U(file);
}
else
{
m_plm->ExportToRio();
}
}
break;
}
case kLoadControl:
{
List<char*> fileList;
if(FileOpenDialog( m_hwnd,
kOpenPlaylistFileTitle,
kPlaylistFileFilter,
&fileList,
m_prefs))
{
m_plm->MakeEmpty();
AddFileListToPlayList(&fileList);
m_plm->SetFirst();
}
break;
}
case kOpenControl:
{
List<char*> fileList;
if(FileOpenDialog( m_hwnd,
kOpenAudioFileTitle,
kAudioFileFilter,
&fileList,
m_prefs))
{
m_plm->MakeEmpty();
AddFileListToPlayList(&fileList);
m_plm->SetFirst();
if(m_state == UIState_Playing)
{
m_target->AcceptEvent(new Event(CMD_Stop));
m_target->AcceptEvent(new Event(CMD_Play));
}
else
{
;
}
}
break;
}
case kPlaylistControl:
{
HRGN windowRegion = CreateRectRgn(0,0,0,0);
RECT windowRect;
GetWindowRgn(m_hwnd, windowRegion);
if(EqualRgn(windowRegion, m_windowRegion))
{
// move region into place
OffsetRgn(m_playListRegion, 0, 123);
// copy window region so windows doesn't take our region
CombineRgn( windowRegion,
m_playListRegion,
m_windowRegion,
RGN_OR);
GetRgnBox(windowRegion, &windowRect);
m_width = windowRect.right - windowRect.left;
m_height = windowRect.bottom - windowRect.top;
SetWindowPos ( m_hwnd,
0,
0,
0,
m_width,
m_height,
SWP_NOZORDER|SWP_NOMOVE);
// Change window region
SetWindowRgn(m_hwnd, windowRegion, TRUE);
m_drawerView->OffsetBy(0, 123);
m_playlistBackView->Show();
m_panelBackingView->Show();
m_playlistView->Show();
m_scrollbarView->Show();
m_addView->Show();
m_deleteView->Show();
m_loadView->Show();
m_saveView->Show();
}
else
{
// move region into place
OffsetRgn(m_playListRegion, 0, -123);
// copy window region so windows doesn't take our region
CombineRgn( windowRegion,
m_windowRegion,
m_windowRegion,
RGN_OR);
GetRgnBox(windowRegion, &windowRect);
m_width = windowRect.right - windowRect.left;
m_height = windowRect.bottom - windowRect.top;
SetWindowPos ( m_hwnd,
0,
0,
0,
m_width,
m_height,
SWP_NOZORDER|SWP_NOMOVE);
// Change window region
SetWindowRgn(m_hwnd, windowRegion, TRUE);
m_drawerView->OffsetBy(0, -123);
m_playlistBackView->Hide();
m_panelBackingView->Hide();
m_playlistView->Hide();
m_scrollbarView->Hide();
m_addView->Hide();
m_deleteView->Hide();
m_loadView->Hide();
m_saveView->Hide();
}
DIB* canvas = new DIB();
canvas->Create(m_width, m_height, m_playerCanvas->BitsPerPixel());
canvas->SetPalette( m_bodyBitmap->Palette(),
m_bodyBitmap->NumberOfPaletteEntries() );
delete m_playerCanvas;
m_playerCanvas = canvas;
InvalidateRect(m_hwnd, &windowRect, FALSE);
break;
}
case kSongInfoControl:
{
TimeView* view = (TimeView*)source;
view->ToggleDisplay();
break;
}
case kPrefControl:
{
if(DisplayPreferences(m_hwnd, m_prefs))
ReadPreferences();
break;
}
}
}
void
FreeAmpUI::
Notify(int32 command, LPNMHDR notifyMsgHdr)
{
if(notifyMsgHdr->code == TTN_NEEDTEXT)
{
int32 idCtrl = notifyMsgHdr->idFrom;
LPTOOLTIPTEXT lpttt = (LPTOOLTIPTEXT) notifyMsgHdr;
POINT pt;
GetCursorPos(&pt);
ScreenToClient(m_hwnd, &pt);
// tooltips only use rects... we have non-rectangular controls
if(PtInRegion(m_controlRegions[idCtrl], pt.x, pt.y))
{
switch (idCtrl)
{
case kRepeatControl:
lpttt->lpszText = "Repeat";
break;
case kShuffleControl:
lpttt->lpszText = "Shuffle";
break;
case kOpenControl:
lpttt->lpszText = "Open...";
break;
case kModeControl:
lpttt->lpszText = "Change Player Mode (disabled)";
break;
case kMinimizeControl:
lpttt->lpszText = "Minimize";
break;
case kCloseControl:
lpttt->lpszText = "Close";
break;
case kPlayControl:
if(m_state == UIState_Stopped)
lpttt->lpszText = "Play";
else
lpttt->lpszText = "Stop";
break;
case kPauseControl:
if(m_state == UIState_Paused)
lpttt->lpszText = "Continue Playing";
else
lpttt->lpszText = "Pause";
break;
case kNextControl:
lpttt->lpszText = "Next Song";
break;
case kLastControl:
lpttt->lpszText = "Previous Song";
break;
case kPlaylistControl:
lpttt->lpszText = "Open Playlist";
break;
case kSongInfoControl:
lpttt->lpszText = "Change Display Mode";
break;
case kVolumeControl:
lpttt->lpszText = "Volume";
break;
case kSeekControl:
lpttt->lpszText = "Seek";
break;
}
}
}
else
{
switch( command )
{
case kVolumeControl:
{
switch(notifyMsgHdr->code)
{
case DIAL_BUTTON_DOWN:
{
m_target->AcceptEvent(new Event(CMD_GetVolume));
SetTimer(m_hwnd, TIMER_VOLUME_POSITION, 200, NULL);
m_timeView->Hide();
m_volumeInfoView->Show();
break;
}
case DIAL_BUTTON_UP:
{
KillTimer(m_hwnd, TIMER_VOLUME_POSITION);
m_timeView->Show();
m_volumeInfoView->Hide();
m_volumeView->SetPosition(0);
break;
}
case DIAL_MOVE:
{
/*char buffer[256];
wsprintf(buffer,"position = %d\r\n", m_volumeView->Position());
OutputDebugString(buffer);*/
m_volumeAcceleration = m_volumeView->Position() / 5;
break;
}
}
break;
}
case kSeekControl:
{
switch(notifyMsgHdr->code)
{
case DIAL_BUTTON_DOWN:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -