Serenity Operating System
at master 60 lines 1.8 kB view raw
1/* 2 * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com> 3 * Copyright (c) 2022, the SerenityOS developers. 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#include "GitFilesView.h" 9#include <LibGUI/Model.h> 10#include <LibGUI/Painter.h> 11#include <LibGUI/Scrollbar.h> 12#include <LibGfx/Palette.h> 13 14namespace HackStudio { 15 16void GitFilesView::paint_list_item(GUI::Painter& painter, int row_index, int painted_item_index) 17{ 18 ListView::paint_list_item(painter, row_index, painted_item_index); 19 20 painter.blit(action_icon_rect((size_t)painted_item_index).top_left(), *m_action_icon, m_action_icon->rect()); 21} 22 23Gfx::IntRect GitFilesView::action_icon_rect(size_t painted_item_index) 24{ 25 int y = painted_item_index * item_height(); 26 return { content_width() - 20, y, m_action_icon->rect().width(), m_action_icon->rect().height() }; 27} 28 29GitFilesView::GitFilesView(GitFileActionCallback callback, NonnullRefPtr<Gfx::Bitmap> action_icon) 30 : m_action_callback(move(callback)) 31 , m_action_icon(action_icon) 32{ 33 set_alternating_row_colors(false); 34} 35 36void GitFilesView::mousedown_event(GUI::MouseEvent& event) 37{ 38 if (event.button() != GUI::MouseButton::Primary) { 39 ListView::mousedown_event(event); 40 return; 41 } 42 43 if (event.x() < action_icon_rect(0).x() || event.x() > action_icon_rect(0).top_right().x()) { 44 ListView::mousedown_event(event); 45 return; 46 } 47 48 size_t item_index = (event.y() + vertical_scrollbar().value()) / item_height(); 49 if (model()->row_count() == 0 || item_index > (size_t)model()->row_count()) { 50 ListView::mousedown_event(event); 51 return; 52 } 53 54 auto data = model()->index(item_index, model_column()).data(); 55 56 VERIFY(data.is_string()); 57 m_action_callback(data.to_deprecated_string()); 58} 59 60};