1 // IFolder.h 2 3 #ifndef ZIP7_INC_IFOLDER_H 4 #define ZIP7_INC_IFOLDER_H 5 6 #include "../../IProgress.h" 7 #include "../../IStream.h" 8 9 Z7_PURE_INTERFACES_BEGIN 10 11 #define Z7_IFACE_CONSTR_FOLDER_SUB(i, base, n) \ 12 Z7_DECL_IFACE_7ZIP_SUB(i, base, 8, n) \ 13 { Z7_IFACE_COM7_PURE(i) }; 14 15 #define Z7_IFACE_CONSTR_FOLDER(i, n) \ 16 Z7_IFACE_CONSTR_FOLDER_SUB(i, IUnknown, n) 17 18 namespace NPlugin 19 { 20 enum 21 { 22 kName = 0, 23 kType, 24 kClassID, 25 kOptionsClassID 26 }; 27 } 28 29 #define Z7_IFACEM_IFolderFolder(x) \ 30 x(LoadItems()) \ 31 x(GetNumberOfItems(UInt32 *numItems)) \ 32 x(GetProperty(UInt32 itemIndex, PROPID propID, PROPVARIANT *value)) \ 33 x(BindToFolder(UInt32 index, IFolderFolder **resultFolder)) \ 34 x(BindToFolder(const wchar_t *name, IFolderFolder **resultFolder)) \ 35 x(BindToParentFolder(IFolderFolder **resultFolder)) \ 36 x(GetNumberOfProperties(UInt32 *numProperties)) \ 37 x(GetPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 38 x(GetFolderProperty(PROPID propID, PROPVARIANT *value)) \ 39 40 Z7_IFACE_CONSTR_FOLDER(IFolderFolder, 0x00) 41 42 /* 43 IFolderAltStreams:: 44 BindToAltStreams((UInt32)(Int32)-1, ... ) means alt streams of that folder 45 */ 46 47 #define Z7_IFACEM_IFolderAltStreams(x) \ 48 x(BindToAltStreams(UInt32 index, IFolderFolder **resultFolder)) \ 49 x(BindToAltStreams(const wchar_t *name, IFolderFolder **resultFolder)) \ 50 x(AreAltStreamsSupported(UInt32 index, Int32 *isSupported)) \ 51 52 Z7_IFACE_CONSTR_FOLDER(IFolderAltStreams, 0x17) 53 54 #define Z7_IFACEM_IFolderWasChanged(x) \ 55 x(WasChanged(Int32 *wasChanged)) 56 Z7_IFACE_CONSTR_FOLDER(IFolderWasChanged, 0x04) 57 58 /* x(SetTotalFiles(UInt64 total)) */ \ 59 /* x(SetCompletedFiles(const UInt64 *completedValue)) */ \ 60 #define Z7_IFACEM_IFolderOperationsExtractCallback(x) \ 61 x(AskWrite( \ 62 const wchar_t *srcPath, \ 63 Int32 srcIsFolder, \ 64 const FILETIME *srcTime, \ 65 const UInt64 *srcSize, \ 66 const wchar_t *destPathRequest, \ 67 BSTR *destPathResult, \ 68 Int32 *writeAnswer)) \ 69 x(ShowMessage(const wchar_t *message)) \ 70 x(SetCurrentFilePath(const wchar_t *filePath)) \ 71 x(SetNumFiles(UInt64 numFiles)) \ 72 73 Z7_IFACE_CONSTR_FOLDER_SUB(IFolderOperationsExtractCallback, IProgress, 0x0B) 74 75 76 #define Z7_IFACEM_IFolderOperations(x) \ 77 x(CreateFolder(const wchar_t *name, IProgress *progress)) \ 78 x(CreateFile(const wchar_t *name, IProgress *progress)) \ 79 x(Rename(UInt32 index, const wchar_t *newName, IProgress *progress)) \ 80 x(Delete(const UInt32 *indices, UInt32 numItems, IProgress *progress)) \ 81 x(CopyTo(Int32 moveMode, const UInt32 *indices, UInt32 numItems, \ 82 Int32 includeAltStreams, Int32 replaceAltStreamCharsMode, \ 83 const wchar_t *path, IFolderOperationsExtractCallback *callback)) \ 84 x(CopyFrom(Int32 moveMode, const wchar_t *fromFolderPath, \ 85 const wchar_t * const *itemsPaths, UInt32 numItems, IProgress *progress)) \ 86 x(SetProperty(UInt32 index, PROPID propID, const PROPVARIANT *value, IProgress *progress)) \ 87 x(CopyFromFile(UInt32 index, const wchar_t *fullFilePath, IProgress *progress)) \ 88 89 Z7_IFACE_CONSTR_FOLDER(IFolderOperations, 0x13) 90 91 /* 92 FOLDER_INTERFACE2(IFolderOperationsDeleteToRecycleBin, 0x06, 0x03) 93 { 94 x(DeleteToRecycleBin(const UInt32 *indices, UInt32 numItems, IProgress *progress)) \ 95 }; 96 */ 97 98 #define Z7_IFACEM_IFolderGetSystemIconIndex(x) \ 99 x(GetSystemIconIndex(UInt32 index, Int32 *iconIndex)) 100 Z7_IFACE_CONSTR_FOLDER(IFolderGetSystemIconIndex, 0x07) 101 102 #define Z7_IFACEM_IFolderGetItemFullSize(x) \ 103 x(GetItemFullSize(UInt32 index, PROPVARIANT *value, IProgress *progress)) 104 Z7_IFACE_CONSTR_FOLDER(IFolderGetItemFullSize, 0x08) 105 106 #define Z7_IFACEM_IFolderCalcItemFullSize(x) \ 107 x(CalcItemFullSize(UInt32 index, IProgress *progress)) 108 Z7_IFACE_CONSTR_FOLDER(IFolderCalcItemFullSize, 0x14) 109 110 #define Z7_IFACEM_IFolderClone(x) \ 111 x(Clone(IFolderFolder **resultFolder)) 112 Z7_IFACE_CONSTR_FOLDER(IFolderClone, 0x09) 113 114 #define Z7_IFACEM_IFolderSetFlatMode(x) \ 115 x(SetFlatMode(Int32 flatMode)) 116 Z7_IFACE_CONSTR_FOLDER(IFolderSetFlatMode, 0x0A) 117 118 /* 119 #define Z7_IFACEM_IFolderSetShowNtfsStreamsMode(x) \ 120 x(SetShowNtfsStreamsMode(Int32 showStreamsMode)) 121 Z7_IFACE_CONSTR_FOLDER(IFolderSetShowNtfsStreamsMode, 0xFA) 122 */ 123 124 #define Z7_IFACEM_IFolderProperties(x) \ 125 x(GetNumberOfFolderProperties(UInt32 *numProperties)) \ 126 x(GetFolderPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 127 128 Z7_IFACE_CONSTR_FOLDER(IFolderProperties, 0x0E) 129 130 #define Z7_IFACEM_IFolderArcProps(x) \ 131 x(GetArcNumLevels(UInt32 *numLevels)) \ 132 x(GetArcProp(UInt32 level, PROPID propID, PROPVARIANT *value)) \ 133 x(GetArcNumProps(UInt32 level, UInt32 *numProps)) \ 134 x(GetArcPropInfo(UInt32 level, UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 135 x(GetArcProp2(UInt32 level, PROPID propID, PROPVARIANT *value)) \ 136 x(GetArcNumProps2(UInt32 level, UInt32 *numProps)) \ 137 x(GetArcPropInfo2(UInt32 level, UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 138 139 Z7_IFACE_CONSTR_FOLDER(IFolderArcProps, 0x10) 140 141 #define Z7_IFACEM_IGetFolderArcProps(x) \ 142 x(GetFolderArcProps(IFolderArcProps **object)) 143 Z7_IFACE_CONSTR_FOLDER(IGetFolderArcProps, 0x11) 144 145 #define Z7_IFACEM_IFolderCompare(x) \ 146 x##2(Int32, CompareItems(UInt32 index1, UInt32 index2, PROPID propID, Int32 propIsRaw)) 147 Z7_IFACE_CONSTR_FOLDER(IFolderCompare, 0x15) 148 149 #define Z7_IFACEM_IFolderGetItemName(x) \ 150 x(GetItemName(UInt32 index, const wchar_t **name, unsigned *len)) \ 151 x(GetItemPrefix(UInt32 index, const wchar_t **name, unsigned *len)) \ 152 x##2(UInt64, GetItemSize(UInt32 index)) \ 153 154 Z7_IFACE_CONSTR_FOLDER(IFolderGetItemName, 0x16) 155 156 157 #define Z7_IFACEM_IFolderManager(x) \ 158 x(OpenFolderFile(IInStream *inStream, const wchar_t *filePath, const wchar_t *arcFormat, IFolderFolder **resultFolder, IProgress *progress)) \ 159 x(GetExtensions(BSTR *extensions)) \ 160 x(GetIconPath(const wchar_t *ext, BSTR *iconPath, Int32 *iconIndex)) \ 161 162 // x(GetTypes(BSTR *types)) 163 // x(CreateFolderFile(const wchar_t *type, const wchar_t *filePath, IProgress *progress)) 164 165 Z7_DECL_IFACE_7ZIP(IFolderManager, 9, 5) 166 { Z7_IFACE_COM7_PURE(IFolderManager) }; 167 168 /* 169 const CMy_STATPROPSTG_2 &srcItem = k[index]; \ 170 *propID = srcItem.propid; *varType = srcItem.vt; *name = 0; return S_OK; } \ 171 */ 172 #define IMP_IFolderFolder_GetProp(fn, k) \ 173 Z7_COM7F_IMF(fn(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 174 { if (index >= Z7_ARRAY_SIZE(k)) return E_INVALIDARG; \ 175 *propID = k[index]; *varType = k7z_PROPID_To_VARTYPE[(unsigned)*propID]; *name = NULL; return S_OK; } \ 176 177 #define IMP_IFolderFolder_Props(c) \ 178 Z7_COM7F_IMF(c::GetNumberOfProperties(UInt32 *numProperties)) \ 179 { *numProperties = Z7_ARRAY_SIZE(kProps); return S_OK; } \ 180 IMP_IFolderFolder_GetProp(c::GetPropertyInfo, kProps) 181 182 183 int CompareFileNames_ForFolderList(const wchar_t *s1, const wchar_t *s2); 184 // int CompareFileNames_ForFolderList(const FChar *s1, const FChar *s2); 185 186 Z7_PURE_INTERFACES_END 187 #endif 188