void CRemoteFileDialog::OnDblclkFilelist(NMHDR* /*pNMHDR*/, LRESULT* pResult) { int nSel = GetFirstSelectedItem(); if (nSel != -1) { int nType = GetItemType(nSel); switch (nType) { case RFDT_FILE: if (!FolderSelect()) { OnOK(); } break; case RFDT_FOLDER: CString sFolder = m_lcFiles.GetItemText(nSel, 0); SetCurrentFolder(sFolder); break; } } *pResult = 0; }
void CLibraryFolderCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if ( ( nChar == VK_UP || nChar == VK_DOWN ) && ( GetKeyState( VK_SHIFT ) & 0x8000 ) && m_bMultiSelect ) { if ( ! m_hFirstSelected ) { m_hFirstSelected = GetFirstSelectedItem(); ClearSelection( m_hFirstSelected ); } HTREEITEM hItemPrevSel = GetSelectedItem(); HTREEITEM hItemNext; if ( nChar == VK_UP ) hItemNext = GetPrevVisibleItem( hItemPrevSel ); else hItemNext = GetNextVisibleItem( hItemPrevSel ); if ( hItemNext ) { BOOL bReselect = ! ( GetItemState( hItemNext, TVIS_SELECTED ) & TVIS_SELECTED ); SelectItem( hItemNext ); if ( bReselect ) SetItemState( hItemPrevSel, TVIS_SELECTED, TVIS_SELECTED ); } NotifySelectionChanged(); return; } else if ( nChar >= VK_SPACE ) { m_hFirstSelected = NULL; ClearSelection(); } else if ( nChar == 'A' && ( GetAsyncKeyState( VK_CONTROL ) & 0x8000 ) && m_bMultiSelect ) { BOOL bChanged = FALSE; for ( HTREEITEM hItem = GetRootItem() ; hItem != NULL ; hItem = GetNextItem( hItem, TVGN_NEXTVISIBLE ) ) { if ( ( GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED ) == 0 ) { SetItemState( hItem, TVIS_SELECTED, TVIS_SELECTED ); bChanged = TRUE; } } if ( bChanged ) NotifySelectionChanged(); return; } CTreeCtrl::OnKeyDown( nChar, nRepCnt, nFlags ); }
DWORD CTDCTaskListCtrl::GetFocusedListTaskID() const { int nItem = GetFocusedListItem(); if (nItem == -1) nItem = GetFirstSelectedItem(); if (nItem != -1) return m_lcTasks.GetItemData(nItem); // else return 0; }
const TCHAR * CPropertiesCtrl::GetCurFolderPath() const { HTREEITEM hItem = GetFirstSelectedItem(); if( !hItem ) return NULL; CFTCItemData * pData = (CFTCItemData*)GetItemData( hItem ); if( !pData ) return NULL; return pData->m_sPath; }
void CLibraryFolderCtrl::OnLButtonDown(UINT nFlags, CPoint point) { UINT nItemFlags = 0; HTREEITEM hItem = HitTest( point, &nItemFlags ); if ( nItemFlags == TVHT_ONITEMBUTTON ) { CTreeCtrl::OnLButtonDown( nFlags, point ); return; } if ( ( nFlags & MK_CONTROL ) && m_bMultiSelect ) { if ( hItem ) { UINT nNewState = GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED ? 0 : TVIS_SELECTED; SetItemState( hItem, nNewState, TVIS_SELECTED ); m_hFirstSelected = NULL; NotifySelectionChanged(); } } else if ( ( nFlags & MK_SHIFT ) && m_bMultiSelect ) { hItem = HitTest( point ); if ( ! m_hFirstSelected ) m_hFirstSelected = GetFirstSelectedItem(); if ( hItem ) SetItemState( hItem, TVIS_SELECTED, TVIS_SELECTED ); if ( m_hFirstSelected ) SelectItems( m_hFirstSelected, hItem ); NotifySelectionChanged(); } else { BOOL bChanged = FALSE; BOOL bSelected = hItem && ( GetItemState( hItem, TVIS_SELECTED ) & TVIS_SELECTED ); if ( ! bSelected || ( nFlags & MK_RBUTTON ) == 0 ) { if ( m_bFirstClick && hItem != GetRootItem() ) { Select( hItem, TVGN_CARET ); } bChanged = ClearSelection( hItem ); m_hFirstSelected = NULL; } if ( hItem ) { if ( ! bSelected ) { SetItemState( hItem, TVIS_SELECTED, TVIS_SELECTED ); bChanged = TRUE; } } if ( bChanged ) NotifySelectionChanged(); } m_bFirstClick = FALSE; SetFocus(); }
POSITION CLibraryFolderCtrl::GetSelectedFolderIterator() const { return (POSITION)GetFirstSelectedItem(); }
void CLibraryFolderCtrl::Update(CLibraryFolder* pFolder, HTREEITEM hFolder, HTREEITEM hParent, DWORD nUpdateCookie, BOOL bRecurse) { if ( ! hFolder ) { DWORD dwStyle = INDEXTOOVERLAYMASK( pFolder->IsShared() ? 0 : SHI_O_LOCKED ); if ( pFolder->m_sPath.CompareNoCase( Settings.Downloads.CompletePath ) == 0 ) dwStyle |= TVIS_BOLD; if ( m_bMultiSelect && GetFirstSelectedItem() == NULL ) dwStyle |= TVIS_SELECTED; if ( pFolder->m_bExpanded ) dwStyle |= TVIS_EXPANDED; CString strName = pFolder->m_sName; if ( pFolder->m_pParent == NULL ) { CString strDrive; if ( pFolder->m_sPath.Find( _T(":\\") ) == 1 || pFolder->m_sPath.GetLength() == 2 ) strDrive.Format( _T(" (%c:)"), pFolder->m_sPath[0] ); else strDrive = _T(" (Net)"); strName += strDrive; dwStyle |= TVIS_EXPANDED; } hFolder = InsertItem( TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_STATE, strName, SHI_FOLDER_CLOSED, SHI_FOLDER_CLOSED, dwStyle, TVIS_EXPANDED|TVIS_SELECTED|TVIS_OVERLAYMASK, (LPARAM)pFolder, hParent, TVI_SORT ); } else { DWORD dwMask = TVIS_OVERLAYMASK | TVIS_BOLD; DWORD dwStyle = INDEXTOOVERLAYMASK( pFolder->IsShared() ? 0 : SHI_O_LOCKED ); if ( pFolder->m_sPath.CompareNoCase( Settings.Downloads.CompletePath ) == 0 ) dwStyle |= TVIS_BOLD; DWORD dwExisting = GetItemState( hFolder, dwMask ) & dwMask; if ( dwExisting != dwStyle ) SetItemState( hFolder, dwStyle, dwMask ); } if ( nUpdateCookie ) { if ( bRecurse || ( GetItemState( hFolder, TVIS_SELECTED ) & TVIS_SELECTED ) ) { pFolder->m_nSelectCookie = nUpdateCookie; bRecurse |= ( GetItemState( hFolder, TVIS_EXPANDED ) & TVIS_EXPANDED ) == 0; } } CList< CLibraryFolder* > pAlready; for ( HTREEITEM hItem = GetChildItem( hFolder ) ; hItem ; ) { HTREEITEM hNext = GetNextSiblingItem( hItem ); CLibraryFolder* pChild = (CLibraryFolder*)GetItemData( hItem ); if ( pFolder->CheckFolder( pChild ) ) { Update( pChild, hItem, NULL, nUpdateCookie, bRecurse ); pAlready.AddTail( pChild ); } else { DeleteItem( hItem ); } hItem = hNext; } for ( POSITION pos = pFolder->GetFolderIterator() ; pos ; ) { CLibraryFolder* pChild = pFolder->GetNextFolder( pos ); if ( pAlready.Find( pChild ) == NULL ) { Update( pChild, NULL, hFolder, nUpdateCookie, bRecurse ); } } int nOldImage1, nOldImage2; GetItemImage( hFolder, nOldImage1, nOldImage2 ); int nImage = ItemHasChildren( hFolder ) && ( GetItemState( hFolder, TVIS_EXPANDED ) & TVIS_EXPANDED ); nImage = nImage ? SHI_FOLDER_OPEN : SHI_FOLDER_CLOSED; if ( nOldImage1 != nImage ) SetItemImage( hFolder, nImage, nImage ); }
void CRemoteFileDialog::OnItemchangedFilelist(NMHDR* /*pNMHDR*/, LRESULT* pResult) { *pResult = 0; if (m_bFilling) { return; } // rebuild results at the same time int nSelCount = m_lcFiles.GetSelectedCount(); if (nSelCount == 1) { int nSel = GetFirstSelectedItem(); if (GetItemType(nSel) == RFDT_FILE || FolderSelect()) { // save result CString sFileName = m_lcFiles.GetItemText(nSel, 0); CString sFilePath(sFileName); if (!m_bRoot) { sFilePath.Format(_T("%s/%s"), m_sCurFolder, sFileName); } m_aFiles.RemoveAll(); m_aFiles.Add(FILERESULT(sFilePath, GetItemSize(nSel))); // update current filename m_sFilenames = sFileName; } } else if (nSelCount > 1) { m_sFilenames.Empty(); POSITION pos = m_lcFiles.GetFirstSelectedItemPosition(); while (pos) { int nItem = m_lcFiles.GetNextSelectedItem(pos); if (nItem != -1 && GetItemType(nItem) == RFDT_FILE) { // save result CString sFileName = m_lcFiles.GetItemText(nItem, 0); CString sFilePath(sFileName); if (!m_bRoot) { sFilePath.Format(_T("%s/%s"), m_sCurFolder, sFileName); } m_aFiles.Add(FILERESULT(sFilePath, GetItemSize(nItem))); // update current filename CString sItem; sItem.Format(_T("\"%s\" "), sFileName); m_sFilenames += sItem; } } } UpdateData(FALSE); UpdateOKButton(FALSE); }