tab_strip_controller.h revision dc0f95d653279beabeb9817299e2902918ba123e
14a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Copyright (c) 2010 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
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the selected index is selected.
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsTabSelected(int index) const = 0;
314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the selected index is pinned.
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsTabPinned(int index) const = 0;
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the selected index is closeable.
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsTabCloseable(int index) const = 0;
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the selected index is the new tab page.
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsNewTabPage(int index) const = 0;
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Select the tab at the specified index in the model.
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void SelectTab(int index) = 0;
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Closes the tab at the specified index in the model.
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void CloseTab(int index) = 0;
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Shows a context menu for the tab at the specified point in screen coords.
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void ShowContextMenuForTab(BaseTab* tab, const gfx::Point& p) = 0;
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Updates the loading animations of all the tabs.
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void UpdateLoadingAnimations() = 0;
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the associated TabStrip's delegate supports tab moving or
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // detaching. Used by the Frame to determine if dragging on the Tab
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // itself should move the window in cases where there's only one
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // non drag-able Tab.
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual int HasAvailableDragActions() const = 0;
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Performans a drop at the specified location.
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void PerformDrop(bool drop_before, int index, const GURL& url) = 0;
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Return true if this tab strip is compatible with the provided tab strip.
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Compatible tab strips can transfer tabs during drag and drop.
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual bool IsCompatibleWith(BaseTabStrip* other) const = 0;
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Creates the new tab.
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void CreateNewTab() = 0;
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_TABS_TAB_STRIP_CONTROLLER_H_
71