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;
}