RunningProcessesModel.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. auto all_processes = Core::ProcessStatisticsReader::get_all();
  24. if (all_processes.has_value()) {
  25. for (auto& it : all_processes.value().processes) {
  26. Process process;
  27. process.pid = it.pid;
  28. process.uid = it.uid;
  29. process.icon = FileIconProvider::icon_for_executable(it.executable).bitmap_for_size(16);
  30. process.name = it.name;
  31. m_processes.append(move(process));
  32. }
  33. }
  34. did_update();
  35. }
  36. int RunningProcessesModel::row_count(const GUI::ModelIndex&) const
  37. {
  38. return m_processes.size();
  39. }
  40. int RunningProcessesModel::column_count(const GUI::ModelIndex&) const
  41. {
  42. return Column::__Count;
  43. }
  44. String RunningProcessesModel::column_name(int column_index) const
  45. {
  46. switch (column_index) {
  47. case Column::Icon:
  48. return {};
  49. case Column::PID:
  50. return "PID";
  51. case Column::UID:
  52. return "UID";
  53. case Column::Name:
  54. return "Name";
  55. }
  56. VERIFY_NOT_REACHED();
  57. }
  58. GUI::Variant RunningProcessesModel::data(const GUI::ModelIndex& index, GUI::ModelRole role) const
  59. {
  60. auto& process = m_processes[index.row()];
  61. if (role == ModelRole::Custom) {
  62. return process.pid;
  63. }
  64. if (role == ModelRole::Display) {
  65. switch (index.column()) {
  66. case Column::Icon:
  67. if (!process.icon)
  68. return GUI::Icon();
  69. return GUI::Icon(*process.icon);
  70. case Column::PID:
  71. return process.pid;
  72. case Column::UID:
  73. return process.uid;
  74. case Column::Name:
  75. return process.name;
  76. }
  77. VERIFY_NOT_REACHED();
  78. }
  79. return {};
  80. }
  81. }