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