#ifndef UI_VIEWS_CONTROLS_TABLE_TABLE_HEADER_H_
#define UI_VIEWS_CONTROLS_TABLE_TABLE_HEADER_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/gfx/font_list.h"
#include "ui/views/controls/table/table_view.h"
#include "ui/views/view.h"
#include "ui/views/views_export.h"
namespace views {
class VIEWS_EXPORT TableHeader : public views::View {
public:
METADATA_HEADER(TableHeader);
static const int kHorizontalPadding;
static const int kSortIndicatorWidth;
explicit TableHeader(TableView* table);
TableHeader(const TableHeader&) = delete;
TableHeader& operator=(const TableHeader&) = delete;
~TableHeader() override;
const gfx::FontList& font_list() const { return font_list_; }
void ResizeColumnViaKeyboard(size_t index,
TableView::AdvanceDirection direction);
void UpdateFocusState();
void OnPaint(gfx::Canvas* canvas) override;
gfx::Size CalculatePreferredSize() const override;
bool GetNeedsNotificationWhenVisibleBoundsChange() const override;
void OnVisibleBoundsChanged() override;
void AddedToWidget() override;
ui::Cursor GetCursor(const ui::MouseEvent& event) override;
bool OnMousePressed(const ui::MouseEvent& event) override;
bool OnMouseDragged(const ui::MouseEvent& event) override;
void OnMouseReleased(const ui::MouseEvent& event) override;
void OnMouseCaptureLost() override;
void OnGestureEvent(ui::GestureEvent* event) override;
void OnThemeChanged() override;
private:
class HighlightPathGenerator;
struct ColumnResizeDetails {
ColumnResizeDetails() = default;
size_t column_index = 0;
int initial_x = 0;
int initial_width = 0;
};
bool GetHeaderRowHasFocus() const;
gfx::Rect GetActiveHeaderCellBounds() const;
bool HasFocusIndicator() const;
bool StartResize(const ui::LocatedEvent& event);
void ContinueResize(const ui::LocatedEvent& event);
void ToggleSortOrder(const ui::LocatedEvent& event);
absl::optional<size_t> GetResizeColumn(int x) const;
bool is_resizing() const { return resize_details_.get() != nullptr; }
const gfx::FontList font_list_;
raw_ptr<TableView, DanglingUntriaged> table_;
std::unique_ptr<ColumnResizeDetails> resize_details_;
};
}
#endif