// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_
#pragma once
#include "base/string16.h"
#include "chrome/browser/bookmarks/recently_used_folders_combo_model.h"
#include "chrome/browser/ui/views/bubble/bubble.h"
#include "googleurl/src/gurl.h"
#include "ui/gfx/rect.h"
#include "views/controls/button/button.h"
#include "views/controls/combobox/combobox.h"
#include "views/controls/link.h"
#include "views/view.h"
class Profile;
class BookmarkModel;
class BookmarkNode;
namespace views {
class NativeButton;
class Textfield;
}
// BookmarkBubbleView is a view intended to be used as the content of an
// Bubble. BookmarkBubbleView provides views for unstarring and editing the
// bookmark it is created with. Don't create a BookmarkBubbleView directly,
// instead use the static Show method.
class BookmarkBubbleView : public views::View,
public views::LinkController,
public views::ButtonListener,
public views::Combobox::Listener,
public BubbleDelegate {
public:
static void Show(views::Window* window,
const gfx::Rect& bounds,
BubbleDelegate* delegate,
Profile* profile,
const GURL& url,
bool newly_bookmarked);
static bool IsShowing();
static void Hide();
virtual ~BookmarkBubbleView();
void set_bubble(Bubble* bubble) { bubble_ = bubble; }
// Invoked after the bubble has been shown.
virtual void BubbleShown();
// Override to close on return.
virtual bool AcceleratorPressed(const views::Accelerator& accelerator);
virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
private:
// Creates a BookmarkBubbleView.
// |title| is the title of the page. If newly_bookmarked is false, title is
// ignored and the title of the bookmark is fetched from the database.
BookmarkBubbleView(BubbleDelegate* delegate,
Profile* profile,
const GURL& url,
bool newly_bookmarked);
// Creates the child views.
void Init();
// Returns the title to display.
string16 GetTitle();
// LinkController method, either unstars the item or shows the bookmark
// editor (depending upon which link was clicked).
virtual void LinkActivated(views::Link* source, int event_flags);
// ButtonListener method, closes the bubble or opens the edit dialog.
virtual void ButtonPressed(views::Button* sender, const views::Event& event);
// Combobox::Listener method. Changes the parent of the bookmark.
virtual void ItemChanged(views::Combobox* combobox,
int prev_index,
int new_index);
// BubbleDelegate methods. These forward to the BubbleDelegate supplied in the
// constructor as well as sending out the necessary notification.
virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape);
virtual bool CloseOnEscape();
virtual bool FadeInOnShow();
virtual std::wstring accessible_name();
// Closes the bubble.
void Close();
// Handle the message when the user presses a button.
void HandleButtonPressed(views::Button* sender);
// Shows the BookmarkEditor.
void ShowEditor();
// Sets the title and parent of the node.
void ApplyEdits();
// The bookmark bubble, if we're showing one.
static BookmarkBubbleView* bookmark_bubble_;
// The Bubble showing us.
Bubble* bubble_;
// Delegate for the bubble, may be null.
BubbleDelegate* delegate_;
// The profile.
Profile* profile_;
// The bookmark URL.
const GURL url_;
// Title of the bookmark. This is initially the title supplied to the
// constructor, which is typically the title of the page.
std::wstring title_;
// If true, the page was just bookmarked.
const bool newly_bookmarked_;
RecentlyUsedFoldersComboModel parent_model_;
// Link for removing/unstarring the bookmark.
views::Link* remove_link_;
// Button to bring up the editor.
views::NativeButton* edit_button_;
// Button to close the window.
views::NativeButton* close_button_;
// Textfield showing the title of the bookmark.
views::Textfield* title_tf_;
// Combobox showing a handful of folders the user can choose from, including
// the current parent.
views::Combobox* parent_combobox_;
// When the destructor is invoked should the bookmark be removed?
bool remove_bookmark_;
// When the destructor is invoked should edits be applied?
bool apply_edits_;
DISALLOW_COPY_AND_ASSIGN(BookmarkBubbleView);
};
#endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BUBBLE_VIEW_H_