// 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_

