summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/panels/panel_scroller.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chromeos/panels/panel_scroller.h')
-rw-r--r--chrome/browser/chromeos/panels/panel_scroller.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/panels/panel_scroller.h b/chrome/browser/chromeos/panels/panel_scroller.h
new file mode 100644
index 0000000..51eedff
--- /dev/null
+++ b/chrome/browser/chromeos/panels/panel_scroller.h
@@ -0,0 +1,68 @@
+// 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_CHROMEOS_PANELS_PANEL_SCROLLER_H_
+#define CHROME_BROWSER_CHROMEOS_PANELS_PANEL_SCROLLER_H_
+
+#include <vector>
+
+#include "app/slide_animation.h"
+#include "base/basictypes.h"
+#include "views/view.h"
+
+class PanelScrollerHeader;
+
+class PanelScroller : public views::View, public AnimationDelegate {
+ public:
+ PanelScroller();
+ ~PanelScroller();
+
+ static PanelScroller* CreateWindow();
+
+ // View overrides.
+ virtual void ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child);
+ virtual gfx::Size GetPreferredSize();
+ virtual void Layout();
+ virtual bool OnMousePressed(const views::MouseEvent& event);
+ virtual bool OnMouseDragged(const views::MouseEvent& event);
+ virtual void OnMouseReleased(const views::MouseEvent& event, bool canceled);
+
+ // Called when a panel header is clicked with the affected container. This
+ // function will make sure the panel is fully visible.
+ void HeaderClicked(PanelScrollerHeader* source);
+
+ private:
+ struct Panel;
+
+ // AnimationDelegate overrides.
+ virtual void AnimationProgressed(const Animation* animation);
+
+ // Scrolls to the panel at the given index. It will be moved to the top.
+ void ScrollToPanel(int index);
+
+ // All panels in this scroller.
+ std::vector<Panel*> panels_;
+
+ // Height in pixels of the headers above each panel.
+ int divider_height_;
+
+ bool needs_layout_;
+
+ // The current scroll position.
+ int scroll_pos_;
+
+ SlideAnimation animation_;
+
+ // When animating a scroll, these indicate the beginning and ending of the
+ // scroll. The scroll_pos_ always indicates the current one.
+ int animated_scroll_begin_;
+ int animated_scroll_end_;
+
+ DISALLOW_COPY_AND_ASSIGN(PanelScroller);
+};
+
+#endif // CHROME_BROWSER_CHROMEOS_PANELS_PANEL_SCROLLER_H_
+