diff --git a/Resources/Wrap.bmp b/Resources/Wrap.bmp new file mode 100644 index 0000000..8316c77 Binary files /dev/null and b/Resources/Wrap.bmp differ diff --git a/X2Log.Observer.MonitorForm.dfm b/X2Log.Observer.MonitorForm.dfm index b13b701..04d5ab0 100644 --- a/X2Log.Observer.MonitorForm.dfm +++ b/X2Log.Observer.MonitorForm.dfm @@ -41,7 +41,7 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm Width = 382 Height = 22 AutoSize = True - ButtonWidth = 52 + ButtonWidth = 80 Images = ilsLog List = True ShowCaptions = True @@ -59,6 +59,18 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm Action = actSaveDetails AutoSize = True end + object tbDetailsSep1: TToolButton + Left = 111 + Top = 0 + Width = 8 + ImageIndex = 7 + Style = tbsSeparator + end + object tbWordWrap: TToolButton + Left = 119 + Top = 0 + Action = actWordWrap + end end object pnlBorder: TPanel Left = 0 @@ -69,7 +81,7 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm BevelKind = bkFlat BevelOuter = bvNone TabOrder = 1 - object HeaderControl1: THeaderControl + object hcDetails: THeaderControl Left = 0 Top = 0 Width = 378 @@ -254,7 +266,7 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm Left = 448 Top = 48 Bitmap = { - 494C010109004000BC0010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 494C01010A004000D00010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000003000000001002000000000000030 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -266,113 +278,113 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B5845800D074 1100CD6E0900D1720900C98546000000000000000000C6824500CF720D00CD6E - 0900D1720900B886590000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0900D1720900B886590000000000000000000000000000000000C49C8800C996 + 7E00C5927C00C18E7A00BD8A7800B9867600B5827400B17E7200AD7A7000A976 + 6E00A5726C00A67D790000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000CD711100FFAD 1400FF9F0100FFA30000E27A00000000000000000000E07E0C00FFAA0F00FF9F - 0100FFA30000D172090000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0100FFA30000D1720900000000000000000000000000C79E8900EEDACE00F9F9 + F900F9F9F900FAFAFA00FCFCFC00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00DBC7C400A67D7900000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000C9660600FF9F 0100FD960000FF9F0100DD7700000000000000000000D6710100FD960000FD96 - 0000FF9F0100CF6D060000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000FF9F0100CF6D0600000000000000000000000000D29F8200FFFFFF009990 + 870099948E00999794009999990099999900FFFFFF0099999900999999009999 + 990099999900FFFFFF00A5726C00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000C35F0600F48E 0000F48E0000FD960000DD7700000000000000000000D06A0000F6900000F48E - 0000FF9F0100C966060000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000FF9F0100C9660600000000000000000000000000D7A48400FFFFFF00FFF0 + E100FFF6EC00FFFBF700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A9766E00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000BE5C0600EE88 0000EC860000F48E0000D06A00000000000000000000C9660600EC860000EC86 - 0000F48E0000C966060000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000F48E0000C9660600000000000000000000000000DCA98700FFFFFF009990 + 870099948E009997940099999900999999009999990099999900999999009999 + 990099999900FFFFFF00AE7B7000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000BE5C0600E27A 0000E27A0000EE880000CF6D06000000000000000000C35F0600E27A0000EC86 - 0000EC860000C35F060000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000EC860000C35F0600000000000000000000000000E1AE8A00FFFFFF00FFEE + DD00FFF4E800FFF9F300FFFDFB00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00B3807300000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B14F0600DE78 0000DE780000E27A0000C96606000000000000000000C35F0600DD770000DD77 - 0000E27A0000BE5C060000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000E27A0000BE5C0600000000000000000000000000E5B28C00FFFFFF00998E + 83009991890099948E0099979400999999009999990099999900FFFFFF009999 + 990099999900FFFFFF00B7847500000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000B14F0600D06A 0000DD770000DD770000C35F06000000000000000000BA540100D06A0000DD77 - 0000DD770000BA54010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0000DD770000BA540100000000000000000000000000E9B68E00FFFFFF00FFEB + D600FFEEDD00FFF4E800FFF7F000FFFBF700FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFEFE00BA877700000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000AD4C0C00D172 0900C9660600D06A0000BA5401000000000000000000B6540A00D06F0C00C966 - 0600D06A0000BA54010000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 0600D06A0000BA540100000000000000000000000000EDBA9000FFFFFF00998B + 7C00998D800099908700FFF4E800999490009997940099989700999999009999 + 990099999900FCFCFC00BE8B7900000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000AD4C0C00D382 3700CD721D00D0741100BE5C06000000000000000000B3561500D07F3300CD72 - 1D00D0741100B14F060000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 1D00D0741100B14F0600000000000000000000000000F1BE9200FFFFFF00FFE4 + C700FFE9D200FFEDDA00FFF0E100FFF4E800FFF6EC00FFF9F300FFFBF700FFFB + F700FFFBF700FAFAFA00C28F7B00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000A5491300D795 5E00D0854400D68B4300B75A16000000000000000000B1592000D7955E00D382 - 3700D68B4300AD4C0C0000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 3700D68B4300AD4C0C00000000000000000000000000F5C29400FFFFFF009986 + 730099897A00998C7E00998D8000FFEEDD009991890099928B0099948E009994 + 8E0099948E00F9F9F900C6937D00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000A4491900DDAD 8700D59A6B00D9A06D00B15920000000000000000000B15D2A00DDAD8700D59A - 6B00D9A06D00A94D150000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 6B00D9A06D00A94D1500000000000000000000000000F9C69600FFFFFF00FFDC + B800FFE0C000FFE4C700FFE7CE00FFEBD600FFEDDA00FFEEDD00FFF0E100FFF0 + E100FFF0E100F9F9F900C9967E00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000A7522700EED8 C600E6C4A800ECCCAF00B96939000000000000000000B7673A00EED6C100E6C4 - A800ECCCAF00AB57280000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + A800ECCCAF00AB572800000000000000000000000000E4BC9800FDE8D500FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00EEDACE00AA817A00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000A16C5600A449 19009F441200A4491900AA6544000000000000000000AA654400A44919009F44 - 1200A4491900A26E580000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 + 1200A4491900A26E580000000000000000000000000000000000E0B89500F9C6 + 9600F5C29400F1BE9200EDBA9000E9B68E00E5B28C00E1AE8A00DDAA8800D9A6 + 8600D5A28400AA817A0000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -642,11 +654,11 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000424D3E000000000000003E000000 2800000040000000300000000100010000000000800100000000000000000000 - 000000000000000000000000FFFFFF00FFFF000000000000C183000000000000 - C183000000000000C183000000000000C183000000000000C183000000000000 - C183000000000000C183000000000000C183000000000000C183000000000000 - C183000000000000C183000000000000C183000000000000C183000000000000 - C183000000000000FFFF000000000000FFFFFFFFFFFFFFFFC003C001C7CF801F + 000000000000000000000000FFFFFF00FFFFFFFF00000000C183C00300000000 + C183800100000000C183800100000000C183800100000000C183800100000000 + C183800100000000C183800100000000C183800100000000C183800100000000 + C183800100000000C183800100000000C183800100000000C183800100000000 + C183C00300000000FFFFFFFF00000000FFFFFFFFFFFFFFFFC003C001C7CF801F C00380018383801FC003800181018001C0038001C0018001C003800180038001 C0038001C0078001C0038001F00F8001C0038001F80F8001C0038001F0078001 C0038001F0078001C0038001E0838001C0038001E0C18001C0078001E1E1F803 @@ -708,6 +720,13 @@ object X2LogObserverMonitorForm: TX2LogObserverMonitorForm ImageIndex = 3 OnExecute = actShowErrorExecute end + object actWordWrap: TAction + AutoCheck = True + Caption = '&Word wrap' + Enabled = False + ImageIndex = 9 + OnExecute = actWordWrapExecute + end end object sdDetails: TSaveDialog Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing] diff --git a/X2Log.Observer.MonitorForm.pas b/X2Log.Observer.MonitorForm.pas index d87dfb1..8507211 100644 --- a/X2Log.Observer.MonitorForm.pas +++ b/X2Log.Observer.MonitorForm.pas @@ -38,7 +38,7 @@ type vstLog: TVirtualStringTree; ilsLog: TImageList; splDetails: TSplitter; - HeaderControl1: THeaderControl; + hcDetails: THeaderControl; pnlDetails: TPanel; reDetails: TRichEdit; pnlLog: TPanel; @@ -67,6 +67,9 @@ type lblFilter: TLabel; sbDetailsImage: TScrollBox; imgDetailsImage: TImage; + tbWordWrap: TToolButton; + tbDetailsSep1: TToolButton; + actWordWrap: TAction; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); @@ -84,6 +87,7 @@ type procedure actShowInfoExecute(Sender: TObject); procedure actShowWarningExecute(Sender: TObject); procedure actShowErrorExecute(Sender: TObject); + procedure actWordWrapExecute(Sender: TObject); private class var FInstances: TMonitorFormDictionary; private @@ -96,6 +100,7 @@ type FDetails: IX2LogDetails; FVisibleLevels: TX2LogLevels; FMaxEntries: Cardinal; + FWordWrap: Boolean; protected class function GetInstance(ALog: IX2LogObservable; out AForm: TX2LogObserverMonitorForm): Boolean; class procedure RemoveInstance(AForm: TX2LogObserverMonitorForm); @@ -121,6 +126,7 @@ type procedure SetGraphicDetails(ADetails: IX2LogDetailsGraphic); procedure SetVisibleDetails(AControl: TControl); + procedure SetWordWrap(AValue: Boolean); property Closed: Boolean read FClosed; property Details: IX2LogDetails read FDetails; @@ -532,9 +538,11 @@ var logDetailsGraphic: IX2LogDetailsGraphic; logDetailsBinary: IX2LogDetailsBinary; logDetailsText: IX2LogDetailsText; + canWrap: Boolean; begin FDetails := ADetails; + canWrap := False; if Assigned(Details) then begin @@ -547,6 +555,7 @@ begin else if Supports(ADetails, IX2LogDetailsText, logDetailsText) then begin reDetails.Text := logDetailsText.AsString; + canWrap := True; SetVisibleDetails(reDetails); end; end else @@ -555,6 +564,10 @@ begin actCopyDetails.Enabled := Supports(ADetails, IX2LogDetailsCopyable); actSaveDetails.Enabled := Supports(ADetails, IX2LogDetailsStreamable); + actWordWrap.Enabled := canWrap; + actWordWrap.Checked := canWrap and FWordWrap; + + SetWordWrap(actWordWrap.Checked); end; @@ -682,6 +695,17 @@ begin end; +procedure TX2LogObserverMonitorForm.SetWordWrap(AValue: Boolean); +begin + reDetails.WordWrap := AValue; + + if AValue then + reDetails.ScrollBars := ssVertical + else + reDetails.ScrollBars := ssBoth; +end; + + procedure TX2LogObserverMonitorForm.vstLogFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var nodeData: PLogEntryNodeData; @@ -803,6 +827,13 @@ begin end; +procedure TX2LogObserverMonitorForm.actWordWrapExecute(Sender: TObject); +begin + FWordWrap := actWordWrap.Checked; + SetWordWrap(FWordWrap); +end; + + procedure TX2LogObserverMonitorForm.actPauseExecute(Sender: TObject); var node: PVirtualNode;