DirectoryView.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #pragma once
  2. #include <AK/Vector.h>
  3. #include <LibGUI/GDirectoryModel.h>
  4. #include <LibGUI/GItemView.h>
  5. #include <LibGUI/GStackWidget.h>
  6. #include <LibGUI/GTableView.h>
  7. #include <sys/stat.h>
  8. class DirectoryView final : public GStackWidget {
  9. C_OBJECT(DirectoryView)
  10. public:
  11. virtual ~DirectoryView() override;
  12. void open(const StringView& path);
  13. String path() const { return model().path(); }
  14. void open_parent_directory();
  15. void open_previous_directory();
  16. void open_next_directory();
  17. int path_history_size() const { return m_path_history.size(); }
  18. int path_history_position() const { return m_path_history_position; }
  19. void refresh();
  20. Function<void(const StringView&)> on_path_change;
  21. Function<void(GAbstractView&)> on_selection_change;
  22. Function<void(const GAbstractView&, const GModelIndex&, const GContextMenuEvent&)> on_context_menu_request;
  23. Function<void(const StringView&)> on_status_message;
  24. Function<void(int done, int total)> on_thumbnail_progress;
  25. enum ViewMode {
  26. Invalid,
  27. List,
  28. Icon
  29. };
  30. void set_view_mode(ViewMode);
  31. ViewMode view_mode() const { return m_view_mode; }
  32. const GAbstractView& current_view() const
  33. {
  34. switch (m_view_mode) {
  35. case ViewMode::List:
  36. return *m_table_view;
  37. case ViewMode::Icon:
  38. return *m_item_view;
  39. default:
  40. ASSERT_NOT_REACHED();
  41. }
  42. }
  43. template<typename Callback>
  44. void for_each_view_implementation(Callback callback)
  45. {
  46. callback(*m_table_view);
  47. callback(*m_item_view);
  48. }
  49. private:
  50. explicit DirectoryView(GWidget* parent);
  51. GDirectoryModel& model() { return *m_model; }
  52. const GDirectoryModel& model() const { return *m_model; }
  53. void handle_activation(const GModelIndex&);
  54. void set_status_message(const StringView&);
  55. void update_statusbar();
  56. ViewMode m_view_mode { Invalid };
  57. NonnullRefPtr<GDirectoryModel> m_model;
  58. int m_path_history_position { 0 };
  59. Vector<String> m_path_history;
  60. void add_path_to_history(const StringView& path);
  61. ObjectPtr<GTableView> m_table_view;
  62. ObjectPtr<GItemView> m_item_view;
  63. };