Home | History | Annotate | Download | only in tabs
      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 #include "chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h"
      6 
      7 #include "chrome/browser/tabs/tab_strip_model.h"
      8 
      9 TabStripModelObserverBridge::TabStripModelObserverBridge(TabStripModel* model,
     10                                                          id controller)
     11     : controller_(controller), model_(model) {
     12   DCHECK(model && controller);
     13   // Register to be a listener on the model so we can get updates and tell
     14   // |controller_| about them in the future.
     15   model_->AddObserver(this);
     16 }
     17 
     18 TabStripModelObserverBridge::~TabStripModelObserverBridge() {
     19   // Remove ourselves from receiving notifications.
     20   model_->RemoveObserver(this);
     21 }
     22 
     23 void TabStripModelObserverBridge::TabInsertedAt(TabContentsWrapper* contents,
     24                                                 int index,
     25                                                 bool foreground) {
     26   if ([controller_ respondsToSelector:
     27           @selector(insertTabWithContents:atIndex:inForeground:)]) {
     28     [controller_ insertTabWithContents:contents
     29                                atIndex:index
     30                           inForeground:foreground];
     31   }
     32 }
     33 
     34 void TabStripModelObserverBridge::TabClosingAt(TabStripModel* tab_strip_model,
     35                                                TabContentsWrapper* contents,
     36                                                int index) {
     37   if ([controller_ respondsToSelector:
     38           @selector(tabClosingWithContents:atIndex:)]) {
     39     [controller_ tabClosingWithContents:contents atIndex:index];
     40   }
     41 }
     42 
     43 void TabStripModelObserverBridge::TabDetachedAt(TabContentsWrapper* contents,
     44                                                 int index) {
     45   if ([controller_ respondsToSelector:
     46           @selector(tabDetachedWithContents:atIndex:)]) {
     47     [controller_ tabDetachedWithContents:contents atIndex:index];
     48   }
     49 }
     50 
     51 void TabStripModelObserverBridge::TabSelectedAt(
     52     TabContentsWrapper* old_contents,
     53     TabContentsWrapper* new_contents,
     54     int index,
     55     bool user_gesture) {
     56   if ([controller_ respondsToSelector:
     57           @selector(selectTabWithContents:previousContents:atIndex:
     58                     userGesture:)]) {
     59     [controller_ selectTabWithContents:new_contents
     60                       previousContents:old_contents
     61                                atIndex:index
     62                            userGesture:user_gesture];
     63   }
     64 }
     65 
     66 void TabStripModelObserverBridge::TabMoved(TabContentsWrapper* contents,
     67                                            int from_index,
     68                                            int to_index) {
     69   if ([controller_ respondsToSelector:
     70        @selector(tabMovedWithContents:fromIndex:toIndex:)]) {
     71     [controller_ tabMovedWithContents:contents
     72                             fromIndex:from_index
     73                               toIndex:to_index];
     74   }
     75 }
     76 
     77 void TabStripModelObserverBridge::TabChangedAt(TabContentsWrapper* contents,
     78                                                int index,
     79                                                TabChangeType change_type) {
     80   if ([controller_ respondsToSelector:
     81           @selector(tabChangedWithContents:atIndex:changeType:)]) {
     82     [controller_ tabChangedWithContents:contents
     83                                 atIndex:index
     84                              changeType:change_type];
     85   }
     86 }
     87 
     88 void TabStripModelObserverBridge::TabReplacedAt(
     89     TabStripModel* tab_strip_model,
     90     TabContentsWrapper* old_contents,
     91     TabContentsWrapper* new_contents,
     92     int index) {
     93   if ([controller_ respondsToSelector:
     94           @selector(tabReplacedWithContents:previousContents:atIndex:)]) {
     95     [controller_ tabReplacedWithContents:new_contents
     96                         previousContents:old_contents
     97                                  atIndex:index];
     98   } else {
     99     TabChangedAt(new_contents, index, ALL);
    100   }
    101 }
    102 
    103 void TabStripModelObserverBridge::TabMiniStateChanged(
    104     TabContentsWrapper* contents, int index) {
    105   if ([controller_ respondsToSelector:
    106           @selector(tabMiniStateChangedWithContents:atIndex:)]) {
    107     [controller_ tabMiniStateChangedWithContents:contents atIndex:index];
    108   }
    109 }
    110 
    111 void TabStripModelObserverBridge::TabStripEmpty() {
    112   if ([controller_ respondsToSelector:@selector(tabStripEmpty)])
    113     [controller_ tabStripEmpty];
    114 }
    115 
    116 void TabStripModelObserverBridge::TabStripModelDeleted() {
    117   if ([controller_ respondsToSelector:@selector(tabStripModelDeleted)])
    118     [controller_ tabStripModelDeleted];
    119 }
    120