lazarus/components/editortoolbar/jumpto_impl.pas
maxim 9570fff742 Components, editortoolbar:
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 -
2010-06-14 17:51:26 +00:00

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.