Преглед изворни кода

LibGUI: Add a timer in ProcessChooser to get processes for every 1000ms

Uma Sankar пре 4 година
родитељ
комит
d5a77de906
2 измењених фајлова са 33 додато и 0 уклоњено
  1. 28 0
      Libraries/LibGUI/ProcessChooser.cpp
  2. 5 0
      Libraries/LibGUI/ProcessChooser.h

+ 28 - 0
Libraries/LibGUI/ProcessChooser.cpp

@@ -91,6 +91,34 @@ ProcessChooser::ProcessChooser(const StringView& window_title, const StringView&
     };
 
     table_view.model()->update();
+
+    m_refresh_timer = add<Core::Timer>();
+
+    m_refresh_timer->start(m_refresh_interval); // Start the timer to update the processes
+    m_refresh_timer->on_timeout = [&table_view] {
+        auto previous_selected_pid = -1; // Store the selection index to not to clear the selection upon update.
+        if (!table_view.selection().is_empty()) {
+            auto pid_as_variant = table_view.model()->data(table_view.selection().first(), GUI::Model::Role::Custom);
+            previous_selected_pid = pid_as_variant.as_i32();
+        }
+
+        table_view.model()->update();
+
+        if (previous_selected_pid == -1) {
+            return;
+        }
+
+        auto model = table_view.model();
+        auto row_count = model->row_count();
+        auto column_index = 1; // Corresponds to PID column in the table_view.
+        for (int row_index = 0; row_index < row_count; ++row_index) {
+            auto cell_index = model->index(row_index, column_index);
+            auto pid_as_variant = model->data(cell_index, GUI::Model::Role::Custom);
+            if (previous_selected_pid == pid_as_variant.as_i32()) {
+                table_view.selection().set(cell_index); // Set only if PIDs are matched.
+            }
+        }
+    };
 }
 
 ProcessChooser::~ProcessChooser()

+ 5 - 0
Libraries/LibGUI/ProcessChooser.h

@@ -27,6 +27,7 @@
 #pragma once
 
 #include <LibGUI/Dialog.h>
+#include <LibCore/Timer.h>
 
 namespace GUI {
 
@@ -46,6 +47,10 @@ private:
     String m_window_title;
     String m_button_label;
     RefPtr<Gfx::Bitmap> m_window_icon;
+
+    bool m_refresh_enabled { true };
+    unsigned m_refresh_interval { 1000 };
+    RefPtr<Core::Timer> m_refresh_timer;
 };
 
 }