1// Copyright (c) 2011 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_TABS_HOVER_TAB_SELECTOR_H_ 6#define CHROME_BROWSER_UI_TABS_HOVER_TAB_SELECTOR_H_ 7 8#include "base/memory/weak_ptr.h" 9 10class TabStripModel; 11 12// Helper class to perform "spring-loaded" tab transitions. Manages 13// the lifecycle of delayed tab transition tasks. 14class HoverTabSelector { 15 public: 16 explicit HoverTabSelector(TabStripModel* tab_strip_model); 17 ~HoverTabSelector(); 18 19 // Begin a delayed tab transition to the tab at |index|. Only starts 20 // the transition if the specified tab is not active and there isn't 21 // already a transition to it scheduled. Cancels the pending transition 22 // to any other tab, if there is one. 23 void StartTabTransition(int index); 24 25 // Cancel a pending tab transition. No-op if there is no pending transition. 26 void CancelTabTransition(); 27 28 private: 29 // Performs the tab transition. 30 void PerformTabTransition(); 31 32 // Model of the tab strip on which this class operates. 33 TabStripModel* tab_strip_model_; 34 35 // The model index of the tab to transition to. 36 int tab_transition_tab_index_; 37 38 // Factory for creating tab transition tasks. 39 base::WeakPtrFactory<HoverTabSelector> weak_factory_; 40 41 DISALLOW_COPY_AND_ASSIGN(HoverTabSelector); 42}; 43 44#endif // CHROME_BROWSER_UI_TABS_HOVER_TAB_SELECTOR_H_ 45 46