• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 #pragma once
8 
9 #include "base/string16.h"
10 #include "chrome/browser/bookmarks/recently_used_folders_combo_model.h"
11 #include "chrome/browser/ui/views/bubble/bubble.h"
12 #include "googleurl/src/gurl.h"
13 #include "ui/gfx/rect.h"
14 #include "views/controls/button/button.h"
15 #include "views/controls/combobox/combobox.h"
16 #include "views/controls/link.h"
17 #include "views/view.h"
18 
19 class Profile;
20 
21 class BookmarkModel;
22 class BookmarkNode;
23 
24 namespace views {
25 class NativeButton;
26 class Textfield;
27 }
28 
29 // BookmarkBubbleView is a view intended to be used as the content of an
30 // Bubble. BookmarkBubbleView provides views for unstarring and editing the
31 // bookmark it is created with. Don't create a BookmarkBubbleView directly,
32 // instead use the static Show method.
33 class BookmarkBubbleView : public views::View,
34                            public views::LinkController,
35                            public views::ButtonListener,
36                            public views::Combobox::Listener,
37                            public BubbleDelegate {
38  public:
39   static void Show(views::Window* window,
40                    const gfx::Rect& bounds,
41                    BubbleDelegate* delegate,
42                    Profile* profile,
43                    const GURL& url,
44                    bool newly_bookmarked);
45 
46   static bool IsShowing();
47 
48   static void Hide();
49 
50   virtual ~BookmarkBubbleView();
51 
set_bubble(Bubble * bubble)52   void set_bubble(Bubble* bubble) { bubble_ = bubble; }
53 
54   // Invoked after the bubble has been shown.
55   virtual void BubbleShown();
56 
57   // Override to close on return.
58   virtual bool AcceleratorPressed(const views::Accelerator& accelerator);
59 
60   virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
61 
62  private:
63   // Creates a BookmarkBubbleView.
64   // |title| is the title of the page. If newly_bookmarked is false, title is
65   // ignored and the title of the bookmark is fetched from the database.
66   BookmarkBubbleView(BubbleDelegate* delegate,
67                      Profile* profile,
68                      const GURL& url,
69                      bool newly_bookmarked);
70   // Creates the child views.
71   void Init();
72 
73   // Returns the title to display.
74   string16 GetTitle();
75 
76   // LinkController method, either unstars the item or shows the bookmark
77   // editor (depending upon which link was clicked).
78   virtual void LinkActivated(views::Link* source, int event_flags);
79 
80   // ButtonListener method, closes the bubble or opens the edit dialog.
81   virtual void ButtonPressed(views::Button* sender, const views::Event& event);
82 
83   // Combobox::Listener method. Changes the parent of the bookmark.
84   virtual void ItemChanged(views::Combobox* combobox,
85                            int prev_index,
86                            int new_index);
87 
88   // BubbleDelegate methods. These forward to the BubbleDelegate supplied in the
89   // constructor as well as sending out the necessary notification.
90   virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape);
91   virtual bool CloseOnEscape();
92   virtual bool FadeInOnShow();
93   virtual std::wstring accessible_name();
94 
95   // Closes the bubble.
96   void Close();
97 
98   // Handle the message when the user presses a button.
99   void HandleButtonPressed(views::Button* sender);
100 
101   // Shows the BookmarkEditor.
102   void ShowEditor();
103 
104   // Sets the title and parent of the node.
105   void ApplyEdits();
106 
107   // The bookmark bubble, if we're showing one.
108   static BookmarkBubbleView* bookmark_bubble_;
109 
110   // The Bubble showing us.
111   Bubble* bubble_;
112 
113   // Delegate for the bubble, may be null.
114   BubbleDelegate* delegate_;
115 
116   // The profile.
117   Profile* profile_;
118 
119   // The bookmark URL.
120   const GURL url_;
121 
122   // Title of the bookmark. This is initially the title supplied to the
123   // constructor, which is typically the title of the page.
124   std::wstring title_;
125 
126   // If true, the page was just bookmarked.
127   const bool newly_bookmarked_;
128 
129   RecentlyUsedFoldersComboModel parent_model_;
130 
131   // Link for removing/unstarring the bookmark.
132   views::Link* remove_link_;
133 
134   // Button to bring up the editor.
135   views::NativeButton* edit_button_;
136 
137   // Button to close the window.
138   views::NativeButton* close_button_;
139 
140   // Textfield showing the title of the bookmark.
141   views::Textfield* title_tf_;
142 
143   // Combobox showing a handful of folders the user can choose from, including
144   // the current parent.
145   views::Combobox* parent_combobox_;
146 
147   // When the destructor is invoked should the bookmark be removed?
148   bool remove_bookmark_;
149 
150   // When the destructor is invoked should edits be applied?
151   bool apply_edits_;
152 
153   DISALLOW_COPY_AND_ASSIGN(BookmarkBubbleView);
154 };
155 
156 #endif  // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_
157