Index: chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h |
diff --git a/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d17ff7cfd8e4b39351d1355e60dd93b763018208 |
--- /dev/null |
+++ b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h |
@@ -0,0 +1,134 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
sky
2015/11/06 21:04:09
no (c) and 2015
joone
2015/11/09 20:50:06
Done.
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_ |
+#define CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_ |
+ |
+#include "base/macros.h" |
+#include "chrome/browser/ui/libgtk2ui/gtk2_signal.h" |
+#include "chrome/browser/ui/libgtk2ui/gtk2_util.h" |
+#include "chrome/browser/ui/libgtk2ui/select_file_dialog_impl.h" |
+ |
+namespace libgtk2ui { |
+ |
+// Implementation of SelectFileDialog that shows a Gtk common dialog for |
+// choosing a file or folder. This acts as a modal dialog. |
+class SelectFileDialogImplGTK : public SelectFileDialogImpl, |
+ public aura::WindowObserver { |
+ friend class FilePicker; |
sky
2015/11/06 21:04:09
move friend declaration into private section and i
joone
2015/11/09 20:50:06
Done.
|
+ public: |
+ explicit SelectFileDialogImplGTK(Listener* listener, |
sky
2015/11/06 21:04:09
no explicit.
joone
2015/11/09 20:50:06
Done.
|
+ ui::SelectFilePolicy* policy); |
+ |
+ protected: |
+ ~SelectFileDialogImplGTK() override; |
+ |
+ // BaseShellDialog implementation: |
+ bool IsRunning(gfx::NativeWindow parent_window) const override; |
+ |
+ // SelectFileDialog implementation. |
+ // |params| is user data we pass back via the Listener interface. |
+ void SelectFileImpl(Type type, |
+ const base::string16& title, |
+ const base::FilePath& default_path, |
+ const FileTypeInfo* file_types, |
+ int file_type_index, |
+ const base::FilePath::StringType& default_extension, |
+ gfx::NativeWindow owning_window, |
+ void* params) override; |
+ |
+ private: |
+ bool HasMultipleFileTypeChoicesImpl() override; |
+ |
+ // Overridden from aura::WindowObserver: |
+ void OnWindowDestroying(aura::Window* window) override; |
+ |
+ // Add the filters from |file_types_| to |chooser|. |
+ void AddFilters(GtkFileChooser* chooser); |
+ |
+ // Notifies the listener that a single file was chosen. |
+ void FileSelected(GtkWidget* dialog, const base::FilePath& path); |
+ |
+ // Notifies the listener that multiple files were chosen. |
+ void MultiFilesSelected(GtkWidget* dialog, |
+ const std::vector<base::FilePath>& files); |
+ |
+ // Notifies the listener that no file was chosen (the action was canceled). |
+ // Dialog is passed so we can find that |params| pointer that was passed to |
+ // us when we were told to show the dialog. |
+ void FileNotSelected(GtkWidget* dialog); |
+ |
+ GtkWidget* CreateSelectFolderDialog( |
+ Type type, |
+ const std::string& title, |
+ const base::FilePath& default_path, |
+ gfx::NativeWindow parent); |
+ |
+ GtkWidget* CreateFileOpenDialog(const std::string& title, |
+ const base::FilePath& default_path, gfx::NativeWindow parent); |
+ |
+ GtkWidget* CreateMultiFileOpenDialog(const std::string& title, |
+ const base::FilePath& default_path, gfx::NativeWindow parent); |
+ |
+ GtkWidget* CreateSaveAsDialog(const std::string& title, |
+ const base::FilePath& default_path, gfx::NativeWindow parent); |
+ |
+ // Removes and returns the |params| associated with |dialog| from |
+ // |params_map_|. |
+ void* PopParamsForDialog(GtkWidget* dialog); |
+ |
+ // Take care of internal data structures when a file dialog is destroyed. |
+ void FileDialogDestroyed(GtkWidget* dialog); |
+ |
+ // Check whether response_id corresponds to the user cancelling/closing the |
+ // dialog. Used as a helper for the below callbacks. |
+ bool IsCancelResponse(gint response_id); |
+ |
+ // Common function for OnSelectSingleFileDialogResponse and |
+ // OnSelectSingleFolderDialogResponse. |
+ void SelectSingleFileHelper(GtkWidget* dialog, |
+ gint response_id, |
+ bool allow_folder); |
+ |
+ // Common function for CreateFileOpenDialog and CreateMultiFileOpenDialog. |
+ GtkWidget* CreateFileOpenHelper(const std::string& title, |
+ const base::FilePath& default_path, |
+ gfx::NativeWindow parent); |
+ |
+ // Callback for when the user responds to a Save As or Open File dialog. |
+ CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void, |
+ OnSelectSingleFileDialogResponse, int); |
+ |
+ // Callback for when the user responds to a Select Folder dialog. |
+ CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void, |
+ OnSelectSingleFolderDialogResponse, int); |
+ |
+ // Callback for when the user responds to a Open Multiple Files dialog. |
+ CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void, |
+ OnSelectMultiFileDialogResponse, int); |
+ |
+ // Callback for when the file chooser gets destroyed. |
+ CHROMEGTK_CALLBACK_0(SelectFileDialogImplGTK, void, OnFileChooserDestroy); |
+ |
+ // Callback for when we update the preview for the selection. |
+ CHROMEGTK_CALLBACK_0(SelectFileDialogImplGTK, void, OnUpdatePreview); |
+ |
+ // A map from dialog windows to the |params| user data associated with them. |
+ std::map<GtkWidget*, void*> params_map_; |
+ |
+ // The GtkImage widget for showing previews of selected images. |
+ GtkWidget* preview_; |
+ |
+ // All our dialogs. |
+ std::set<GtkWidget*> dialogs_; |
+ |
+ // The set of all parent windows for which we are currently running dialogs. |
+ std::set<aura::Window*> parents_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SelectFileDialogImplGTK); |
+}; |
+ |
+} // namespace libgtk2ui |
+ |
+#endif // CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_ |