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.
5 #ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_
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"
20 class BookmarkBubbleViewObserver
;
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
{
36 static void ShowBubble(views::View
* anchor_view
,
37 BookmarkBubbleViewObserver
* observer
,
38 scoped_ptr
<BookmarkBubbleDelegate
> delegate
,
41 bool newly_bookmarked
);
43 static bool IsShowing();
47 virtual ~BookmarkBubbleView();
49 // views::BubbleDelegateView method.
50 virtual views::View
* GetInitiallyFocusedView() OVERRIDE
;
52 // views::WidgetDelegate method.
53 virtual void WindowClosing() OVERRIDE
;
55 // views::View method.
56 virtual bool AcceleratorPressed(const ui::Accelerator
& accelerator
) OVERRIDE
;
57 virtual void OnNativeThemeChanged(const ui::NativeTheme
* theme
) OVERRIDE
;
60 // views::BubbleDelegateView method.
61 virtual void Init() OVERRIDE
;
64 friend class BookmarkBubbleViewTest
;
65 FRIEND_TEST_ALL_PREFIXES(BookmarkBubbleViewTest
, SyncPromoSignedIn
);
66 FRIEND_TEST_ALL_PREFIXES(BookmarkBubbleViewTest
, SyncPromoNotSignedIn
);
68 // Creates a BookmarkBubbleView.
69 BookmarkBubbleView(views::View
* anchor_view
,
70 BookmarkBubbleViewObserver
* observer
,
71 scoped_ptr
<BookmarkBubbleDelegate
> delegate
,
74 bool newly_bookmarked
);
76 // Returns the title to display.
77 base::string16
GetTitle();
79 // Overridden from views::View:
80 virtual gfx::Size
GetMinimumSize() const OVERRIDE
;
81 virtual void GetAccessibleState(ui::AXViewState
* state
) OVERRIDE
;
83 // Overridden from views::ButtonListener:
84 // Closes the bubble or opens the edit dialog.
85 virtual void ButtonPressed(views::Button
* sender
,
86 const ui::Event
& event
) OVERRIDE
;
88 // Overridden from views::ComboboxListener:
89 virtual void OnPerformAction(views::Combobox
* combobox
) OVERRIDE
;
91 // Handle the message when the user presses a button.
92 void HandleButtonPressed(views::Button
* sender
);
94 // Shows the BookmarkEditor.
97 // Sets the title and parent of the node.
100 // The bookmark bubble, if we're showing one.
101 static BookmarkBubbleView
* bookmark_bubble_
;
103 // Our observer, to notify when the bubble shows or hides.
104 BookmarkBubbleViewObserver
* observer_
;
106 // Delegate, to handle clicks on the sign in link.
107 scoped_ptr
<BookmarkBubbleDelegate
> delegate_
;
115 // If true, the page was just bookmarked.
116 const bool newly_bookmarked_
;
118 RecentlyUsedFoldersComboModel parent_model_
;
120 // Button for removing the bookmark.
121 views::LabelButton
* remove_button_
;
123 // Button to bring up the editor.
124 views::LabelButton
* edit_button_
;
126 // Button to close the window.
127 views::LabelButton
* close_button_
;
129 // Textfield showing the title of the bookmark.
130 views::Textfield
* title_tf_
;
132 // Combobox showing a handful of folders the user can choose from, including
133 // the current parent.
134 views::Combobox
* parent_combobox_
;
136 // Bookmark sync promo view, if displayed.
137 views::View
* sync_promo_view_
;
139 // When the destructor is invoked should the bookmark be removed?
140 bool remove_bookmark_
;
142 // When the destructor is invoked should edits be applied?
145 DISALLOW_COPY_AND_ASSIGN(BookmarkBubbleView
);
148 #endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_