15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_CONTROLLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_TABS_TAB_CONTROLLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/tabs/tab_strip_types.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Tab;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Point;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ui {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ListSelectionModel;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LocatedEvent;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MouseEvent;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class View;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Controller for tabs.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabController {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual const ui::ListSelectionModel& GetSelectionModel() = 0;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if multiple selection is supported.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool SupportsMultipleSelection() = 0;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Selects the tab.
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SelectTab(Tab* tab) = 0;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Extends the selection from the anchor to |tab|.
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ExtendSelectionTo(Tab* tab) = 0;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Toggles whether |tab| is selected.
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ToggleSelected(Tab* tab) = 0;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds the selection from the anchor to |tab|.
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AddSelectionFromAnchorTo(Tab* tab) = 0;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Closes the tab.
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void CloseTab(Tab* tab, CloseTabSource source) = 0;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Toggles whether tab-wide audio muting is active.
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ToggleTabAudioMute(Tab* tab) = 0;
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows a context menu for the tab at the specified point in screen coords.
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void ShowContextMenuForTab(Tab* tab,
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                     const gfx::Point& p,
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                     ui::MenuSourceType source_type) = 0;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if |tab| is the active tab. The active tab is the one whose
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content is shown in the browser.
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsActiveTab(const Tab* tab) const = 0;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the specified Tab is selected.
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsTabSelected(const Tab* tab) const = 0;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the specified Tab is pinned.
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsTabPinned(const Tab* tab) const = 0;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Potentially starts a drag for the specified Tab.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void MaybeStartDrag(
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Tab* tab,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ui::LocatedEvent& event,
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const ui::ListSelectionModel& original_selection) = 0;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Continues dragging a Tab.
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ContinueDrag(views::View* view,
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            const ui::LocatedEvent& event) = 0;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ends dragging a Tab. Returns whether the tab has been destroyed.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool EndDrag(EndDragReason reason) = 0;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the tab that contains the specified coordinates, in terms of |tab|,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // or NULL if there is no tab that contains the specified point.
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual Tab* GetTabAt(Tab* tab,
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        const gfx::Point& tab_in_tab_coordinates) = 0;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when a mouse event occurs on |source|.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnMouseEventInTab(views::View* source,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const ui::MouseEvent& event) = 0;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if |tab| needs to be painted. If false is returned the tab is
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not painted. If true is returned the tab should be painted and |clip| is
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // set to the clip (if |clip| is empty means no clip).
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldPaintTab(const Tab* tab, gfx::Rect* clip) = 0;
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if tabs painted in the rectangular light-bar style.
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsImmersiveStyle() const = 0;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Adds private information to the tab's accessibility state.
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void UpdateTabAccessibilityState(const Tab* tab,
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                        ui::AXViewState* state) = 0;
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TabController() {}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_VIEWS_TABS_TAB_CONTROLLER_H_
104