12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef UI_VIEWS_CONTROLS_TABLE_TABLE_HEADER_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define UI_VIEWS_CONTROLS_TABLE_TABLE_HEADER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/font_list.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/view.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/views_export.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TableView; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Views used to render the header for the table. 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VIEWS_EXPORT TableHeader : public views::View { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Amount the text is padded on the left/right side. 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const int kHorizontalPadding; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Amount of space reserved for the indicator and padding. 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const int kSortIndicatorWidth; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit TableHeader(TableView* table); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TableHeader(); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::FontList& font_list() const { return font_list_; } 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // views::View overrides. 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnMouseCaptureLost() OVERRIDE; 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to track the column being resized. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct ColumnResizeDetails { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ColumnResizeDetails() : column_index(0), initial_x(0), initial_width(0) {} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Index into table_->visible_columns() that is being resized. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int column_index; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // X-coordinate of the mouse at the time the resize started. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int initial_x; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Width of the column when the drag started. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int initial_width; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If not already resizing and |event| is over a resizable column starts 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // resizing. 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool StartResize(const ui::LocatedEvent& event); 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Continues a resize operation. Does nothing if not in the process of 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // resizing. 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ContinueResize(const ui::LocatedEvent& event); 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Toggles the sort order of the column at the location in |event|. 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ToggleSortOrder(const ui::LocatedEvent& event); 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the column to resize given the specified x-coordinate, or -1 if |x| 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // is not in the resize range of any columns. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetResizeColumn(int x) const; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_resizing() const { return resize_details_.get() != NULL; } 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::FontList font_list_; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TableView* table_; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If non-null a resize is in progress. 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ColumnResizeDetails> resize_details_; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TableHeader); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace views 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // UI_VIEWS_CONTROLS_TABLE_TABLE_HEADER_H_ 86