www.pudn.com > LECTEUR-MP3.zip > MusGestView.cpp


// MusGestView.cpp : implementation of the CMusGestView class 
// 
 
#include "stdafx.h" 
#include "MusGest.h" 
#include "MainFrm.h" 
 
#include "MusGestDoc.h" 
#include "MusGestView.h" 
#include "NewDirDlg.h" 
 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CMusGestView 
 
extern CMusGestApp theApp; 
 
IMPLEMENT_DYNCREATE(CMusGestView, CTreeView) 
 
BEGIN_MESSAGE_MAP(CMusGestView, CTreeView) 
	//{{AFX_MSG_MAP(CMusGestView) 
	ON_NOTIFY_REFLECT(NM_RCLICK, OnRClick) 
	ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelChange) 
 
	ON_MESSAGE(WM_FOLDER_IN_PLAY, OnPlayFolder) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView:: OnFilePrintPreview) 
 
	ON_COMMAND(ID_TREE_NOUVEAUDOSSIER, OnNewFolder) 
	ON_COMMAND(ID_TREE_SUPPRIMER, OnDeleteFolder) 
	ON_COMMAND(ID_TREE_RENOMER, OnRenameFolder) 
	ON_COMMAND(ID_TREE_COPIER, OnCopyFolder) 
	 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CMusGestView construction/destruction 
 
CMusGestView::CMusGestView() 
{ 
	m_pImageList = NULL; 
	m_hInPlayItem = NULL; 
} 
 
CMusGestView::~CMusGestView() 
{ 
	if (m_pImageList) 
		delete m_pImageList; 
} 
 
BOOL CMusGestView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CTreeView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CMusGestView drawing 
 
void CMusGestView::OnDraw(CDC* pDC) 
{ 
	CMusGestDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	// TODO: add draw code for native data here 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CMusGestView printing 
 
BOOL CMusGestView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void CMusGestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void CMusGestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CMusGestView diagnostics 
 
#ifdef _DEBUG 
void CMusGestView::AssertValid() const 
{ 
	CTreeView::AssertValid(); 
} 
 
void CMusGestView::Dump(CDumpContext& dc) const 
{ 
	CTreeView::Dump(dc); 
} 
 
CMusGestDoc* CMusGestView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMusGestDoc))); 
	return (CMusGestDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CMusGestView message handlers 
 
void CMusGestView::OnInitialUpdate()  
{ 
	CTreeView::OnInitialUpdate(); 
 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
 
	//ajoute le style pour avoir des lignes et des bouttons sur chaque neud 
	DWORD dwStyle = GetWindowLong(TreeCtrl, GWL_STYLE); 
	dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_FULLROWSELECT; 
	SetWindowLong(TreeCtrl, GWL_STYLE, dwStyle); 
 
	//Ajoute le filtre mp3 
	m_RepExplor.AddFileExtInFilter("mp3"); 
 
	//Active l'utilisation du filtre 
	m_RepExplor.SetUseFilter(true); 
 
	m_pImageList = new CImageList; 
	m_pImageList->Create(14, 14, ILC_COLOR8, 0, 4); 
 
	HICON hIcon = (HICON)LoadImage(theApp.m_hInstance,MAKEINTRESOURCE(IDI_FOLDER),IMAGE_ICON,14, 14,LR_DEFAULTCOLOR|LR_SHARED); 
	if (hIcon) m_pImageList->Add(hIcon); 
 
	hIcon = (HICON)LoadImage(theApp.m_hInstance,MAKEINTRESOURCE(IDI_FOLDER_NO_MUSIC),IMAGE_ICON,14, 14,LR_DEFAULTCOLOR|LR_SHARED); 
	if (hIcon) m_pImageList->Add(hIcon); 
 
	hIcon = (HICON)LoadImage(theApp.m_hInstance,MAKEINTRESOURCE(IDI_FOLDER_IN_PLAY),IMAGE_ICON,14, 14,LR_DEFAULTCOLOR|LR_SHARED); 
	if (hIcon) m_pImageList->Add(hIcon); 
 
	TreeCtrl.SetImageList(m_pImageList, TVSIL_NORMAL); 
} 
 
//------------------------------------------------------------------- 
void CMusGestView::CreateFolder(CString strNewFolderName) 
{ 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
	CRep * pRep = NULL; 
	HTREEITEM hItem = TreeCtrl.GetSelectedItem(); 
 
	if (hItem) 
	{ 
		pRep = (CRep*)TreeCtrl.GetItemData(hItem); 
	} 
	else 
	{ 
		hItem = TVI_ROOT; 
		pRep = m_RepExplor.GetRootRep(); 
	} 
 
	if (pRep) 
	{ 
		if (pRep->AddSubRep(strNewFolderName) != NULL) 
		{ 
			TreeCtrl.InsertItem(strNewFolderName,hItem); 
			TreeCtrl.SetItemData(hItem,(LPARAM)pRep); 
			TreeCtrl.SetItemImage(hItem,1,1); 
		} 
	} 
} 
 
//------------------------------------------------------------------- 
void CMusGestView::Start(CString strRep) 
{ 
	m_RepExplor.ConstructTree(strRep,true); 
	CRep * pRep = m_RepExplor.GetRootRep(); 
 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
	TreeCtrl.DeleteAllItems(); 
	 
	CFileView * pView = GetFileView(); 
	if (pView) pView->RemoveAllItem(); 
 
	if (pRep) 
	{ 
		InitTree(pRep, TVI_ROOT); 
	} 
} 
 
 
//------------------------------------------------------------------- 
void CMusGestView::InitTree(CRep * pRep, HTREEITEM hItem) 
{ 
	HTREEITEM hNewItem = NULL; 
	POSITION pos = NULL; 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
	CRep * pNavRep = NULL; 
 
	if (pRep) 
	{ 
		pos = pRep->GetFirstRepPos(); 
		 
		while (pos) 
		{ 
			pNavRep = pRep->GetNextRep(pos); 
 
			if (pNavRep) 
			{ 
				CString RepName = pNavRep->GetRepName(); 
				hNewItem = TreeCtrl.InsertItem(RepName,hItem); 
 
				if (hNewItem) 
				{ 
					TreeCtrl.SetItemData(hNewItem,(LPARAM)pNavRep); 
 
					if (pNavRep->GetRepName() == "TestModif") 
						int i  =0; 
 
					if ((!pNavRep->bIsExistFile()) && (!pNavRep->bIsExistSubFile())) 
						TreeCtrl.SetItemImage(hNewItem,1,1); 
					else 
						TreeCtrl.SetItemImage(hNewItem,0,0); 
															 
					if (pNavRep->bIsExistSubRep()) 
						InitTree(pNavRep,hNewItem); 
				} 
			} 
			 
		} 
	} 
} 
 
//------------------------------------------------------------------- 
CListCtrl & CMusGestView::GetListCtrl() 
{ 
	CFileView * pFileView = NULL; 
	pFileView = GetFileView(); 
	CListCtrl &List = pFileView->GetListCtrl(); 
	return List; 
} 
 
//------------------------------------------------------------------- 
CFileView * CMusGestView::GetFileView() 
{ 
	CMainFrame * pFrame = static_cast( AfxGetMainWnd()); 
	CFileView  * pFileView = static_cast(pFrame->GetRightView(0,0)); 
	return pFileView; 
	return NULL; 
} 
 
 
//------------------------------------------------------------------- 
void CMusGestView::OnSelChange(NMHDR* pNMHDR, LRESULT* pResult) 
{ 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; 
	// TODO: Add your control notification handler code here 
 
	CFileView * pView = GetFileView(); 
 
	if (pView) 
	{ 
		pView->RemoveAllItem(); 
 
		if (pNMTreeView) 
		{ 
			if (pNMTreeView->itemNew.hItem) 
			{ 
				CRep * pRep = NULL; 
				pRep = (CRep*)TreeCtrl.GetItemData(pNMTreeView->itemNew.hItem); 
 
				if (pRep) 
				{ 
					if (pRep->bIsExistFile()) 
					{ 
						int i = 0; 
						 
						POSITION pos = NULL; 
						pos = pRep->GetFirstFilePos(); 
						 
						while (pos) 
						{ 
							CRepFile * pFile = pRep->GetNextFile(pos); 
 
							if (pFile) 
								pView->InsertItem(i,pFile); 
														 
							i++; 
						} 
					} 
				} 
			} 
		} 
	} 
 
	//return 0L; 
} 
 
 
//--------------------------------------------------------------------------- 
void CMusGestView::OnRClick(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	CPoint point; 
    CMenu menu,*pPopup; 
 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
	HTREEITEM hItem = TreeCtrl.GetSelectedItem(); 
 	 
	if (hItem != NULL) 
	{ 
		GetCursorPos(&point); 
		menu.LoadMenu(IDR_PLAY_MENU); 
		ASSERT (menu.m_hMenu != NULL); 
		pPopup = menu.GetSubMenu(2); 
		ASSERT (pPopup != NULL); 
 
			// insert a separator item at the top 
	    pPopup->InsertMenu(0, MF_BYPOSITION | MF_SEPARATOR, 0, "Options du dossier"); 
		// insert title item 
		// note: item is not selectable (disabled) but not grayed 
		pPopup->InsertMenu(0, MF_BYPOSITION | MF_STRING | MF_DISABLED, 0, "Options du dossier"); 
		SetMenuDefaultItem(pPopup->m_hMenu, 0, TRUE); 
 
		int nResult = pPopup->TrackPopupMenu(TPM_LEFTALIGN |  TPM_RIGHTBUTTON, point.x, point.y, this);   
   		menu.DestroyMenu(); 
	} 
	 
	*pResult = 0; 
} 
 
//--------------------------------------------------------------------------- 
void CMusGestView::OnNewFolder() 
{ 
	NewDirDlg Dlg(this,0);//Nouveau 
 
	if (Dlg.DoModal() == IDOK) 
	{ 
		CString strName = Dlg.GetName(); 
		CreateFolder(strName); 
	} 
} 
 
//--------------------------------------------------------------------------- 
void CMusGestView::OnDeleteFolder() 
{ 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
	HTREEITEM hItem = TreeCtrl.GetSelectedItem(); 
 	 
	if (hItem != NULL) 
	{ 
		CRep * pRep = NULL; 
		pRep = (CRep*)TreeCtrl.GetItemData(hItem); 
 
		if (pRep) 
			if (pRep->DeleteThisRep()) 
				TreeCtrl.DeleteItem(hItem); 
	} 
} 
 
//--------------------------------------------------------------------------- 
void CMusGestView::OnRenameFolder() 
{ 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
	HTREEITEM hItem = TreeCtrl.GetSelectedItem(); 
	CString strName; 
 	 
	if (hItem != NULL) 
	{ 
		CRep * pRep = NULL; 
		pRep = (CRep*)TreeCtrl.GetItemData(hItem); 
 
		if (pRep) 
		{ 
			NewDirDlg Dlg(this,1,TreeCtrl.GetItemText(hItem));//Renomer 
 
			if (Dlg.DoModal() == IDOK) 
			{ 
				strName = Dlg.GetName(); 
			} 
 
			if (!strName.IsEmpty()) 
				if (pRep->ModifRepName(strName)) 
					TreeCtrl.SetItemText(hItem,strName); 
		} 
	} 
} 
 
//--------------------------------------------------------------------------- 
void CMusGestView::OnCopyFolder() 
{ 
 
} 
 
//--------------------------------------------------------------------------- 
LRESULT CMusGestView::OnPlayFolder(WPARAM w, LPARAM l) 
{ 
	CTreeCtrl &TreeCtrl = GetTreeCtrl(); 
	HTREEITEM hItem = TreeCtrl.GetSelectedItem(); 
 
	int iStopPlay = (int)w; 
 
	if (hItem) 
	{ 
		if (iStopPlay == 1) 
		{ 
			TreeCtrl.SetItemImage(hItem,0,0); 
			m_hInPlayItem = NULL; 
		} 
		else 
		{ 
			if (m_hInPlayItem) 
				TreeCtrl.SetItemImage(m_hInPlayItem,0,0); 
 
			TreeCtrl.SetItemImage(hItem,2,2); 
			m_hInPlayItem = hItem; 
		} 
	} 
	else 
		m_hInPlayItem = NULL; 
 
	return 0; 
}