1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_CONTROLLER_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_CONTROLLER_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BaseTab;
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BaseTabStrip;
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass GURL;
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace gfx {
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Point;
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Model/Controller for the TabStrip.
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// NOTE: All indices used by this class are in model coordinates.
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TabStripController {
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~TabStripController() {}
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns the number of tabs in the model.
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual int GetCount() const = 0;
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if |index| is a valid model index.
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsValidIndex(int index) const = 0;
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Returns true if the tab at |index| is the active tab. The active tab is the
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // one whose content is shown.
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool IsActiveTab(int index) const = 0;
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the selected index is selected.
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsTabSelected(int index) const = 0;
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the selected index is pinned.
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsTabPinned(int index) const = 0;
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the selected index is closeable.
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsTabCloseable(int index) const = 0;
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the selected index is the new tab page.
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsNewTabPage(int index) const = 0;
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Select the tab at the specified index in the model.
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void SelectTab(int index) = 0;
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Extends the selection from the anchor to the specified index in the model.
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ExtendSelectionTo(int index) = 0;
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Toggles the selection of the specified index in the model.
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ToggleSelected(int index) = 0;
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Adds the selection the anchor to |index|.
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void AddSelectionFromAnchorTo(int index) = 0;
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Closes the tab at the specified index in the model.
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void CloseTab(int index) = 0;
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Shows a context menu for the tab at the specified point in screen coords.
61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void ShowContextMenuForTab(BaseTab* tab, const gfx::Point& p) = 0;
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Updates the loading animations of all the tabs.
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void UpdateLoadingAnimations() = 0;
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the associated TabStrip's delegate supports tab moving or
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // detaching. Used by the Frame to determine if dragging on the Tab
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // itself should move the window in cases where there's only one
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // non drag-able Tab.
704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual int HasAvailableDragActions() const = 0;
714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Performans a drop at the specified location.
734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void PerformDrop(bool drop_before, int index, const GURL& url) = 0;
744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Return true if this tab strip is compatible with the provided tab strip.
764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Compatible tab strips can transfer tabs during drag and drop.
774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsCompatibleWith(BaseTabStrip* other) const = 0;
784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Creates the new tab.
804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void CreateNewTab() = 0;
814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_CONTROLLER_H_
84