#FEATURE by exept
authorClaus Gittinger <cg@exept.de>
Wed, 11 Sep 2019 19:39:28 +0200
changeset 19164 188714f71bdf
parent 19163 d15305185147
child 19165 cf7625af07f3
#FEATURE by exept class: OSProcessMonitor class definition added: #filterHolderChanged #filterLiveProcessesOnlyHolder changed: #updateList class: OSProcessMonitor class added: #filterMenu changed: #mainMenu
OSProcessMonitor.st
--- 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)"