blob: 550ba94076ba0df940a91b2d186fc402a19679a6 [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_TABS_HOVER_TAB_SELECTOR_H_
#define CHROME_BROWSER_UI_TABS_HOVER_TAB_SELECTOR_H_
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
class TabStripModel;
// Helper class to perform "spring-loaded" tab transitions. Manages
// the lifecycle of delayed tab transition tasks.
class HoverTabSelector {
public:
explicit HoverTabSelector(TabStripModel* tab_strip_model);
~HoverTabSelector();
// Begin a delayed tab transition to the tab at |index|. Only starts
// the transition if the specified tab is not active and there isn't
// already a transition to it scheduled. Cancels the pending transition
// to any other tab, if there is one.
void StartTabTransition(int index);
// Cancel a pending tab transition. No-op if there is no pending transition.
void CancelTabTransition();
private:
// Performs the tab transition.
void PerformTabTransition();
// Model of the tab strip on which this class operates.
TabStripModel* tab_strip_model_;
// The model index of the tab to transition to.
int tab_transition_tab_index_;
// Factory for creating tab transition tasks.
base::WeakPtrFactory<HoverTabSelector> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(HoverTabSelector);
};
#endif // CHROME_BROWSER_UI_TABS_HOVER_TAB_SELECTOR_H_