IdeDebugger: WordWrap for Evaluate/Watch-detail-pane

This commit is contained in:
Martin 2024-05-09 20:50:07 +02:00
parent 06f123d8dd
commit f951bf8afb
36 changed files with 400 additions and 176 deletions

View File

@ -10,27 +10,27 @@ object EvaluateDlg: TEvaluateDlg
Constraints.MinHeight = 200
Constraints.MinWidth = 300
KeyPreview = True
LCLVersion = '3.99.0.0'
OnClose = FormClose
OnCreate = FormCreate
OnKeyDown = FormKeyDown
OnMouseDown = FormMouseDown
LCLVersion = '2.3.0.0'
object txtResult: TMemo
Left = 0
Height = 150
Top = 112
Width = 420
Align = alClient
OnMouseDown = FormMouseDown
ScrollBars = ssAutoVertical
ScrollBars = ssAutoBoth
TabOrder = 1
OnMouseDown = FormMouseDown
end
inline WatchInspectNav1: TWatchInspectNav
Width = 420
Align = alTop
ClientWidth = 420
inherited ToolBar1: TToolBar
Height = 68
Height = 90
Width = 420
inherited tbDivPower: TToolButton
Height = 22
@ -41,16 +41,27 @@ object EvaluateDlg: TEvaluateDlg
inherited tbDivFlags: TToolButton
Height = 22
end
inherited btnWordWrap: TToolButton
Left = 1
Top = 24
end
inherited tbDivCol: TToolButton
Left = 197
Height = 22
Top = 24
end
inherited edFilter: TEditButton
Left = 47
Top = 24
end
inherited ArrayNavigationBar1: TArrayNavigationBar
Left = 1
Height = 23
Top = 24
Top = 46
Width = 253
ClientHeight = 23
ClientWidth = 253
TabOrder = 1
inherited btnArrayFastDown: TSpeedButton
Height = 23
end
@ -85,28 +96,32 @@ object EvaluateDlg: TEvaluateDlg
inherited tbDivArray: TToolButton
Left = 254
Height = 22
Top = 24
Top = 46
end
inherited BtnAddWatch: TToolButton
Left = 259
Top = 24
Top = 46
end
inherited BtnInspect: TToolButton
Left = 1
Top = 46
Top = 68
end
inherited BtnEvaluate: TToolButton
Left = 326
Top = 24
Top = 46
end
inherited tbDivAdd: TToolButton
Left = 47
Height = 22
Top = 46
Top = 68
end
inherited btnEvalHistory: TToolButton
Left = 52
Top = 46
Top = 68
end
inherited btnDisplayFormat: TToolButton
Left = 24
Top = 24
end
end
inherited Panel1: TPanel
@ -139,11 +154,11 @@ object EvaluateDlg: TEvaluateDlg
Width = 398
Align = alClient
ItemHeight = 15
OnKeyDown = EdModifyKeyDown
ParentShowHint = False
ShowHint = True
TabOrder = 0
TextHint = 'New Value'
OnKeyDown = EdModifyKeyDown
end
object BtnExecModify: TSpeedButton
Left = 399

View File

@ -86,6 +86,7 @@ type
procedure DoHistDirChanged(Sender: TObject; NewDir: TEvalHistDirection);
procedure DoWatchesInvalidated(Sender: TObject);
procedure DoWatchUpdated(const ASender: TIdeWatches; const AWatch: TIdeWatch);
procedure DoWordWrapChanged(Sender: TObject);
function GetEvalExpression: string;
procedure SetEvalExpression(const NewExpression: string);
procedure Modify;
@ -141,6 +142,10 @@ begin
WatchInspectNav1.ShowEvalHist := True;
WatchInspectNav1.ShowAddEval:= False;
WatchInspectNav1.ShowDisplayFormat := True;
WatchInspectNav1.ShowWordWrap := True;
WatchInspectNav1.WordWrapIsDown := DebuggerOptions.EvaluateWordWrap;
WatchInspectNav1.OnWordWrapChanged := @DoWordWrapChanged;
txtResult.WordWrap := DebuggerOptions.EvaluateWordWrap;
WatchInspectNav1.OnAddWatchClicked := @DoAddWatch;
WatchInspectNav1.OnAddInspectClicked := @DoAddInspect;
@ -316,6 +321,13 @@ begin
txtResult.Lines.Text := ResultText;
end;
procedure TEvaluateDlg.DoWordWrapChanged(Sender: TObject);
begin
txtResult.WordWrap := WatchInspectNav1.WordWrapIsDown;
DebuggerOptions.EvaluateWordWrap := WatchInspectNav1.WordWrapIsDown;
DebuggerOptions.Save;
end;
procedure TEvaluateDlg.DoAddInspect(Sender: TObject);
var
w: TIdeWatch;

View File

@ -143,15 +143,21 @@ object WatchInspectNav: TWatchInspectNav
Style = tbsCheck
OnClick = btnColTypeClick
end
object btnWordWrap: TToolButton
Left = 403
Top = 2
Style = tbsCheck
OnClick = btnWordWrapClick
end
object tbDivCol: TToolButton
Left = 576
Left = 599
Height = 22
Top = 2
Caption = 'tbDivCol'
Style = tbsDivider
end
object edFilter: TEditButton
Left = 426
Left = 449
Height = 23
Top = 2
Width = 150
@ -164,7 +170,7 @@ object WatchInspectNav: TWatchInspectNav
Visible = False
end
inline ArrayNavigationBar1: TArrayNavigationBar
Left = 581
Left = 604
Height = 23
Top = 2
Width = 253
@ -203,32 +209,32 @@ object WatchInspectNav: TWatchInspectNav
end
end
object tbDivArray: TToolButton
Left = 834
Left = 857
Height = 22
Top = 2
Caption = 'tbDivArray'
Style = tbsDivider
end
object BtnAddWatch: TToolButton
Left = 839
Left = 862
Top = 2
Caption = 'Add Watch'
OnClick = BtnAddWatchClick
end
object BtnInspect: TToolButton
Left = 958
Left = 981
Top = 2
Caption = 'Inspect'
OnClick = BtnInspectClick
end
object BtnEvaluate: TToolButton
Left = 906
Left = 929
Top = 2
Caption = 'Evaluate'
OnClick = BtnEvaluateClick
end
object tbDivAdd: TToolButton
Left = 1004
Left = 1027
Height = 22
Top = 2
Caption = 'tbDivAdd'
@ -242,7 +248,7 @@ object WatchInspectNav: TWatchInspectNav
Style = tbsButtonDrop
end
object btnDisplayFormat: TToolButton
Left = 403
Left = 426
Top = 2
AllowAllUp = True
Caption = 'df'

View File

@ -63,6 +63,7 @@ type
BtnEvaluate: TToolButton;
tbDivAdd: TToolButton;
btnEvalHistory: TToolButton;
btnWordWrap: TToolButton;
procedure BtnAddWatchClick(Sender: TObject);
procedure btnBackwardClick(Sender: TObject);
procedure btnColTypeClick(Sender: TObject);
@ -72,6 +73,7 @@ type
procedure btnFunctionEvalClick(Sender: TObject);
procedure BtnInspectClick(Sender: TObject);
procedure btnPowerClick(Sender: TObject);
procedure btnWordWrapClick(Sender: TObject);
procedure EdInspectChange(Sender: TObject);
procedure EdInspectEditingDone(Sender: TObject);
procedure EdInspectKeyDown(Sender: TObject; var Key: Word;
@ -101,6 +103,7 @@ type
FHistoryList: TStrings;
FBrowseHistoryIndex: Integer;
FBrowseHistory: TStringList;
FOnWordWrapChanged: TNotifyEvent;
FPowerImgIdx, FPowerImgIdxGrey: Integer;
FThreadsMonitor: TIdeThreadsMonitor;
@ -108,6 +111,7 @@ type
FInspectWatches: TCurrentWatches;
FUpdateCount: Integer;
FExecAfterUpdate: Boolean;
FInSetButtonDown: Boolean;
procedure ArrayNavSizeChanged(Sender: TObject);
procedure DoDbgValFormatterMenuClicked(Sender: TObject);
@ -123,6 +127,7 @@ type
function GetExpression: String;
function GetOnArrayNavChanged(AIndex: Integer): TArrayNavChangeEvent;
procedure SetButtonEnabled(AIndex: Integer; AValue: Boolean);
procedure SetButtorDown(AIndex: Integer; AValue: Boolean);
procedure SetHistoryList(AValue: TStrings);
procedure SetOnArrayNavChanged(AIndex: Integer; AValue: TArrayNavChangeEvent);
function GetShowButtons(AIndex: Integer): Boolean;
@ -178,6 +183,7 @@ type
property ShowEvalHist: Boolean index 5 read GetShowButtons write SetShowButtons;
property ShowCallFunction: Boolean index 6 read GetShowButtons write SetShowButtons;
property ShowDisplayFormat: Boolean index 7 read GetShowButtons write SetShowButtons;
property ShowWordWrap: Boolean index 8 read GetShowButtons write SetShowButtons;
property AllowMemDump: Boolean read FAllowMemDump write FAllowMemDump;
property ColClassIsDown: Boolean index 0 read GetButtonDown;
@ -185,6 +191,7 @@ type
property ColVisibilityIsDown: Boolean index 2 read GetButtonDown;
property PowerIsDown: Boolean index 3 read GetButtonDown;
property UseInstanceIsDown: Boolean index 4 read GetButtonDown;
property WordWrapIsDown: Boolean index 5 read GetButtonDown write SetButtorDown;
property ColClassEnabled: Boolean index 0 read GetButtonEnabled write SetButtonEnabled;
property ColTypeEnabled: Boolean index 1 read GetButtonEnabled write SetButtonEnabled;
@ -201,6 +208,7 @@ type
property OnArrayPageSize: TArrayNavChangeEvent index 1 read GetOnArrayNavChanged write SetOnArrayNavChanged;
property OnDisplayFormatChanged: TNotifyEvent read FOnDisplayFormatChanged write FOnDisplayFormatChanged;
property OnEvalHistDirectionChanged: TEvalHistDirectionChangedEvent read FOnEvalHistDirectionChanged write FOnEvalHistDirectionChanged;
property OnWordWrapChanged: TNotifyEvent read FOnWordWrapChanged write FOnWordWrapChanged;
end;
implementation
@ -228,6 +236,7 @@ begin
5: Result := btnEvalHistory.Visible;
6: Result := btnFunctionEval .Visible;
7: Result := btnDisplayFormat.Visible;
8: Result := btnWordWrap.Visible;
end;
end;
@ -364,6 +373,12 @@ begin
end;
end;
procedure TWatchInspectNav.btnWordWrapClick(Sender: TObject);
begin
if Assigned(FOnWordWrapChanged) and not FInSetButtonDown then
FOnWordWrapChanged(Self);
end;
procedure TWatchInspectNav.EdInspectChange(Sender: TObject);
begin
BtnExecute.Enabled := EdInspect.Text <> '';
@ -390,6 +405,15 @@ begin
end;
end;
procedure TWatchInspectNav.SetButtorDown(AIndex: Integer; AValue: Boolean);
begin
FInSetButtonDown := True;
case AIndex of
5: btnWordWrap.Down := AValue;
end;
FInSetButtonDown := False;
end;
function TWatchInspectNav.GetButtonDown(AIndex: Integer): Boolean;
begin
case AIndex of
@ -398,6 +422,7 @@ begin
2: Result := btnColVisibility.Down;
3: Result := btnPower.Down;
4: Result := btnUseInstance.Down;
5: Result := btnWordWrap.Down;
end;
end;
@ -551,6 +576,7 @@ begin
btnFunctionEval.Down := False;
end;
7: btnDisplayFormat.Visible := AValue;
8: btnWordWrap.Visible := AValue;
end;
tbDivCol.Visible := (ShowInspectColumns or ShowDisplayFormat);
@ -622,6 +648,9 @@ begin
btnColClass.Hint := lisInspectShowColClass;
btnColType.Hint := lisInspectShowColType;
btnColVisibility.Hint := lisInspectShowColVisibility;
btnWordWrap.Hint := lisWordWrapBtnHint;
btnWordWrap.ImageIndex := IDEImages.LoadImage('line_wrap');
BtnAddWatch.ImageIndex := IDEImages.LoadImage('debugger_watches');
BtnAddWatch.Caption := drsAddWatch;

View File

@ -125,6 +125,7 @@ type
FAlwaysBringDbgDialogsToFront: boolean;
FBreakpointsDialogShowTree: TBreakpointsDialogShowTreeType;
FDisplayFormatConfigs: TDisplayFormatConfig;
FEvaluateWordWrap: boolean;
FFilename: string;
FFileVersion: integer;
@ -133,6 +134,7 @@ type
FPrimaryConfigPath: String;
FSetupCheckIgnoreNoDefault: Boolean;
FValueFormatterConfig: TIdeDbgValueFormatterSelectorList;
FWatchesDetailPaneWordWrap: boolean;
FXMLCfg: TRttiXMLConfig;
FDebuggerConfigList: TDebuggerPropertiesConfigList; // named entries
@ -180,6 +182,8 @@ type
property SetupCheckIgnoreNoDefault: Boolean read FSetupCheckIgnoreNoDefault write FSetupCheckIgnoreNoDefault;
property BreakpointsDialogShowTree: TBreakpointsDialogShowTreeType read FBreakpointsDialogShowTree write FBreakpointsDialogShowTree default bstBrkGroup;
property AlwaysBringDbgDialogsToFront: boolean read FAlwaysBringDbgDialogsToFront write FAlwaysBringDbgDialogsToFront default true;
property WatchesDetailPaneWordWrap: boolean read FWatchesDetailPaneWordWrap write FWatchesDetailPaneWordWrap default False;
property EvaluateWordWrap: boolean read FEvaluateWordWrap write FEvaluateWordWrap default False;
end;
TCurrentDebuggerSetupResult = (

View File

@ -86,6 +86,7 @@ resourcestring
lisInspectShowColClass = 'Show class column';
lisInspectShowColType = 'Show type column';
lisInspectShowColVisibility = 'Show visibility column';
lisWordWrapBtnHint = 'Word wrap';
drsNewValue = 'New Value';
drsNewValueToAssignToTheVari = 'New value to assign to the variable in the '
+'debugged process (use Shift-Enter to confirm)';

View File

@ -1664,6 +1664,10 @@ msgctxt "idedebuggerstringconstants.liswlwatchlist"
msgid "Watches"
msgstr ""
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1659,6 +1659,10 @@ msgctxt "idedebuggerstringconstants.liswlwatchlist"
msgid "Watches"
msgstr ""
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1681,6 +1681,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Controls"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1711,6 +1711,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Sledování"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1706,6 +1706,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Liste der überwachten Ausdrücke"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1716,6 +1716,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Lista de puntos de observación"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1704,6 +1704,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Vahdit"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1711,6 +1711,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Suivis"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1743,6 +1743,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "רשימת המשגיחים"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1711,6 +1711,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Figyelt elemek"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1688,6 +1688,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Daftar Pengawasan"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1716,6 +1716,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Elenco delle viste di Watch"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1714,6 +1714,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "監視リスト"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1714,6 +1714,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Stebimų sąrašas"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1684,6 +1684,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Watches"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1727,6 +1727,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Czujki"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1683,6 +1683,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr ""
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1725,6 +1725,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Observadores"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1696,6 +1696,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Наблюдения"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr "Пользовательский формат отображения"

View File

@ -1699,6 +1699,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Pozorovania"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1706,6 +1706,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "İzlemeler"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1704,6 +1704,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "Спостереження"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -1702,6 +1702,10 @@ msgctxt "lazarusidestrconsts.liswlwatchlist"
msgid "Watches"
msgstr "监视(&W)"
#: idedebuggerstringconstants.liswordwrapbtnhint
msgid "Word wrap"
msgstr ""
#: idedebuggerstringconstants.optdispguttercustomdisplayformat
msgid "Custom Display Format"
msgstr ""

View File

@ -2,191 +2,239 @@ object WatchesDlg: TWatchesDlg
Left = 299
Height = 240
Top = 355
Width = 539
Width = 520
HorzScrollBar.Page = 499
VertScrollBar.Page = 199
ActiveControl = tvWatches
BorderStyle = bsSizeToolWin
Caption = 'Watch list'
ClientHeight = 240
ClientWidth = 539
ClientWidth = 520
KeyPreview = True
LCLVersion = '3.99.0.0'
OnDestroy = FormDestroy
OnKeyDown = FormKeyDown
OnShow = FormShow
object tvWatches: TDbgTreeView
Left = 0
Height = 214
Top = 26
Width = 334
Align = alClient
DefaultText = 'Node'
DragMode = dmAutomatic
DragType = dtVCL
Header.AutoSizeIndex = 0
Header.Columns = <
item
Position = 0
end
item
Position = 2
end
item
MaxWidth = 300
Options = [coAllowClick, coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coShowDropMark, coAllowFocus, coEditable]
Position = 1
end>
Header.Options = [hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible]
PopupMenu = mnuPopup
TabOrder = 0
TreeOptions.AutoOptions = [toAutoScrollOnExpand, toAutoSort, toAutoTristateTracking, toAutoDeleteMovedNodes, toAutoChangeScale]
TreeOptions.MiscOptions = [toFullRepaintOnResize, toInitOnSave, toWheelPanning]
TreeOptions.PaintOptions = [toShowButtons, toShowDropmark, toShowRoot, toShowTreeLines, toThemeAware, toUseBlendedImages, toUseExplorerTheme]
TreeOptions.SelectionOptions = [toFullRowSelect, toMultiSelect, toRightClickSelect]
OnChange = tvWatchesChange
OnDragOver = tvWatchesDragOver
OnDragDrop = tvWatchesDragDrop
OnFocusChanged = tvWatchesFocusChanged
OnNodeDblClick = tvWatchesNodeDblClick
end
object ToolBar1: TToolBar
Left = 0
Height = 26
Top = 0
Width = 539
Caption = 'ToolBar1'
ParentShowHint = False
ShowHint = True
TabOrder = 1
object ToolButtonPower: TToolButton
Left = 1
Top = 2
Action = actPower
AllowAllUp = True
Style = tbsCheck
end
object ToolButton2: TToolButton
Left = 24
Height = 22
Top = 2
Caption = 'ToolButton2'
Style = tbsDivider
end
object ToolButtonEnable: TToolButton
Left = 52
Top = 2
Action = actEnableSelected
end
object ToolButtonDisable: TToolButton
Left = 75
Top = 2
Action = actDisableSelected
end
object ToolButtonTrash: TToolButton
Left = 98
Top = 2
Action = actDeleteSelected
end
object ToolButton6: TToolButton
Left = 149
Height = 22
Top = 2
Caption = 'ToolButton6'
Style = tbsDivider
end
object ToolButtonEnableAll: TToolButton
Left = 164
Top = 2
Action = actEnableAll
end
object ToolButtonDisableAll: TToolButton
Left = 187
Top = 2
Action = actDisableAll
end
object ToolButtonTrashAll: TToolButton
Left = 126
Top = 2
Action = actDeleteAll
end
object ToolButton10: TToolButton
Left = 210
Height = 22
Top = 2
Caption = 'ToolButton10'
Style = tbsDivider
end
object ToolButtonAdd: TToolButton
Left = 29
Top = 2
Action = actAddWatch
end
object ToolButtonProperties: TToolButton
Left = 261
Top = 2
Action = actProperties
end
object ToolButtonInspectView: TToolButton
Left = 238
Top = 2
Action = actToggleInspectSite
Style = tbsCheck
end
object btnShowDataAddr: TToolButton
Left = 215
Top = 2
Caption = '$^'
Style = tbsCheck
OnClick = btnShowDataAddrClick
end
object ToolButton3: TToolButton
Left = 121
Height = 22
Top = 2
Caption = 'ToolButton3'
Style = tbsSeparator
end
end
object InspectSplitter: TSplitter
Left = 334
Height = 214
Top = 26
Left = 315
Height = 240
Top = 0
Width = 5
Align = alRight
ResizeAnchor = akRight
Visible = False
end
object pnlL: TPanel
Left = 0
Height = 240
Top = 0
Width = 315
Align = alClient
BevelOuter = bvNone
ClientHeight = 240
ClientWidth = 315
TabOrder = 2
object ToolBar1: TToolBar
Left = 0
Height = 22
Top = 0
Width = 315
AutoSize = True
Caption = 'ToolBar1'
EdgeBorders = []
ParentShowHint = False
ShowHint = True
TabOrder = 0
object ToolButtonPower: TToolButton
Left = 1
Top = 0
Action = actPower
AllowAllUp = True
Style = tbsCheck
end
object ToolButton2: TToolButton
Left = 24
Height = 22
Top = 0
Caption = 'ToolButton2'
Style = tbsDivider
end
object ToolButtonEnable: TToolButton
Left = 52
Top = 0
Action = actEnableSelected
end
object ToolButtonDisable: TToolButton
Left = 75
Top = 0
Action = actDisableSelected
end
object ToolButtonTrash: TToolButton
Left = 98
Top = 0
Action = actDeleteSelected
end
object ToolButton6: TToolButton
Left = 152
Height = 22
Top = 0
Caption = 'ToolButton6'
Style = tbsDivider
end
object ToolButtonEnableAll: TToolButton
Left = 157
Top = 0
Action = actEnableAll
end
object ToolButtonDisableAll: TToolButton
Left = 180
Top = 0
Action = actDisableAll
end
object ToolButtonTrashAll: TToolButton
Left = 129
Top = 0
Action = actDeleteAll
end
object ToolButton10: TToolButton
Left = 203
Height = 22
Top = 0
Caption = 'ToolButton10'
Style = tbsDivider
end
object ToolButtonAdd: TToolButton
Left = 29
Top = 0
Action = actAddWatch
end
object ToolButtonProperties: TToolButton
Left = 254
Top = 0
Action = actProperties
end
object ToolButtonInspectView: TToolButton
Left = 231
Top = 0
Action = actToggleInspectSite
Style = tbsCheck
end
object btnShowDataAddr: TToolButton
Left = 208
Top = 0
Caption = '$^'
Style = tbsCheck
OnClick = btnShowDataAddrClick
end
object ToolButton3: TToolButton
Left = 121
Height = 22
Top = 0
Caption = 'ToolButton3'
Style = tbsSeparator
end
end
object tvWatches: TDbgTreeView
Left = 0
Height = 218
Top = 22
Width = 315
Align = alClient
DefaultText = 'Node'
DragMode = dmAutomatic
DragType = dtVCL
Header.AutoSizeIndex = 0
Header.Columns = <
item
Position = 0
end
item
Position = 2
end
item
MaxWidth = 300
Options = [coAllowClick, coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coShowDropMark, coAllowFocus, coEditable]
Position = 1
end>
Header.Options = [hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible]
PopupMenu = mnuPopup
TabOrder = 1
TreeOptions.AutoOptions = [toAutoScrollOnExpand, toAutoSort, toAutoTristateTracking, toAutoDeleteMovedNodes, toAutoChangeScale]
TreeOptions.MiscOptions = [toFullRepaintOnResize, toInitOnSave, toWheelPanning]
TreeOptions.PaintOptions = [toShowButtons, toShowDropmark, toShowRoot, toShowTreeLines, toThemeAware, toUseBlendedImages, toUseExplorerTheme]
TreeOptions.SelectionOptions = [toFullRowSelect, toMultiSelect, toRightClickSelect]
OnChange = tvWatchesChange
OnDragOver = tvWatchesDragOver
OnDragDrop = tvWatchesDragDrop
OnFocusChanged = tvWatchesFocusChanged
OnNodeDblClick = tvWatchesNodeDblClick
end
end
object nbInspect: TNotebook
Left = 339
Height = 214
Top = 26
Left = 320
Height = 240
Top = 0
Width = 200
PageIndex = 0
Align = alRight
TabOrder = 3
TabOrder = 1
TabStop = True
object Page1: TPage
object InspectMemo: TMemo
AnchorSideLeft.Control = Page1
AnchorSideTop.Control = ToolBar2
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Page1
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Page1
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 199
Top = 15
Height = 218
Top = 22
Width = 200
Align = alClient
Anchors = [akTop, akLeft, akRight, akBottom]
ReadOnly = True
ScrollBars = ssAutoBoth
TabOrder = 0
WantReturns = False
end
object InspectLabel: TLabel
AnchorSideLeft.Control = Page1
AnchorSideTop.Control = Page1
AnchorSideRight.Control = ToolBar2
AnchorSideBottom.Control = ToolBar2
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 15
Height = 22
Top = 0
Width = 200
Align = alTop
Width = 174
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Right = 1
Caption = '...'
ParentColor = False
end
object ToolBar2: TToolBar
AnchorSideTop.Control = Page1
AnchorSideRight.Control = Page1
AnchorSideRight.Side = asrBottom
Left = 175
Height = 22
Top = 0
Width = 24
Align = alNone
Anchors = [akTop, akRight]
AutoSize = True
BorderSpacing.Right = 1
Caption = 'ToolBar2'
EdgeBorders = []
TabOrder = 1
object tbWordWrap: TToolButton
Left = 1
Top = 0
Caption = 'tbWordWrap'
Style = tbsCheck
OnClick = tbWordWrapClick
end
end
end
end
object mnuPopup: TPopupMenu

View File

@ -96,6 +96,9 @@ type
actProperties: TAction;
InspectLabel: TLabel;
btnShowDataAddr: TToolButton;
pnlL: TPanel;
ToolBar2: TToolBar;
tbWordWrap: TToolButton;
ToolButton3: TToolButton;
tvWatches: TDbgTreeView;
InspectMemo: TMemo;
@ -154,6 +157,7 @@ type
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormShow(Sender: TObject);
procedure tbWordWrapClick(Sender: TObject);
procedure tvWatchesChange(Sender: TBaseVirtualTree; Node: PVirtualNode);
procedure tvWatchesDragDrop(Sender: TBaseVirtualTree; Source: TObject;
DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState;
@ -179,6 +183,7 @@ type
procedure ContextChanged(Sender: TObject);
procedure SnapshotChanged(Sender: TObject);
private
FInSetup: integer;
FWatchTreeMgr: TDbgTreeViewWatchValueMgr;
FWatchPrinter: TWatchResultPrinter;
FWatchesInView: TIdeWatches;
@ -293,6 +298,7 @@ begin
ActionList1.Images := IDEImages.Images_16;
ToolBar1.Images := IDEImages.Images_16;
ToolBar2.Images := IDEImages.Images_16;
mnuPopup.Images := IDEImages.Images_16;
FPowerImgIdx := IDEImages.LoadImage('debugger_power');
@ -349,6 +355,7 @@ begin
actEvaluate.Caption := lisEvaluateModify;
btnShowDataAddr.ImageIndex := IDEImages.LoadImage('address');
tbWordWrap.ImageIndex := IDEImages.LoadImage('line_wrap');
Caption:=liswlWatchList;
@ -359,6 +366,10 @@ begin
tvWatches.Header.Columns[1].Width := COL_WIDTHS[COL_WATCH_VALUE];
tvWatches.Header.Columns[2].Width := COL_WIDTHS[COL_WATCH_DATAADDR];
inc(FInSetup);
tbWordWrap.Down := DebuggerOptions.WatchesDetailPaneWordWrap;
dec(FInSetup);
//tvWatches.OnItemRemoved := @DoItemRemovedFromView;
DebugConfigChanged;
end;
@ -739,6 +750,15 @@ begin
UpdateAll;
end;
procedure TWatchesDlg.tbWordWrapClick(Sender: TObject);
begin
InspectMemo.WordWrap := tbWordWrap.Down;
if FInSetup = 0 then begin
DebuggerOptions.WatchesDetailPaneWordWrap := tbWordWrap.Down;
DebuggerOptions.Save;
end;
end;
procedure TWatchesDlg.actPowerExecute(Sender: TObject);
begin
if ToolButtonPower.Down
@ -1186,14 +1206,12 @@ begin
InspectLabel.Caption := Watch.Expression;
if not(Watch.Enabled and Watch.HasAllValidParents(GetThreadId, GetStackframe)) then begin
InspectMemo.WordWrap := True;
InspectMemo.Text := '<evaluating>';
exit;
end;
d := Watch.Values[GetThreadId, GetStackframe];
if d = nil then begin
InspectMemo.WordWrap := True;
InspectMemo.Text := '<evaluating>';
exit;
end;
@ -1209,7 +1227,6 @@ begin
FWatchPrinter.FormatFlags := [rpfIndent, rpfMultiLine, rpfSkipValueFormatter];
FWatchPrinter.OnlyValueFormatter := Watch.DbgValueFormatter;
s := FWatchPrinter.PrintWatchValue(d.ResultData, Watch.DisplayFormat, Watch.Expression);
InspectMemo.WordWrap := True;
InspectMemo.Text := s;
exit;
end;
@ -1218,7 +1235,6 @@ begin
if (t <> nil) and
GlobalValueFormatterSelectorList.FormatValue(t, d.Value, Watch.DisplayFormat, s, AnsiUpperCase(Watch.Expression), AnsiUpperCase(Watch.Expression))
then begin
InspectMemo.WordWrap := True;
InspectMemo.Text := s;
exit;
end;
@ -1226,7 +1242,6 @@ begin
if (t <> nil) and (t.Fields <> nil) and (t.Fields.Count > 0) and
(not Watch.DisplayFormat.Struct.UseInherited)
then begin
InspectMemo.WordWrap := False;
InspectMemo.Lines.BeginUpdate;
try
for i := 0 to t.Fields.Count - 1 do
@ -1255,7 +1270,6 @@ begin
exit;
end;
InspectMemo.WordWrap := True;
InspectMemo.Text := d.Value;
finally
FWatchPrinter.FormatFlags := [rpfClearMultiLine];

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

View File

@ -340,6 +340,9 @@ debugger/debugger_event_log_200.png
debugger/debugger_inspect.png
debugger/debugger_inspect_150.png
debugger/debugger_inspect_200.png
debugger/line_wrap.png
debugger/line_wrap_150.png
debugger/line_wrap_200.png
debugger/debugger_modify.png
debugger/debugger_modify_150.png
debugger/debugger_modify_200.png