• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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