/*
 * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <LibGUI/ListView.h>
#include <LibGfx/Bitmap.h>

namespace HackStudio {

// A "GitFileAction" is either the staging or the unstaging of a file.
using GitFileActionCallback = Function<void(String const& file)>;

class GitFilesView : public GUI::ListView {
    C_OBJECT(GitFilesView)
public:
    virtual ~GitFilesView() override;

protected:
    GitFilesView(GitFileActionCallback, NonnullRefPtr<Gfx::Bitmap> action_icon);

private:
    virtual void paint_list_item(GUI::Painter& painter, int row_index, int painted_item_index) override;

    virtual void mousedown_event(GUI::MouseEvent&) override;
    virtual Gfx::IntRect action_icon_rect(size_t painted_item_index);

    GitFileActionCallback m_action_callback;
    NonnullRefPtr<Gfx::Bitmap> m_action_icon;
};

}
