Serenity Operating System
at master 89 lines 2.2 kB view raw
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 8#include <LibCore/ProcessStatisticsReader.h> 9#include <LibGUI/FileIconProvider.h> 10#include <LibGUI/RunningProcessesModel.h> 11 12namespace GUI { 13 14NonnullRefPtr<RunningProcessesModel> RunningProcessesModel::create() 15{ 16 return adopt_ref(*new RunningProcessesModel); 17} 18 19void RunningProcessesModel::update() 20{ 21 m_processes.clear(); 22 23 auto all_processes = Core::ProcessStatisticsReader::get_all(); 24 if (!all_processes.is_error()) { 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 35 did_update(); 36} 37 38int RunningProcessesModel::row_count(const GUI::ModelIndex&) const 39{ 40 return m_processes.size(); 41} 42 43int RunningProcessesModel::column_count(const GUI::ModelIndex&) const 44{ 45 return Column::__Count; 46} 47 48DeprecatedString RunningProcessesModel::column_name(int column_index) const 49{ 50 switch (column_index) { 51 case Column::Icon: 52 return {}; 53 case Column::PID: 54 return "PID"; 55 case Column::UID: 56 return "UID"; 57 case Column::Name: 58 return "Name"; 59 } 60 VERIFY_NOT_REACHED(); 61} 62 63GUI::Variant RunningProcessesModel::data(const GUI::ModelIndex& index, GUI::ModelRole role) const 64{ 65 auto& process = m_processes[index.row()]; 66 67 if (role == ModelRole::Custom) { 68 return process.pid; 69 } 70 71 if (role == ModelRole::Display) { 72 switch (index.column()) { 73 case Column::Icon: 74 if (!process.icon) 75 return GUI::Icon(); 76 return GUI::Icon(*process.icon); 77 case Column::PID: 78 return process.pid; 79 case Column::UID: 80 return process.uid; 81 case Column::Name: 82 return process.name; 83 } 84 VERIFY_NOT_REACHED(); 85 } 86 return {}; 87} 88 89}