| 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..c034207d76125f62da0d691e4a7ff3454fe139ac
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h
|
| @@ -0,0 +1,134 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// 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 {
|
| + public:
|
| + SelectFileDialogImplGTK(Listener* listener,
|
| + 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:
|
| + friend class FilePicker;
|
| + 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_
|
|
|