From d827d8627743ada3db0c33fc01fc33dded4d5c37 Mon Sep 17 00:00:00 2001 From: wj32 Date: Sat, 14 Mar 2009 10:39:31 +0000 Subject: [PATCH] * hide hidden columns in the Copy menu * added I/O columns git-svn-id: svn://svn.code.sf.net/p/processhacker/code@881 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- .../Components/ProcessTree/ProcessNode.cs | 72 ++++++++++++++++- .../ProcessTree/ProcessTree.Designer.cs | 78 +++++++++++++++++++ .../ProcessTree/ProcessTreeModel.cs | 6 ++ trunk/ProcessHacker/GenericViewMenu.cs | 3 + 4 files changed, 158 insertions(+), 1 deletion(-) diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs index fe9ebc3b7..5505134dd 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs @@ -334,7 +334,7 @@ namespace ProcessHacker return number.ToString(); } } - } + } public int UserHandlesNumber { @@ -370,6 +370,76 @@ namespace ProcessHacker } } + public long IoTotalNumber + { + get + { + if (_pitem.LongHistoryManager[ProcessStats.IoReadOther].Count == 0) + return 0; + else + return _pitem.LongHistoryManager[ProcessStats.IoReadOther][0] + + _pitem.LongHistoryManager[ProcessStats.IoWrite][0] * 1000 / + Properties.Settings.Default.RefreshInterval; + } + } + + public string IoTotal + { + get + { + if (this.IoTotalNumber == 0) + return ""; + else + return Misc.GetNiceSizeName(this.IoTotalNumber) + "/s"; + } + } + + public long IoReadOtherNumber + { + get + { + if (_pitem.LongHistoryManager[ProcessStats.IoReadOther].Count == 0) + return 0; + else + return _pitem.LongHistoryManager[ProcessStats.IoReadOther][0] * 1000 / + Properties.Settings.Default.RefreshInterval; + } + } + + public string IoReadOther + { + get + { + if (this.IoReadOtherNumber == 0) + return ""; + else + return Misc.GetNiceSizeName(this.IoReadOtherNumber) + "/s"; + } + } + + public long IoWriteNumber + { + get + { + if (_pitem.LongHistoryManager[ProcessStats.IoReadOther].Count == 0) + return 0; + else + return _pitem.LongHistoryManager[ProcessStats.IoWrite][0] * 1000 / + Properties.Settings.Default.RefreshInterval; + } + } + + public string IoWrite + { + get + { + if (this.IoWriteNumber == 0) + return ""; + else + return Misc.GetNiceSizeName(this.IoWriteNumber) + "/s"; + } + } + public Bitmap Icon { get { return _icon; } diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs index 724ed572b..66d59c30a 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs @@ -74,6 +74,12 @@ this.nodeHandles = new Aga.Controls.Tree.NodeControls.NodeTextBox(); this.nodeGdiHandles = new Aga.Controls.Tree.NodeControls.NodeTextBox(); this.nodeUserHandles = new Aga.Controls.Tree.NodeControls.NodeTextBox(); + this.columnIoTotal = new Aga.Controls.Tree.TreeColumn(); + this.columnIoReadOther = new Aga.Controls.Tree.TreeColumn(); + this.columnIoWrite = new Aga.Controls.Tree.TreeColumn(); + this.nodeIoTotal = new Aga.Controls.Tree.NodeControls.NodeTextBox(); + this.nodeIoReadOther = new Aga.Controls.Tree.NodeControls.NodeTextBox(); + this.nodeIoWrite = new Aga.Controls.Tree.NodeControls.NodeTextBox(); this.SuspendLayout(); // // treeProcesses @@ -102,6 +108,9 @@ this.treeProcesses.Columns.Add(this.columnHandles); this.treeProcesses.Columns.Add(this.columnGdiHandles); this.treeProcesses.Columns.Add(this.columnUserHandles); + this.treeProcesses.Columns.Add(this.columnIoTotal); + this.treeProcesses.Columns.Add(this.columnIoReadOther); + this.treeProcesses.Columns.Add(this.columnIoWrite); this.treeProcesses.DefaultToolTipProvider = null; this.treeProcesses.DisplayDraggingNodes = true; this.treeProcesses.Dock = System.Windows.Forms.DockStyle.Fill; @@ -135,6 +144,9 @@ this.treeProcesses.NodeControls.Add(this.nodeHandles); this.treeProcesses.NodeControls.Add(this.nodeGdiHandles); this.treeProcesses.NodeControls.Add(this.nodeUserHandles); + this.treeProcesses.NodeControls.Add(this.nodeIoTotal); + this.treeProcesses.NodeControls.Add(this.nodeIoReadOther); + this.treeProcesses.NodeControls.Add(this.nodeIoWrite); this.treeProcesses.SelectedNode = null; this.treeProcesses.SelectionMode = Aga.Controls.Tree.TreeSelectionMode.Multi; this.treeProcesses.ShowNodeToolTips = true; @@ -568,6 +580,66 @@ this.nodeUserHandles.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.nodeUserHandles.Trimming = System.Drawing.StringTrimming.EllipsisCharacter; // + // columnIoTotal + // + this.columnIoTotal.Header = "I/O Total"; + this.columnIoTotal.IsVisible = false; + this.columnIoTotal.Sortable = true; + this.columnIoTotal.SortOrder = System.Windows.Forms.SortOrder.None; + this.columnIoTotal.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.columnIoTotal.TooltipText = null; + this.columnIoTotal.Width = 60; + // + // columnIoReadOther + // + this.columnIoReadOther.Header = "I/O R+O"; + this.columnIoReadOther.IsVisible = false; + this.columnIoReadOther.Sortable = true; + this.columnIoReadOther.SortOrder = System.Windows.Forms.SortOrder.None; + this.columnIoReadOther.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.columnIoReadOther.TooltipText = null; + this.columnIoReadOther.Width = 60; + // + // columnIoWrite + // + this.columnIoWrite.Header = "I/O W"; + this.columnIoWrite.IsVisible = false; + this.columnIoWrite.Sortable = true; + this.columnIoWrite.SortOrder = System.Windows.Forms.SortOrder.None; + this.columnIoWrite.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.columnIoWrite.TooltipText = null; + this.columnIoWrite.Width = 60; + // + // nodeIoTotal + // + this.nodeIoTotal.DataPropertyName = "IoTotal"; + this.nodeIoTotal.EditEnabled = false; + this.nodeIoTotal.IncrementalSearchEnabled = true; + this.nodeIoTotal.LeftMargin = 3; + this.nodeIoTotal.ParentColumn = this.columnIoTotal; + this.nodeIoTotal.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.nodeIoTotal.Trimming = System.Drawing.StringTrimming.EllipsisCharacter; + // + // nodeIoReadOther + // + this.nodeIoReadOther.DataPropertyName = "IoReadOther"; + this.nodeIoReadOther.EditEnabled = false; + this.nodeIoReadOther.IncrementalSearchEnabled = true; + this.nodeIoReadOther.LeftMargin = 3; + this.nodeIoReadOther.ParentColumn = this.columnIoReadOther; + this.nodeIoReadOther.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.nodeIoReadOther.Trimming = System.Drawing.StringTrimming.EllipsisCharacter; + // + // nodeIoWrite + // + this.nodeIoWrite.DataPropertyName = "IoWrite"; + this.nodeIoWrite.EditEnabled = false; + this.nodeIoWrite.IncrementalSearchEnabled = true; + this.nodeIoWrite.LeftMargin = 3; + this.nodeIoWrite.ParentColumn = this.columnIoWrite; + this.nodeIoWrite.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.nodeIoWrite.Trimming = System.Drawing.StringTrimming.EllipsisCharacter; + // // ProcessTree // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -628,5 +700,11 @@ private Aga.Controls.Tree.NodeControls.NodeTextBox nodePagefileUsage; private Aga.Controls.Tree.NodeControls.NodeTextBox nodePeakPagefileUsage; private Aga.Controls.Tree.NodeControls.NodeTextBox nodePageFaults; + private Aga.Controls.Tree.TreeColumn columnIoTotal; + private Aga.Controls.Tree.TreeColumn columnIoReadOther; + private Aga.Controls.Tree.TreeColumn columnIoWrite; + private Aga.Controls.Tree.NodeControls.NodeTextBox nodeIoTotal; + private Aga.Controls.Tree.NodeControls.NodeTextBox nodeIoReadOther; + private Aga.Controls.Tree.NodeControls.NodeTextBox nodeIoWrite; } } diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs index f0bceac6e..34defd14b 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs @@ -265,6 +265,12 @@ namespace ProcessHacker return ModifySort(n1.GdiHandlesNumber.CompareTo(n2.GdiHandlesNumber), sortO); else if (sortC == "user handles") return ModifySort(n1.UserHandlesNumber.CompareTo(n2.UserHandlesNumber), sortO); + else if (sortC == "i/o total") + return ModifySort(n1.IoTotalNumber.CompareTo(n2.IoTotalNumber), sortO); + else if (sortC == "i/o ro") + return ModifySort(n1.IoReadOtherNumber.CompareTo(n2.IoReadOtherNumber), sortO); + else if (sortC == "i/o w") + return ModifySort(n1.IoWriteNumber.CompareTo(n2.IoWriteNumber), sortO); else return 0; })); diff --git a/trunk/ProcessHacker/GenericViewMenu.cs b/trunk/ProcessHacker/GenericViewMenu.cs index 2c71642c5..c97734352 100644 --- a/trunk/ProcessHacker/GenericViewMenu.cs +++ b/trunk/ProcessHacker/GenericViewMenu.cs @@ -155,6 +155,9 @@ namespace ProcessHacker foreach (TreeColumn c in tv.Columns) { + if (!c.IsVisible) + continue; + MenuItem item = new MenuItem("Copy \"" + c.Header + "\""); item.Tag = new object[] { c.Index, tv };