void CSharedDirsTreeCtrl::OnContextMenu(CWnd* pWnd, CPoint point) { CDirectoryItem* pSelectedDir = GetSelectedFilter(); if (pSelectedDir != NULL && pSelectedDir->m_eItemType != SDI_UNSHAREDDIRECTORY && pSelectedDir->m_eItemType != SDI_FILESYSTEMPARENT){ int iSelectedItems = m_pSharedFilesCtrl->GetItemCount(); int iCompleteFileSelected = -1; UINT uPrioMenuItem = 0; bool bFirstItem = true; for (int i = 0; i < iSelectedItems; i++) { const CKnownFile* pFile = (CKnownFile*)m_pSharedFilesCtrl->GetItemData(i); int iCurCompleteFile = pFile->IsPartFile() ? 0 : 1; if (bFirstItem) iCompleteFileSelected = iCurCompleteFile; else if (iCompleteFileSelected != iCurCompleteFile) iCompleteFileSelected = -1; UINT uCurPrioMenuItem = 0; if (pFile->IsAutoUpPriority()) uCurPrioMenuItem = MP_PRIOAUTO; else if (pFile->GetUpPriority() == PR_VERYLOW) uCurPrioMenuItem = MP_PRIOVERYLOW; else if (pFile->GetUpPriority() == PR_LOW) uCurPrioMenuItem = MP_PRIOLOW; else if (pFile->GetUpPriority() == PR_NORMAL) uCurPrioMenuItem = MP_PRIONORMAL; else if (pFile->GetUpPriority() == PR_HIGH) uCurPrioMenuItem = MP_PRIOHIGH; else if (pFile->GetUpPriority() == PR_VERYHIGH) uCurPrioMenuItem = MP_PRIOVERYHIGH; else ASSERT(0); if (bFirstItem) uPrioMenuItem = uCurPrioMenuItem; else if (uPrioMenuItem != uCurPrioMenuItem) uPrioMenuItem = 0; bFirstItem = false; } bool bWideRangeSelection = true; if(pSelectedDir->m_nCatFilter != -1 || pSelectedDir->m_eItemType == SDI_NO){ // just avoid that users get bad ideas by showing the comment/delete-option for the "all" selections // as the same comment for all files/all incimplete files/ etc is probably not too usefull // - even if it can be done in other ways if the user really wants to do it bWideRangeSelection = false; } m_SharedFilesMenu.EnableMenuItem((UINT_PTR)m_PrioMenu.m_hMenu, iSelectedItems > 0 ? MF_ENABLED : MF_GRAYED); m_PrioMenu.CheckMenuRadioItem(MP_PRIOVERYLOW, MP_PRIOAUTO, uPrioMenuItem, 0); m_SharedFilesMenu.EnableMenuItem(MP_OPENFOLDER, (pSelectedDir != NULL && pSelectedDir->m_eItemType == SDI_NO) ? MF_ENABLED : MF_GRAYED); m_SharedFilesMenu.EnableMenuItem(MP_REMOVE, (iCompleteFileSelected > 0 && !bWideRangeSelection) ? MF_ENABLED : MF_GRAYED); m_SharedFilesMenu.EnableMenuItem(MP_CMT, (iSelectedItems > 0 && !bWideRangeSelection) ? MF_ENABLED : MF_GRAYED); m_SharedFilesMenu.EnableMenuItem(MP_DETAIL, iSelectedItems > 0 ? MF_ENABLED : MF_GRAYED); m_SharedFilesMenu.EnableMenuItem(thePrefs.GetShowCopyEd2kLinkCmd() ? MP_GETED2KLINK : MP_SHOWED2KLINK, iSelectedItems > 0 ? MF_ENABLED : MF_GRAYED); CTitleMenu WebMenu; WebMenu.CreateMenu(); WebMenu.AddMenuTitle(NULL, true); int iWebMenuEntries = theWebServices.GetFileMenuEntries(&WebMenu); UINT flag2 = (iWebMenuEntries == 0 || iSelectedItems != 1) ? MF_GRAYED : MF_STRING; m_SharedFilesMenu.AppendMenu(flag2 | MF_POPUP, (UINT_PTR)WebMenu.m_hMenu, GetResString(IDS_WEBSERVICES), _T("WEB")); GetPopupMenuPos(*this, point); m_SharedFilesMenu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this); m_SharedFilesMenu.RemoveMenu(m_SharedFilesMenu.GetMenuItemCount()-1,MF_BYPOSITION); VERIFY( WebMenu.DestroyMenu() ); } else if(pSelectedDir != NULL && pSelectedDir->m_eItemType == SDI_UNSHAREDDIRECTORY){ m_ShareDirsMenu.EnableMenuItem(MP_UNSHAREDIR, FileSystemTreeIsShared(pSelectedDir->m_strFullPath) ? MF_ENABLED : MF_GRAYED); m_ShareDirsMenu.EnableMenuItem(MP_UNSHAREDIRSUB, (FileSystemTreeIsShared(pSelectedDir->m_strFullPath) || FileSystemTreeHasSharedSubdirectory(pSelectedDir->m_strFullPath)) ? MF_ENABLED : MF_GRAYED); m_ShareDirsMenu.EnableMenuItem(MP_SHAREDIR, !FileSystemTreeIsShared(pSelectedDir->m_strFullPath) ? MF_ENABLED : MF_GRAYED); m_ShareDirsMenu.EnableMenuItem(MP_SHAREDIRSUB, FileSystemTreeHasSubdirectories(pSelectedDir->m_strFullPath) ? MF_ENABLED : MF_GRAYED); GetPopupMenuPos(*this, point); m_ShareDirsMenu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this); } }