/* * Copyright (c) 2024, Bastiaan van der Plaat * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "MapWidget.h" #include namespace Maps { struct Favorite { String name; MapWidget::LatLng latlng; int zoom; bool operator==(Favorite const& other) const = default; }; class FavoritesModel final : public GUI::Model { public: static NonnullRefPtr create() { return adopt_ref(*new FavoritesModel()); } virtual int row_count(GUI::ModelIndex const& index = GUI::ModelIndex()) const override { if (!index.is_valid()) return m_favorites.size(); return 0; } virtual int column_count(GUI::ModelIndex const&) const override { return 1; } virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role = GUI::ModelRole::Display) const override; Vector const& favorites() const { return m_favorites; } Optional get_favorite(GUI::ModelIndex const&); void add_favorite(Favorite); void update_favorite(GUI::ModelIndex const&, Favorite); void delete_favorite(Favorite const&); ErrorOr save_to_file(Core::File&) const; ErrorOr load_from_file(Core::File&); private: Vector m_favorites; }; }