Chromium Code Reviews| 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_ |