DirectoryView.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "DirectoryView.h"
  2. #include <LibGUI/GSortingProxyModel.h>
  3. DirectoryView::DirectoryView(GWidget* parent)
  4. : GStackWidget(parent)
  5. , m_model(DirectoryModel::create())
  6. {
  7. set_active_widget(nullptr);
  8. m_item_view = new GItemView(this);
  9. m_item_view->set_model(model());
  10. m_table_view = new GTableView(this);
  11. m_table_view->set_model(GSortingProxyModel::create(m_model.copy_ref()));
  12. m_table_view->model()->set_key_column_and_sort_order(DirectoryModel::Column::Name, GSortOrder::Ascending);
  13. m_item_view->set_model_column(DirectoryModel::Column::Name);
  14. m_item_view->on_model_notification = [this] (const GModelNotification& notification) {
  15. if (notification.type() == GModelNotification::Type::ModelUpdated) {
  16. set_status_message(String::format("%d item%s (%u byte%s)",
  17. model().row_count(),
  18. model().row_count() != 1 ? "s" : "",
  19. model().bytes_in_files(),
  20. model().bytes_in_files() != 1 ? "s" : ""));
  21. if (on_path_change)
  22. on_path_change(model().path());
  23. }
  24. };
  25. m_model->on_thumbnail_progress = [this] (int done, int total) {
  26. if (on_thumbnail_progress)
  27. on_thumbnail_progress(done, total);
  28. };
  29. set_view_mode(ViewMode::Icon);
  30. }
  31. DirectoryView::~DirectoryView()
  32. {
  33. }
  34. void DirectoryView::set_view_mode(ViewMode mode)
  35. {
  36. if (m_view_mode == mode)
  37. return;
  38. m_view_mode = mode;
  39. update();
  40. if (mode == ViewMode::List) {
  41. set_active_widget(m_table_view);
  42. return;
  43. }
  44. if (mode == ViewMode::Icon) {
  45. set_active_widget(m_item_view);
  46. return;
  47. }
  48. ASSERT_NOT_REACHED();
  49. }
  50. void DirectoryView::open(const String& path)
  51. {
  52. model().open(path);
  53. }
  54. void DirectoryView::set_status_message(const String& message)
  55. {
  56. if (on_status_message)
  57. on_status_message(message);
  58. }
  59. void DirectoryView::open_parent_directory()
  60. {
  61. model().open(String::format("%s/..", model().path().characters()));
  62. }
  63. void DirectoryView::refresh()
  64. {
  65. model().update();
  66. }