| // Copyright (c) 2012 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_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_ |
| #define CHROME_BROWSER_UI_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| #include "chrome/browser/web_applications/web_app.h" |
| #include "extensions/common/manifest_handlers/file_handler_info.h" |
| #include "ui/views/controls/button/button.h" |
| #include "ui/views/window/dialog_delegate.h" |
| |
| class FaviconDownloadHelper; |
| class GURL; |
| class Profile; |
| class SkBitmap; |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| namespace extensions { |
| class Extension; |
| } |
| |
| namespace views { |
| class Checkbox; |
| class Label; |
| } |
| |
| // CreateShortcutViewCommon implements a dialog that asks user where to create |
| // the shortcut for given web app. There are two variants of this dialog: |
| // Shortcuts that load a URL in an app-like window, and shortcuts that load |
| // a chrome app (the kind you see under "apps" on the new tabs page) in an app |
| // window. These are implemented as subclasses of CreateShortcutViewCommon. |
| class CreateApplicationShortcutView : public views::DialogDelegateView, |
| public views::ButtonListener { |
| public: |
| enum DialogLayout { |
| // URL shortcuts have an info frame at the top with a thumbnail, title and |
| // description. |
| DIALOG_LAYOUT_URL_SHORTCUT, |
| |
| // App shortcuts don't have an info frame, since they are launched from |
| // places where it's clear what app they are from. |
| DIALOG_LAYOUT_APP_SHORTCUT |
| }; |
| |
| explicit CreateApplicationShortcutView(Profile* profile); |
| virtual ~CreateApplicationShortcutView(); |
| |
| // Initialize the controls on the dialog. |
| void InitControls(DialogLayout dialog_layout); |
| |
| // Overridden from views::View: |
| virtual gfx::Size GetPreferredSize() const OVERRIDE; |
| |
| // Overridden from views::DialogDelegate: |
| virtual base::string16 GetDialogButtonLabel( |
| ui::DialogButton button) const OVERRIDE; |
| virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE; |
| virtual ui::ModalType GetModalType() const OVERRIDE; |
| virtual base::string16 GetWindowTitle() const OVERRIDE; |
| virtual bool Accept() OVERRIDE; |
| |
| // Overridden from views::ButtonListener: |
| virtual void ButtonPressed(views::Button* sender, |
| const ui::Event& event) OVERRIDE; |
| |
| protected: |
| // Adds a new check-box as a child to the view. |
| views::Checkbox* AddCheckbox(const base::string16& text, bool checked); |
| |
| // Profile in which the shortcuts will be created. |
| Profile* profile_; |
| |
| // UI elements on the dialog. |
| // May be NULL if we are not displaying the app's info. |
| views::View* app_info_; |
| views::Label* create_shortcuts_label_; |
| views::Checkbox* desktop_check_box_; |
| views::Checkbox* menu_check_box_; |
| views::Checkbox* quick_launch_check_box_; |
| |
| // Target shortcut and file handler info. |
| web_app::ShortcutInfo shortcut_info_; |
| extensions::FileHandlersInfo file_handlers_info_; |
| // If false, the shortcut will be created in the root level of the Start Menu. |
| bool create_in_chrome_apps_subdir_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CreateApplicationShortcutView); |
| }; |
| |
| // Create an application shortcut pointing to a URL. |
| class CreateUrlApplicationShortcutView : public CreateApplicationShortcutView { |
| public: |
| explicit CreateUrlApplicationShortcutView(content::WebContents* web_contents); |
| virtual ~CreateUrlApplicationShortcutView(); |
| |
| virtual bool Accept() OVERRIDE; |
| |
| private: |
| // Fetch the largest unprocessed icon. |
| // The first largest icon downloaded and decoded successfully will be used. |
| void FetchIcon(); |
| |
| // Favicon download callback. |
| void DidDownloadFavicon( |
| int requested_size, |
| int id, |
| int http_status_code, |
| const GURL& image_url, |
| const std::vector<SkBitmap>& bitmaps, |
| const std::vector<gfx::Size>& original_bitmap_sizes); |
| |
| // The tab whose URL is being turned into an app. |
| content::WebContents* web_contents_; |
| |
| // Pending app icon download tracked by us. |
| int pending_download_id_; |
| |
| // Unprocessed icons from the WebApplicationInfo passed in. |
| web_app::IconInfoList unprocessed_icons_; |
| |
| base::WeakPtrFactory<CreateUrlApplicationShortcutView> weak_ptr_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CreateUrlApplicationShortcutView); |
| }; |
| |
| // Create an application shortcut pointing to a chrome application. |
| class CreateChromeApplicationShortcutView |
| : public CreateApplicationShortcutView { |
| public: |
| CreateChromeApplicationShortcutView( |
| Profile* profile, |
| const extensions::Extension* app, |
| const base::Callback<void(bool)>& close_callback); |
| virtual ~CreateChromeApplicationShortcutView(); |
| virtual bool Accept() OVERRIDE; |
| virtual bool Cancel() OVERRIDE; |
| |
| private: |
| // Called when the app's ShortcutInfo (with icon) and FileHandlersInfo is |
| // loaded. |
| void OnAppInfoLoaded(const web_app::ShortcutInfo& shortcut_info, |
| const extensions::FileHandlersInfo& file_handlers_info); |
| |
| base::Callback<void(bool)> close_callback_; |
| |
| base::WeakPtrFactory<CreateChromeApplicationShortcutView> weak_ptr_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CreateChromeApplicationShortcutView); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_ |