1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#import <Foundation/Foundation.h>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/tabs/tab_strip_model_observer.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass TabContentsWrapper;
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TabStripModel;
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A C++ bridge class to handle receiving notifications from the C++ tab strip
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// model. When the caller allocates a bridge, it automatically registers for
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// notifications from |model| and passes messages to |controller| via the
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// informal protocol below. The owner of this object is responsible for deleting
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// it (and thus unhooking notifications) before |controller| is destroyed.
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabStripModelObserverBridge : public TabStripModelObserver {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabStripModelObserverBridge(TabStripModel* model, id controller);
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~TabStripModelObserverBridge();
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Overridden from TabStripModelObserver
27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabInsertedAt(TabContentsWrapper* contents,
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             int index,
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             bool foreground);
30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void TabClosingAt(TabStripModel* tab_strip_model,
31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                            TabContentsWrapper* contents,
32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                            int index);
33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabDetachedAt(TabContentsWrapper* contents, int index);
34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabSelectedAt(TabContentsWrapper* old_contents,
35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                             TabContentsWrapper* new_contents,
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             int index,
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             bool user_gesture);
38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabMoved(TabContentsWrapper* contents,
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        int from_index,
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        int to_index);
41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabChangedAt(TabContentsWrapper* contents, int index,
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            TabChangeType change_type);
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void TabReplacedAt(TabStripModel* tab_strip_model,
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                             TabContentsWrapper* old_contents,
45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                             TabContentsWrapper* new_contents,
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             int index);
47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabMiniStateChanged(TabContentsWrapper* contents, int index);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void TabStripEmpty();
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void TabStripModelDeleted();
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  id controller_;  // weak, owns me
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabStripModel* model_;  // weak, owned by Browser
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A collection of methods which can be selectively implemented by any
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Cocoa object to receive updates about changes to a tab strip model. It is
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ok to not implement them, the calling code checks before calling.
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@interface NSObject(TabStripModelBridge)
60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch- (void)insertTabWithContents:(TabContentsWrapper*)contents
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      atIndex:(NSInteger)index
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 inForeground:(bool)inForeground;
63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch- (void)tabClosingWithContents:(TabContentsWrapper*)contents
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       atIndex:(NSInteger)index;
65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch- (void)tabDetachedWithContents:(TabContentsWrapper*)contents
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        atIndex:(NSInteger)index;
67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch- (void)selectTabWithContents:(TabContentsWrapper*)newContents
68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch             previousContents:(TabContentsWrapper*)oldContents
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      atIndex:(NSInteger)index
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  userGesture:(bool)wasUserGesture;
71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch- (void)tabMovedWithContents:(TabContentsWrapper*)contents
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    fromIndex:(NSInteger)from
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      toIndex:(NSInteger)to;
74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch- (void)tabChangedWithContents:(TabContentsWrapper*)contents
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       atIndex:(NSInteger)index
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    changeType:(TabStripModelObserver::TabChangeType)change;
77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch- (void)tabReplacedWithContents:(TabContentsWrapper*)newContents
78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch               previousContents:(TabContentsWrapper*)oldContents
79731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                        atIndex:(NSInteger)index;
80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch- (void)tabMiniStateChangedWithContents:(TabContentsWrapper*)contents
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                atIndex:(NSInteger)index;
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)tabStripEmpty;
833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick- (void)tabStripModelDeleted;
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@end
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif  // CHROME_BROWSER_UI_COCOA_TABS_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_
87