1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_TABS_TAB_STRIP_MODEL_ORDER_CONTROLLER_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_TABS_TAB_STRIP_MODEL_ORDER_CONTROLLER_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tabs/tab_strip_model.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/page_transition_types.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass TabContentsWrapper; 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch/////////////////////////////////////////////////////////////////////////////// 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TabStripModelOrderController 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// An object that allows different types of ordering and reselection to be 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// heuristics plugged into a TabStripModel. 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabStripModelOrderController : public TabStripModelObserver { 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit TabStripModelOrderController(TabStripModel* tabstrip); 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~TabStripModelOrderController(); 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the insertion policy. Default is INSERT_AFTER. 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_insertion_policy(TabStripModel::InsertionPolicy policy) { 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch insertion_policy_ = policy; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabStripModel::InsertionPolicy insertion_policy() const { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return insertion_policy_; 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Determine where to place a newly opened tab by using the supplied 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // transition and foreground flag to figure out how it was opened. 35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int DetermineInsertionIndex(TabContentsWrapper* new_contents, 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PageTransition::Type transition, 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool foreground); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the index to append tabs at. 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int DetermineInsertionIndexForAppending(); 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Determine where to shift selection after a tab is closed. 43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int DetermineNewSelectedIndex(int removed_index) const; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Overridden from TabStripModelObserver: 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void TabSelectedAt(TabContentsWrapper* old_contents, 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* new_contents, 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int index, 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool user_gesture); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns a valid index to be selected after the tab at |removing_index| is 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // closed. If |index| is after |removing_index|, |index| is adjusted to 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // reflect the fact that |removing_index| is going away. 55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int GetValidIndex(int index, int removing_index) const; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabStripModel* tabstrip_; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabStripModel::InsertionPolicy insertion_policy_; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(TabStripModelOrderController); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_TABS_TAB_STRIP_MODEL_ORDER_CONTROLLER_H_ 65