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

Unified Diff: chrome/browser/ui/views/sidebar/sidebar_base_tab.h

Issue 6250141: Sidebar mini tabs UI (views version).... Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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
Index: chrome/browser/ui/views/sidebar/sidebar_base_tab.h
===================================================================
--- chrome/browser/ui/views/sidebar/sidebar_base_tab.h (revision 0)
+++ chrome/browser/ui/views/sidebar/sidebar_base_tab.h (revision 0)
@@ -0,0 +1,136 @@
+// Copyright (c) 2010 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_VIEWS_SIDEBAR_SIDEBAR_BASE_TAB_H_
+#define CHROME_BROWSER_UI_VIEWS_SIDEBAR_SIDEBAR_BASE_TAB_H_
+#pragma once
+
+#include "base/compiler_specific.h"
+#include "base/ref_counted.h"
+#include "base/scoped_ptr.h"
+#include "chrome/browser/ui/views/sidebar/sidebar_tab_renderer_data.h"
+#include "ui/base/animation/animation_container.h"
+#include "ui/base/animation/animation_delegate.h"
+#include "views/view.h"
+
+namespace ui {
+class Animation;
+class SlideAnimation;
+class ThrobAnimation;
+} // namespace ui
+
+class SidebarTabController;
+
+// Generic sidebar tab view. It caches all data necessary for tab rendering,
+// handles painting and animation, receives user interaction events and forwards
+// them to the controller.
+// SidebarBaseTab does not make state transition and layout decisions,
+// it should be done in the concrete child classes.
+class SidebarBaseTab : public views::View,
+ private ui::AnimationDelegate {
+ public:
+ explicit SidebarBaseTab(SidebarTabController* controller);
+ virtual ~SidebarBaseTab();
+
+ // views::View overrides:
+ virtual void OnMouseEntered(const views::MouseEvent& event) OVERRIDE;
+ virtual void OnMouseExited(const views::MouseEvent& event) OVERRIDE;
+ virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE;
+ virtual bool GetTooltipText(const gfx::Point& p,
+ std::wstring* tooltip) OVERRIDE;
+ virtual AccessibilityTypes::Role GetAccessibleRole() OVERRIDE;
+
+ // Sets the data this tabs displays. Invokes DataChanged for subclasses to
+ // update themselves appropriately.
+ void SetData(const SidebarTabRendererData& data);
+ const SidebarTabRendererData& data() const { return data_; }
+
+ // Sets the network state. Returns true if the network state was changed.
+ bool UpdateLoadingAnimation(SidebarTabRendererData::NetworkState state);
+
+ // Starts/Stops a pulse animation.
+ void StartPulse();
+ void StopPulse();
+
+ // Used to set/check whether this tab is being animated closed.
+ void set_closing(bool closing) { closing_ = closing; }
+ bool closing() const { return closing_; }
+
+ // Sets the container all animations run from.
+ void set_animation_container(ui::AnimationContainer* container) {
+ animation_container_ = container;
+ }
+ ui::AnimationContainer* animation_container() const {
+ return animation_container_.get();
+ }
+
+ // Returns true if the tab is selected.
+ bool IsSelected() const;
+ // Returns true if the sidebar is expanded.
+ bool IsExpanded() const;
+
+ // Returns the current shape of this tab.
+ virtual void GetShape(gfx::Path* shape) const = 0;
+
+ protected:
+ // Invoked from SetData after |data_| has been updated to the new data.
+ virtual void DataChanged(const SidebarTabRendererData& old) {}
+
+ // Invoked if data_.network_state changes, or the network_state is not none.
+ virtual void AdvanceLoadingAnimation(
+ SidebarTabRendererData::NetworkState old_state,
+ SidebarTabRendererData::NetworkState state);
+
+ // Gets the throb value for the tab. When a tab is not selected the
+ // active background is drawn at |GetThrobValue()|%. This is used for hover,
+ // tab title change and pulsing.
+ double GetThrobValue();
+
+ // Paints the icon at the specified coordinates.
+ void PaintIcon(gfx::Canvas* canvas, int x, int y, int alpha);
+
+ private:
+ // The animation object used to swap the icon with the sad tab icon.
+ class IconCrashAnimation;
+
+ // ui::AnimationDelegate overrides:
+ virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE;
+ virtual void AnimationCanceled(const ui::Animation* animation) OVERRIDE;
+ virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE;
+
+ // Set the temporary offset for the icon. This is used during the crash
+ // animation.
+ void SetIconHidingOffset(int offset);
+
+ void DisplayCrashedIcon();
+ void ResetCrashedIcon();
+
+ // Starts/Stops the crash animation.
+ void StartCrashAnimation();
+ void StopCrashAnimation();
+
+ // The controller.
+ SidebarTabController* const controller_;
+
+ SidebarTabRendererData data_;
+
+ // True if the tab is being closed.
+ bool closing_;
+
+ scoped_refptr<ui::AnimationContainer> animation_container_;
+ scoped_ptr<ui::ThrobAnimation> pulse_animation_;
+ scoped_ptr<ui::SlideAnimation> hover_animation_;
+ scoped_ptr<IconCrashAnimation> crash_animation_;
+ // The offset used to animate the icon location.
+ // It's used when the corresponding sidebar's tab contents crashes.
+ int icon_hiding_offset_;
+ bool should_display_crashed_icon_;
+ // The current index of the loading animation.
+ int loading_animation_frame_;
+
+ DISALLOW_COPY_AND_ASSIGN(SidebarBaseTab);
+};
+
+#endif // CHROME_BROWSER_UI_VIEWS_SIDEBAR_SIDEBAR_BASE_TAB_H_
+
Property changes on: chrome\browser\ui\views\sidebar\sidebar_base_tab.h
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698