Files
Gitree/src/managers/user_data.h

57 lines
2.0 KiB
C++

#pragma once
#include <array>
#include <filesystem>
#include <string>
#include <vector>
class UserData
{
public:
UserData();
~UserData();
[[nodiscard]] const std::filesystem::path &directory() const { return directory_; }
[[nodiscard]] const std::string &imguiIniPath() const { return imgui_ini_path_; }
[[nodiscard]] const std::vector<std::string> &recentlyClosed() const { return recently_closed_; }
[[nodiscard]] const std::vector<std::string> &openRepositories() const { return open_repositories_; }
[[nodiscard]] size_t activeRepository() const { return active_repository_; }
[[nodiscard]] float sidebarWidth() const { return sidebar_width_; }
[[nodiscard]] float detailsWidth() const { return details_width_; }
[[nodiscard]] float sidebarSectionHeight(size_t index) const { return sidebar_section_heights_.at(index); }
[[nodiscard]] int pullMode() const { return pull_mode_; }
[[nodiscard]] int zoomPercent() const { return zoom_percent_; }
void setSidebarWidth(float width) { sidebar_width_ = width; }
void setDetailsWidth(float width) { details_width_ = width; }
void setSidebarSectionHeight(size_t index, float height) { sidebar_section_heights_.at(index) = height; }
void setPullMode(int mode)
{
pull_mode_ = mode;
save();
}
void setZoomPercent(int percent)
{
zoom_percent_ = percent;
save();
}
void addRecentlyClosed(const std::string &path);
std::string takeRecentlyClosed();
void setRepositorySession(std::vector<std::string> paths, size_t active_repository);
void save() const;
private:
void load();
std::filesystem::path directory_;
std::string imgui_ini_path_;
std::vector<std::string> recently_closed_;
std::vector<std::string> open_repositories_;
size_t active_repository_ = 0;
float sidebar_width_ = 230.0f;
float details_width_ = 368.0f;
std::array<float, 4> sidebar_section_heights_ = {110.0f, 220.0f, 90.0f, 150.0f};
int pull_mode_ = 1;
int zoom_percent_ = 100;
};