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