| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2010 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_VIEWS_EXTENSIONS_EXTENSION_SHELF_H_ | |
| 6 #define CHROME_BROWSER_VIEWS_EXTENSIONS_EXTENSION_SHELF_H_ | |
| 7 #pragma once | |
| 8 | |
| 9 #include "app/slide_animation.h" | |
| 10 #include "base/task.h" | |
| 11 #include "chrome/browser/extensions/extension_shelf_model.h" | |
| 12 #include "chrome/browser/extensions/extensions_service.h" | |
| 13 #include "chrome/browser/views/browser_bubble.h" | |
| 14 #include "chrome/browser/views/detachable_toolbar_view.h" | |
| 15 #include "gfx/canvas.h" | |
| 16 #include "views/view.h" | |
| 17 | |
| 18 class Browser; | |
| 19 namespace views { | |
| 20 class Label; | |
| 21 class MouseEvent; | |
| 22 } | |
| 23 | |
| 24 // A shelf that contains Extension toolstrips. | |
| 25 class ExtensionShelf : public DetachableToolbarView, | |
| 26 public ExtensionView::Container, | |
| 27 public ExtensionShelfModelObserver, | |
| 28 public AnimationDelegate, | |
| 29 public NotificationObserver { | |
| 30 public: | |
| 31 explicit ExtensionShelf(Browser* browser); | |
| 32 virtual ~ExtensionShelf(); | |
| 33 | |
| 34 // Get the current model. | |
| 35 ExtensionShelfModel* model() { return model_; } | |
| 36 | |
| 37 // Toggles a preference for whether to always show the extension shelf. | |
| 38 static void ToggleWhenExtensionShelfVisible(Profile* profile); | |
| 39 | |
| 40 int top_margin() { return top_margin_; } | |
| 41 | |
| 42 // DetachableToolbarView methods: | |
| 43 virtual bool IsDetached() const; | |
| 44 virtual double GetAnimationValue() const { | |
| 45 return size_animation_->GetCurrentValue(); | |
| 46 } | |
| 47 | |
| 48 // View methods: | |
| 49 virtual void PaintChildren(gfx::Canvas* canvas); | |
| 50 virtual gfx::Size GetPreferredSize(); | |
| 51 virtual void Layout(); | |
| 52 virtual void OnMouseExited(const views::MouseEvent& event); | |
| 53 virtual void OnMouseEntered(const views::MouseEvent& event); | |
| 54 virtual bool GetAccessibleRole(AccessibilityTypes::Role* role); | |
| 55 virtual void OnThemeChanged(); | |
| 56 | |
| 57 // ExtensionContainer methods: | |
| 58 virtual void OnExtensionMouseMove(ExtensionView* view); | |
| 59 virtual void OnExtensionMouseLeave(ExtensionView* view); | |
| 60 | |
| 61 // ExtensionShelfModelObserver methods: | |
| 62 virtual void ToolstripInsertedAt(ExtensionHost* toolstrip, int index); | |
| 63 virtual void ToolstripRemovingAt(ExtensionHost* toolstrip, int index); | |
| 64 virtual void ToolstripDraggingFrom(ExtensionHost* toolstrip, int index); | |
| 65 virtual void ToolstripMoved(ExtensionHost* toolstrip, | |
| 66 int from_index, | |
| 67 int to_index); | |
| 68 virtual void ToolstripChanged(ExtensionShelfModel::iterator toolstrip); | |
| 69 virtual void ExtensionShelfEmpty(); | |
| 70 virtual void ShelfModelReloaded(); | |
| 71 virtual void ShelfModelDeleting(); | |
| 72 | |
| 73 // AnimationDelegate methods: | |
| 74 virtual void AnimationProgressed(const Animation* animation); | |
| 75 virtual void AnimationEnded(const Animation* animation); | |
| 76 | |
| 77 // NotificationObserver methods: | |
| 78 virtual void Observe(NotificationType type, | |
| 79 const NotificationSource& source, | |
| 80 const NotificationDetails& details); | |
| 81 | |
| 82 // Toggle fullscreen mode. | |
| 83 void OnFullscreenToggled(bool fullscreen); | |
| 84 | |
| 85 protected: | |
| 86 // View methods: | |
| 87 virtual void ChildPreferredSizeChanged(View* child); | |
| 88 | |
| 89 private: | |
| 90 class Toolstrip; | |
| 91 friend class Toolstrip; | |
| 92 class PlaceholderView; | |
| 93 | |
| 94 // Dragging toolstrips | |
| 95 void DropExtension(Toolstrip* handle, const gfx::Point& pt, bool cancel); | |
| 96 | |
| 97 // Expand the specified toolstrip, navigating to |url| if non-empty, | |
| 98 // and setting the |height|. | |
| 99 void ExpandToolstrip(ExtensionHost* host, const GURL& url, int height); | |
| 100 | |
| 101 // Collapse the specified toolstrip, navigating to |url| if non-empty. | |
| 102 void CollapseToolstrip(ExtensionHost* host, const GURL& url); | |
| 103 | |
| 104 // Initializes the background bitmaps for all views. | |
| 105 void InitBackground(gfx::Canvas* canvas); | |
| 106 | |
| 107 // Returns the Toolstrip at |x| coordinate. If |x| is out of bounds, returns | |
| 108 // NULL. | |
| 109 Toolstrip* ToolstripAtX(int x); | |
| 110 | |
| 111 // Returns the Toolstrip at |index|. | |
| 112 Toolstrip* ToolstripAtIndex(int index); | |
| 113 | |
| 114 // Returns the toolstrip associated with |view|. | |
| 115 Toolstrip* ToolstripForView(ExtensionView* view); | |
| 116 | |
| 117 // Loads initial state from |model_|. | |
| 118 void LoadFromModel(); | |
| 119 | |
| 120 // This method computes the bounds for the extension shelf items. If | |
| 121 // |compute_bounds_only| = TRUE, the bounds for the items are just computed, | |
| 122 // but are not set. This mode is used by GetPreferredSize() to obtain the | |
| 123 // desired bounds. If |compute_bounds_only| = FALSE, the bounds are set. | |
| 124 gfx::Size LayoutItems(bool compute_bounds_only); | |
| 125 | |
| 126 // Returns whether the extension shelf always shown (checks pref value). | |
| 127 bool IsAlwaysShown() const; | |
| 128 | |
| 129 // Returns whether the extension shelf is being displayed over the new tab | |
| 130 // page. | |
| 131 bool OnNewTabPage() const; | |
| 132 | |
| 133 int top_margin_; | |
| 134 | |
| 135 NotificationRegistrar registrar_; | |
| 136 | |
| 137 // Background bitmap to draw under extension views. | |
| 138 bool background_needs_repaint_; | |
| 139 | |
| 140 // The browser this extension shelf belongs to. | |
| 141 Browser* browser_; | |
| 142 | |
| 143 // The model representing the toolstrips on the shelf. | |
| 144 ExtensionShelfModel* model_; | |
| 145 | |
| 146 // Animation controlling showing and hiding of the shelf. | |
| 147 scoped_ptr<SlideAnimation> size_animation_; | |
| 148 | |
| 149 // Are we in fullscreen mode or not. | |
| 150 bool fullscreen_; | |
| 151 | |
| 152 DISALLOW_COPY_AND_ASSIGN(ExtensionShelf); | |
| 153 }; | |
| 154 | |
| 155 #endif // CHROME_BROWSER_VIEWS_EXTENSIONS_EXTENSION_SHELF_H_ | |
| OLD | NEW |