1 // Copyright (c) 2012 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_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_ 6 #define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "base/gtest_prod_util.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "base/strings/string16.h" 13 #include "chrome/browser/ui/bookmarks/bookmark_bubble_delegate.h" 14 #include "chrome/browser/ui/bookmarks/recently_used_folders_combo_model.h" 15 #include "ui/views/bubble/bubble_delegate.h" 16 #include "ui/views/controls/button/button.h" 17 #include "ui/views/controls/combobox/combobox_listener.h" 18 #include "url/gurl.h" 19 20 class BookmarkBubbleViewObserver; 21 class Profile; 22 23 namespace views { 24 class LabelButton; 25 class Textfield; 26 } 27 28 // BookmarkBubbleView is a view intended to be used as the content of an 29 // Bubble. BookmarkBubbleView provides views for unstarring and editing the 30 // bookmark it is created with. Don't create a BookmarkBubbleView directly, 31 // instead use the static Show method. 32 class BookmarkBubbleView : public views::BubbleDelegateView, 33 public views::ButtonListener, 34 public views::ComboboxListener { 35 public: 36 static void ShowBubble(views::View* anchor_view, 37 BookmarkBubbleViewObserver* observer, 38 scoped_ptr<BookmarkBubbleDelegate> delegate, 39 Profile* profile, 40 const GURL& url, 41 bool newly_bookmarked); 42 43 static bool IsShowing(); 44 45 static void Hide(); 46 47 virtual ~BookmarkBubbleView(); 48 49 // views::BubbleDelegateView method. 50 virtual views::View* GetInitiallyFocusedView() OVERRIDE; 51 52 // views::WidgetDelegate method. 53 virtual void WindowClosing() OVERRIDE; 54 55 // views::View method. 56 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; 57 58 protected: 59 // views::BubbleDelegateView method. 60 virtual void Init() OVERRIDE; 61 62 private: 63 friend class BookmarkBubbleViewTest; 64 FRIEND_TEST_ALL_PREFIXES(BookmarkBubbleViewTest, SyncPromoSignedIn); 65 FRIEND_TEST_ALL_PREFIXES(BookmarkBubbleViewTest, SyncPromoNotSignedIn); 66 67 // Creates a BookmarkBubbleView. 68 BookmarkBubbleView(views::View* anchor_view, 69 BookmarkBubbleViewObserver* observer, 70 scoped_ptr<BookmarkBubbleDelegate> delegate, 71 Profile* profile, 72 const GURL& url, 73 bool newly_bookmarked); 74 75 // Returns the title to display. 76 base::string16 GetTitle(); 77 78 // Overridden from views::View: 79 virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE; 80 81 // Overridden from views::ButtonListener: 82 // Closes the bubble or opens the edit dialog. 83 virtual void ButtonPressed(views::Button* sender, 84 const ui::Event& event) OVERRIDE; 85 86 // Overridden from views::ComboboxListener: 87 virtual void OnPerformAction(views::Combobox* combobox) OVERRIDE; 88 89 // Handle the message when the user presses a button. 90 void HandleButtonPressed(views::Button* sender); 91 92 // Shows the BookmarkEditor. 93 void ShowEditor(); 94 95 // Sets the title and parent of the node. 96 void ApplyEdits(); 97 98 // The bookmark bubble, if we're showing one. 99 static BookmarkBubbleView* bookmark_bubble_; 100 101 // Our observer, to notify when the bubble shows or hides. 102 BookmarkBubbleViewObserver* observer_; 103 104 // Delegate, to handle clicks on the sign in link. 105 scoped_ptr<BookmarkBubbleDelegate> delegate_; 106 107 // The profile. 108 Profile* profile_; 109 110 // The bookmark URL. 111 const GURL url_; 112 113 // If true, the page was just bookmarked. 114 const bool newly_bookmarked_; 115 116 RecentlyUsedFoldersComboModel parent_model_; 117 118 // Button for removing the bookmark. 119 views::LabelButton* remove_button_; 120 121 // Button to bring up the editor. 122 views::LabelButton* edit_button_; 123 124 // Button to close the window. 125 views::LabelButton* close_button_; 126 127 // Textfield showing the title of the bookmark. 128 views::Textfield* title_tf_; 129 130 // Combobox showing a handful of folders the user can choose from, including 131 // the current parent. 132 views::Combobox* parent_combobox_; 133 134 // Bookmark sync promo view, if displayed. 135 views::View* sync_promo_view_; 136 137 // When the destructor is invoked should the bookmark be removed? 138 bool remove_bookmark_; 139 140 // When the destructor is invoked should edits be applied? 141 bool apply_edits_; 142 143 DISALLOW_COPY_AND_ASSIGN(BookmarkBubbleView); 144 }; 145 146 #endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_ 147