BOOL CFileMetadataPage::OnInitDialog() { CFilePropertiesPage::OnInitDialog(); CLibraryList* pFiles = GetList(); CRect rcClient, rcCombo; CString strText; GetClientRect( &rcClient ); m_wndSchemas.GetWindowRect( &rcCombo ); ScreenToClient( &rcCombo ); rcCombo.top = rcCombo.bottom + 8; rcCombo.bottom = rcClient.bottom - 8; m_wndData.Create( WS_CHILD|WS_VISIBLE|WS_BORDER|WS_TABSTOP, rcCombo, this, IDC_METADATA ); LoadString ( strText, IDS_SEARCH_NO_METADATA ); m_wndSchemas.m_sNoSchemaText = strText; BOOL bCollection = FALSE; CSchema* pSchema = NULL; { CQuickLock oLock( Library.m_pSection ); for ( POSITION pos = pFiles->GetIterator() ; pos ; ) { if ( CLibraryFile* pFile = pFiles->GetNextFile( pos ) ) { CSchema* pThisSchema = pFile->m_pSchema; if ( pThisSchema != NULL && pThisSchema->m_nType == CSchema::stFolder ) bCollection = TRUE; if ( pSchema == NULL ) { pSchema = pThisSchema; } else if ( pSchema != pThisSchema ) { pSchema = NULL; break; } } } } m_wndSchemas.Load( pSchema != NULL ? pSchema->m_sURI : _T(""), bCollection ? -1 : 0 ); OnSelChangeSchemas(); if ( pSchema != NULL ) { CXMLElement* pContainer = pSchema->Instantiate( TRUE ); CXMLElement* pXML = pContainer->AddElement( pSchema->m_sSingular ); { CQuickLock oLock( Library.m_pSection ); for ( POSITION pos1 = pFiles->GetIterator() ; pos1 ; ) { if ( CLibraryFile* pFile = pFiles->GetNextFile( pos1 ) ) { if ( pFile->m_pMetadata != NULL && pSchema->Equals( pFile->m_pSchema ) ) { for ( POSITION pos2 = pSchema->GetMemberIterator() ; pos2 ; ) { CSchemaMember* pMember = pSchema->GetNextMember( pos2 ); CString strOld = pMember->GetValueFrom( pXML, _T("(~ns~)") ); CString strNew = pMember->GetValueFrom( pFile->m_pMetadata /* , _T("(~ns~)") */ ); if ( strNew != _T("(~ns~)") && strOld != _T("(~mt~)") ) { if ( strOld == _T("(~ns~)") ) { pXML->AddAttribute( pMember->m_sName, strNew ); } else if ( strOld != strNew ) { pXML->AddAttribute( pMember->m_sName, _T("(~mt~)") ); } } } } } } } m_wndData.UpdateData( pXML, FALSE ); delete pContainer; } 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(); }