1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_VIEWS_APPS_APP_INFO_DIALOG_APP_INFO_FOOTER_PANEL_H_ 6 #define CHROME_BROWSER_UI_VIEWS_APPS_APP_INFO_DIALOG_APP_INFO_FOOTER_PANEL_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/weak_ptr.h" 10 #include "chrome/browser/extensions/extension_uninstall_dialog.h" 11 #include "chrome/browser/ui/views/apps/app_info_dialog/app_info_panel.h" 12 #include "ui/gfx/native_widget_types.h" 13 #include "ui/views/controls/button/button.h" 14 15 class Profile; 16 17 namespace extensions { 18 class Extension; 19 } 20 21 namespace ui { 22 class Event; 23 } 24 25 namespace views { 26 class LabelButton; 27 } 28 29 // A small summary panel with buttons to control the app that is displayed at 30 // the bottom of the app info dialog. 31 class AppInfoFooterPanel 32 : public AppInfoPanel, 33 public views::ButtonListener, 34 public extensions::ExtensionUninstallDialog::Delegate, 35 public base::SupportsWeakPtr<AppInfoFooterPanel> { 36 public: 37 AppInfoFooterPanel(gfx::NativeWindow parent_window, 38 Profile* profile, 39 const extensions::Extension* app); 40 virtual ~AppInfoFooterPanel(); 41 42 private: 43 void CreateButtons(); 44 void LayoutButtons(); 45 46 // Updates the visibility of the pin/unpin buttons so that only one is visible 47 // at a time. 48 void UpdatePinButtons(); 49 50 // Overridden from views::ButtonListener: 51 virtual void ButtonPressed(views::Button* sender, 52 const ui::Event& event) OVERRIDE; 53 54 // Overridden from ExtensionUninstallDialog::Delegate: 55 virtual void ExtensionUninstallAccepted() OVERRIDE; 56 virtual void ExtensionUninstallCanceled() OVERRIDE; 57 58 // Create Shortcuts for the app. Must only be called if CanCreateShortcuts() 59 // returns true. 60 void CreateShortcuts(); 61 bool CanCreateShortcuts() const; 62 63 // Pins and unpins the app from the shelf. Must only be called if 64 // CanSetPinnedToShelf() returns true. 65 void SetPinnedToShelf(bool value); 66 bool CanSetPinnedToShelf() const; 67 68 // Uninstall the app. Must only be called if CanUninstallApp() returns true. 69 void UninstallApp(); 70 bool CanUninstallApp() const; 71 72 gfx::NativeWindow parent_window_; 73 74 // UI elements on the dialog. Elements are NULL if they are not displayed. 75 views::LabelButton* create_shortcuts_button_; 76 views::LabelButton* pin_to_shelf_button_; 77 views::LabelButton* unpin_from_shelf_button_; 78 views::LabelButton* remove_button_; 79 80 scoped_ptr<extensions::ExtensionUninstallDialog> extension_uninstall_dialog_; 81 82 base::WeakPtrFactory<AppInfoFooterPanel> weak_ptr_factory_; 83 84 DISALLOW_COPY_AND_ASSIGN(AppInfoFooterPanel); 85 }; 86 87 #endif // CHROME_BROWSER_UI_VIEWS_APPS_APP_INFO_DIALOG_APP_INFO_FOOTER_PANEL_H_ 88