RunningProcessesModel.cpp 2.2 KB

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