mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 18:13:55 +02:00

1) Localized the component and added Portuguese translation from Marcelo B Paula, final part of bug #16726. 2) Added Russian translation. 3) Removed LRS file which is not needed anymore. git-svn-id: trunk@26116 -
141 lines
3.4 KiB
ObjectPascal
141 lines
3.4 KiB
ObjectPascal
{
|
|
Copyright (C) 2007 Graeme Geldenhuys (graemeg@gmail.com)
|
|
|
|
This library is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Library General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or (at your
|
|
option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; if not, write to the Free Software Foundation,
|
|
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
}
|
|
|
|
unit jumpto_impl;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes
|
|
,CodeToolManager
|
|
,CodeTree
|
|
;
|
|
|
|
|
|
type
|
|
TJumpType =
|
|
( jmpIntf, jmpIntfUses, jmpImpl, jmpImplUses, jmpInit );
|
|
|
|
|
|
const
|
|
cJumpNames: array[TJumpType] of string =
|
|
('Interface', 'Interface uses', 'Implementation', 'Implementation uses',
|
|
'Initialization');
|
|
|
|
type
|
|
TJumpHandler = class(TComponent)
|
|
private
|
|
function JumpToNode(Tool: TCodeTool; Node: TCodeTreeNode): Boolean;
|
|
public
|
|
procedure DoJump(Sender: TObject);
|
|
procedure DoJumpToImplementation(Sender: TObject);
|
|
end;
|
|
|
|
|
|
|
|
implementation
|
|
|
|
uses
|
|
CodeAtom
|
|
,SrcEditorIntf
|
|
,LazIDEIntf
|
|
,Controls
|
|
,CodeCache
|
|
,CustomCodeTool
|
|
,Dialogs
|
|
,SysUtils
|
|
,LResources
|
|
,Forms
|
|
,ComCtrls
|
|
,Menus
|
|
,editortoolbar_str
|
|
;
|
|
|
|
{ TJumpHandler }
|
|
|
|
function TJumpHandler.JumpToNode(Tool: TCodeTool; Node: TCodeTreeNode): Boolean;
|
|
var
|
|
NewTopLine: Integer;
|
|
NewCodePos: TCodeXYPosition;
|
|
SrcEditor: TSourceEditorInterface;
|
|
begin
|
|
NewTopLine := 0;
|
|
NewCodePos := CleanCodeXYPosition;
|
|
Result := Tool.CleanPosToCaretAndTopLine(Node.StartPos, NewCodePos,NewTopLine);
|
|
if Result then
|
|
Result := LazarusIDE.DoOpenFileAndJumpToPos(NewCodePos.Code.Filename
|
|
,Point(NewCodePos.X,NewCodePos.Y), NewTopLine, -1,-1
|
|
,[ofRegularFile,ofUseCache]) = mrOk;
|
|
if Result then
|
|
begin
|
|
SrcEditor := SourceEditorManagerIntf.ActiveEditor;
|
|
if Assigned(SrcEditor) then
|
|
SrcEditor.EditorControl.SetFocus;
|
|
end;
|
|
end;
|
|
|
|
procedure TJumpHandler.DoJump(Sender: TObject);
|
|
var
|
|
SrcEditor: TSourceEditorInterface;
|
|
CodeBuffer: TCodeBuffer;
|
|
Node: TCodeTreeNode;
|
|
Tool: TCodeTool;
|
|
T: TJumpType;
|
|
begin
|
|
If (Sender <> nil) and (Sender is TComponent) then
|
|
T := TJumpType(TComponent(Sender).Tag);
|
|
|
|
if not LazarusIDE.BeginCodeTools then
|
|
Exit; //==>
|
|
|
|
SrcEditor := SourceEditorManagerIntf.ActiveEditor;
|
|
if not Assigned(SrcEditor) then
|
|
Exit; //==>
|
|
|
|
CodeBuffer := SrcEditor.CodeToolsBuffer as TCodeBuffer;
|
|
if CodeToolBoss.Explore(CodeBuffer,Tool,false,false) then
|
|
begin
|
|
case T of
|
|
jmpIntf : Node := Tool.FindInterfaceNode;
|
|
jmpIntfUses : Node := Tool.FindMainUsesSection;
|
|
jmpImpl : Node := Tool.FindImplementationNode;
|
|
jmpImplUses : Node := Tool.FindImplementationUsesSection;
|
|
jmpInit : Node := Tool.FindInitializationNode;
|
|
end;
|
|
if (Node <> nil) then
|
|
JumpToNode(Tool, Node)
|
|
else
|
|
ShowMessage(Format(SErrCouldNotFind, [cJumpNames[T]]));
|
|
end
|
|
else
|
|
LazarusIDE.DoJumpToCodeToolBossError;
|
|
end;
|
|
|
|
procedure TJumpHandler.DoJumpToImplementation(Sender: TObject);
|
|
begin
|
|
if (Sender <> nil) and (Sender is TComponent) then
|
|
TComponent(Sender).Tag := Ord(jmpImpl);
|
|
DoJump(Sender);
|
|
end;
|
|
|
|
|
|
end.
|
|
|