1///////////////////////////////////////////////////////////////////////////////
2// Name:        wx/msw/wrapshl.h
3// Purpose:     wrapper class for stuff from shell32.dll
4// Author:      Vadim Zeitlin
5// Modified by:
6// Created:     2004-10-19
7// RCS-ID:      $Id: wrapshl.h 40367 2006-07-29 19:19:50Z VZ $
8// Copyright:   (c) 2004 Vadim Zeitlin <vadim@wxwindows.org>
9// Licence:     wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_MSW_WRAPSHL_H_
13#define _WX_MSW_WRAPSHL_H_
14
15#ifdef __WXWINCE__
16    #include <winreg.h>
17    #include <objbase.h>
18    #include <shlguid.h>
19#endif
20
21#include <shlobj.h>
22
23#include "wx/msw/winundef.h"
24
25// ----------------------------------------------------------------------------
26// wxItemIdList implements RAII on top of ITEMIDLIST
27// ----------------------------------------------------------------------------
28
29class wxItemIdList
30{
31public:
32    // ctor takes ownership of the item and will free it
33    wxItemIdList(LPITEMIDLIST pidl)
34    {
35        m_pidl = pidl;
36    }
37
38    static void Free(LPITEMIDLIST pidl)
39    {
40        if ( pidl )
41        {
42            LPMALLOC pMalloc;
43            SHGetMalloc(&pMalloc);
44            if ( pMalloc )
45            {
46                pMalloc->Free(pidl);
47                pMalloc->Release();
48            }
49            else
50            {
51                wxLogLastError(wxT("SHGetMalloc"));
52            }
53        }
54    }
55
56    ~wxItemIdList()
57    {
58        Free(m_pidl);
59    }
60
61    // implicit conversion to LPITEMIDLIST
62    operator LPITEMIDLIST() const { return m_pidl; }
63
64    // get the corresponding path, returns empty string on error
65    wxString GetPath() const
66    {
67        wxString path;
68        if ( !SHGetPathFromIDList(m_pidl, wxStringBuffer(path, MAX_PATH)) )
69        {
70            wxLogLastError(_T("SHGetPathFromIDList"));
71        }
72
73        return path;
74    }
75
76private:
77    LPITEMIDLIST m_pidl;
78
79    DECLARE_NO_COPY_CLASS(wxItemIdList)
80};
81
82// enable autocompleting filenames in the text control with given HWND
83//
84// this only works on systems with shlwapi.dll 5.0 or later
85//
86// implemented in src/msw/utilsgui.cpp
87extern bool wxEnableFileNameAutoComplete(HWND hwnd);
88
89#endif // _WX_MSW_WRAPSHL_H_
90
91