Serenity Operating System
at master 72 lines 2.3 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <LibGUI/AbstractView.h> 10 11namespace GUI { 12 13class ListView : public AbstractView { 14 C_OBJECT(ListView) 15public: 16 virtual ~ListView() override; 17 18 int item_height() const { return font().preferred_line_height() + vertical_padding(); } 19 int item_count() const; 20 21 bool alternating_row_colors() const { return m_alternating_row_colors; } 22 void set_alternating_row_colors(bool b) { m_alternating_row_colors = b; } 23 24 bool hover_highlighting() const { return m_hover_highlighting; } 25 void set_hover_highlighting(bool b) { m_hover_highlighting = b; } 26 27 int horizontal_padding() const { return m_horizontal_padding; } 28 int vertical_padding() const { return m_vertical_padding; } 29 30 virtual void scroll_into_view(ModelIndex const& index, bool scroll_horizontally, bool scroll_vertically) override; 31 32 Gfx::IntPoint adjusted_position(Gfx::IntPoint) const; 33 34 virtual ModelIndex index_at_event_position(Gfx::IntPoint) const override; 35 virtual Gfx::IntRect content_rect(ModelIndex const&) const override; 36 37 int model_column() const { return m_model_column; } 38 void set_model_column(int column) { m_model_column = column; } 39 40 virtual void select_all() override; 41 42 Function<void()> on_escape_pressed; 43 44 virtual void move_cursor(CursorMovement, SelectionUpdate) override; 45 void move_cursor_relative(int steps, SelectionUpdate); 46 47protected: 48 ListView(); 49 virtual void paint_list_item(Painter&, int row_index, int painted_item_index); 50 51private: 52 virtual void model_did_update(unsigned flags) override; 53 virtual void paint_event(PaintEvent&) override; 54 virtual void keydown_event(KeyEvent&) override; 55 virtual void resize_event(ResizeEvent&) override; 56 virtual void mousemove_event(MouseEvent&) override; 57 virtual void layout_relevant_change_occurred() override; 58 59 virtual Optional<UISize> calculated_min_size() const override; 60 61 Gfx::IntRect content_rect(int row) const; 62 void update_content_size(); 63 64 int m_horizontal_padding { 2 }; 65 int m_vertical_padding { 2 }; 66 int m_model_column { 0 }; 67 int m_max_item_width { 0 }; 68 bool m_alternating_row_colors { true }; 69 bool m_hover_highlighting { false }; 70}; 71 72}