172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file. 44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BAR_VIEW_H_ 6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BAR_VIEW_H_ 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <set> 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/compiler_specific.h" 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/bookmarks/bookmark_model_observer.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/bookmarks/bookmark_node_data.h" 144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/sync/profile_sync_service.h" 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/views/bookmarks/bookmark_bar_instructions_view.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/views/bookmarks/bookmark_menu_controller_views.h" 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/detachable_toolbar_view.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "ui/base/animation/animation_delegate.h" 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/button/button.h" 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/menu/view_menu_delegate.h" 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Browser; 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass PageNavigator; 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass PrefService; 263f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 273f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsennamespace ui { 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass SlideAnimation; 293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views { 324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass CustomButton; 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass MenuButton; 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass MenuItemView; 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TextButton; 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// BookmarkBarView renders the BookmarkModel. Each starred entry on the 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// BookmarkBar is rendered as a MenuButton. An additional MenuButton aligned to 404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// the right allows the user to quickly see recently starred entries. 414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// 424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// BookmarkBarView shows the bookmarks from a specific Profile. BookmarkBarView 434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// waits until the HistoryService for the profile has been loaded before 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// creating the BookmarkModel. 454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BookmarkBarView : public DetachableToolbarView, 464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public ProfileSyncServiceObserver, 474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public BookmarkModelObserver, 484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public views::ViewMenuDelegate, 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public views::ButtonListener, 504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public NotificationObserver, 514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public views::ContextMenuController, 524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public views::DragController, 533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen public ui::AnimationDelegate, 544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public BookmarkMenuController::Observer, 554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public BookmarkBarInstructionsView::Delegate { 564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch friend class ShowFolderMenuTask; 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Constants used in Browser View, as well as here. 604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // How inset the bookmarks bar is when displayed on the new tab page. 614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch static const int kNewtabHorizontalPadding; 624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch static const int kNewtabVerticalPadding; 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Maximum size of buttons on the bookmark bar. 654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch static const int kMaxButtonWidth; 664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Interface implemented by controllers/views that need to be notified any 684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // time the model changes, typically to cancel an operation that is showing 694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // data from the model such as a menu. This isn't intended as a general 704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // way to be notified of changes, rather for cases where a controller/view is 714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // showing data from the model in a modal like setting and needs to cleanly 724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // exit the modal loop if the model changes out from under it. 734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // 744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // A controller/view that needs this notification should install itself as the 754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // ModelChangeListener via the SetModelChangedListener method when shown and 764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // reset the ModelChangeListener of the BookmarkBarView when it closes by way 774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // of either the SetModelChangedListener method or the 784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // ClearModelChangedListenerIfEquals method. 794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch class ModelChangedListener { 804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual ~ModelChangedListener() {} 824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invoked when the model changes. Should cancel the edit and close any 844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // dialogs. 854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void ModelChanged() = 0; 864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch }; 874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch static const int kNewtabBarHeight; 894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BookmarkBarView(Profile* profile, Browser* browser); 914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual ~BookmarkBarView(); 924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Resets the profile. This removes any buttons for the current profile and 944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // recreates the models. 954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetProfile(Profile* profile); 964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the current profile. 984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Profile* GetProfile() { return profile_; } 994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the current browser. 1014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Browser* browser() const { return browser_; } 1024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Sets the PageNavigator that is used when the user selects an entry on 1044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // the bookmark bar. 1054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetPageNavigator(PageNavigator* navigator); 1064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Sets whether the containing browser is showing an infobar. This affects 1084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // layout during animation. 1094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void set_infobar_visible(bool infobar_visible) { 1104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch infobar_visible_ = infobar_visible; 1114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 1124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool IsOnTop() const; 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // DetachableToolbarView methods: 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool IsDetached() const OVERRIDE; 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual double GetAnimationValue() const OVERRIDE; 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int GetToolbarOverlap() const OVERRIDE; 1194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // View methods: 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::Size GetPreferredSize() OVERRIDE; 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::Size GetMinimumSize() OVERRIDE; 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Layout() OVERRIDE; 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child) 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OVERRIDE; 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE; 1274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool GetDropFormats( 1284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int* formats, 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::set<ui::OSExchangeData::CustomFormat>* custom_formats) OVERRIDE; 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool AreDropTypesRequired() OVERRIDE; 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool CanDrop(const ui::OSExchangeData& data) OVERRIDE; 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnDragEntered(const views::DropTargetEvent& event) OVERRIDE; 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int OnDragUpdated(const views::DropTargetEvent& event) OVERRIDE; 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnDragExited() OVERRIDE; 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int OnPerformDrop(const views::DropTargetEvent& event) OVERRIDE; 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ShowContextMenu(const gfx::Point& p, bool is_mouse_gesture) 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OVERRIDE; 1384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // AccessiblePaneView methods: 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 1414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // ProfileSyncServiceObserver method. 1434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnStateChanged(); 1444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Called when fullscreen mode toggles on or off; this affects our layout. 1464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void OnFullscreenToggled(bool fullscreen); 1474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Sets the model change listener to listener. 1494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetModelChangedListener(ModelChangedListener* listener) { 1504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch model_changed_listener_ = listener; 1514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 1524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If the ModelChangedListener is listener, ModelChangeListener is set to 1544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // NULL. 1554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void ClearModelChangedListenerIfEquals(ModelChangedListener* listener) { 1564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (model_changed_listener_ == listener) 1574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch model_changed_listener_ = NULL; 1584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 1594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the model change listener. 1614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ModelChangedListener* GetModelChangedListener() { 1624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return model_changed_listener_; 1634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 1644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the page navigator. 1664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch PageNavigator* GetPageNavigator() { return page_navigator_; } 1674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the model. 1694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BookmarkModel* GetModel() { return model_; } 1704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns true if the bookmarks bar preference is set to 'always show'. 1724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool IsAlwaysShown() const; 1734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // True if we're on a page where the bookmarks bar is always visible. 1754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool OnNewTabPage() const; 1764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // How much we want the bookmark bar to overlap the toolbar. If |return_max| 1784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // is true, we return the maximum overlap rather than the current overlap. 1794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int GetToolbarOverlap(bool return_max) const; 1804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Whether or not we are animating. 1824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool is_animating(); 1834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // SlideAnimationDelegate implementation. 185dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void AnimationProgressed(const ui::Animation* animation); 186dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void AnimationEnded(const ui::Animation* animation); 1874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // BookmarkMenuController::Observer 1894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void BookmarkMenuDeleted(BookmarkMenuController* controller); 1904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the button at the specified index. 1924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::TextButton* GetBookmarkButton(int index); 1934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the button responsible for showing bookmarks in the other bookmark 1954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // folder. 1964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuButton* other_bookmarked_button() const { 1974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return other_bookmarked_button_; 1984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 1994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the active MenuItemView, or NULL if a menu isn't showing. 2014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuItemView* GetMenu(); 2024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the drop MenuItemView, or NULL if a menu isn't showing. 2044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuItemView* GetDropMenu(); 2054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the context menu, or null if one isn't showing. 2074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuItemView* GetContextMenu(); 2084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the button used when not all the items on the bookmark bar fit. 2104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuButton* overflow_button() const { return overflow_button_; } 2114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If |loc| is over a bookmark button the node is returned corresponding 2134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // to the button and |start_index| is set to 0. If a overflow button is 2144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // showing and |loc| is over the overflow button, the bookmark bar node is 2154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // returned and |start_index| is set to the index of the first node 2164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // contained in the overflow menu. 2174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* GetNodeForButtonAt(const gfx::Point& loc, 2184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int* start_index); 2194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the MenuButton for node. 2214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuButton* GetMenuButtonForNode(const BookmarkNode* node); 2224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the position to anchor the menu for |button| at, the index of the 2244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // first child of the node to build the menu from. 2254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void GetAnchorPositionAndStartIndexForButton( 2264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuButton* button, 2274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuItemView::AnchorPosition* anchor, 2284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int* start_index); 2294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // BookmarkBarInstructionsView::Delegate. 2314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void ShowImportDialog(); 2324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If a button is currently throbbing, it is stopped. If immediate is true 2344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // the throb stops immediately, otherwise it stops after a couple more 2354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // throbs. 2364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void StopThrobbing(bool immediate); 2374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the number of buttons corresponding to starred urls/folders. This 2394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // is equivalent to the number of children the bookmark bar node from the 2404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // bookmark bar model has. 2414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int GetBookmarkButtonCount(); 2424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Returns the tooltip text for the specified url and title. The returned 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // text is clipped to fit within the bounds of the monitor. 24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // 24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Note that we adjust the direction of both the URL and the title based on 24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // the locale so that pure LTR strings are displayed properly in RTL locales. 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen static std::wstring CreateToolTipForURLAndTitle( 24972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const gfx::Point& screen_loc, 25072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL& url, 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::wstring& title, 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Profile* profile); 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If true we're running tests. This short circuits a couple of animations. 2554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch static bool testing_; 2564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 2584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch class ButtonSeparatorView; 2594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch struct DropInfo; 2604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Task that invokes ShowDropFolderForNode when run. ShowFolderDropMenuTask 2624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // deletes itself once run. 2634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch class ShowFolderDropMenuTask : public Task { 2644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 2654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ShowFolderDropMenuTask(BookmarkBarView* view, const BookmarkNode* node) 2664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch : view_(view), 2674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch node_(node) { 2684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 2694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void Cancel() { 2714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch view_->show_folder_drop_menu_task_ = NULL; 2724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch view_ = NULL; 2734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 2744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void Run() { 2764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (view_) { 2774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch view_->show_folder_drop_menu_task_ = NULL; 2784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch view_->ShowDropFolderForNode(node_); 2794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 2804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // MessageLoop deletes us. 2814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 2824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 2844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BookmarkBarView* view_; 2854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* node_; 2864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(ShowFolderDropMenuTask); 2884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch }; 2894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Creates recent bookmark button and when visible button as well as 2914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // calculating the preferred height. 2924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void Init(); 2934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Creates the button showing the other bookmarked items. 2954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuButton* CreateOtherBookmarkedButton(); 2964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Creates the button used when not all bookmark buttons fit. 2984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuButton* CreateOverflowButton(); 2994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invoked when the bookmark bar model has finished loading. Creates a button 3014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // for each of the children of the root node from the model. 3024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void Loaded(BookmarkModel* model); 3034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invoked when the model is being deleted. 3054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void BookmarkModelBeingDeleted(BookmarkModel* model); 3064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invokes added followed by removed. 3084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void BookmarkNodeMoved(BookmarkModel* model, 3094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* old_parent, 3104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int old_index, 3114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* new_parent, 3124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int new_index); 3134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Notifies ModelChangeListener of change. 3154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If the node was added to the root node, a button is created and added to 3164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // this bookmark bar view. 3174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void BookmarkNodeAdded(BookmarkModel* model, 3184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* parent, 3194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int index); 3204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Implementation for BookmarkNodeAddedImpl. 3224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void BookmarkNodeAddedImpl(BookmarkModel* model, 3234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* parent, 3244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int index); 3254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Notifies ModelChangeListener of change. 3274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If the node was a child of the root node, the button corresponding to it 3284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // is removed. 3294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void BookmarkNodeRemoved(BookmarkModel* model, 3304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* parent, 3314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int old_index, 3324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* node); 3334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Implementation for BookmarkNodeRemoved. 3354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void BookmarkNodeRemovedImpl(BookmarkModel* model, 3364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* parent, 3374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int index); 3384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Notifies ModelChangedListener and invokes BookmarkNodeChangedImpl. 3404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void BookmarkNodeChanged(BookmarkModel* model, 3414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* node); 3424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If the node is a child of the root node, the button is updated 3444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // appropriately. 3454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void BookmarkNodeChangedImpl(BookmarkModel* model, const BookmarkNode* node); 3464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, 3484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* node); 3494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invoked when the favicon is available. If the node is a child of the 3514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // root node, the appropriate button is updated. If a menu is showing, the 3524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // call is forwarded to the menu to allow for it to update the icon. 353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void BookmarkNodeFaviconLoaded(BookmarkModel* model, 3544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const BookmarkNode* node); 3554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // DragController method. Determines the node representing sender and invokes 3574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // WriteDragData to write the actual data. 358dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void WriteDragDataForView(views::View* sender, 359dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const gfx::Point& press_pt, 360dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ui::OSExchangeData* data) OVERRIDE; 3614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 362dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual int GetDragOperationsForView(views::View* sender, 363dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const gfx::Point& p) OVERRIDE; 3644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 365dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool CanStartDragForView(views::View* sender, 366dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const gfx::Point& press_pt, 367dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const gfx::Point& p) OVERRIDE; 3684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 369201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Writes a BookmarkNodeData for node to data. 370dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void WriteBookmarkDragData(const BookmarkNode* node, 371dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ui::OSExchangeData* data); 3724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // ViewMenuDelegate method. Ends up creating a BookmarkMenuController to 3744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // show the menu. 3754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void RunMenu(views::View* view, const gfx::Point& pt); 3764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invoked when a star entry corresponding to a URL on the bookmark bar is 3784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // pressed. Forwards to the PageNavigator to open the URL. 3794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void ButtonPressed(views::Button* sender, const views::Event& event); 3804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Invoked for this View, one of the buttons or the 'other' button. Shows the 3824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // appropriate context menu. 383dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void ShowContextMenuForView(views::View* source, 384dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const gfx::Point& p, 385dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool is_mouse_gesture); 3864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Creates the button for rendering the specified bookmark node. 3884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::View* CreateBookmarkButton(const BookmarkNode* node); 3894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // COnfigures the button from the specified node. This sets the text, 3914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // and icon. 3924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void ConfigureButton(const BookmarkNode* node, views::TextButton* button); 3934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Used when showing the menu allowing the user to choose when the bar is 3954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // visible. Return value corresponds to the users preference for when the 3964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // bar is visible. 3974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool IsItemChecked(int id) const; 3984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Used when showing the menu allowing the user to choose when the bar is 4004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // visible. Updates the preferences to match the users choice as appropriate. 4014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void ExecuteCommand(int id); 4024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // NotificationService method. 4044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void Observe(NotificationType type, 4054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const NotificationSource& source, 4064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const NotificationDetails& details); 4074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from views::View. 4094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnThemeChanged(); 4104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If the ModelChangedListener is non-null, ModelChanged is invoked on it. 4124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void NotifyModelChanged(); 4134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Shows the menu used during drag and drop for the specified node. 4154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void ShowDropFolderForNode(const BookmarkNode* node); 4164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Cancels the timer used to show a drop menu. 4184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void StopShowFolderDropMenuTimer(); 4194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Stars the timer used to show a drop menu for node. 4214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void StartShowFolderDropMenuTimer(const BookmarkNode* node); 4224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the drop operation and index for the drop based on the event 42472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // and data. Returns ui::DragDropTypes::DRAG_NONE if not a valid location. 4254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int CalculateDropOperation(const views::DropTargetEvent& event, 426201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const BookmarkNodeData& data, 4274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int* index, 4284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool* drop_on, 4294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool* is_over_overflow, 4304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool* is_over_other); 4314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Returns the index of the first hidden bookmark button. If all buttons are 4334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // visible, this returns GetBookmarkButtonCount(). 4344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int GetFirstHiddenNodeIndex(); 4354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // This determines which view should throb and starts it 4374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // throbbing (e.g when the bookmark bubble is showing). 4384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If |overflow_only| is true, start throbbing only if |node| is hidden in 4394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // the overflow menu. 4404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void StartThrobbing(const BookmarkNode* node, bool overflow_only); 4414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 442ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the view to throb when a node is removed. |parent| is the parent of 443ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // the node that was removed, and |old_index| the index of the node that was 444ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // removed. 445ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::CustomButton* DetermineViewToThrobFromRemove( 446ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const BookmarkNode* parent, 447ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int old_index); 448ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Updates the colors for all the child objects in the bookmarks bar. 4504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void UpdateColors(); 4514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 45272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Updates the visibility of |other_bookmarked_button_| and 45372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // |bookmarks_separator_view_|. 45472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void UpdateOtherBookmarksVisibility(); 45572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // This method computes the bounds for the bookmark bar items. If 4574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // |compute_bounds_only| = TRUE, the bounds for the items are just computed, 4584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // but are not set. This mode is used by GetPreferredSize() to obtain the 4594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // desired bounds. If |compute_bounds_only| = FALSE, the bounds are set. 4604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch gfx::Size LayoutItems(bool compute_bounds_only); 4614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Creates the sync error button and adds it as a child view. 4634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::TextButton* CreateSyncErrorButton(); 4644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch NotificationRegistrar registrar_; 4664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Profile* profile_; 4684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Used for opening urls. 4704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch PageNavigator* page_navigator_; 4714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Model providing details as to the starred entries/folders that should be 4734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // shown. This is owned by the Profile. 4744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BookmarkModel* model_; 4754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Used to manage showing a Menu, either for the most recently bookmarked 477ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // entries, or for the starred folder. 4784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BookmarkMenuController* bookmark_menu_; 4794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Used when showing a menu for drag and drop. That is, if the user drags 481ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // over a folder this becomes non-null and manages the menu showing the 4824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // contents of the node. 4834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch BookmarkMenuController* bookmark_drop_menu_; 4844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Shows the other bookmark entries. 4864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuButton* other_bookmarked_button_; 4874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // ModelChangeListener. 4894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ModelChangedListener* model_changed_listener_; 4904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Task used to delay showing of the drop menu. 4924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ShowFolderDropMenuTask* show_folder_drop_menu_task_; 4934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Used to track drops on the bookmark bar view. 4954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch scoped_ptr<DropInfo> drop_info_; 4964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 4974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The sync re-login indicator which appears when the user needs to re-enter 4984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // credentials in order to continue syncing. 4994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::TextButton* sync_error_button_; 5004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // A pointer to the ProfileSyncService instance if one exists. 5024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ProfileSyncService* sync_service_; 5034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Visible if not all the bookmark buttons fit. 5054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::MenuButton* overflow_button_; 5064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // BookmarkBarInstructionsView that is visible if there are no bookmarks on 5084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // the bookmark bar. 5094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::View* instructions_; 5104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ButtonSeparatorView* bookmarks_separator_view_; 5124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Owning browser. This is NULL during testing. 5144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch Browser* browser_; 5154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // True if the owning browser is showing an infobar. 5174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch bool infobar_visible_; 5184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Animation controlling showing and hiding of the bar. 5203f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen scoped_ptr<ui::SlideAnimation> size_animation_; 5214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // If the bookmark bubble is showing, this is the visible ancestor of the URL. 5234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The visible ancestor is either the other_bookmarked_button_, 5244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // overflow_button_ or a button on the bar. 5254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch views::CustomButton* throbbing_view_; 5264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Background for extension toolstrips. 5284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch SkBitmap toolstrip_background_; 5294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BookmarkBarView); 5314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 5324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 533dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_BAR_VIEW_H_ 534