mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-07-06 18:45:55 +02:00
IDE: code browser: added TCodeBrowserView.GetCodeHelp
git-svn-id: trunk@26857 -
This commit is contained in:
parent
d66103ac53
commit
c6dba477e5
@ -45,14 +45,14 @@ interface
|
|||||||
uses
|
uses
|
||||||
Classes, SysUtils, types, LCLProc, LResources, Forms, Controls, Graphics,
|
Classes, SysUtils, types, LCLProc, LResources, Forms, Controls, Graphics,
|
||||||
Dialogs, Clipbrd, LCLIntf, AVL_Tree, StdCtrls, ExtCtrls, ComCtrls, Buttons,
|
Dialogs, Clipbrd, LCLIntf, AVL_Tree, StdCtrls, ExtCtrls, ComCtrls, Buttons,
|
||||||
Menus,
|
Menus, HelpIntfs,
|
||||||
// codetools
|
// codetools
|
||||||
CodeAtom, BasicCodeTools, DefineTemplates, CodeTree, CodeCache,
|
CodeAtom, BasicCodeTools, DefineTemplates, CodeTree, CodeCache,
|
||||||
CodeToolsStructs, CodeToolManager, PascalParserTool, LinkScanner, FileProcs,
|
CodeToolsStructs, CodeToolManager, PascalParserTool, LinkScanner, FileProcs,
|
||||||
CodeIndex, StdCodeTools, SourceLog,
|
CodeIndex, StdCodeTools, SourceLog, CustomCodeTool,
|
||||||
// IDEIntf
|
// IDEIntf
|
||||||
IDEWindowIntf, SrcEditorIntf, IDEMsgIntf, IDEDialogs, LazConfigStorage,
|
IDEWindowIntf, SrcEditorIntf, IDEMsgIntf, IDEDialogs, LazConfigStorage,
|
||||||
PackageIntf, TextTools, IDECommands, LazIDEIntf,
|
IDEHelpIntf, PackageIntf, TextTools, IDECommands, LazIDEIntf,
|
||||||
// IDE
|
// IDE
|
||||||
Project, DialogProcs, PackageSystem, PackageDefs, LazarusIDEStrConsts,
|
Project, DialogProcs, PackageSystem, PackageDefs, LazarusIDEStrConsts,
|
||||||
IDEOptionDefs, MsgQuickFixes, BasePkgManager, AddToProjectDlg,
|
IDEOptionDefs, MsgQuickFixes, BasePkgManager, AddToProjectDlg,
|
||||||
@ -322,6 +322,7 @@ type
|
|||||||
procedure InitImageList;
|
procedure InitImageList;
|
||||||
function GetNodeImage(CodeNode: TObject): integer;
|
function GetNodeImage(CodeNode: TObject): integer;
|
||||||
function GetTVNodeHint(TVNode: TTreeNode): string;
|
function GetTVNodeHint(TVNode: TTreeNode): string;
|
||||||
|
function GetCodeHelp(TVNode: TTreeNode; out BaseURL, HTMLHint: string): boolean;
|
||||||
procedure ExpandCollapseAllNodesInTreeView(NodeType: TExpandableNodeType;
|
procedure ExpandCollapseAllNodesInTreeView(NodeType: TExpandableNodeType;
|
||||||
Expand: boolean);
|
Expand: boolean);
|
||||||
procedure CopyNode(TVNode: TTreeNode; NodeType: TCopyNodeType);
|
procedure CopyNode(TVNode: TTreeNode; NodeType: TCopyNodeType);
|
||||||
@ -2455,6 +2456,83 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCodeBrowserView.GetCodeHelp(TVNode: TTreeNode; out BaseURL,
|
||||||
|
HTMLHint: string): boolean;
|
||||||
|
var
|
||||||
|
NodeData: TObject;
|
||||||
|
Node: TCodeBrowserNode;
|
||||||
|
Tool: TCodeTool;
|
||||||
|
CleanPos: integer;
|
||||||
|
CTNode: TCodeTreeNode;
|
||||||
|
NewCodePos: TCodeXYPosition;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
BaseURL:='';
|
||||||
|
HTMLHint:='';
|
||||||
|
if (TVNode=nil) or (TVNode.Data=nil) then exit;
|
||||||
|
NodeData:=TObject(TVNode.Data);
|
||||||
|
if NodeData is TCodeBrowserNode then begin
|
||||||
|
Node:=TCodeBrowserNode(NodeData);
|
||||||
|
if Node.CodePos.Code=nil then exit;
|
||||||
|
if not LazarusIDE.BeginCodeTools then // commit source editor changes to codetools
|
||||||
|
exit;
|
||||||
|
// parse unit
|
||||||
|
CodeToolBoss.Explore(Node.CodePos.Code,Tool,false,false);
|
||||||
|
if Tool=nil then exit;
|
||||||
|
// find source position in parsed code
|
||||||
|
CleanPos:=Node.CodePos.P;
|
||||||
|
// find node
|
||||||
|
CTNode:=Tool.FindDeepestNodeAtPos(CleanPos,false);
|
||||||
|
if (CTNode=nil) or (CTNode.Desc<>Node.Desc) then
|
||||||
|
exit; // source has changed
|
||||||
|
|
||||||
|
// find cleanpos of identifier
|
||||||
|
case CTNode.Desc of
|
||||||
|
ctnProcedure:
|
||||||
|
begin
|
||||||
|
if SysUtils.CompareText(Tool.ExtractProcName(CTNode,[]),Node.Identifier)<>0
|
||||||
|
then
|
||||||
|
exit; // source has changed
|
||||||
|
Tool.MoveCursorToProcName(CTNode,true);
|
||||||
|
CleanPos:=Tool.CurPos.StartPos;
|
||||||
|
end;
|
||||||
|
ctnProperty:
|
||||||
|
begin
|
||||||
|
if SysUtils.CompareText(Tool.ExtractPropName(CTNode,false),Node.Identifier)<>0
|
||||||
|
then
|
||||||
|
exit; // source has changed
|
||||||
|
Tool.MoveCursorToPropName(CTNode);
|
||||||
|
CleanPos:=Tool.CurPos.StartPos;
|
||||||
|
end;
|
||||||
|
ctnGenericType:
|
||||||
|
begin
|
||||||
|
Tool.ExtractDefinitionName(CTNode);
|
||||||
|
if CTNode.FirstChild<>nil then
|
||||||
|
CleanPos:=CTNode.FirstChild.StartPos;
|
||||||
|
if SysUtils.CompareText(Tool.ExtractIdentifier(CleanPos),Node.Identifier)<>0
|
||||||
|
then
|
||||||
|
exit; // source has changed
|
||||||
|
end;
|
||||||
|
ctnVarDefinition,ctnTypeDefinition,ctnConstDefinition,
|
||||||
|
ctnEnumIdentifier:
|
||||||
|
if SysUtils.CompareText(Tool.ExtractIdentifier(CleanPos),Node.Identifier)<>0
|
||||||
|
then
|
||||||
|
exit; // source has changed
|
||||||
|
else
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// get source position
|
||||||
|
if not Tool.CleanPosToCaret(CleanPos,NewCodePos) then exit;
|
||||||
|
|
||||||
|
// ask the help system about the identifier
|
||||||
|
if LazarusHelp.GetHintForSourcePosition(NewCodePos.Code.Filename,
|
||||||
|
Point(NewCodePos.X,NewCodePos.Y),BaseURL,HTMLHint)<>shrSuccess then exit;
|
||||||
|
|
||||||
|
Result:=true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCodeBrowserView.ExpandCollapseAllNodesInTreeView(
|
procedure TCodeBrowserView.ExpandCollapseAllNodesInTreeView(
|
||||||
NodeType: TExpandableNodeType; Expand: boolean);
|
NodeType: TExpandableNodeType; Expand: boolean);
|
||||||
var
|
var
|
||||||
|
@ -168,7 +168,7 @@ type
|
|||||||
out HintWinRect: TRect): boolean; override;
|
out HintWinRect: TRect): boolean; override;
|
||||||
function GetHintForSourcePosition(const ExpandedFilename: string;
|
function GetHintForSourcePosition(const ExpandedFilename: string;
|
||||||
const CodePos: TPoint;
|
const CodePos: TPoint;
|
||||||
out BaseURL, HTMLHint: string): TShowHelpResult;
|
out BaseURL, HTMLHint: string): TShowHelpResult; override;
|
||||||
|
|
||||||
function ConvertSourcePosToPascalHelpContext(const CaretPos: TPoint;
|
function ConvertSourcePosToPascalHelpContext(const CaretPos: TPoint;
|
||||||
const Filename: string): TPascalHelpContextList; override;
|
const Filename: string): TPascalHelpContextList; override;
|
||||||
|
@ -62,6 +62,9 @@ type
|
|||||||
var ErrMsg: string): TShowHelpResult; virtual; abstract;
|
var ErrMsg: string): TShowHelpResult; virtual; abstract;
|
||||||
procedure ShowHelpForMessage(Line: integer); virtual; abstract;
|
procedure ShowHelpForMessage(Line: integer); virtual; abstract;
|
||||||
procedure ShowHelpForObjectInspector(Sender: TObject); virtual; abstract;
|
procedure ShowHelpForObjectInspector(Sender: TObject); virtual; abstract;
|
||||||
|
function GetHintForSourcePosition(const ExpandedFilename: string;
|
||||||
|
const CodePos: TPoint;
|
||||||
|
out BaseURL, HTMLHint: string): TShowHelpResult; virtual; abstract;
|
||||||
function CreateHint(aHintWindow: THintWindow; ScreenPos: TPoint;
|
function CreateHint(aHintWindow: THintWindow; ScreenPos: TPoint;
|
||||||
const BaseURL: string; var TheHint: string;
|
const BaseURL: string; var TheHint: string;
|
||||||
out HintWinRect: TRect): boolean; virtual; abstract;
|
out HintWinRect: TRect): boolean; virtual; abstract;
|
||||||
|
Loading…
Reference in New Issue
Block a user