📄 dlglibrary.cpp
字号:
// DlgLibrary.cpp : implementation file
//
#include "stdafx.h"
#include "Media.h"
#include "DlgLibrary.h"
#include "dataPlaylist.h"
#include "dataSong.h"
#include "DlgCreatePL.h"
#include "MediaDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DlgLibrary dialog
DlgLibrary::DlgLibrary(CWnd* pParent /*=NULL*/)
: CDialog(DlgLibrary::IDD, pParent)
{
//{{AFX_DATA_INIT(DlgLibrary)
m_vPList = _T("");
m_vLink = _T("");
m_vGenre = _T("");
m_vArtist = _T("");
m_vAlbum = _T("");
m_vTitle = _T("");
m_vImage = _T("");
//}}AFX_DATA_INIT
}
void DlgLibrary::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DlgLibrary)
DDX_Control(pDX, IDC_BUTTON_EDIT, m_bEdit);
DDX_Control(pDX, IDC_BUTTON_DELETE, m_bDelete);
DDX_Control(pDX, IDC_BUTTON_ADD, m_bAdd);
DDX_Control(pDX, IDC_LIST_SONGS, m_lstSongs);
DDX_Control(pDX, IDC_COMBO_PLIST, m_PlayList);
DDX_CBString(pDX, IDC_COMBO_PLIST, m_vPList);
DDX_Text(pDX, IDC_EDIT_LINK, m_vLink);
DDX_Text(pDX, IDC_EDIT_GENRE, m_vGenre);
DDX_Text(pDX, IDC_EDIT_ARTIST, m_vArtist);
DDX_Text(pDX, IDC_EDIT_ALBUM, m_vAlbum);
DDX_Text(pDX, IDC_EDIT_TITLE, m_vTitle);
DDX_Text(pDX, IDC_EDIT_IMAGE, m_vImage);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DlgLibrary, CDialog)
//{{AFX_MSG_MAP(DlgLibrary)
ON_CBN_SELCHANGE(IDC_COMBO_PLIST, OnSelchangeComboPlist)
ON_LBN_SELCHANGE(IDC_LIST_SONGS, OnSelchangeListSongs)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON_BROWSEIMAGE, OnButtonBrowseimage)
ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DlgLibrary message handlers
void DlgLibrary::loadPlayList()
{
int n = m_playlist.GetSize();
for (int i=0; i<n; i++)
{
dataPlaylist * plist = (dataPlaylist *)m_playlist.ElementAt(i);
m_PlayList.AddString(plist->name);
}
}
BOOL DlgLibrary::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
width = 0;
m_status_add = TRUE;
m_bAdd.LoadBitmaps(IDB_BITMAP_ADD);
m_bDelete.LoadBitmaps(IDB_BITMAP_DELETE);
m_bEdit.LoadBitmaps(IDB_BITMAP_EDIT);
DlgLibrary::loadPlayList();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void DlgLibrary::OnSelchangeComboPlist()
{
// TODO: Add your control notification handler code here
m_lstSongs.ResetContent();
m_No = m_PlayList.GetCurSel();
dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(m_No);
m_arrSongs.RemoveAll();
m_arrSongs.Copy(m_plist->arrSongs);
DlgLibrary::loadLSongs();
}
BOOL DlgLibrary::checkExistPList(CString name)
{
int n = m_playlist.GetSize();
CString tmp;
for(int i=0; i<n ; i++)
{
dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(i);
tmp = m_plist->path;
if(tmp == name)
{
m_No = i;
return TRUE;
}
}
return FALSE;
}
void DlgLibrary::loadLSongs()
{
m_lstSongs.ResetContent();
int n = m_arrSongs.GetSize();
for (int i=0; i<n; i++)
{
dataSongs * m_data = (dataSongs *)m_arrSongs.ElementAt(i);
DlgLibrary::AddString2List(m_data->getTitle());
}
}
void DlgLibrary::OnSelchangeListSongs()
{
// TODO: Add your control notification handler code here
int pos = m_lstSongs.GetCurSel();
dataSongs * m_data = (dataSongs *)m_arrSongs.ElementAt(pos);
SetDlgItemText(IDC_EDIT_LINK,m_data->getPath());
SetDlgItemText(IDC_EDIT_TITLE,m_data->getTitle());
SetDlgItemText(IDC_EDIT_ARTIST,m_data->getArtist());
SetDlgItemText(IDC_EDIT_ALBUM,m_data->getAlbum());
SetDlgItemText(IDC_EDIT_GENRE,m_data->getGenre());
SetDlgItemText(IDC_EDIT_IMAGE,m_data->getImage());
}
void DlgLibrary::OnButtonAdd()
{
// TODO: Add your control notification handler code here
if (m_status_add) // Button is ADD
{
m_status_add = FALSE; // Button is changed to APPLY & all editboxes are enabled
m_status_exit = FALSE;
SetDlgItemText(IDC_BUTTON_ADD,"Apply");
m_bAdd.LoadBitmaps(IDB_BITMAP_SAVE);
SetDlgItemText(IDC_BUTTON_EXIT,"Cancel");
DlgLibrary::changeStatusEditBox(TRUE);
m_vLink = "";
m_vTitle = "";
m_vArtist = "";
m_vAlbum = "";
m_vGenre = "";
m_vImage = "";
UpdateData(FALSE);
if(MessageBox("Do you want to create a new playlist?","Update",MB_YESNO+MB_ICONQUESTION) == IDYES)
{
CDlgCreatePL pCreate = new CDlgCreatePL();
if (pCreate.DoModal() == IDOK)
{
UpdateData(TRUE);
CString tmp = pCreate.m_vFolder;
tmp += "\\" + pCreate.m_vFileName + ".doc";
if (checkExistPList(tmp) == FALSE)
{
m_No = m_playlist.GetSize();
m_playlist.Add(new dataPlaylist(tmp,pCreate.m_vFileName));
m_PlayList.AddString(pCreate.m_vFileName);
m_PlayList.SetCurSel(m_No);
m_lstSongs.ResetContent();
m_arrSongs.RemoveAll();
}
}
}
else
{
MessageBox("Remember choosing the playlist first!");
m_PlayList.SetCurSel(m_No);
}
GetDlgItem(IDC_BUTTON_DELETE)->ShowWindow(FALSE);
GetDlgItem(IDC_BUTTON_EDIT)->ShowWindow(FALSE);
}
else
{
UpdateData(TRUE); // Update data
m_No = m_PlayList.GetCurSel();
if (m_No != -1 && m_vLink != "")
{
if(MessageBox("Do you want to add this song?","Update",MB_YESNO+MB_ICONQUESTION) == IDYES)
{
CString tmp = "";
dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(m_No);
m_plist->arrSongs.Add(new dataSongs(m_vLink,m_vTitle,m_vArtist,m_vAlbum,m_vGenre,m_vImage));
tmp.Format("%s",m_vTitle);
m_arrSongs.Add(new dataSongs(m_vLink,m_vTitle,m_vArtist,m_vAlbum,m_vGenre,m_vImage));
DlgLibrary::AddString2List(tmp); // Add song to playlist
m_vLink = "";
m_vTitle = "";
m_vArtist = "";
m_vAlbum = "";
m_vGenre = "";
m_vImage = "";
UpdateData(FALSE);
if (MessageBox("Do you want to add other song?","Update",MB_YESNO+MB_ICONQUESTION) == IDNO)
{
m_status_exit = FALSE;
m_bAdd.LoadBitmaps(IDB_BITMAP_ADD);
DlgLibrary::OnButtonExit();
}
}
}
else
{
if (m_No == -1)
{
MessageBox("You didn't choose any playlist to add the song !!!");
}
else
{
MessageBox("You didn't choose any song to add !!!");
}
}
}
}
void DlgLibrary::OnButtonDelete()
{
// TODO: Add your control notification handler code here
if (m_lstSongs.GetCurSel() == LB_ERR)
{
MessageBox("You have to select the song first!","Question",MB_OK+MB_ICONQUESTION);
}
else
{
if (MessageBox("Do you want to delete this song?","Remove",MB_YESNO+MB_ICONQUESTION) == IDYES)
{
int a = m_lstSongs.GetCurSel();
// Delete data in Playlist
m_lstSongs.DeleteString(a);
m_arrSongs.RemoveAt(a);
dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(m_No);
m_plist->arrSongs.RemoveAt(a);
UpdateData(TRUE);
m_vLink = "";
m_vTitle = "";
m_vArtist = "";
m_vAlbum = "";
m_vGenre = "";
m_vImage = "";
UpdateData(FALSE);
}
}
}
void DlgLibrary::OnButtonEdit()
{
// TODO: Add your control notification handler code here
if (m_status_edit)
{
int n = m_lstSongs.GetCurSel();
if (n == LB_ERR)
{
MessageBox("You have to select the song first!","Question",MB_OK+MB_ICONQUESTION);
m_status_exit = FALSE;
DlgLibrary::OnButtonExit();
}
else
{
m_status_edit = FALSE;
m_status_exit = FALSE;
SetDlgItemText(IDC_BUTTON_EXIT,"Cancel");
SetDlgItemText(IDC_BUTTON_EDIT,"Apply");
m_bEdit.LoadBitmaps(IDB_BITMAP_SAVE);
MessageBox("Please edit all information you want and press SAVE button");
GetDlgItem(IDC_BUTTON_ADD)->ShowWindow(FALSE);
GetDlgItem(IDC_BUTTON_DELETE)->ShowWindow(FALSE);
DlgLibrary::changeStatusEditBox(TRUE);
UpdateData(TRUE);
if (m_vImage != "")
{
GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(TRUE);
}
UpdateData(FALSE);
}
}
else
{
int a = m_lstSongs.GetCurSel();
dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(m_No);
dataSongs * m_data = (dataSongs *)m_plist->arrSongs.ElementAt(a);
if(MessageBox("Do you want to edit this song?","Update",MB_YESNO+MB_ICONQUESTION) == IDYES)
{
UpdateData(TRUE); // Update data
m_lstSongs.DeleteString(a);
m_plist->arrSongs.RemoveAt(a);
m_arrSongs.RemoveAt(a);
CString tmp = "";
tmp.Format("%s",m_vTitle);
m_lstSongs.InsertString(a,tmp); // Insert data to Playlist
m_plist->arrSongs.InsertAt(a,new dataSongs(m_vLink,m_vTitle,m_vArtist,m_vAlbum,m_vGenre,m_vImage));
m_arrSongs.InsertAt(a,new dataSongs(m_vLink,m_vTitle,m_vArtist,m_vAlbum,m_vGenre,m_vImage));
m_status_edit = TRUE;
m_status_exit = FALSE;
SetDlgItemText(IDC_BUTTON_EXIT,"Exit");
SetDlgItemText(IDC_BUTTON_EDIT,"Edit");
m_bEdit.LoadBitmaps(IDB_BITMAP_EDIT);
DlgLibrary::OnButtonExit();
GetDlgItem(IDC_BUTTON_ADD)->ShowWindow(TRUE);
GetDlgItem(IDC_BUTTON_DELETE)->ShowWindow(TRUE);
DlgLibrary::changeStatusEditBox(FALSE);
DlgLibrary::loadLSongs();
}
else
{
m_vLink = m_data->getPath();
m_vTitle = m_data->getTitle();
m_vArtist = m_data->getArtist();
m_vAlbum = m_data->getAlbum();
m_vGenre = m_data->getGenre();
m_vImage = m_data->getImage();
UpdateData(FALSE);
}
}
}
void DlgLibrary::OnButtonExit()
{
// TODO: Add your control notification handler code here
if (m_status_exit)
{
DlgLibrary::OnClose();
OnOK();
}
else
{
m_status_exit = TRUE;
m_status_add = TRUE;
m_status_edit = TRUE;
m_bAdd.LoadBitmaps(IDB_BITMAP_ADD);
m_bEdit.LoadBitmaps(IDB_BITMAP_EDIT);
SetDlgItemText(IDC_BUTTON_EXIT,"Exit");
SetDlgItemText(IDC_BUTTON_ADD,"Add");
SetDlgItemText(IDC_BUTTON_EDIT,"Edit");
GetDlgItem(IDC_BUTTON_ADD)->ShowWindow(TRUE);
GetDlgItem(IDC_BUTTON_DELETE)->ShowWindow(TRUE);
GetDlgItem(IDC_BUTTON_EDIT)->ShowWindow(TRUE);
DlgLibrary::changeStatusEditBox(FALSE);
}
}
void DlgLibrary::changeStatusEditBox(BOOL status)
{
GetDlgItem(IDC_BUTTON_BROWSE)->EnableWindow(status);
GetDlgItem(IDC_EDIT_TITLE)->EnableWindow(status);
GetDlgItem(IDC_EDIT_ARTIST)->EnableWindow(status);
GetDlgItem(IDC_EDIT_ALBUM)->EnableWindow(status);
GetDlgItem(IDC_EDIT_GENRE)->EnableWindow(status);
GetDlgItem(IDC_BUTTON_BROWSEIMAGE)->EnableWindow(status);
GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(status);
}
void DlgLibrary::OnButtonBrowse()
{
// TODO: Add your control notification handler code here
CFileDialog m_File(TRUE,".mp3",m_vLink,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Music Files (*.MP3)|*.mp3||");
if(m_File.DoModal() == IDOK)
{
UpdateData(TRUE);
m_vLink = m_File.GetPathName();
m_vTitle = m_File.GetFileTitle();
UpdateData(FALSE);
}
}
void DlgLibrary::OnClose()
{
// TODO: Add your message handler code here and/or call default
int n = m_playlist.GetSize();
for (int i=0; i<n; i++)
{
dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(i);
CString path = m_plist->path;
DlgLibrary::WriteToFile(path,i);
}
m_playlist.FreeExtra();
((CMediaDlg *)GetParent())->m_Playlists.RemoveAll();
((CMediaDlg *)GetParent())->m_Playlists.Copy(m_playlist);
((CMediaDlg *)GetParent())->loadPlayList();
CDialog::OnClose();
}
void DlgLibrary::OnButtonBrowseimage()
{
// TODO: Add your control notification handler code here
CFileDialog m_File(TRUE,".bmp",m_vLink,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Music Files (*.BMP)|*.bmp||");
if(m_File.DoModal() == IDOK)
{
UpdateData(TRUE);
m_vImage = m_File.GetPathName();
UpdateData(FALSE);
GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(TRUE);
}
}
void DlgLibrary::updateWidth(LPCTSTR s)
{
CClientDC dc(this);
CFont * f = m_lstSongs.GetFont();
dc.SelectObject(f);
CSize sz = dc.GetTextExtent(s, _tcslen(s));
sz.cx += 3 * ::GetSystemMetrics(SM_CXBORDER);
if(sz.cx > width)
{
width = sz.cx;
m_lstSongs.SetHorizontalExtent(width);
}
}
int DlgLibrary::AddString2List(LPCTSTR s)
{
int result = m_lstSongs.AddString(s);
if(result < 0)
return result;
updateWidth(s);
return result;
}
void DlgLibrary::OnButtonClear()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_vImage = "";
UpdateData(FALSE);
GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(FALSE);
}
void DlgLibrary::WriteToFile(CString filename, int no)
{
dataPlaylist * m_plist = (dataPlaylist *)m_playlist.ElementAt(no);
CFile cfFile(filename, CFile::modeCreate | CFile::modeReadWrite);
CArchive ar (&cfFile, CArchive::store);
int n = m_plist->arrSongs.GetSize();
for (int i=0; i<n; i++)
{
CString tmp = "";
dataSongs * m_data = (dataSongs *)m_plist->arrSongs.GetAt(i);
tmp += m_data->getPath() + "#" + m_data->getTitle() + "#" + m_data->getArtist() + "#" + m_data->getAlbum() + "#" + m_data->getGenre() + "#" + m_data->getImage();
ar.WriteString(tmp); ar.WriteString(_T("\n"));
}
ar.Close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -