void CLibraryDetailView::OnItemChanged(NM_LISTVIEW* pNotify, LRESULT* pResult) { *pResult = 0; if ( pNotify->iItem >= 0 ) { if ( ( pNotify->uOldState & LVIS_SELECTED ) != ( pNotify->uNewState & LVIS_SELECTED ) ) { if ( pNotify->uNewState & LVIS_SELECTED ) { SelAdd( m_pList[ pNotify->iItem ].nIndex ); m_pList[ pNotify->iItem ].nState |= LDVI_SELECTED; } else { SelRemove( m_pList[ pNotify->iItem ].nIndex ); m_pList[ pNotify->iItem ].nState &= ~LDVI_SELECTED; } } } else { SelClear(); LDVITEM* pItem = m_pList; for ( DWORD nCount = m_nList ; nCount ; nCount--, pItem++ ) pItem->nState &= ~LDVI_SELECTED; } }
void CLibraryDetailView::OnItemRangeChanged(NMLVODSTATECHANGE* pNotify, LRESULT* pResult) { *pResult = 0; for ( int nItem = pNotify->iFrom ; nItem <= pNotify->iTo ; nItem++ ) { if ( pNotify->uNewState & LVIS_SELECTED ) { SelAdd( m_pList[ nItem ].nIndex ); m_pList[ nItem ].nState |= LDVI_SELECTED; } else { SelRemove( m_pList[ nItem ].nIndex ); m_pList[ nItem ].nState &= ~LDVI_SELECTED; } } }
BOOL CLibraryTileView::Select(iterator pTile, TRISTATE bSelect) { CSingleLock oLock( &Library.m_pSection ); if ( ! oLock.Lock( 250 ) ) return FALSE; CAlbumFolder* pAlbum = (*pTile)->GetAlbum(); if ( ! pAlbum ) return FALSE; switch ( bSelect ) { case TRI_UNKNOWN: (*pTile)->m_bSelected = ! (*pTile)->m_bSelected; break; case TRI_FALSE: if ( (*pTile)->m_bSelected == FALSE ) return FALSE; (*pTile)->m_bSelected = FALSE; break; case TRI_TRUE: if ( (*pTile)->m_bSelected == TRUE ) return FALSE; (*pTile)->m_bSelected = TRUE; break; } if ( (*pTile)->m_bSelected ) { m_nSelected++; m_oSelTile.push_back( pTile ); SelAdd( pAlbum ); } else { m_nSelected--; SelRemove( pAlbum ); m_oSelTile.remove( pTile ); } return TRUE; }
BOOL CLibraryAlbumView::Select(CLibraryAlbumTrack* pTrack, TRISTATE bSelect) { switch ( bSelect ) { case TRI_UNKNOWN: pTrack->m_bSelected = ! pTrack->m_bSelected; break; case TRI_FALSE: if ( pTrack->m_bSelected == FALSE ) return FALSE; pTrack->m_bSelected = FALSE; break; case TRI_TRUE: if ( pTrack->m_bSelected == TRUE ) return FALSE; pTrack->m_bSelected = TRUE; break; } if ( pTrack->m_bSelected ) { if ( m_pSelTrack.Find( pTrack ) == NULL ) { m_nSelected++; SelAdd( pTrack->m_nIndex ); m_pSelTrack.AddTail( pTrack ); } } else { if ( POSITION pos = m_pSelTrack.Find( pTrack ) ) { m_nSelected--; SelRemove( pTrack->m_nIndex ); m_pSelTrack.RemoveAt( pos ); } } return TRUE; }
void CLibraryDetailView::Update() { GET_LIST(); CSchema* pSchema = SchemaCache.Get( Settings.Library.FilterURI ); DWORD nCookie = GetFolderCookie(); if ( Settings.Library.ShowVirtual ) pSchema = NULL; if ( m_nStyle == LVS_REPORT ) { CLibraryTreeItem* pTree = GetFolderSelection(); if ( pTree != NULL && pTree->m_pVirtual != NULL && pTree->m_pSelNext == NULL && pTree->m_pVirtual->m_pSchema != NULL ) { CString strURI = pTree->m_pVirtual->m_pSchema->GetContainedURI( CSchema::stFile ); if ( strURI.GetLength() && ( m_pSchema == NULL || m_pSchema->m_sURI != strURI ) ) { if ( CSchema* pSchema = SchemaCache.Get( strURI ) ) { CPtrList pColumns; CSchemaColumnsDlg::LoadColumns( pSchema, &pColumns ); SetViewSchema( pSchema, &pColumns, TRUE, FALSE ); } } } } LDVITEM* pItem = m_pList + m_nList - 1; for ( DWORD nCount = m_nList ; nCount ; nCount--, pItem-- ) { CLibraryFile* pFile = Library.LookupFile( pItem->nIndex ); if ( pFile && pFile->m_nSelectCookie == nCookie && pFile->IsAvailable() && ( ! pSchema || pSchema->Equals( pFile->m_pSchema ) || ( ! pFile->m_pMetadata && pSchema->FilterType( pFile->m_sName ) ) ) ) { pFile->m_nListCookie = nCookie; } else { SelRemove( pItem->nIndex ); CStringArray* pSaved = pItem->pText; CopyMemory( pItem, pItem + 1, sizeof(LDVITEM) * ( m_nList - nCount ) ); pItem[ m_nList - nCount ].pText = pSaved; m_nList--; } } for ( POSITION pos = LibraryMaps.GetFileIterator() ; pos ; ) { CLibraryFile* pFile = LibraryMaps.GetNextFile( pos ); if ( pFile->m_nSelectCookie == nCookie && pFile->m_nListCookie != nCookie && pFile->IsAvailable() && ( ! pSchema || pSchema->Equals( pFile->m_pSchema ) || ( ! pFile->m_pMetadata && pSchema->FilterType( pFile->m_sName ) ) ) ) { if ( m_nList == m_nBuffer ) // MUST EQUAL { m_nBuffer += 64; LDVITEM* pList = new LDVITEM[ m_nBuffer ]; if ( m_nList ) CopyMemory( pList, m_pList, m_nList * sizeof(LDVITEM) ); if ( m_pList ) delete [] m_pList; ZeroMemory( pList + m_nList, ( m_nBuffer - m_nList ) * sizeof(LDVITEM) ); m_pList = pList; } m_pList[ m_nList ].nIndex = pFile->m_nIndex; m_pList[ m_nList ].nState &= ~LDVI_SELECTED; m_nList++; pFile->m_nListCookie = nCookie; } } m_nListCookie++; SortItems(); }