diff --git a/src/DirectoryView.cpp b/src/DirectoryView.cpp index cfd9e1c..fe1b904 100644 --- a/src/DirectoryView.cpp +++ b/src/DirectoryView.cpp @@ -1,6 +1,7 @@ #include "DirectoryView.hpp" #include "src/Dirs.hpp" #include "src/Forward.hpp" +#include DirectoryView::~DirectoryView() {} @@ -14,12 +15,19 @@ void DirectoryView::set_current_path(std::filesystem::path path) { window()->queue_microtask([this]() { target()->clear_children(); for (const auto &entry : std::filesystem::directory_iterator(m_current_path)) { - auto button = m_target->add(entry.path().filename(), this); + auto button = m_target->add( + entry.path().filename(), + entry.is_directory() ? FileButton::ButtonType::Directory : FileButton::ButtonType::File, + this + ); } }); } void DirectoryView::navigate(std::string path) { + if (!std::filesystem::is_directory(path)) + return; + set_current_path(path); m_checkpoint_stack.push(m_current_path); } diff --git a/src/FileButton.cpp b/src/FileButton.cpp index 6743c98..b111686 100644 --- a/src/FileButton.cpp +++ b/src/FileButton.cpp @@ -22,7 +22,11 @@ void FileButton::on_init() { layout->slot_percent(100); // icon layout->slot_pixel(24); // name (text) - add("/usr/share/icons/Papirus/64x64/places/folder-adwaita.svg"); + if (m_button_type == ButtonType::Directory) { + add("/usr/share/icons/Papirus/64x64/places/folder-adwaita.svg"); + } else if (m_button_type == ButtonType::File) { + add("/usr/share/icons/Papirus/64x64/mimetypes/text-x-generic.svg"); + } auto label = add(m_name, Raven::PaintTextAlign::Center); label->rect().set_max_width(rect().width()); label->rect().set_max_height(24); diff --git a/src/FileButton.hpp b/src/FileButton.hpp index 5fb42dd..cf43842 100644 --- a/src/FileButton.hpp +++ b/src/FileButton.hpp @@ -12,10 +12,16 @@ class FileButton : public Raven::Widget { public: static Raven::GenericStyle style; + + enum class ButtonType { + Directory, + File + }; public: - FileButton(std::string name, DirectoryView* directory_view) + FileButton(std::string name, ButtonType button_type, DirectoryView* directory_view) : Raven::Widget() , m_directory_view(directory_view) + , m_button_type(button_type) , m_name(name) {} std::string &name() { return m_name; } @@ -24,5 +30,6 @@ protected: void on_activation_update(Raven::ActivationUpdateEvent &event); private: DirectoryView* m_directory_view; + ButtonType m_button_type; std::string m_name; };