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// C++ bridge class between Chromium and Cocoa to connect the
6// Bookmarks (model) with the Bookmark Bar (view).
7//
8// There is exactly one BookmarkBarBridge per BookmarkBarController /
9// BrowserWindowController / Browser.
10
11#ifndef CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_BAR_BRIDGE_H_
12#define CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_BAR_BRIDGE_H_
13
14#include "base/basictypes.h"
15#include "base/compiler_specific.h"
16#include "base/prefs/pref_change_registrar.h"
17#include "components/bookmarks/browser/bookmark_model_observer.h"
18
19class Profile;
20@class BookmarkBarController;
21
22class BookmarkBarBridge : public BookmarkModelObserver {
23 public:
24  BookmarkBarBridge(Profile* profile,
25                    BookmarkBarController* controller,
26                    BookmarkModel* model);
27  virtual ~BookmarkBarBridge();
28
29  // Overridden from BookmarkModelObserver:
30  virtual void BookmarkModelLoaded(BookmarkModel* model,
31                                   bool ids_reassigned) OVERRIDE;
32  virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
33  virtual void BookmarkNodeMoved(BookmarkModel* model,
34                                 const BookmarkNode* old_parent,
35                                 int old_index,
36                                 const BookmarkNode* new_parent,
37                                 int new_index) OVERRIDE;
38  virtual void BookmarkNodeAdded(BookmarkModel* model,
39                                 const BookmarkNode* parent,
40                                 int index) OVERRIDE;
41  virtual void BookmarkNodeRemoved(BookmarkModel* model,
42                                   const BookmarkNode* parent,
43                                   int old_index,
44                                   const BookmarkNode* node,
45                                   const std::set<GURL>& removed_urls) OVERRIDE;
46  virtual void BookmarkAllUserNodesRemoved(
47      BookmarkModel* model,
48      const std::set<GURL>& removed_urls) OVERRIDE;
49  virtual void BookmarkNodeChanged(BookmarkModel* model,
50                                   const BookmarkNode* node) OVERRIDE;
51  virtual void BookmarkNodeFaviconChanged(BookmarkModel* model,
52                                          const BookmarkNode* node) OVERRIDE;
53  virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
54                                             const BookmarkNode* node) OVERRIDE;
55  virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE;
56  virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE;
57
58 private:
59  BookmarkBarController* controller_;  // weak; owns me
60  BookmarkModel* model_;  // weak; it is owned by a Profile.
61  bool batch_mode_;
62
63  // Needed to react to kShowAppsShortcutInBookmarkBar changes.
64  PrefChangeRegistrar profile_pref_registrar_;
65
66  // Updates the visibility of the apps shortcut and the managed bookmarks
67  // folder based on the pref values.
68  void OnExtraButtonsVisibilityChanged();
69
70  DISALLOW_COPY_AND_ASSIGN(BookmarkBarBridge);
71};
72
73#endif  // CHROME_BROWSER_UI_COCOA_BOOKMARKS_BOOKMARK_BAR_BRIDGE_H_
74