mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-08 16:38:17 +02:00
IDE: Jump to code declarations from Code Explorer with shortcut keys. Reuse event handlers. Issue #20048.
git-svn-id: trunk@62821 -
This commit is contained in:
parent
0bdef3f301
commit
d84fe6746d
@ -7,6 +7,7 @@ object CodeExplorerView: TCodeExplorerView
|
||||
ClientHeight = 517
|
||||
ClientWidth = 220
|
||||
KeyPreview = True
|
||||
OnActivate = FormActivate
|
||||
OnCreate = CodeExplorerViewCREATE
|
||||
OnDestroy = CodeExplorerViewDestroy
|
||||
LCLVersion = '2.1.0.0'
|
||||
@ -22,13 +23,13 @@ object CodeExplorerView: TCodeExplorerView
|
||||
OnChange = MainNotebookPageChanged
|
||||
object CodePage: TTabSheet
|
||||
Caption = 'CodePage'
|
||||
ClientHeight = 489
|
||||
ClientWidth = 212
|
||||
ClientHeight = 490
|
||||
ClientWidth = 218
|
||||
object CodeTreeview: TTreeView
|
||||
Left = 0
|
||||
Height = 465
|
||||
Top = 24
|
||||
Width = 212
|
||||
Top = 25
|
||||
Width = 218
|
||||
Align = alClient
|
||||
BorderSpacing.Top = 1
|
||||
HideSelection = False
|
||||
@ -37,34 +38,34 @@ object CodeExplorerView: TCodeExplorerView
|
||||
ReadOnly = True
|
||||
RightClickSelect = True
|
||||
TabOrder = 1
|
||||
OnDblClick = CodeTreeviewDblClick
|
||||
OnDeletion = CodeTreeviewDeletion
|
||||
OnKeyUp = CodeTreeviewKeyUp
|
||||
OnDblClick = TreeviewDblClick
|
||||
OnDeletion = TreeviewDeletion
|
||||
OnKeyDown = TreeviewKeyDown
|
||||
OnMouseDown = CodeTreeviewMouseDown
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoRightClickSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoNoDoubleClickExpand, tvoThemedDraw]
|
||||
end
|
||||
object CodeTreeviewButtonPanel: TPanel
|
||||
Left = 0
|
||||
Height = 23
|
||||
Height = 24
|
||||
Top = 0
|
||||
Width = 212
|
||||
Width = 218
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 23
|
||||
ClientWidth = 212
|
||||
ClientHeight = 24
|
||||
ClientWidth = 218
|
||||
TabOrder = 0
|
||||
object CodeFilterEdit: TEdit
|
||||
AnchorSideLeft.Control = CodeTreeviewButtonPanel
|
||||
AnchorSideTop.Control = CodeTreeviewButtonPanel
|
||||
AnchorSideRight.Control = CodeRefreshSpeedButton
|
||||
Left = 0
|
||||
Height = 23
|
||||
Height = 24
|
||||
Top = 0
|
||||
Width = 143
|
||||
Width = 149
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
OnChange = CodeFilterEditChange
|
||||
OnEnter = CodeFilterEditEnter
|
||||
OnEnter = FilterEditEnter
|
||||
TabOrder = 0
|
||||
Text = 'CodeFilterEdit'
|
||||
end
|
||||
@ -72,8 +73,8 @@ object CodeExplorerView: TCodeExplorerView
|
||||
AnchorSideRight.Control = CodeModeSpeedButton
|
||||
AnchorSideBottom.Control = CodeFilterEdit
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 143
|
||||
Height = 22
|
||||
Left = 149
|
||||
Height = 23
|
||||
Hint = 'Refresh CodeExplorer'
|
||||
Top = 1
|
||||
Width = 23
|
||||
@ -87,8 +88,8 @@ object CodeExplorerView: TCodeExplorerView
|
||||
AnchorSideRight.Control = CodeOptionsSpeedButton
|
||||
AnchorSideBottom.Control = CodeRefreshSpeedButton
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 166
|
||||
Height = 22
|
||||
Left = 172
|
||||
Height = 23
|
||||
Top = 1
|
||||
Width = 23
|
||||
Anchors = [akTop, akRight, akBottom]
|
||||
@ -102,14 +103,14 @@ object CodeExplorerView: TCodeExplorerView
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = CodeRefreshSpeedButton
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 189
|
||||
Height = 22
|
||||
Left = 195
|
||||
Height = 23
|
||||
Hint = 'Options for CodeExplorer'
|
||||
Top = 1
|
||||
Width = 23
|
||||
Anchors = [akTop, akRight, akBottom]
|
||||
Flat = True
|
||||
OnClick = CodeOptionsSpeedButtonClick
|
||||
OnClick = OptionsSpeedButtonClick
|
||||
ShowHint = True
|
||||
ParentShowHint = False
|
||||
end
|
||||
@ -117,28 +118,28 @@ object CodeExplorerView: TCodeExplorerView
|
||||
end
|
||||
object DirectivesPage: TTabSheet
|
||||
Caption = 'DirectivesPage'
|
||||
ClientHeight = 489
|
||||
ClientWidth = 212
|
||||
ClientHeight = 490
|
||||
ClientWidth = 218
|
||||
object DirTreeviewButtonPanel: TPanel
|
||||
Left = 0
|
||||
Height = 23
|
||||
Height = 24
|
||||
Top = 0
|
||||
Width = 212
|
||||
Width = 218
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 23
|
||||
ClientWidth = 212
|
||||
ClientHeight = 24
|
||||
ClientWidth = 218
|
||||
TabOrder = 0
|
||||
object DirectivesFilterEdit: TEdit
|
||||
AnchorSideRight.Control = DirRefreshSpeedButton
|
||||
Left = 0
|
||||
Height = 23
|
||||
Height = 24
|
||||
Top = 0
|
||||
Width = 166
|
||||
Width = 172
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
OnChange = DirectivesFilterEditChange
|
||||
OnEnter = DirectivesFilterEditEnter
|
||||
OnEnter = FilterEditEnter
|
||||
TabOrder = 0
|
||||
Text = 'DirectivesFilterEdit'
|
||||
end
|
||||
@ -146,8 +147,8 @@ object CodeExplorerView: TCodeExplorerView
|
||||
AnchorSideRight.Control = DirOptionsSpeedButton
|
||||
AnchorSideBottom.Control = DirectivesFilterEdit
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 166
|
||||
Height = 22
|
||||
Left = 172
|
||||
Height = 23
|
||||
Hint = 'Refresh CodeExplorer'
|
||||
Top = 1
|
||||
Width = 23
|
||||
@ -162,14 +163,14 @@ object CodeExplorerView: TCodeExplorerView
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = DirRefreshSpeedButton
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 189
|
||||
Height = 22
|
||||
Left = 195
|
||||
Height = 23
|
||||
Hint = 'Options for CodeExplorer'
|
||||
Top = 1
|
||||
Width = 23
|
||||
Anchors = [akTop, akRight, akBottom]
|
||||
Flat = True
|
||||
OnClick = CodeOptionsSpeedButtonClick
|
||||
OnClick = OptionsSpeedButtonClick
|
||||
ShowHint = True
|
||||
ParentShowHint = False
|
||||
end
|
||||
@ -179,17 +180,17 @@ object CodeExplorerView: TCodeExplorerView
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 465
|
||||
Top = 24
|
||||
Width = 212
|
||||
Top = 25
|
||||
Width = 218
|
||||
Align = alBottom
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 1
|
||||
PopupMenu = TreePopupmenu
|
||||
ReadOnly = True
|
||||
TabOrder = 1
|
||||
OnDblClick = DirectivesTreeViewDblClick
|
||||
OnDeletion = DirectivesTreeViewDeletion
|
||||
OnKeyUp = DirectivesTreeViewKeyUp
|
||||
OnDblClick = TreeviewDblClick
|
||||
OnDeletion = TreeviewDeletion
|
||||
OnKeyUp = TreeviewKeyDown
|
||||
Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
|
||||
end
|
||||
end
|
||||
@ -197,13 +198,13 @@ object CodeExplorerView: TCodeExplorerView
|
||||
object Imagelist1: TImageList
|
||||
Height = 18
|
||||
Width = 18
|
||||
Left = 64
|
||||
Top = 64
|
||||
left = 64
|
||||
top = 64
|
||||
end
|
||||
object TreePopupmenu: TPopupMenu
|
||||
OnPopup = TreePopupmenuPopup
|
||||
Left = 64
|
||||
Top = 128
|
||||
left = 64
|
||||
top = 128
|
||||
object MenuItem1: TMenuItem
|
||||
Caption = 'New Item1'
|
||||
Visible = False
|
||||
@ -213,7 +214,7 @@ object CodeExplorerView: TCodeExplorerView
|
||||
AutoEnabled = True
|
||||
Interval = 500
|
||||
OnTimer = IdleTimer1Timer
|
||||
Left = 64
|
||||
Top = 192
|
||||
left = 64
|
||||
top = 192
|
||||
end
|
||||
end
|
||||
|
@ -132,37 +132,33 @@ type
|
||||
TreePopupmenu: TPopupMenu;
|
||||
procedure CodeExplorerViewCreate(Sender: TObject);
|
||||
procedure CodeExplorerViewDestroy(Sender: TObject);
|
||||
procedure CodeFilterEditEnter(Sender: TObject);
|
||||
procedure CodeTreeviewDblClick(Sender: TObject);
|
||||
procedure CodeTreeviewDeletion(Sender: TObject; Node: TTreeNode);
|
||||
procedure CodeTreeviewKeyUp(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
procedure CodeFilterEditChange(Sender: TObject);
|
||||
procedure CodeTreeviewMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure DirectivesFilterEditChange(Sender: TObject);
|
||||
procedure DirectivesFilterEditEnter(Sender: TObject);
|
||||
procedure DirectivesTreeViewDblClick(Sender: TObject);
|
||||
procedure DirectivesTreeViewDeletion(Sender: TObject; Node: TTreeNode);
|
||||
procedure DirectivesTreeViewKeyUp(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
procedure DirRefreshSpeedButtonClick(Sender: TObject);
|
||||
procedure FilterEditEnter(Sender: TObject);
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure IdleTimer1Timer(Sender: TObject);
|
||||
procedure JumpToMenuItemClick(Sender: TObject);
|
||||
procedure JumpToImplementationMenuItemClick(Sender: TObject);
|
||||
procedure OnCloseIDE(Sender: TObject);
|
||||
procedure CloseIDEHandler(Sender: TObject);
|
||||
procedure ShowSrcEditPosMenuItemClick(Sender: TObject);
|
||||
procedure MainNotebookPageChanged(Sender: TObject);
|
||||
procedure CodeModeSpeedButtonClick(Sender: TObject);
|
||||
procedure CodeOptionsSpeedButtonClick(Sender: TObject);
|
||||
procedure RefreshMenuItemClick(Sender: TObject);
|
||||
procedure CodeRefreshSpeedButtonClick(Sender: TObject);
|
||||
procedure OptionsSpeedButtonClick(Sender: TObject);
|
||||
procedure RefreshMenuItemClick(Sender: TObject);
|
||||
procedure RenameMenuItemClick(Sender: TObject);
|
||||
procedure TreePopupmenuPopup(Sender: TObject);
|
||||
procedure OnUserInput(Sender: TObject; {%H-}Msg: Cardinal);
|
||||
procedure TreeviewDblClick(Sender: TObject);
|
||||
procedure TreeviewDeletion(Sender: TObject; Node: TTreeNode);
|
||||
procedure TreeviewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure UserInputHandler(Sender: TObject; {%H-}Msg: Cardinal);
|
||||
private
|
||||
fCategoryNodes: array[TCodeExplorerCategory] of TTreeNode;
|
||||
FCodeFilename: string;
|
||||
FCodeCmd1, FCodeCmd2, FCodeCmd3: TIDECommand;
|
||||
FDirectivesFilename: string;
|
||||
FFlags: TCodeExplorerViewFlags;
|
||||
FLastCodeChangeStep: integer;
|
||||
@ -505,8 +501,8 @@ begin
|
||||
|
||||
fNodesWithPath:=TAvlTree.Create(@CompareViewNodePathsAndParams);
|
||||
|
||||
Application.AddOnUserInputHandler(@OnUserInput);
|
||||
LazarusIDE.AddHandlerOnIDEClose(@OnCloseIDE);
|
||||
Application.AddOnUserInputHandler(@UserInputHandler);
|
||||
LazarusIDE.AddHandlerOnIDEClose(@CloseIDEHandler);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeExplorerViewDestroy(Sender: TObject);
|
||||
@ -519,29 +515,6 @@ begin
|
||||
CodeExplorerView:=nil;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeFilterEditEnter(Sender: TObject);
|
||||
begin
|
||||
CodeFilterEdit.SelectAll;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeTreeviewDblClick(Sender: TObject);
|
||||
begin
|
||||
JumpToSelection;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeTreeviewDeletion(Sender: TObject; Node: TTreeNode);
|
||||
begin
|
||||
if Node.Data<>nil then
|
||||
TViewNodeData(Node.Data).Free;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeTreeviewKeyUp(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
begin
|
||||
if (Key=VK_RETURN) and (Shift=[]) then
|
||||
JumpToSelection;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeFilterEditChange(Sender: TObject);
|
||||
begin
|
||||
CodeFilterChanged;
|
||||
@ -564,36 +537,25 @@ begin
|
||||
DirectivesFilterChanged;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.DirectivesFilterEditEnter(Sender: TObject);
|
||||
begin
|
||||
DirectivesFilterEdit.SelectAll;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.DirectivesTreeViewDblClick(Sender: TObject);
|
||||
begin
|
||||
JumpToSelection;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.DirectivesTreeViewDeletion(Sender: TObject;
|
||||
Node: TTreeNode);
|
||||
begin
|
||||
if Node.Data<>nil then
|
||||
TObject(Node.Data).Free;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.DirectivesTreeViewKeyUp(Sender: TObject;
|
||||
var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
if (Key=VK_RETURN) and (Shift=[]) then
|
||||
JumpToSelection;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.DirRefreshSpeedButtonClick(Sender: TObject);
|
||||
begin
|
||||
FLastDirectivesChangeStep:=CTInvalidChangeStamp;
|
||||
RefreshDirectives(true);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.FilterEditEnter(Sender: TObject);
|
||||
begin
|
||||
(Sender as TEdit).SelectAll;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.FormActivate(Sender: TObject);
|
||||
begin
|
||||
DebugLn(['TCodeExplorerView.FormActivate!']);
|
||||
FCodeCmd1:=IDECommandList.FindIDECommand(ecFindDeclaration);
|
||||
FCodeCmd2:=IDECommandList.FindIDECommand(ecFindProcedureDefinition);
|
||||
FCodeCmd3:=IDECommandList.FindIDECommand(ecFindProcedureMethod);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.IdleTimer1Timer(Sender: TObject);
|
||||
begin
|
||||
if not (cevCheckOnIdle in FFlags) then exit;
|
||||
@ -632,7 +594,7 @@ begin
|
||||
JumpToSelection(true);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.OnCloseIDE(Sender: TObject);
|
||||
procedure TCodeExplorerView.CloseIDEHandler(Sender: TObject);
|
||||
begin
|
||||
CodeExplorerOptions.Save;
|
||||
end;
|
||||
@ -660,7 +622,13 @@ begin
|
||||
SetMode(cemCategory);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeOptionsSpeedButtonClick(Sender: TObject);
|
||||
procedure TCodeExplorerView.CodeRefreshSpeedButtonClick(Sender: TObject);
|
||||
begin
|
||||
FLastCodeChangeStep:=CTInvalidChangeStamp;
|
||||
RefreshCode(true);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.OptionsSpeedButtonClick(Sender: TObject);
|
||||
begin
|
||||
if Assigned(FOnShowOptions) then
|
||||
begin
|
||||
@ -676,12 +644,6 @@ begin
|
||||
Refresh(true);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.CodeRefreshSpeedButtonClick(Sender: TObject);
|
||||
begin
|
||||
FLastCodeChangeStep:=CTInvalidChangeStamp;
|
||||
RefreshCode(true);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.RenameMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
if not JumpToSelection then begin
|
||||
@ -730,7 +692,34 @@ begin
|
||||
//DebugLn(['TCodeExplorerView.TreePopupmenuPopup ',CERenameIDEMenuCommand.Visible]);
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.OnUserInput(Sender: TObject; Msg: Cardinal);
|
||||
procedure TCodeExplorerView.TreeviewDblClick(Sender: TObject);
|
||||
begin
|
||||
JumpToSelection;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.TreeviewDeletion(Sender: TObject; Node: TTreeNode);
|
||||
begin
|
||||
if Node.Data<>nil then
|
||||
TObject(Node.Data).Free;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.TreeviewKeyDown(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
begin
|
||||
if (Key=VK_RETURN) and (Shift=[])
|
||||
or ((Key=FCodeCmd1.ShortcutA.Key1) and (Shift=FCodeCmd1.ShortcutA.Shift1))
|
||||
or ((Key=FCodeCmd1.ShortcutB.Key1) and (Shift=FCodeCmd1.ShortcutB.Shift1))
|
||||
or ((Key=FCodeCmd2.ShortcutA.Key1) and (Shift=FCodeCmd2.ShortcutA.Shift1))
|
||||
or ((Key=FCodeCmd2.ShortcutB.Key1) and (Shift=FCodeCmd2.ShortcutB.Shift1))
|
||||
or ((Key=FCodeCmd3.ShortcutA.Key1) and (Shift=FCodeCmd3.ShortcutA.Shift1))
|
||||
or ((Key=FCodeCmd3.ShortcutB.Key1) and (Shift=FCodeCmd3.ShortcutB.Shift1))
|
||||
then begin
|
||||
JumpToSelection;
|
||||
Key:=0;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCodeExplorerView.UserInputHandler(Sender: TObject; Msg: Cardinal);
|
||||
begin
|
||||
if CodeExplorerOptions.Refresh=cerOnIdle then
|
||||
CheckOnIdle;
|
||||
@ -2047,7 +2036,7 @@ begin
|
||||
//DebugLn(['TCodeExplorerView.ApplyDirectivesFilter ====================="',TheFilter,'"']);
|
||||
FLastDirectivesFilter:=TheFilter;
|
||||
DirectivesTreeView.BeginUpdate;
|
||||
DirectivesTreeView.Options:=DirectivesTreeView.Options+[tvoAllowMultiselect];
|
||||
//DirectivesTreeView.Options:=DirectivesTreeView.Options+[tvoAllowMultiselect];
|
||||
ANode:=DirectivesTreeView.Items.GetFirstNode;
|
||||
while ANode<>nil do begin
|
||||
NextNode:=ANode.GetNextSibling;
|
||||
|
Loading…
Reference in New Issue
Block a user