Home | History | Annotate | Download | only in bookmarks
      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