OSProcessMonitor.st
changeset 19164 188714f71bdf
parent 19156 822676731f6d
child 19177 7e9b8b91cc55
--- a/OSProcessMonitor.st	Wed Sep 11 17:12:20 2019 +0200
+++ b/OSProcessMonitor.st	Wed Sep 11 19:39:28 2019 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2019 by Claus Gittinger
               All Rights Reserved
@@ -14,7 +16,7 @@
 "{ NameSpace: Smalltalk }"
 
 SystemStatusMonitor subclass:#OSProcessMonitor
-	instanceVariableNames:'processes showTime'
+	instanceVariableNames:'processes showTime filterLiveProcessesOnlyHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Monitors-ST/X'
@@ -66,6 +68,34 @@
 
 !OSProcessMonitor class methodsFor:'menu specs'!
 
+filterMenu
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+
+    "
+     MenuEditor new openOnClass:ExternalStreamMonitor andSelector:#filterMenu
+     (Menu new fromLiteralArrayEncoding:(ExternalStreamMonitor filterMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Live Processes Only'
+            indication: filterLiveProcessesOnlyHolder
+          )
+         )
+        nil
+        nil
+      )
+!
+
 mainMenu
     "This resource specification was automatically generated
      by the MenuEditor of ST/X."
@@ -91,6 +121,10 @@
           label: 'View'
           submenuChannel: viewMenu
        ) 
+         (MenuItem
+            label: 'Filter'
+            submenuChannel: filterMenu
+          )
        (MenuItem
           label: 'Operations'
           submenuChannel: operationsMenu
@@ -137,6 +171,16 @@
       )
 ! !
 
+!OSProcessMonitor methodsFor:'aspects'!
+
+filterLiveProcessesOnlyHolder
+    filterLiveProcessesOnlyHolder isNil ifTrue:[
+        filterLiveProcessesOnlyHolder := true asValue.
+        filterLiveProcessesOnlyHolder onChangeSend:#filterHolderChanged to:self.
+    ].    
+    ^ filterLiveProcessesOnlyHolder
+! !
+
 !OSProcessMonitor methodsFor:'drawing'!
 
 titleLine
@@ -158,6 +202,9 @@
 
     shown ifTrue:[
         newList := OSProcess allSubInstances select:[:p | p pid notNil].
+        self filterLiveProcessesOnlyHolder value ifTrue:[
+            newList := newList select:[:p | p isAlive].
+        ].
         newList sortBySelector:#pid.
 
         newList ~= processes ifTrue:[
@@ -345,6 +392,10 @@
     "Modified (comment): / 07-04-2017 / 14:28:01 / cg"
 !
 
+filterHolderChanged
+    self sensor pushUserEvent:#updateList for:self
+!
+
 inspectProcess
     "open an inspector on the selected process(es)"