browser_tab_strip_controller.h revision 4a5e2dc747d50c653511c68ccb2cfbfb740bd5a7
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_VIEWS_TABS_BROWSER_TAB_STRIP_CONTROLLER_H_ 6#define CHROME_BROWSER_UI_VIEWS_TABS_BROWSER_TAB_STRIP_CONTROLLER_H_ 7#pragma once 8 9#include "base/scoped_ptr.h" 10#include "chrome/browser/tabs/tab_strip_model.h" 11#include "chrome/browser/views/tabs/tab_strip_controller.h" 12#include "chrome/common/notification_observer.h" 13#include "chrome/common/notification_registrar.h" 14 15class BaseTab; 16class BaseTabStrip; 17class Browser; 18 19struct TabRendererData; 20 21// An implementation of TabStripController that sources data from the 22// TabContentses in a TabStripModel. 23class BrowserTabStripController : public TabStripController, 24 public TabStripModelObserver, 25 public NotificationObserver { 26 public: 27 BrowserTabStripController(Browser* browser, TabStripModel* model); 28 virtual ~BrowserTabStripController(); 29 30 void InitFromModel(BaseTabStrip* tabstrip); 31 32 TabStripModel* model() const { return model_; } 33 34 bool IsCommandEnabledForTab(TabStripModel::ContextMenuCommand command_id, 35 BaseTab* tab) const; 36 bool IsCommandCheckedForTab(TabStripModel::ContextMenuCommand command_id, 37 BaseTab* tab) const; 38 void ExecuteCommandForTab(TabStripModel::ContextMenuCommand command_id, 39 BaseTab* tab); 40 bool IsTabPinned(BaseTab* tab); 41 42 // TabStripController implementation: 43 virtual int GetCount() const; 44 virtual bool IsValidIndex(int model_index) const; 45 virtual int GetSelectedIndex() const; 46 virtual bool IsTabSelected(int model_index) const; 47 virtual bool IsTabPinned(int model_index) const; 48 virtual bool IsTabCloseable(int model_index) const; 49 virtual bool IsNewTabPage(int model_index) const; 50 virtual void SelectTab(int model_index); 51 virtual void CloseTab(int model_index); 52 virtual void ShowContextMenu(BaseTab* tab, const gfx::Point& p); 53 virtual void UpdateLoadingAnimations(); 54 virtual int HasAvailableDragActions() const; 55 virtual void PerformDrop(bool drop_before, int index, const GURL& url); 56 virtual bool IsCompatibleWith(BaseTabStrip* other) const; 57 virtual void CreateNewTab(); 58 59 // TabStripModelObserver implementation: 60 virtual void TabInsertedAt(TabContents* contents, 61 int model_index, 62 bool foreground); 63 virtual void TabDetachedAt(TabContents* contents, int model_index); 64 virtual void TabSelectedAt(TabContents* old_contents, 65 TabContents* contents, 66 int model_index, 67 bool user_gesture); 68 virtual void TabMoved(TabContents* contents, 69 int from_model_index, 70 int to_model_index); 71 virtual void TabChangedAt(TabContents* contents, 72 int model_index, 73 TabChangeType change_type); 74 virtual void TabReplacedAt(TabContents* old_contents, 75 TabContents* new_contents, 76 int model_index); 77 virtual void TabPinnedStateChanged(TabContents* contents, int model_index); 78 virtual void TabMiniStateChanged(TabContents* contents, int model_index); 79 virtual void TabBlockedStateChanged(TabContents* contents, int model_index); 80 81 // NotificationObserver implementation: 82 virtual void Observe(NotificationType type, const NotificationSource& source, 83 const NotificationDetails& details); 84 85 private: 86 class TabContextMenuContents; 87 88 // Invokes tabstrip_->SetTabData. 89 void SetTabDataAt(TabContents* contents, int model_index); 90 91 // Sets the TabRendererData from the TabStripModel. 92 void SetTabRendererDataFromModel(TabContents* contents, 93 int model_index, 94 TabRendererData* data); 95 96 void StartHighlightTabsForCommand( 97 TabStripModel::ContextMenuCommand command_id, 98 BaseTab* tab); 99 void StopHighlightTabsForCommand( 100 TabStripModel::ContextMenuCommand command_id, 101 BaseTab* tab); 102 103 Profile* profile() const { return model_->profile(); } 104 105 TabStripModel* model_; 106 107 BaseTabStrip* tabstrip_; 108 109 // Non-owning pointer to the browser which is using this controller. 110 Browser* browser_; 111 112 // If non-NULL it means we're showing a menu for the tab. 113 scoped_ptr<TabContextMenuContents> context_menu_contents_; 114 115 NotificationRegistrar notification_registrar_; 116 117 DISALLOW_COPY_AND_ASSIGN(BrowserTabStripController); 118}; 119 120#endif // CHROME_BROWSER_UI_VIEWS_TABS_BROWSER_TAB_STRIP_CONTROLLER_H_ 121 122