| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 <gtk/gtk.h> | 5 #include <gtk/gtk.h> |
| 6 #include <map> | 6 #include <map> |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 public: | 23 public: |
| 24 explicit SelectFileDialogImpl(Listener* listener); | 24 explicit SelectFileDialogImpl(Listener* listener); |
| 25 virtual ~SelectFileDialogImpl(); | 25 virtual ~SelectFileDialogImpl(); |
| 26 | 26 |
| 27 // BaseShellDialog implementation. | 27 // BaseShellDialog implementation. |
| 28 virtual bool IsRunning(gfx::NativeWindow parent_window) const; | 28 virtual bool IsRunning(gfx::NativeWindow parent_window) const; |
| 29 virtual void ListenerDestroyed(); | 29 virtual void ListenerDestroyed(); |
| 30 | 30 |
| 31 // SelectFileDialog implementation. | 31 // SelectFileDialog implementation. |
| 32 // |params| is user data we pass back via the Listener interface. | 32 // |params| is user data we pass back via the Listener interface. |
| 33 virtual void SelectFile(Type type, const string16& title, | 33 virtual void SelectFile(Type type, |
| 34 const string16& title, |
| 34 const FilePath& default_path, | 35 const FilePath& default_path, |
| 35 const std::wstring& filter, | 36 const FileTypeInfo* file_types, |
| 36 int filter_index, | 37 int file_type_index, |
| 37 const FilePath::StringType& default_extension, | 38 const FilePath::StringType& default_extension, |
| 38 gfx::NativeWindow parent_window, | 39 gfx::NativeWindow owning_window, |
| 39 void* params); | 40 void* params); |
| 40 | 41 |
| 41 private: | 42 private: |
| 42 // Notifies the listener that a single file was chosen. | 43 // Notifies the listener that a single file was chosen. |
| 43 void FileSelected(GtkWidget* dialog, const FilePath& path); | 44 void FileSelected(GtkWidget* dialog, const FilePath& path); |
| 44 | 45 |
| 45 // Notifies the listener that multiple files were chosen. | 46 // Notifies the listener that multiple files were chosen. |
| 46 void MultiFilesSelected(GtkWidget* dialog, | 47 void MultiFilesSelected(GtkWidget* dialog, |
| 47 const std::vector<FilePath>& files); | 48 const std::vector<FilePath>& files); |
| 48 | 49 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 } | 108 } |
| 108 | 109 |
| 109 bool SelectFileDialogImpl::IsRunning(gfx::NativeWindow parent_window) const { | 110 bool SelectFileDialogImpl::IsRunning(gfx::NativeWindow parent_window) const { |
| 110 return parents_.find(parent_window) != parents_.end(); | 111 return parents_.find(parent_window) != parents_.end(); |
| 111 } | 112 } |
| 112 | 113 |
| 113 void SelectFileDialogImpl::ListenerDestroyed() { | 114 void SelectFileDialogImpl::ListenerDestroyed() { |
| 114 listener_ = NULL; | 115 listener_ = NULL; |
| 115 } | 116 } |
| 116 | 117 |
| 117 // We ignore |filter| and |default_extension|. | 118 // We ignore |file_types| and |default_extension|. |
| 118 // TODO(estade): use |filter|. | 119 // TODO(estade): use |file_types|. |
| 119 void SelectFileDialogImpl::SelectFile( | 120 void SelectFileDialogImpl::SelectFile( |
| 120 Type type, | 121 Type type, |
| 121 const string16& title, | 122 const string16& title, |
| 122 const FilePath& default_path, | 123 const FilePath& default_path, |
| 123 const std::wstring& filter, | 124 const FileTypeInfo* file_types, |
| 124 int filter_index, | 125 int file_type_index, |
| 125 const FilePath::StringType& default_extension, | 126 const FilePath::StringType& default_extension, |
| 126 gfx::NativeWindow parent_window, | 127 gfx::NativeWindow owning_window, |
| 127 void* params) { | 128 void* params) { |
| 128 // TODO(estade): on windows, parent_window may be null. But I'm not sure when | 129 // TODO(estade): on windows, parent_window may be null. But I'm not sure when |
| 129 // that's used and how to deal with it here. For now, don't allow it. | 130 // that's used and how to deal with it here. For now, don't allow it. |
| 130 DCHECK(parent_window); | 131 DCHECK(owning_window); |
| 131 parents_.insert(parent_window); | 132 parents_.insert(owning_window); |
| 132 | 133 |
| 133 std::string title_string = UTF16ToUTF8(title); | 134 std::string title_string = UTF16ToUTF8(title); |
| 134 | 135 |
| 135 GtkWidget* dialog = NULL; | 136 GtkWidget* dialog = NULL; |
| 136 switch (type) { | 137 switch (type) { |
| 137 case SELECT_OPEN_FILE: | 138 case SELECT_OPEN_FILE: |
| 138 DCHECK(default_path.empty()); | 139 DCHECK(default_path.empty()); |
| 139 dialog = CreateFileOpenDialog(title_string, parent_window); | 140 dialog = CreateFileOpenDialog(title_string, owning_window); |
| 140 break; | 141 break; |
| 141 case SELECT_OPEN_MULTI_FILE: | 142 case SELECT_OPEN_MULTI_FILE: |
| 142 DCHECK(default_path.empty()); | 143 DCHECK(default_path.empty()); |
| 143 dialog = CreateMultiFileOpenDialog(title_string, parent_window); | 144 dialog = CreateMultiFileOpenDialog(title_string, owning_window); |
| 144 break; | 145 break; |
| 145 case SELECT_SAVEAS_FILE: | 146 case SELECT_SAVEAS_FILE: |
| 146 dialog = CreateSaveAsDialog(title_string, default_path, parent_window); | 147 dialog = CreateSaveAsDialog(title_string, default_path, owning_window); |
| 147 break; | 148 break; |
| 148 default: | 149 default: |
| 149 NOTIMPLEMENTED() << "Dialog type " << type << " not implemented."; | 150 NOTIMPLEMENTED() << "Dialog type " << type << " not implemented."; |
| 150 return; | 151 return; |
| 151 } | 152 } |
| 152 | 153 |
| 153 params_map_[dialog] = params; | 154 params_map_[dialog] = params; |
| 154 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); | 155 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); |
| 155 gtk_widget_show_all(dialog); | 156 gtk_widget_show_all(dialog); |
| 156 } | 157 } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 GSList* filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); | 283 GSList* filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog)); |
| 283 std::vector<FilePath> filenames_fp; | 284 std::vector<FilePath> filenames_fp; |
| 284 for (GSList* iter = filenames; iter != NULL; iter = g_slist_next(iter)) { | 285 for (GSList* iter = filenames; iter != NULL; iter = g_slist_next(iter)) { |
| 285 filenames_fp.push_back(FilePath(static_cast<char*>(iter->data))); | 286 filenames_fp.push_back(FilePath(static_cast<char*>(iter->data))); |
| 286 g_free(iter->data); | 287 g_free(iter->data); |
| 287 } | 288 } |
| 288 | 289 |
| 289 g_slist_free(filenames); | 290 g_slist_free(filenames); |
| 290 dialog_impl->MultiFilesSelected(dialog, filenames_fp); | 291 dialog_impl->MultiFilesSelected(dialog, filenames_fp); |
| 291 } | 292 } |
| OLD | NEW |