| OLD | NEW |
| 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/base/win/open_file_name_win.h" | 5 #include "ui/base/win/open_file_name_win.h" |
| 6 | 6 |
| 7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/win/windows_version.h" | 9 #include "base/win/windows_version.h" |
| 10 | 10 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 openfilename_.nMaxFile = arraysize(filename_buffer_); | 78 openfilename_.nMaxFile = arraysize(filename_buffer_); |
| 79 | 79 |
| 80 openfilename_.Flags = flags; | 80 openfilename_.Flags = flags; |
| 81 openfilename_.hwndOwner = parent_window; | 81 openfilename_.hwndOwner = parent_window; |
| 82 } | 82 } |
| 83 | 83 |
| 84 OpenFileName::~OpenFileName() { | 84 OpenFileName::~OpenFileName() { |
| 85 } | 85 } |
| 86 | 86 |
| 87 void OpenFileName::SetFilters( | 87 void OpenFileName::SetFilters( |
| 88 const std::vector<Tuple2<base::string16, base::string16> >& filters) { | 88 const std::vector<Tuple<base::string16, base::string16>>& filters) { |
| 89 openfilename_.lpstrFilter = NULL; | 89 openfilename_.lpstrFilter = NULL; |
| 90 filter_buffer_.clear(); | 90 filter_buffer_.clear(); |
| 91 if (filters.empty()) | 91 if (filters.empty()) |
| 92 return; | 92 return; |
| 93 for (std::vector<Tuple2<base::string16, base::string16> >::const_iterator | 93 for (const auto& filter : filters) { |
| 94 it = filters.begin(); | 94 filter_buffer_.append(get<0>(filter)); |
| 95 it != filters.end(); | |
| 96 ++it) { | |
| 97 filter_buffer_.append(it->a); | |
| 98 filter_buffer_.push_back(0); | 95 filter_buffer_.push_back(0); |
| 99 filter_buffer_.append(it->b); | 96 filter_buffer_.append(get<1>(filter)); |
| 100 filter_buffer_.push_back(0); | 97 filter_buffer_.push_back(0); |
| 101 } | 98 } |
| 102 filter_buffer_.push_back(0); | 99 filter_buffer_.push_back(0); |
| 103 openfilename_.lpstrFilter = filter_buffer_.c_str(); | 100 openfilename_.lpstrFilter = filter_buffer_.c_str(); |
| 104 } | 101 } |
| 105 | 102 |
| 106 void OpenFileName::SetInitialSelection(const base::FilePath& initial_directory, | 103 void OpenFileName::SetInitialSelection(const base::FilePath& initial_directory, |
| 107 const base::FilePath& initial_filename) { | 104 const base::FilePath& initial_filename) { |
| 108 // First reset to the default case. | 105 // First reset to the default case. |
| 109 // According to http://support.microsoft.com/?scid=kb;en-us;222003&x=8&y=12, | 106 // According to http://support.microsoft.com/?scid=kb;en-us;222003&x=8&y=12, |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 // Because the result has embedded nulls, we must memcpy. | 195 // Because the result has embedded nulls, we must memcpy. |
| 199 memcpy(openfilename->lpstrFile, | 196 memcpy(openfilename->lpstrFile, |
| 200 filename_value.c_str(), | 197 filename_value.c_str(), |
| 201 (filename_value.size() + 1) * sizeof(filename_value[0])); | 198 (filename_value.size() + 1) * sizeof(filename_value[0])); |
| 202 } else if (openfilename->nMaxFile) { | 199 } else if (openfilename->nMaxFile) { |
| 203 openfilename->lpstrFile[0] = 0; | 200 openfilename->lpstrFile[0] = 0; |
| 204 } | 201 } |
| 205 } | 202 } |
| 206 | 203 |
| 207 // static | 204 // static |
| 208 std::vector<Tuple2<base::string16, base::string16> > OpenFileName::GetFilters( | 205 std::vector<Tuple<base::string16, base::string16>> |
| 209 const OPENFILENAME* openfilename) { | 206 OpenFileName::GetFilters(const OPENFILENAME* openfilename) { |
| 210 std::vector<Tuple2<base::string16, base::string16> > filters; | 207 std::vector<Tuple<base::string16, base::string16>> filters; |
| 211 | 208 |
| 212 const base::char16* display_string = openfilename->lpstrFilter; | 209 const base::char16* display_string = openfilename->lpstrFilter; |
| 213 if (!display_string) | 210 if (!display_string) |
| 214 return filters; | 211 return filters; |
| 215 | 212 |
| 216 while (*display_string) { | 213 while (*display_string) { |
| 217 const base::char16* display_string_end = display_string; | 214 const base::char16* display_string_end = display_string; |
| 218 while (*display_string_end) | 215 while (*display_string_end) |
| 219 ++display_string_end; | 216 ++display_string_end; |
| 220 const base::char16* pattern = display_string_end + 1; | 217 const base::char16* pattern = display_string_end + 1; |
| 221 const base::char16* pattern_end = pattern; | 218 const base::char16* pattern_end = pattern; |
| 222 while (*pattern_end) | 219 while (*pattern_end) |
| 223 ++pattern_end; | 220 ++pattern_end; |
| 224 filters.push_back( | 221 filters.push_back( |
| 225 MakeTuple(base::string16(display_string, display_string_end), | 222 MakeTuple(base::string16(display_string, display_string_end), |
| 226 base::string16(pattern, pattern_end))); | 223 base::string16(pattern, pattern_end))); |
| 227 display_string = pattern_end + 1; | 224 display_string = pattern_end + 1; |
| 228 } | 225 } |
| 229 | 226 |
| 230 return filters; | 227 return filters; |
| 231 } | 228 } |
| 232 | 229 |
| 233 } // namespace win | 230 } // namespace win |
| 234 } // namespace ui | 231 } // namespace ui |
| OLD | NEW |