void CDriveViewer::Sort () { switch (m_State.m_nSortColumn) { case 0: std::sort (m_Array.begin (), m_Array.end (), SortByName(m_State.m_bAscending)); break; case 1: std::sort (m_Array.begin (), m_Array.end (), SortByType(m_State.m_bAscending)); case 2: if (m_State.m_bAscending) std::stable_sort (m_Array.begin (), m_Array.end (), sort_by_total_size_a); else std::stable_sort (m_Array.begin (), m_Array.end (), sort_by_total_size_d); break; case 3: if (m_State.m_bAscending) std::stable_sort (m_Array.begin (), m_Array.end (), sort_by_free_size_a); else std::stable_sort (m_Array.begin (), m_Array.end (), sort_by_free_size_d); break; } }
/* Also see NBookmarkHelper::Sort. */ int CALLBACK CShellBrowser::Sort(int InternalIndex1,int InternalIndex2) const { int ComparisonResult = 0; bool IsFolder1 = ((m_pwfdFiles[InternalIndex1].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) ? true : false; bool IsFolder2 = ((m_pwfdFiles[InternalIndex2].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) ? true : false; /* Folders will always be sorted separately from files, except in the recycle bin. */ if(IsFolder1 && !IsFolder2 && !CompareVirtualFolders(CSIDL_BITBUCKET)) { ComparisonResult = -1; } else if(!IsFolder1 && IsFolder2 && !CompareVirtualFolders(CSIDL_BITBUCKET)) { ComparisonResult = 1; } else { switch(m_SortMode) { case FSM_NAME: ComparisonResult = SortByName(InternalIndex1,InternalIndex2); break; case FSM_TYPE: ComparisonResult = SortByType(InternalIndex1,InternalIndex2); break; case FSM_SIZE: ComparisonResult = SortBySize(InternalIndex1,InternalIndex2); break; case FSM_DATEMODIFIED: ComparisonResult = SortByDate(InternalIndex1,InternalIndex2,DATE_TYPE_MODIFIED); break; case FSM_TOTALSIZE: ComparisonResult = SortByTotalSize(InternalIndex1,InternalIndex2,TRUE); break; case FSM_FREESPACE: ComparisonResult = SortByTotalSize(InternalIndex1,InternalIndex2,FALSE); break; case FSM_DATEDELETED: ComparisonResult = SortByDateDeleted(InternalIndex1,InternalIndex2); break; case FSM_ORIGINALLOCATION: ComparisonResult = SortByOriginalLocation(InternalIndex1,InternalIndex2); break; case FSM_ATTRIBUTES: ComparisonResult = SortByAttributes(InternalIndex1,InternalIndex2); break; case FSM_REALSIZE: ComparisonResult = SortByRealSize(InternalIndex1,InternalIndex2); break; case FSM_SHORTNAME: ComparisonResult = SortByShortName(InternalIndex1,InternalIndex2); break; case FSM_OWNER: ComparisonResult = SortByOwner(InternalIndex1,InternalIndex2); break; case FSM_PRODUCTNAME: ComparisonResult = SortByVersionInfo(InternalIndex1,InternalIndex2,VERSION_INFO_PRODUCT_NAME); break; case FSM_COMPANY: ComparisonResult = SortByVersionInfo(InternalIndex1,InternalIndex2,VERSION_INFO_COMPANY); break; case FSM_DESCRIPTION: ComparisonResult = SortByVersionInfo(InternalIndex1,InternalIndex2,VERSION_INFO_DESCRIPTION); break; case FSM_FILEVERSION: ComparisonResult = SortByVersionInfo(InternalIndex1,InternalIndex2,VERSION_INFO_FILE_VERSION); break; case FSM_PRODUCTVERSION: ComparisonResult = SortByVersionInfo(InternalIndex1,InternalIndex2,VERSION_INFO_PRODUCT_VERSION); break; case FSM_SHORTCUTTO: ComparisonResult = SortByShortcutTo(InternalIndex1,InternalIndex2); break; case FSM_HARDLINKS: ComparisonResult = SortByHardlinks(InternalIndex1,InternalIndex2); break; case FSM_EXTENSION: ComparisonResult = SortByExtension(InternalIndex1,InternalIndex2); break; case FSM_CREATED: ComparisonResult = SortByDate(InternalIndex1,InternalIndex2,DATE_TYPE_CREATED); break; case FSM_ACCESSED: ComparisonResult = SortByDate(InternalIndex1,InternalIndex2,DATE_TYPE_ACCESSED); break; case FSM_TITLE: ComparisonResult = SortBySummaryProperty(InternalIndex1,InternalIndex2,PROPERTY_ID_TITLE); break; case FSM_SUBJECT: ComparisonResult = SortBySummaryProperty(InternalIndex1,InternalIndex2,PROPERTY_ID_SUBJECT); break; case FSM_AUTHOR: ComparisonResult = SortBySummaryProperty(InternalIndex1,InternalIndex2,PROPERTY_ID_AUTHOR); break; case FSM_KEYWORDS: ComparisonResult = SortBySummaryProperty(InternalIndex1,InternalIndex2,PROPERTY_ID_KEYWORDS); break; case FSM_COMMENTS: ComparisonResult = SortBySummaryProperty(InternalIndex1,InternalIndex2,PROPERTY_ID_COMMENT); break; case FSM_CAMERAMODEL: ComparisonResult = SortByImageProperty(InternalIndex1,InternalIndex2,PropertyTagEquipModel); break; case FSM_DATETAKEN: ComparisonResult = SortByImageProperty(InternalIndex1,InternalIndex2,PropertyTagDateTime); break; case FSM_WIDTH: ComparisonResult = SortByImageProperty(InternalIndex1,InternalIndex2,PropertyTagImageWidth); break; case FSM_HEIGHT: ComparisonResult = SortByImageProperty(InternalIndex1,InternalIndex2,PropertyTagImageHeight); break; case FSM_VIRTUALCOMMENTS: ComparisonResult = SortByVirtualComments(InternalIndex1,InternalIndex2); break; case FSM_FILESYSTEM: ComparisonResult = SortByFileSystem(InternalIndex1,InternalIndex2); break; case FSM_NUMPRINTERDOCUMENTS: ComparisonResult = SortByPrinterProperty(InternalIndex1,InternalIndex2,PRINTER_INFORMATION_TYPE_NUM_JOBS); break; case FSM_PRINTERSTATUS: ComparisonResult = SortByPrinterProperty(InternalIndex1,InternalIndex2,PRINTER_INFORMATION_TYPE_STATUS); break; case FSM_PRINTERCOMMENTS: ComparisonResult = SortByPrinterProperty(InternalIndex1,InternalIndex2,PRINTER_INFORMATION_TYPE_COMMENTS); break; case FSM_PRINTERLOCATION: ComparisonResult = SortByPrinterProperty(InternalIndex1,InternalIndex2,PRINTER_INFORMATION_TYPE_LOCATION); break; case FSM_NETWORKADAPTER_STATUS: ComparisonResult = SortByNetworkAdapterStatus(InternalIndex1,InternalIndex2); break; case FSM_MEDIA_BITRATE: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_BITRATE); break; case FSM_MEDIA_COPYRIGHT: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_COPYRIGHT); break; case FSM_MEDIA_DURATION: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_DURATION); break; case FSM_MEDIA_PROTECTED: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_PROTECTED); break; case FSM_MEDIA_RATING: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_RATING); break; case FSM_MEDIA_ALBUMARTIST: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_ALBUM_ARTIST); break; case FSM_MEDIA_ALBUM: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_ALBUM_TITLE); break; case FSM_MEDIA_BEATSPERMINUTE: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_BEATS_PER_MINUTE); break; case FSM_MEDIA_COMPOSER: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_COMPOSER); break; case FSM_MEDIA_CONDUCTOR: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_CONDUCTOR); break; case FSM_MEDIA_DIRECTOR: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_DIRECTOR); break; case FSM_MEDIA_GENRE: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_GENRE); break; case FSM_MEDIA_LANGUAGE: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_LANGUAGE); break; case FSM_MEDIA_BROADCASTDATE: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_BROADCASTDATE); break; case FSM_MEDIA_CHANNEL: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_CHANNEL); break; case FSM_MEDIA_STATIONNAME: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_STATIONNAME); break; case FSM_MEDIA_MOOD: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_MOOD); break; case FSM_MEDIA_PARENTALRATING: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_PARENTALRATING); break; case FSM_MEDIA_PARENTALRATINGREASON: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_PARENTALRATINGREASON); break; case FSM_MEDIA_PERIOD: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_PERIOD); break; case FSM_MEDIA_PRODUCER: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_PRODUCER); break; case FSM_MEDIA_PUBLISHER: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_PUBLISHER); break; case FSM_MEDIA_WRITER: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_WRITER); break; case FSM_MEDIA_YEAR: ComparisonResult = SortByMediaMetadata(InternalIndex1,InternalIndex2,MEDIAMETADATA_TYPE_YEAR); break; default: assert(false); break; } } if(ComparisonResult == 0) { /* By default, items that are equal will be sub-sorted by their display names. */ ComparisonResult = StrCmpLogicalW(m_pExtraItemInfo[InternalIndex1].szDisplayName, m_pExtraItemInfo[InternalIndex2].szDisplayName); } if(!m_bSortAscending) { ComparisonResult = -ComparisonResult; } return ComparisonResult; }
/* Also see NBookmarkHelper::Sort. */ int CALLBACK CShellBrowser::Sort(int InternalIndex1,int InternalIndex2) const { int ComparisonResult = 0; BasicItemInfo_t basicItemInfo1 = getBasicItemInfo(InternalIndex1); BasicItemInfo_t basicItemInfo2 = getBasicItemInfo(InternalIndex2); bool IsFolder1 = ((basicItemInfo1.wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) ? true : false; bool IsFolder2 = ((basicItemInfo2.wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) ? true : false; /* Folders will always be sorted separately from files, except in the recycle bin. */ if(IsFolder1 && !IsFolder2 && !CompareVirtualFolders(CSIDL_BITBUCKET)) { ComparisonResult = -1; } else if(!IsFolder1 && IsFolder2 && !CompareVirtualFolders(CSIDL_BITBUCKET)) { ComparisonResult = 1; } else { switch(m_folderSettings.sortMode) { case SortMode::Name: ComparisonResult = SortByName(basicItemInfo1, basicItemInfo2, m_config->globalFolderSettings); break; case SortMode::Type: ComparisonResult = SortByType(basicItemInfo1,basicItemInfo2); break; case SortMode::Size: ComparisonResult = SortBySize(InternalIndex1,InternalIndex2); break; case SortMode::DateModified: ComparisonResult = SortByDate(InternalIndex1,InternalIndex2,DATE_TYPE_MODIFIED); break; case SortMode::TotalSize: ComparisonResult = SortByTotalSize(basicItemInfo1,basicItemInfo2,TRUE); break; case SortMode::FreeSpace: ComparisonResult = SortByTotalSize(basicItemInfo1,basicItemInfo2,FALSE); break; case SortMode::DateDeleted: ComparisonResult = SortByItemDetails(basicItemInfo1, basicItemInfo2, &SCID_DATE_DELETED); break; case SortMode::OriginalLocation: ComparisonResult = SortByItemDetails(basicItemInfo1, basicItemInfo2, &SCID_ORIGINAL_LOCATION); break; case SortMode::Attributes: ComparisonResult = SortByAttributes(basicItemInfo1, basicItemInfo2); break; case SortMode::RealSize: ComparisonResult = SortByRealSize(basicItemInfo1, basicItemInfo2); break; case SortMode::ShortName: ComparisonResult = SortByShortName(basicItemInfo1, basicItemInfo2); break; case SortMode::Owner: ComparisonResult = SortByOwner(basicItemInfo1, basicItemInfo2); break; case SortMode::ProductName: ComparisonResult = SortByVersionInfo(basicItemInfo1, basicItemInfo2,VERSION_INFO_PRODUCT_NAME); break; case SortMode::Company: ComparisonResult = SortByVersionInfo(basicItemInfo1, basicItemInfo2,VERSION_INFO_COMPANY); break; case SortMode::Description: ComparisonResult = SortByVersionInfo(basicItemInfo1, basicItemInfo2,VERSION_INFO_DESCRIPTION); break; case SortMode::FileVersion: ComparisonResult = SortByVersionInfo(basicItemInfo1, basicItemInfo2,VERSION_INFO_FILE_VERSION); break; case SortMode::ProductVersion: ComparisonResult = SortByVersionInfo(basicItemInfo1, basicItemInfo2,VERSION_INFO_PRODUCT_VERSION); break; case SortMode::ShortcutTo: ComparisonResult = SortByShortcutTo(basicItemInfo1, basicItemInfo2); break; case SortMode::HardLinks: ComparisonResult = SortByHardlinks(basicItemInfo1, basicItemInfo2); break; case SortMode::Extension: ComparisonResult = SortByExtension(basicItemInfo1,basicItemInfo2); break; case SortMode::Created: ComparisonResult = SortByDate(InternalIndex1,InternalIndex2,DATE_TYPE_CREATED); break; case SortMode::Accessed: ComparisonResult = SortByDate(InternalIndex1,InternalIndex2,DATE_TYPE_ACCESSED); break; case SortMode::Title: ComparisonResult = SortByItemDetails(basicItemInfo1, basicItemInfo2,&PKEY_Title); break; case SortMode::Subject: ComparisonResult = SortByItemDetails(basicItemInfo1, basicItemInfo2,&PKEY_Subject); break; case SortMode::Authors: ComparisonResult = SortByItemDetails(basicItemInfo1, basicItemInfo2,&PKEY_Author); break; case SortMode::Keywords: ComparisonResult = SortByItemDetails(basicItemInfo1, basicItemInfo2,&PKEY_Keywords); break; case SortMode::Comments: ComparisonResult = SortByItemDetails(basicItemInfo1, basicItemInfo2,&PKEY_Comment); break; case SortMode::CameraModel: ComparisonResult = SortByImageProperty(basicItemInfo1, basicItemInfo2,PropertyTagEquipModel); break; case SortMode::DateTaken: ComparisonResult = SortByImageProperty(basicItemInfo1, basicItemInfo2,PropertyTagDateTime); break; case SortMode::Width: ComparisonResult = SortByImageProperty(basicItemInfo1, basicItemInfo2,PropertyTagImageWidth); break; case SortMode::Height: ComparisonResult = SortByImageProperty(basicItemInfo1, basicItemInfo2,PropertyTagImageHeight); break; case SortMode::VirtualComments: ComparisonResult = SortByVirtualComments(basicItemInfo1, basicItemInfo2); break; case SortMode::FileSystem: ComparisonResult = SortByFileSystem(basicItemInfo1,basicItemInfo2); break; case SortMode::NumPrinterDocuments: ComparisonResult = SortByPrinterProperty(basicItemInfo1,basicItemInfo2,PRINTER_INFORMATION_TYPE_NUM_JOBS); break; case SortMode::PrinterStatus: ComparisonResult = SortByPrinterProperty(basicItemInfo1,basicItemInfo2,PRINTER_INFORMATION_TYPE_STATUS); break; case SortMode::PrinterComments: ComparisonResult = SortByPrinterProperty(basicItemInfo1,basicItemInfo2,PRINTER_INFORMATION_TYPE_COMMENTS); break; case SortMode::PrinterLocation: ComparisonResult = SortByPrinterProperty(basicItemInfo1,basicItemInfo2,PRINTER_INFORMATION_TYPE_LOCATION); break; case SortMode::NetworkAdapterStatus: ComparisonResult = SortByNetworkAdapterStatus(basicItemInfo1,basicItemInfo2); break; case SortMode::MediaBitrate: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_BITRATE); break; case SortMode::MediaCopyright: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_COPYRIGHT); break; case SortMode::MediaDuration: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_DURATION); break; case SortMode::MediaProtected: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_PROTECTED); break; case SortMode::MediaRating: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_RATING); break; case SortMode::MediaAlbumArtist: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_ALBUM_ARTIST); break; case SortMode::MediaAlbum: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_ALBUM_TITLE); break; case SortMode::MediaBeatsPerMinute: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_BEATS_PER_MINUTE); break; case SortMode::MediaComposer: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_COMPOSER); break; case SortMode::MediaConductor: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_CONDUCTOR); break; case SortMode::MediaDirector: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_DIRECTOR); break; case SortMode::MediaGenre: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_GENRE); break; case SortMode::MediaLanguage: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_LANGUAGE); break; case SortMode::MediaBroadcastDate: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_BROADCASTDATE); break; case SortMode::MediaChannel: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_CHANNEL); break; case SortMode::MediaStationName: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_STATIONNAME); break; case SortMode::MediaMood: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_MOOD); break; case SortMode::MediaParentalRating: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_PARENTALRATING); break; case SortMode::MediaParentalRatingReason: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_PARENTALRATINGREASON); break; case SortMode::MediaPeriod: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_PERIOD); break; case SortMode::MediaProducer: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_PRODUCER); break; case SortMode::MediaPublisher: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_PUBLISHER); break; case SortMode::MediaWriter: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_WRITER); break; case SortMode::MediaYear: ComparisonResult = SortByMediaMetadata(basicItemInfo1, basicItemInfo2,MEDIAMETADATA_TYPE_YEAR); break; default: assert(false); break; } } if(ComparisonResult == 0) { /* By default, items that are equal will be sub-sorted by their display names. */ ComparisonResult = StrCmpLogicalW(m_itemInfoMap.at(InternalIndex1).szDisplayName, m_itemInfoMap.at(InternalIndex2).szDisplayName); } if(!m_folderSettings.sortAscending) { ComparisonResult = -ComparisonResult; } return ComparisonResult; }