ProcessPickerWidget.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) 2021, Gunnar Beutner <gunnar@beutner.name>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "ProcessPickerWidget.h"
  7. #include "Profile.h"
  8. #include <LibGUI/BoxLayout.h>
  9. #include <LibGUI/ItemListModel.h>
  10. #include <LibGUI/Label.h>
  11. ProcessPickerWidget::ProcessPickerWidget(Profile& profile)
  12. : m_profile(profile)
  13. {
  14. set_layout<GUI::HorizontalBoxLayout>();
  15. set_fixed_height(30);
  16. set_frame_shape(Gfx::FrameShape::NoFrame);
  17. auto& label = add<GUI::Label>("Process:");
  18. label.set_fixed_width(50);
  19. label.set_text_alignment(Gfx::TextAlignment::CenterRight);
  20. m_process_combo = add<GUI::ComboBox>();
  21. m_process_combo->set_only_allow_values_from_model(true);
  22. m_processes.append("All processes");
  23. for (auto& process : m_profile.processes())
  24. m_processes.append(String::formatted("{}: {}", process.pid, process.executable));
  25. m_process_combo->set_model(*GUI::ItemListModel<String>::create(m_processes));
  26. m_process_combo->set_selected_index(0);
  27. m_process_combo->on_change = [this](auto&, const GUI::ModelIndex& index) {
  28. if (index.row() == 0) {
  29. m_profile.clear_process_filter();
  30. } else {
  31. auto& process = m_profile.processes()[index.row() - 1];
  32. auto end_valid = process.end_valid == 0 ? m_profile.last_timestamp() : process.end_valid;
  33. m_profile.set_process_filter(process.pid, process.start_valid, end_valid);
  34. }
  35. };
  36. }
  37. ProcessPickerWidget::~ProcessPickerWidget()
  38. {
  39. }