browser_tab_strip_controller.h revision dc0f95d653279beabeb9817299e2902918ba123e
1// Copyright (c) 2011 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/ui/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// TabContentsWrappers 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) const; 41 42 // TabStripController implementation: 43 virtual int GetCount() const; 44 virtual bool IsValidIndex(int model_index) const; 45 virtual bool IsTabSelected(int model_index) const; 46 virtual bool IsTabPinned(int model_index) const; 47 virtual bool IsTabCloseable(int model_index) const; 48 virtual bool IsNewTabPage(int model_index) const; 49 virtual void SelectTab(int model_index); 50 virtual void CloseTab(int model_index); 51 virtual void ShowContextMenuForTab(BaseTab* tab, const gfx::Point& p); 52 virtual void UpdateLoadingAnimations(); 53 virtual int HasAvailableDragActions() const; 54 virtual void PerformDrop(bool drop_before, int index, const GURL& url); 55 virtual bool IsCompatibleWith(BaseTabStrip* other) const; 56 virtual void CreateNewTab(); 57 58 // TabStripModelObserver implementation: 59 virtual void TabInsertedAt(TabContentsWrapper* contents, 60 int model_index, 61 bool foreground); 62 virtual void TabDetachedAt(TabContentsWrapper* contents, int model_index); 63 virtual void TabSelectedAt(TabContentsWrapper* old_contents, 64 TabContentsWrapper* contents, 65 int model_index, 66 bool user_gesture); 67 virtual void TabMoved(TabContentsWrapper* contents, 68 int from_model_index, 69 int to_model_index); 70 virtual void TabChangedAt(TabContentsWrapper* contents, 71 int model_index, 72 TabChangeType change_type); 73 virtual void TabReplacedAt(TabStripModel* tab_strip_model, 74 TabContentsWrapper* old_contents, 75 TabContentsWrapper* new_contents, 76 int model_index); 77 virtual void TabPinnedStateChanged(TabContentsWrapper* contents, 78 int model_index); 79 virtual void TabMiniStateChanged(TabContentsWrapper* contents, 80 int model_index); 81 virtual void TabBlockedStateChanged(TabContentsWrapper* contents, 82 int model_index); 83 84 // NotificationObserver implementation: 85 virtual void Observe(NotificationType type, const NotificationSource& source, 86 const NotificationDetails& details); 87 88 private: 89 class TabContextMenuContents; 90 91 // Invokes tabstrip_->SetTabData. 92 void SetTabDataAt(TabContentsWrapper* contents, int model_index); 93 94 // Sets the TabRendererData from the TabStripModel. 95 void SetTabRendererDataFromModel(TabContents* contents, 96 int model_index, 97 TabRendererData* data); 98 99 void StartHighlightTabsForCommand( 100 TabStripModel::ContextMenuCommand command_id, 101 BaseTab* tab); 102 void StopHighlightTabsForCommand( 103 TabStripModel::ContextMenuCommand command_id, 104 BaseTab* tab); 105 106 Profile* profile() const { return model_->profile(); } 107 108 TabStripModel* model_; 109 110 BaseTabStrip* tabstrip_; 111 112 // Non-owning pointer to the browser which is using this controller. 113 Browser* browser_; 114 115 // If non-NULL it means we're showing a menu for the tab. 116 scoped_ptr<TabContextMenuContents> context_menu_contents_; 117 118 NotificationRegistrar notification_registrar_; 119 120 DISALLOW_COPY_AND_ASSIGN(BrowserTabStripController); 121}; 122 123#endif // CHROME_BROWSER_UI_VIEWS_TABS_BROWSER_TAB_STRIP_CONTROLLER_H_ 124 125