RunningProcessesModel.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #include <LibCore/ProcessStatisticsReader.h>
  8. #include <LibGUI/FileIconProvider.h>
  9. #include <LibGUI/RunningProcessesModel.h>
  10. namespace GUI {
  11. NonnullRefPtr<RunningProcessesModel> RunningProcessesModel::create()
  12. {
  13. return adopt_ref(*new RunningProcessesModel);
  14. }
  15. void RunningProcessesModel::update()
  16. {
  17. m_processes.clear();
  18. auto all_processes = Core::ProcessStatisticsReader::get_all();
  19. if (all_processes.has_value()) {
  20. for (auto& it : all_processes.value().processes) {
  21. Process process;
  22. process.pid = it.pid;
  23. process.uid = it.uid;
  24. process.icon = FileIconProvider::icon_for_executable(it.executable).bitmap_for_size(16);
  25. process.name = it.name;
  26. m_processes.append(move(process));
  27. }
  28. }
  29. did_update();
  30. }
  31. int RunningProcessesModel::row_count(const GUI::ModelIndex&) const
  32. {
  33. return m_processes.size();
  34. }
  35. int RunningProcessesModel::column_count(const GUI::ModelIndex&) const
  36. {
  37. return Column::__Count;
  38. }
  39. String RunningProcessesModel::column_name(int column_index) const
  40. {
  41. switch (column_index) {
  42. case Column::Icon:
  43. return {};
  44. case Column::PID:
  45. return "PID";
  46. case Column::UID:
  47. return "UID";
  48. case Column::Name:
  49. return "Name";
  50. }
  51. VERIFY_NOT_REACHED();
  52. }
  53. GUI::Variant RunningProcessesModel::data(const GUI::ModelIndex& index, GUI::ModelRole role) const
  54. {
  55. auto& process = m_processes[index.row()];
  56. if (role == ModelRole::Custom) {
  57. return process.pid;
  58. }
  59. if (role == ModelRole::Display) {
  60. switch (index.column()) {
  61. case Column::Icon:
  62. if (!process.icon)
  63. return GUI::Icon();
  64. return GUI::Icon(*process.icon);
  65. case Column::PID:
  66. return process.pid;
  67. case Column::UID:
  68. return process.uid;
  69. case Column::Name:
  70. return process.name;
  71. }
  72. VERIFY_NOT_REACHED();
  73. }
  74. return {};
  75. }
  76. }