Skip to main content

ib_shell_item/prop/
column.rs

1use derive_more::TryFrom;
2use num_enum::IntoPrimitive;
3use windows::Win32::{Foundation::PROPERTYKEY, Storage::EnhancedStorage::*};
4
5/**
6File system item columns.
7
8Note that columns starting from [`FSColumn::DateCreated`] are off by default
9(don't have [`SHCOLSTATE_ONBYDEFAULT`] set);
10undocumented and possible (although unlikely) to change.
11
12Columns until [`FSColumn::OfflineStatus`] (included) are available from Windows XP SP1.
13*/
14#[allow(non_camel_case_types)]
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, TryFrom, IntoPrimitive)]
16#[try_from(repr)]
17#[repr(u16)]
18pub enum FSColumn {
19    ItemNameDisplay = 0,
20    Size = 1,
21    ItemType = 2,
22    DateModified = 3,
23    DateCreated = 4,
24    DateAccessed = 5,
25    FileAttributes = 6,
26    OfflineStatus = 7,
27    OfflineAvailability = 8,
28    PerceivedType = 9,
29    FileOwner = 10,
30    Kind = 11,
31    Photo_DateTaken = 12,
32    Music_Artist = 13,
33    Music_AlbumTitle = 14,
34    Media_Year = 15,
35    Music_Genre = 16,
36    Music_Conductor = 17,
37    Keywords = 18,
38    Rating = 19,
39    Author = 20,
40    Title = 21,
41    Subject = 22,
42    Category = 23,
43    Comment = 24,
44    Copyright = 25,
45    Music_TrackNumber = 26,
46    Media_Duration = 27,
47    Audio_EncodingBitrate = 28,
48    DRM_IsProtected = 29,
49    Photo_CameraModel = 30,
50    Image_Dimensions = 31,
51    Photo_CameraManufacturer = 32,
52    Company = 33,
53    FileDescription = 34,
54}
55
56impl FSColumn {
57    pub fn key(self) -> PROPERTYKEY {
58        use FSColumn::*;
59        match self {
60            ItemNameDisplay => PKEY_ItemNameDisplay,
61            Size => PKEY_Size,
62            ItemType => PKEY_ItemType,
63            DateModified => PKEY_DateModified,
64            DateCreated => PKEY_DateCreated,
65            DateAccessed => PKEY_DateAccessed,
66            FileAttributes => PKEY_FileAttributes,
67            OfflineStatus => PKEY_OfflineStatus,
68            OfflineAvailability => PKEY_OfflineAvailability,
69            PerceivedType => PKEY_PerceivedType,
70            FileOwner => PKEY_FileOwner,
71            Kind => PKEY_Kind,
72            Photo_DateTaken => PKEY_Photo_DateTaken,
73            Music_Artist => PKEY_Music_Artist,
74            Music_AlbumTitle => PKEY_Music_AlbumTitle,
75            Media_Year => PKEY_Media_Year,
76            Music_Genre => PKEY_Music_Genre,
77            Music_Conductor => PKEY_Music_Conductor,
78            Keywords => PKEY_Keywords,
79            Rating => PKEY_Rating,
80            Author => PKEY_Author,
81            Title => PKEY_Title,
82            Subject => PKEY_Subject,
83            Category => PKEY_Category,
84            Comment => PKEY_Comment,
85            Copyright => PKEY_Copyright,
86            Music_TrackNumber => PKEY_Music_TrackNumber,
87            Media_Duration => PKEY_Media_Duration,
88            Audio_EncodingBitrate => PKEY_Audio_EncodingBitrate,
89            DRM_IsProtected => PKEY_DRM_IsProtected,
90            Photo_CameraModel => PKEY_Photo_CameraModel,
91            Image_Dimensions => PKEY_Image_Dimensions,
92            Photo_CameraManufacturer => PKEY_Photo_CameraManufacturer,
93            Company => PKEY_Company,
94            FileDescription => PKEY_FileDescription,
95        }
96    }
97}