1 // TortoiseSVN - a Windows shell extension for easy version control
\r
3 // Copyright (C) 2003-2006 - Stefan Kueng
\r
5 // This program is free software; you can redistribute it and/or
\r
6 // modify it under the terms of the GNU General Public License
\r
7 // as published by the Free Software Foundation; either version 2
\r
8 // of the License, or (at your option) any later version.
\r
10 // This program is distributed in the hope that it will be useful,
\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 // GNU General Public License for more details.
\r
15 // You should have received a copy of the GNU General Public License
\r
16 // along with this program; if not, write to the Free Software Foundation,
\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\r
20 #include "ShellExt.h"
\r
21 #include "ItemIDList.h"
\r
24 ItemIDList::ItemIDList(LPCITEMIDLIST item, LPCITEMIDLIST parent) :
\r
31 ItemIDList::~ItemIDList()
\r
35 int ItemIDList::size() const
\r
42 LPCSHITEMID ptr = &item_->mkid;
\r
43 while (ptr != 0 && ptr->cb != 0)
\r
46 LPBYTE byte = (LPBYTE) ptr;
\r
48 ptr = (LPCSHITEMID) byte;
\r
55 LPCSHITEMID ItemIDList::get(int index) const
\r
61 LPCSHITEMID ptr = &item_->mkid;
\r
64 while (ptr->cb != 0)
\r
70 LPBYTE byte = (LPBYTE) ptr;
\r
72 ptr = (LPCSHITEMID) byte;
\r
77 stdstring ItemIDList::toString()
\r
79 IShellFolder *shellFolder = NULL;
\r
80 IShellFolder *parentFolder = NULL;
\r
82 TCHAR * szDisplayName = NULL;
\r
86 hr = ::SHGetDesktopFolder(&shellFolder);
\r
91 hr = shellFolder->BindToObject(parent_, 0, IID_IShellFolder, (void**) &parentFolder);
\r
93 parentFolder = shellFolder;
\r
97 parentFolder = shellFolder;
\r
100 if ((parentFolder != 0)&&(item_ != 0))
\r
102 hr = parentFolder->GetDisplayNameOf(item_, SHGDN_NORMAL | SHGDN_FORPARSING, &name);
\r
103 if (!SUCCEEDED(hr))
\r
105 parentFolder->Release();
\r
108 hr = StrRetToStr (&name, item_, &szDisplayName);
\r
109 if (!SUCCEEDED(hr))
\r
112 parentFolder->Release();
\r
113 if (szDisplayName == NULL)
\r
115 CoTaskMemFree(szDisplayName);
\r
116 return ret; //to avoid a crash!
\r
118 ret = szDisplayName;
\r
119 CoTaskMemFree(szDisplayName);
\r
123 LPCITEMIDLIST ItemIDList::operator& ()
\r