• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_
6 #define CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_
7 #pragma once
8 
9 #import <Foundation/Foundation.h>
10 
11 #include "chrome/browser/tabs/tab_strip_model_observer.h"
12 
13 class TabContentsWrapper;
14 class TabStripModel;
15 
16 // A C++ bridge class to handle receiving notifications from the C++ tab strip
17 // model. When the caller allocates a bridge, it automatically registers for
18 // notifications from |model| and passes messages to |controller| via the
19 // informal protocol below. The owner of this object is responsible for deleting
20 // it (and thus unhooking notifications) before |controller| is destroyed.
21 class TabStripModelObserverBridge : public TabStripModelObserver {
22  public:
23   TabStripModelObserverBridge(TabStripModel* model, id controller);
24   virtual ~TabStripModelObserverBridge();
25 
26   // Overridden from TabStripModelObserver
27   virtual void TabInsertedAt(TabContentsWrapper* contents,
28                              int index,
29                              bool foreground);
30   virtual void TabClosingAt(TabStripModel* tab_strip_model,
31                             TabContentsWrapper* contents,
32                             int index);
33   virtual void TabDetachedAt(TabContentsWrapper* contents, int index);
34   virtual void TabSelectedAt(TabContentsWrapper* old_contents,
35                              TabContentsWrapper* new_contents,
36                              int index,
37                              bool user_gesture);
38   virtual void TabMoved(TabContentsWrapper* contents,
39                         int from_index,
40                         int to_index);
41   virtual void TabChangedAt(TabContentsWrapper* contents, int index,
42                             TabChangeType change_type);
43   virtual void TabReplacedAt(TabStripModel* tab_strip_model,
44                              TabContentsWrapper* old_contents,
45                              TabContentsWrapper* new_contents,
46                              int index);
47   virtual void TabMiniStateChanged(TabContentsWrapper* contents, int index);
48   virtual void TabStripEmpty();
49   virtual void TabStripModelDeleted();
50 
51  private:
52   id controller_;  // weak, owns me
53   TabStripModel* model_;  // weak, owned by Browser
54 };
55 
56 // A collection of methods which can be selectively implemented by any
57 // Cocoa object to receive updates about changes to a tab strip model. It is
58 // ok to not implement them, the calling code checks before calling.
59 @interface NSObject(TabStripModelBridge)
60 - (void)insertTabWithContents:(TabContentsWrapper*)contents
61                       atIndex:(NSInteger)index
62                  inForeground:(bool)inForeground;
63 - (void)tabClosingWithContents:(TabContentsWrapper*)contents
64                        atIndex:(NSInteger)index;
65 - (void)tabDetachedWithContents:(TabContentsWrapper*)contents
66                         atIndex:(NSInteger)index;
67 - (void)selectTabWithContents:(TabContentsWrapper*)newContents
68              previousContents:(TabContentsWrapper*)oldContents
69                       atIndex:(NSInteger)index
70                   userGesture:(bool)wasUserGesture;
71 - (void)tabMovedWithContents:(TabContentsWrapper*)contents
72                     fromIndex:(NSInteger)from
73                       toIndex:(NSInteger)to;
74 - (void)tabChangedWithContents:(TabContentsWrapper*)contents
75                        atIndex:(NSInteger)index
76                     changeType:(TabStripModelObserver::TabChangeType)change;
77 - (void)tabReplacedWithContents:(TabContentsWrapper*)newContents
78                previousContents:(TabContentsWrapper*)oldContents
79                         atIndex:(NSInteger)index;
80 - (void)tabMiniStateChangedWithContents:(TabContentsWrapper*)contents
81                                 atIndex:(NSInteger)index;
82 - (void)tabStripEmpty;
83 - (void)tabStripModelDeleted;
84 @end
85 
86 #endif  // CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_
87