// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_COCOA_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_ #define CHROME_BROWSER_COCOA_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_ #import #include "chrome/browser/tabs/tab_strip_model.h" class TabContents; // A C++ bridge class to handle receiving notifications from the C++ tab strip // model. When the caller allocates a bridge, it automatically registers for // notifications from |model| and passes messages to |controller| via the // informal protocol below. The owner of this object is responsible for deleting // it (and thus unhooking notifications) before |controller| is destroyed. class TabStripModelObserverBridge : public TabStripModelObserver { public: TabStripModelObserverBridge(TabStripModel* model, id controller); virtual ~TabStripModelObserverBridge(); // Overridden from TabStripModelObserver virtual void TabInsertedAt(TabContents* contents, int index, bool foreground); virtual void TabClosingAt(TabContents* contents, int index); virtual void TabDetachedAt(TabContents* contents, int index); virtual void TabSelectedAt(TabContents* old_contents, TabContents* new_contents, int index, bool user_gesture); virtual void TabMoved(TabContents* contents, int from_index, int to_index); virtual void TabChangedAt(TabContents* contents, int index, bool loading_only); virtual void TabStripEmpty(); private: id controller_; // weak, owns me TabStripModel* model_; // weak, owned by Browser }; // A collection of methods which can be selectively implemented by any // Cocoa object to receive updates about changes to a tab strip model. It is // ok to not implement them, the calling code checks before calling. @interface NSObject(TabStripModelBridge) - (void)insertTabWithContents:(TabContents*)contents atIndex:(NSInteger)index inForeground:(bool)inForeground; - (void)tabClosingWithContents:(TabContents*)contents atIndex:(NSInteger)index; - (void)tabDetachedWithContents:(TabContents*)contents atIndex:(NSInteger)index; - (void)selectTabWithContents:(TabContents*)newContents previousContents:(TabContents*)oldContents atIndex:(NSInteger)index userGesture:(bool)wasUserGesture; - (void)tabMovedWithContents:(TabContents*)contents fromIndex:(NSInteger)from toIndex:(NSInteger)to; - (void)tabChangedWithContents:(TabContents*)contents atIndex:(NSInteger)index loadingOnly:(BOOL)loading; - (void)tabStripEmpty; @end #endif // CHROME_BROWSER_COCOA_TAB_STRIP_MODEL_OBSERVER_BRIDGE_H_