Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / Windows / Shell.h
1 // Windows/Shell.h\r
2 \r
3 #ifndef __WINDOWS_SHELL_H\r
4 #define __WINDOWS_SHELL_H\r
5 \r
6 #include <windows.h>\r
7 #include <shlobj.h>\r
8 \r
9 #include "Common/MyString.h"\r
10 #include "Windows/Defs.h"\r
11 \r
12 namespace NWindows{\r
13 namespace NShell{\r
14 \r
15 /////////////////////////\r
16 // CItemIDList\r
17 #ifndef UNDER_CE\r
18 \r
19 class CItemIDList\r
20 {\r
21   LPITEMIDLIST m_Object;\r
22 public:\r
23   CItemIDList(): m_Object(NULL) {}\r
24   // CItemIDList(LPCITEMIDLIST itemIDList);\r
25   // CItemIDList(const CItemIDList& itemIDList);\r
26   ~CItemIDList() { Free(); }\r
27   void Free();\r
28   void Attach(LPITEMIDLIST object)\r
29   {\r
30     Free();\r
31     m_Object = object;\r
32   }\r
33   LPITEMIDLIST Detach()\r
34   {\r
35     LPITEMIDLIST object = m_Object;\r
36     m_Object = NULL;\r
37     return object;\r
38   }\r
39   operator LPITEMIDLIST() { return m_Object;}\r
40   operator LPCITEMIDLIST() const { return m_Object;}\r
41   LPITEMIDLIST* operator&() { return &m_Object; }\r
42   LPITEMIDLIST operator->() { return m_Object; }\r
43 \r
44   // CItemIDList& operator=(LPCITEMIDLIST object);\r
45   // CItemIDList& operator=(const CItemIDList &object);\r
46 };\r
47 \r
48 /////////////////////////////\r
49 // CDrop\r
50 \r
51 class CDrop\r
52 {\r
53   HDROP m_Object;\r
54   bool m_MustBeFinished;\r
55   bool m_Assigned;\r
56   void Free();\r
57 public:\r
58   CDrop(bool mustBeFinished) : m_MustBeFinished(mustBeFinished), m_Assigned(false) {}\r
59   ~CDrop() { Free(); }\r
60 \r
61   void Attach(HDROP object);\r
62   operator HDROP() { return m_Object;}\r
63   bool QueryPoint(LPPOINT point)\r
64     { return BOOLToBool(::DragQueryPoint(m_Object, point)); }\r
65   void Finish() {  ::DragFinish(m_Object); }\r
66   UINT QueryFile(UINT fileIndex, LPTSTR fileName, UINT fileNameSize)\r
67     { return ::DragQueryFile(m_Object, fileIndex, fileName, fileNameSize); }\r
68   #ifndef _UNICODE\r
69   UINT QueryFile(UINT fileIndex, LPWSTR fileName, UINT fileNameSize)\r
70     { return ::DragQueryFileW(m_Object, fileIndex, fileName, fileNameSize); }\r
71   #endif\r
72   UINT QueryCountOfFiles();\r
73   UString QueryFileName(UINT fileIndex);\r
74   void QueryFileNames(UStringVector &fileNames);\r
75 };\r
76 \r
77 #endif\r
78 \r
79 /////////////////////////////\r
80 // Functions\r
81 \r
82 bool GetPathFromIDList(LPCITEMIDLIST itemIDList, CSysString &path);\r
83 bool BrowseForFolder(LPBROWSEINFO lpbi, CSysString &resultPath);\r
84 bool BrowseForFolder(HWND owner, LPCTSTR title, LPCTSTR initialFolder, CSysString &resultPath);\r
85 \r
86 #ifndef _UNICODE\r
87 bool GetPathFromIDList(LPCITEMIDLIST itemIDList, UString &path);\r
88 bool BrowseForFolder(LPBROWSEINFO lpbi, UString &resultPath);\r
89 bool BrowseForFolder(HWND owner, LPCWSTR title, LPCWSTR initialFolder, UString &resultPath);\r
90 #endif\r
91 }}\r
92 \r
93 #endif\r