add option to show processes as list in GUI
Stefan Schuermans

Stefan Schuermans commited on 2020-11-08 14:28:26
Showing 2 changed files, with 59 additions and 6 deletions.


This is useful when sorting, e.g., for memory.
... ...
@@ -60,6 +60,39 @@
60 60
         <property name="visible">True</property>
61 61
         <property name="can_focus">False</property>
62 62
         <property name="orientation">vertical</property>
63
+        <child>
64
+          <object class="GtkButtonBox" id="ButtonBox">
65
+            <property name="visible">True</property>
66
+            <property name="can_focus">False</property>
67
+            <property name="layout_style">start</property>
68
+            <child>
69
+              <object class="GtkToggleButton" id="TreeToggle">
70
+                <property name="label" translatable="yes">Tree</property>
71
+                <property name="visible">True</property>
72
+                <property name="can_focus">True</property>
73
+                <property name="receives_default">True</property>
74
+                <property name="active">True</property>
75
+                <signal name="toggled" handler="onTreeToggled" swapped="no"/>
76
+              </object>
77
+              <packing>
78
+                <property name="expand">True</property>
79
+                <property name="fill">True</property>
80
+                <property name="position">0</property>
81
+              </packing>
82
+            </child>
83
+            <child>
84
+              <placeholder/>
85
+            </child>
86
+            <child>
87
+              <placeholder/>
88
+            </child>
89
+          </object>
90
+          <packing>
91
+            <property name="expand">False</property>
92
+            <property name="fill">True</property>
93
+            <property name="position">0</property>
94
+          </packing>
95
+        </child>
63 96
         <child>
64 97
           <object class="GtkBox" id="TopHBox">
65 98
             <property name="visible">True</property>
... ...
@@ -297,7 +330,7 @@
297 330
           <packing>
298 331
             <property name="expand">True</property>
299 332
             <property name="fill">True</property>
300
-            <property name="position">0</property>
333
+            <property name="position">1</property>
301 334
           </packing>
302 335
         </child>
303 336
       </object>
... ...
@@ -175,15 +175,18 @@ class UptGui:
175 175
         self.builder = Gtk.Builder()
176 176
         self.builder.add_from_string(uproctrace.gui_glade.DATA)
177 177
         self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
178
+        self.show_processes_as_tree = True
178 179
         self.wid_details_tree = self.builder.get_object('DetailsTree')
179 180
         self.wid_details_view = self.builder.get_object('DetailsView')
180 181
         self.wid_processes_tree = self.builder.get_object('ProcessesTree')
181 182
         self.wid_processes_view = self.builder.get_object('ProcessesView')
183
+        self.wid_tree_toggle = self.builder.get_object('TreeToggle')
182 184
         handlers = {
183 185
             'onDestroy': self.onDestroy,
184 186
             'onDetailsRowActivated': self.onDetailsRowActivated,
185 187
             'onProcessesCursorChanged': self.onProcessesCursorChanged,
186
-            'onProcessesRowActivated': self.onProcessesRowActivated
188
+            'onProcessesRowActivated': self.onProcessesRowActivated,
189
+            'onTreeToggled': self.onTreeToggled
187 190
         }
188 191
         self.builder.connect_signals(handlers)
189 192
         # open trace file
... ...
@@ -329,15 +332,31 @@ class UptGui:
329 332
         self.clipboard.set_text(string, -1)
330 333
         self.clipboard.store()
331 334
 
335
+    def onTreeToggled(self, _widget):
336
+        """
337
+        Tree button toggled: switch between tree and list.
338
+        """
339
+        # get new state
340
+        self.show_processes_as_tree = self.wid_tree_toggle.get_active()
341
+        # re-populate processes view
342
+        self.populateProcesses()
343
+
332 344
     def openTrace(self, proto_filename: str):
333 345
         """
334 346
         Open a trace file.
335 347
         """
336
-        # forget old processes
337
-        self.wid_processes_tree.clear()
338
-        # lead new data
348
+        # load new data
339 349
         with open(proto_filename, 'rb') as proto_file:
340 350
             self.processes = uproctrace.processes.Processes(proto_file)
351
+        # populate processes view
352
+        self.populateProcesses()
353
+
354
+    def populateProcesses(self):
355
+        """
356
+        Populate processes view.
357
+        """
358
+        # forget old processes
359
+        self.wid_processes_tree.clear()
341 360
         # add processes to processes tree store
342 361
         to_be_output = [(self.processes.toplevel, None)]
343 362
         while to_be_output:
... ...
@@ -347,7 +366,8 @@ class UptGui:
347 366
                 continue
348 367
             proc = procs[0]
349 368
             del procs[0]
350
-            proc_iter = self.wid_processes_tree.append(parent_iter)
369
+            proc_iter = self.wid_processes_tree.append(
370
+                parent_iter if self.show_processes_as_tree else None)
351 371
             self.fillProcessesEntry(proc_iter, proc)
352 372
             to_be_output.append((proc.children, proc_iter))
353 373
         # show all processes
354 374