Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: chrome/browser/views/tabs/base_tab_strip.h

Issue 2124003: More TabStrip refactoring. (Closed)
Patch Set: Merge with trunk Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/views/tabs/base_tab_renderer.cc ('k') | chrome/browser/views/tabs/base_tab_strip.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/tabs/base_tab_strip.h
diff --git a/chrome/browser/views/tabs/base_tab_strip.h b/chrome/browser/views/tabs/base_tab_strip.h
index 96a527cd77e9d11e5de33b0f2e1b196debae902b..b299e7241a79064fb86989f4510bf0862421005d 100644
--- a/chrome/browser/views/tabs/base_tab_strip.h
+++ b/chrome/browser/views/tabs/base_tab_strip.h
@@ -5,10 +5,14 @@
#ifndef CHROME_BROWSER_VIEWS_TABS_BASE_TAB_STRIP_H_
#define CHROME_BROWSER_VIEWS_TABS_BASE_TAB_STRIP_H_
+#include <vector>
+
#include "base/scoped_ptr.h"
#include "chrome/browser/views/tabs/base_tab_renderer.h"
#include "views/view.h"
+class BaseTabRenderer;
+class DraggedTabController;
class TabStrip;
class TabStripController;
class ThemeProvider;
@@ -17,9 +21,16 @@ class ThemeProvider;
class BaseTabStrip : public views::View,
public TabController {
public:
- explicit BaseTabStrip(TabStripController* controller);
+ enum Type {
+ HORIZONTAL_TAB_STRIP,
+ VERTICAL_TAB_STRIP
+ };
+
+ BaseTabStrip(TabStripController* controller, Type type);
virtual ~BaseTabStrip();
+ Type type() const { return type_; }
+
// Returns the preferred height of this TabStrip. This is based on the
// typical height of its constituent tabs.
virtual int GetPreferredHeight() = 0;
@@ -36,9 +47,6 @@ class BaseTabStrip : public views::View,
virtual void SetDraggedTabBounds(int tab_index,
const gfx::Rect& tab_bounds) = 0;
- // Returns true if a drag session is currently active.
- virtual bool IsDragSessionActive() const = 0;
-
// Updates the loading animations displayed by tabs in the tabstrip to the
// next frame.
void UpdateLoadingAnimations();
@@ -56,30 +64,22 @@ class BaseTabStrip : public views::View,
// Stops all tab higlighting.
virtual void StopAllHighlighting() = 0;
- // Returns the tab at the specified model index.
- virtual BaseTabRenderer* GetBaseTabAtModelIndex(int model_index) const = 0;
-
- // Returns the tab at the specified tab index.
- virtual BaseTabRenderer* GetBaseTabAtTabIndex(int tab_index) const = 0;
-
- // Returns the index of the specified tab in the model coordiate system, or
- // -1 if tab is closing or not valid.
- virtual int GetModelIndexOfBaseTab(const BaseTabRenderer* tab) const = 0;
-
- // Returns the number of tabs.
- virtual int GetTabCount() const = 0;
-
// Returns the selected tab.
virtual BaseTabRenderer* GetSelectedBaseTab() const;
+ // Retrieves the ideal bounds for the Tab at the specified index.
+ const gfx::Rect& ideal_bounds(int tab_data_index) {
+ return tab_data_[tab_data_index].ideal_bounds;
+ }
+
// Creates and returns a tab that can be used for dragging. Ownership passes
// to the caller.
virtual BaseTabRenderer* CreateTabForDragging() = 0;
// Adds a tab at the specified index.
- virtual void AddTabAt(int model_index,
- bool foreground,
- const TabRendererData& data) = 0;
+ void AddTabAt(int model_index,
+ bool foreground,
+ const TabRendererData& data);
// Removes a tab at the specified index. If |initiated_close| is true, the
// close was initiated by the tab strip (such as clicking the close button).
@@ -90,7 +90,7 @@ class BaseTabStrip : public views::View,
virtual void SelectTabAt(int old_model_index, int new_model_index) = 0;
// Moves a tab.
- virtual void MoveTab(int from_model_index, int to_model_index) = 0;
+ virtual void MoveTab(int from_model_index, int to_model_index);
// Invoked when the title of a tab changes and the tab isn't loading.
virtual void TabTitleChangedNotLoading(int model_index) = 0;
@@ -98,10 +98,40 @@ class BaseTabStrip : public views::View,
// Sets the tab data at the specified model index.
virtual void SetTabData(int model_index, const TabRendererData& data) = 0;
- // Cover methods for TabStripController method.
+ // Returns the tab at the specified model index.
+ virtual BaseTabRenderer* GetBaseTabAtModelIndex(int model_index) const;
+
+ // Returns the tab at the specified tab index.
+ BaseTabRenderer* base_tab_at_tab_index(int tab_index) const {
+ return tab_data_[tab_index].tab;
+ }
+
+ // Returns the index of the specified tab in the model coordiate system, or
+ // -1 if tab is closing or not valid.
+ virtual int GetModelIndexOfBaseTab(const BaseTabRenderer* tab) const;
+
+ // Gets the number of Tabs in the tab strip.
+ // WARNING: this is the number of tabs displayed by the tabstrip, which if
+ // an animation is ongoing is not necessarily the same as the number of tabs
+ // in the model.
+ int tab_count() const { return static_cast<int>(tab_data_.size()); }
+
+ // Cover method for TabStripController::GetCount.
int GetModelCount() const;
+
+ // Cover method for TabStripController::IsValidIndex.
bool IsValidModelIndex(int model_index) const;
+ // Returns the index into |tab_data_| corresponding to the index from the
+ // TabStripModel, or |tab_data_.size()| if there is no tab representing
+ // |model_index|.
+ int ModelIndexToTabIndex(int model_index) const;
+
+ TabStripController* controller() const { return controller_.get(); }
+
+ // Returns true if a drag session is currently active.
+ bool IsDragSessionActive() const;
+
// TabController overrides:
virtual void SelectTab(BaseTabRenderer* tab);
virtual void CloseTab(BaseTabRenderer* tab);
@@ -109,14 +139,84 @@ class BaseTabStrip : public views::View,
virtual bool IsTabSelected(const BaseTabRenderer* tab) const;
virtual bool IsTabPinned(const BaseTabRenderer* tab) const;
virtual void MaybeStartDrag(BaseTabRenderer* tab,
- const views::MouseEvent& event) = 0;
- virtual void ContinueDrag(const views::MouseEvent& event) = 0;
- virtual bool EndDrag(bool canceled) = 0;
+ const views::MouseEvent& event);
+ virtual void ContinueDrag(const views::MouseEvent& event);
+ virtual bool EndDrag(bool canceled);
- TabStripController* controller() const { return controller_.get(); }
+ // View overrides:
+ virtual void Layout();
+
+ protected:
+ // The Tabs we contain, and their last generated "good" bounds.
+ struct TabData {
+ BaseTabRenderer* tab;
+ gfx::Rect ideal_bounds;
+ };
+
+ // View overrides.
+ virtual bool OnMouseDragged(const views::MouseEvent& event);
+ virtual void OnMouseReleased(const views::MouseEvent& event,
+ bool canceled);
+
+ // Creates and returns a new tab. The caller owners the returned tab.
+ virtual BaseTabRenderer* CreateTab() = 0;
+
+ // Invoked from |AddTabAt| after the newly created tab has been inserted.
+ // Subclasses should either start an animation, or layout.
+ virtual void StartInsertTabAnimation(int model_index, bool foreground) = 0;
+
+ // Invoked from |MoveTab| after |tab_data_| has been updated to animate the
+ // move.
+ virtual void StartMoveTabAnimation() = 0;
+
+ // Cleans up the Tab from the TabStrip. This is called from the tab animation
+ // code and is not a general-purpose method.
+ void RemoveAndDeleteTab(BaseTabRenderer* tab);
+
+ // Resets the bounds of all non-closing tabs.
+ virtual void GenerateIdealBounds() = 0;
+
+ void set_ideal_bounds(int index, const gfx::Rect& bounds) {
+ tab_data_[index].ideal_bounds = bounds;
+ }
+
+ // Returns the index into |tab_data_| corresponding to the specified tab, or
+ // -1 if the tab isn't in |tab_data_|.
+ int TabIndexOfTab(BaseTabRenderer* tab) const;
+
+ // Stops any ongoing animations. If |layout| is true and an animation is
+ // ongoing this does a layout.
+ virtual void StopAnimating(bool layout) = 0;
+
+ // Destroys the active drag controller.
+ void DestroyDragController();
+
+ // Used by DraggedTabController when the user starts or stops dragging a tab.
+ virtual void StartedDraggingTab(BaseTabRenderer* tab) = 0;
+ virtual void StoppedDraggingTab(BaseTabRenderer* tab) = 0;
+
+ // See description above field for details.
+ bool attaching_dragged_tab() const { return attaching_dragged_tab_; }
private:
+ friend class DraggedTabController;
+
+ // See description above field for details.
+ void set_attaching_dragged_tab(bool value) { attaching_dragged_tab_ = value; }
+
scoped_ptr<TabStripController> controller_;
+
+ const Type type_;
+
+ std::vector<TabData> tab_data_;
+
+ // The controller for a drag initiated from a Tab. Valid for the lifetime of
+ // the drag session.
+ scoped_ptr<DraggedTabController> drag_controller_;
+
+ // If true, the insert is a result of a drag attaching the tab back to the
+ // model.
+ bool attaching_dragged_tab_;
};
#endif // CHROME_BROWSER_VIEWS_TABS_BASE_TAB_STRIP_H_
« no previous file with comments | « chrome/browser/views/tabs/base_tab_renderer.cc ('k') | chrome/browser/views/tabs/base_tab_strip.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698