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