mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 03:49:30 +02:00
added refactoring submenu in source editor popupmenu and implemented simple var/const heuristic for extract proc
git-svn-id: trunk@6011 -
This commit is contained in:
parent
dea133d633
commit
f252d6adac
@ -1427,6 +1427,7 @@ end;
|
|||||||
function TCustomCodeTool.ReadTilBracketClose(
|
function TCustomCodeTool.ReadTilBracketClose(
|
||||||
ExceptionOnNotFound: boolean): boolean;
|
ExceptionOnNotFound: boolean): boolean;
|
||||||
// reads code brackets (not comment brackets)
|
// reads code brackets (not comment brackets)
|
||||||
|
// after call cursor is on the closing bracket
|
||||||
var CloseBracket, AntiCloseBracket: TCommonAtomFlag;
|
var CloseBracket, AntiCloseBracket: TCommonAtomFlag;
|
||||||
Start: TAtomPosition;
|
Start: TAtomPosition;
|
||||||
|
|
||||||
|
@ -95,11 +95,22 @@ type
|
|||||||
public
|
public
|
||||||
Node: TCodeTreeNode;
|
Node: TCodeTreeNode;
|
||||||
VarType: TExtractedProcVariableType;
|
VarType: TExtractedProcVariableType;
|
||||||
UsedInSelection: boolean;
|
ReadInSelection: boolean;
|
||||||
|
WriteInSelection: boolean;
|
||||||
UsedInNonSelection: boolean;
|
UsedInNonSelection: boolean;
|
||||||
|
ReadAfterSelection: boolean;
|
||||||
|
ReadAfterSelectionValid: boolean;
|
||||||
RemovedFromOldProc: boolean;
|
RemovedFromOldProc: boolean;
|
||||||
|
function UsedInSelection: boolean;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TExtractedProcVariable }
|
||||||
|
|
||||||
|
function TExtractedProcVariable.UsedInSelection: boolean;
|
||||||
|
begin
|
||||||
|
Result:=ReadInSelection or WriteInSelection;
|
||||||
|
end;
|
||||||
|
|
||||||
function CompareExtractedProcVariables(V1, V2: TExtractedProcVariable): integer;
|
function CompareExtractedProcVariables(V1, V2: TExtractedProcVariable): integer;
|
||||||
var
|
var
|
||||||
cmp: Integer;
|
cmp: Integer;
|
||||||
@ -217,42 +228,80 @@ function TExtractProcTool.ExtractProc(const StartPos, EndPos: TCodeXYPosition;
|
|||||||
ProcType: TExtractProcType; const ProcName: string;
|
ProcType: TExtractProcType; const ProcName: string;
|
||||||
var NewPos: TCodeXYPosition; var NewTopLine: integer;
|
var NewPos: TCodeXYPosition; var NewTopLine: integer;
|
||||||
SourceChangeCache: TSourceChangeCache): boolean;
|
SourceChangeCache: TSourceChangeCache): boolean;
|
||||||
|
type
|
||||||
|
TParameterType = (ptNone, ptConst, ptVar, ptOut, ptNoSpecifier);
|
||||||
const
|
const
|
||||||
ShortProcFormat = [phpWithoutClassKeyword];
|
ShortProcFormat = [phpWithoutClassKeyword];
|
||||||
|
ParameterTypeNames: array[TParameterType] of string = (
|
||||||
|
'ptNone', 'ptConst', 'ptVar', 'ptOut', 'ptNoSpecifier');
|
||||||
var
|
var
|
||||||
BlockStartPos, BlockEndPos: integer; // the selection
|
BlockStartPos, BlockEndPos: integer; // the selection
|
||||||
ProcNode: TCodeTreeNode; // the main proc node of the selection
|
ProcNode: TCodeTreeNode; // the main proc node of the selection
|
||||||
VarTree: TAVLTree;
|
VarTree: TAVLTree;
|
||||||
|
|
||||||
procedure AddVariableToTree(VarNode: TCodeTreeNode; IsInSelection,
|
procedure AddVariableToTree(VarNode: TCodeTreeNode; IsInSelection,
|
||||||
IsParameter: boolean);
|
IsAfterSelection, IsChanged: boolean; ParameterType: TParameterType);
|
||||||
var
|
var
|
||||||
NewProcVar: TExtractedProcVariable;
|
|
||||||
AVLNode: TAVLTreeNode;
|
AVLNode: TAVLTreeNode;
|
||||||
ProcVar: TExtractedProcVariable;
|
ProcVar: TExtractedProcVariable;
|
||||||
UsedInNonSelection: Boolean;
|
|
||||||
begin
|
begin
|
||||||
{$IFDEF CTDebug}
|
{$IFDEF CTDebug}
|
||||||
DebugLn('AddVariableToTree A Ident=',GetIdentifier(@Src[VarNode.StartPos]),' IsInSelection=',dbgs(IsInSelection),' IsParameter=',dbgs(IsParameter));
|
DebugLn('AddVariableToTree A Ident=',GetIdentifier(@Src[VarNode.StartPos]),
|
||||||
|
' IsInSelection=',dbgs(IsInSelection),
|
||||||
|
' ParameterType=',ParameterTypeNames[ParameterType]);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
UsedInNonSelection:=(not IsInSelection) or IsParameter;
|
|
||||||
if VarTree=nil then
|
if VarTree=nil then
|
||||||
VarTree:=TAVLTree.Create(@CompareExtractedProcVariables);
|
VarTree:=TAVLTree.Create(@CompareExtractedProcVariables);
|
||||||
AVLNode:=VarTree.FindKey(VarNode,@CompareNodeWithExtractedProcVariable);
|
AVLNode:=VarTree.FindKey(VarNode,@CompareNodeWithExtractedProcVariable);
|
||||||
if AVLNode<>nil then begin
|
if AVLNode<>nil then begin
|
||||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||||
ProcVar.UsedInSelection:=ProcVar.UsedInSelection or IsInSelection;
|
|
||||||
ProcVar.UsedInNonSelection:=ProcVar.UsedInNonSelection or UsedInNonSelection;
|
|
||||||
end else begin
|
end else begin
|
||||||
NewProcVar:=TExtractedProcVariable.Create;
|
ProcVar:=TExtractedProcVariable.Create;
|
||||||
NewProcVar.Node:=VarNode;
|
ProcVar.Node:=VarNode;
|
||||||
NewProcVar.UsedInSelection:=IsInSelection;
|
end;
|
||||||
NewProcVar.UsedInNonSelection:=UsedInNonSelection;
|
ProcVar.ReadInSelection:=ProcVar.ReadInSelection or IsInSelection;
|
||||||
if IsParameter then
|
ProcVar.WriteInSelection:=ProcVar.WriteInSelection
|
||||||
NewProcVar.VarType:=epvtParameter
|
or (IsInSelection and IsChanged);
|
||||||
|
ProcVar.UsedInNonSelection:=ProcVar.UsedInNonSelection
|
||||||
|
or (not IsInSelection) or (ParameterType<>ptNone);
|
||||||
|
if (not ProcVar.ReadAfterSelectionValid) then begin
|
||||||
|
// a) variable is a var or out parameter
|
||||||
|
// => the variable value IS needed after the extracted proc
|
||||||
|
// b) just after the selection the variable is read
|
||||||
|
// => the variable value IS needed after the extracted proc
|
||||||
|
// c) just after the selection the variable is written
|
||||||
|
// => the variable value IS NOT needed after the extracted proc
|
||||||
|
if (ParameterType in [ptOut,ptVar]) then begin
|
||||||
|
ProcVar.ReadAfterSelectionValid:=true;
|
||||||
|
ProcVar.ReadAfterSelection:=true;
|
||||||
|
end else if (not IsInSelection) and IsAfterSelection then begin
|
||||||
|
ProcVar.ReadAfterSelectionValid:=true;
|
||||||
|
ProcVar.ReadAfterSelection:=not IsChanged;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if AVLNode=nil then begin
|
||||||
|
if ParameterType<>ptNone then
|
||||||
|
ProcVar.VarType:=epvtParameter
|
||||||
else
|
else
|
||||||
NewProcVar.VarType:=epvtLocalVar;
|
ProcVar.VarType:=epvtLocalVar;
|
||||||
VarTree.Add(NewProcVar);
|
VarTree.Add(ProcVar);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function VariableIsChanged(VarStartPos: integer): boolean;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
MoveCursorToCleanPos(VarStartPos);
|
||||||
|
// read identifier
|
||||||
|
ReadNextAtom;
|
||||||
|
if CurPos.Flag in [cafRoundBracketOpen] then
|
||||||
|
ReadTilBracketClose(true);
|
||||||
|
// read next atom
|
||||||
|
ReadNextAtom;
|
||||||
|
if AtomIs(':=') or AtomIs('+=') or AtomIs('-=') or AtomIs('*=')
|
||||||
|
or AtomIs('/=') then begin
|
||||||
|
Result:=true;
|
||||||
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -265,11 +314,15 @@ var
|
|||||||
IsInSelection: Boolean;
|
IsInSelection: Boolean;
|
||||||
ClosestProcNode: TCodeTreeNode;
|
ClosestProcNode: TCodeTreeNode;
|
||||||
IsParameter: boolean;
|
IsParameter: boolean;
|
||||||
|
IsChanged: Boolean;
|
||||||
|
IsAfterSelection: Boolean;
|
||||||
|
ParameterType: TParameterType;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
// find start of variable
|
// find start of variable
|
||||||
VarStartPos:=FindStartOfVariable(CurPos.StartPos);
|
VarStartPos:=FindStartOfVariable(CurPos.StartPos);
|
||||||
IsInSelection:=(VarStartPos>=BlockStartPos) and (VarStartPos<BlockEndPos);
|
IsInSelection:=(VarStartPos>=BlockStartPos) and (VarStartPos<BlockEndPos);
|
||||||
|
IsAfterSelection:=(VarStartPos>=BlockEndPos);
|
||||||
MoveCursorToCleanPos(VarStartPos);
|
MoveCursorToCleanPos(VarStartPos);
|
||||||
Params:=TFindDeclarationParams.Create;
|
Params:=TFindDeclarationParams.Create;
|
||||||
try
|
try
|
||||||
@ -299,7 +352,21 @@ var
|
|||||||
if ClosestProcNode=ProcNode then begin
|
if ClosestProcNode=ProcNode then begin
|
||||||
// VarNode is a variable defined by the main proc
|
// VarNode is a variable defined by the main proc
|
||||||
IsParameter:=VarNode.GetNodeOfType(ctnProcedureHead)<>nil;
|
IsParameter:=VarNode.GetNodeOfType(ctnProcedureHead)<>nil;
|
||||||
AddVariableToTree(VarNode,IsInSelection,IsParameter);
|
ParameterType:=ptNone;
|
||||||
|
if IsParameter then begin
|
||||||
|
MoveCursorToParameterSpecifier(VarNode);
|
||||||
|
if UpAtomIs('CONST') then
|
||||||
|
ParameterType:=ptConst
|
||||||
|
else if UpAtomIs('VAR') then
|
||||||
|
ParameterType:=ptVar
|
||||||
|
else if UpAtomIs('OUT') then
|
||||||
|
ParameterType:=ptOut
|
||||||
|
else
|
||||||
|
ParameterType:=ptNoSpecifier;
|
||||||
|
end;
|
||||||
|
IsChanged:=VariableIsChanged(VarStartPos);
|
||||||
|
AddVariableToTree(VarNode,IsInSelection,IsAfterSelection,IsChanged,
|
||||||
|
ParameterType);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -382,8 +449,11 @@ var
|
|||||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||||
{$IFDEF CTDebug}
|
{$IFDEF CTDebug}
|
||||||
DebugLn('TExtractProcTool.ReplaceSelectionWithCall B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
DebugLn('TExtractProcTool.ReplaceSelectionWithCall B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
||||||
' UsedInSelection=',dbgs(ProcVar.UsedInSelection),
|
' ReadInSelection=',dbgs(ProcVar.ReadInSelection),
|
||||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection));
|
' WriteInSelection=',dbgs(ProcVar.WriteInSelection),
|
||||||
|
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection),
|
||||||
|
' ReadAfterSelection=',dbgs(ProcVar.ReadAfterSelection),
|
||||||
|
'');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if ProcVar.UsedInSelection and ProcVar.UsedInNonSelection then begin
|
if ProcVar.UsedInSelection and ProcVar.UsedInNonSelection then begin
|
||||||
// variables
|
// variables
|
||||||
@ -419,12 +489,8 @@ var
|
|||||||
Result:=false;
|
Result:=false;
|
||||||
end else begin
|
end else begin
|
||||||
CurProcVar:=TExtractedProcVariable(AVLNode.Data);
|
CurProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||||
if (not CurProcVar.UsedInSelection)
|
Result:=(not CurProcVar.UsedInNonSelection)
|
||||||
or (CurProcVar.UsedInNonSelection) then begin
|
and CurProcVar.UsedInSelection;
|
||||||
Result:=false;
|
|
||||||
end else begin
|
|
||||||
Result:=true;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -553,8 +619,11 @@ var
|
|||||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||||
{$IFDEF CTDebug}
|
{$IFDEF CTDebug}
|
||||||
DebugLn('TExtractProcTool.DeleteMovedLocalVariables B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
DebugLn('TExtractProcTool.DeleteMovedLocalVariables B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
||||||
' UsedInSelection=',dbgs(ProcVar.UsedInSelection),
|
' ReadInSelection=',dbgs(ProcVar.ReadInSelection),
|
||||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection));
|
' WriteInSelection=',dbgs(ProcVar.WriteInSelection),
|
||||||
|
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection),
|
||||||
|
' ReadAfterSelection=',dbgs(ProcVar.ReadAfterSelection),
|
||||||
|
'');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if ProcVar.UsedInSelection and (not ProcVar.UsedInNonSelection) then
|
if ProcVar.UsedInSelection and (not ProcVar.UsedInNonSelection) then
|
||||||
begin
|
begin
|
||||||
@ -613,8 +682,11 @@ var
|
|||||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||||
{$IFDEF CTDebug}
|
{$IFDEF CTDebug}
|
||||||
DebugLn('TExtractProcTool.CreateProcParamList B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
DebugLn('TExtractProcTool.CreateProcParamList B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
||||||
' UsedInSelection=',dbgs(ProcVar.UsedInSelection),
|
' ReadInSelection=',dbgs(ProcVar.ReadInSelection),
|
||||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection));
|
' WriteInSelection=',dbgs(ProcVar.WriteInSelection),
|
||||||
|
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection),
|
||||||
|
' ReadAfterSelection=',dbgs(ProcVar.ReadAfterSelection),
|
||||||
|
'');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if ProcVar.UsedInSelection and ProcVar.UsedInNonSelection then begin
|
if ProcVar.UsedInSelection and ProcVar.UsedInNonSelection then begin
|
||||||
// extract identifier and type
|
// extract identifier and type
|
||||||
@ -629,6 +701,8 @@ var
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
// ToDo: ParamSpecifier 'var ' and none
|
// ToDo: ParamSpecifier 'var ' and none
|
||||||
ParamSpecifier:='const ';
|
ParamSpecifier:='const ';
|
||||||
|
if ProcVar.ReadAfterSelection then
|
||||||
|
ParamSpecifier:='var ';
|
||||||
CompleteParamListCode:=CompleteParamListCode
|
CompleteParamListCode:=CompleteParamListCode
|
||||||
+ParamSpecifier+ParamName+':'+ParamTypeCode;
|
+ParamSpecifier+ParamName+':'+ParamTypeCode;
|
||||||
BaseParamListCode:=BaseParamListCode+':'+ParamTypeCode;
|
BaseParamListCode:=BaseParamListCode+':'+ParamTypeCode;
|
||||||
@ -665,8 +739,10 @@ var
|
|||||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||||
{$IFDEF CTDebug}
|
{$IFDEF CTDebug}
|
||||||
DebugLn('TExtractProcTool.CreateProcVarSection B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
DebugLn('TExtractProcTool.CreateProcVarSection B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
||||||
' UsedInSelection=',dbgs(ProcVar.UsedInSelection),
|
' ReadInSelection=',dbgs(ProcVar.ReadInSelection),
|
||||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection));
|
' WriteInSelection=',dbgs(ProcVar.WriteInSelection),
|
||||||
|
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection),
|
||||||
|
' ReadAfterSelection=',dbgs(ProcVar.ReadAfterSelection),'');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if ProcVar.UsedInSelection and (not ProcVar.UsedInNonSelection) then
|
if ProcVar.UsedInSelection and (not ProcVar.UsedInNonSelection) then
|
||||||
begin
|
begin
|
||||||
|
@ -120,6 +120,8 @@ type
|
|||||||
function NodeIsPartOfTypeDefinition(ANode: TCodeTreeNode): boolean;
|
function NodeIsPartOfTypeDefinition(ANode: TCodeTreeNode): boolean;
|
||||||
function ExtractDefinitionNodeType(DefinitionNode: TCodeTreeNode): string;
|
function ExtractDefinitionNodeType(DefinitionNode: TCodeTreeNode): string;
|
||||||
function ExtractDefinitionName(DefinitionNode: TCodeTreeNode): string;
|
function ExtractDefinitionName(DefinitionNode: TCodeTreeNode): string;
|
||||||
|
function MoveCursorToParameterSpecifier(DefinitionNode: TCodeTreeNode
|
||||||
|
): boolean;
|
||||||
|
|
||||||
// sections
|
// sections
|
||||||
function GetSourceType: TCodeTreeNodeDesc;
|
function GetSourceType: TCodeTreeNodeDesc;
|
||||||
@ -1233,6 +1235,26 @@ begin
|
|||||||
Result:=copy(Src,DefinitionNode.StartPos,Len);
|
Result:=copy(Src,DefinitionNode.StartPos,Len);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TPascalReaderTool.MoveCursorToParameterSpecifier(
|
||||||
|
DefinitionNode: TCodeTreeNode): boolean;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
if (DefinitionNode=nil) or (DefinitionNode.Parent=nil)
|
||||||
|
or (DefinitionNode.Parent.Desc<>ctnProcedureHead) then exit;
|
||||||
|
// find first variable node of this type (e.g. var a,b,c,d: integer)
|
||||||
|
while (DefinitionNode.PriorBrother<>nil)
|
||||||
|
and (DefinitionNode.PriorBrother.FirstChild=nil) do
|
||||||
|
DefinitionNode:=DefinitionNode.PriorBrother;
|
||||||
|
if DefinitionNode.PriorBrother<>nil then
|
||||||
|
MoveCursorToCleanPos(DefinitionNode.PriorBrother.EndPos)
|
||||||
|
else
|
||||||
|
MoveCursorToCleanPos(DefinitionNode.Parent.StartPos);
|
||||||
|
ReadNextAtom;
|
||||||
|
while (CurPos.StartPos<DefinitionNode.StartPos) do ReadNextAtom;
|
||||||
|
UndoReadNextAtom;
|
||||||
|
Result:=UpAtomIs('CONST') or UpAtomIs('VAR') or UpAtomIs('OUT');
|
||||||
|
end;
|
||||||
|
|
||||||
function TPascalReaderTool.PropertyIsDefault(PropertyNode: TCodeTreeNode
|
function TPascalReaderTool.PropertyIsDefault(PropertyNode: TCodeTreeNode
|
||||||
): boolean;
|
): boolean;
|
||||||
begin
|
begin
|
||||||
|
@ -1056,6 +1056,10 @@ resourcestring
|
|||||||
uemViewCallStackCursor = 'View Call Stack';
|
uemViewCallStackCursor = 'View Call Stack';
|
||||||
uemMoveEditorLeft='Move Editor Left';
|
uemMoveEditorLeft='Move Editor Left';
|
||||||
uemMoveEditorRight='Move Editor Right';
|
uemMoveEditorRight='Move Editor Right';
|
||||||
|
uemRefactor = 'Refactoring';
|
||||||
|
uemCompleteCode = 'Complete Code';
|
||||||
|
uemEncloseSelection = 'Enclose Selection';
|
||||||
|
uemExtractProc = 'Extract Procedure';
|
||||||
uemEditorproperties='Editor properties';
|
uemEditorproperties='Editor properties';
|
||||||
ueNotImplCap='Not implemented yet';
|
ueNotImplCap='Not implemented yet';
|
||||||
ueNotImplText='If You can help us to implement this feature, mail to '
|
ueNotImplText='If You can help us to implement this feature, mail to '
|
||||||
|
77
ide/main.pp
77
ide/main.pp
@ -580,7 +580,7 @@ type
|
|||||||
TheCompilerOptions: TCompilerOptions): TModalResult;
|
TheCompilerOptions: TCompilerOptions): TModalResult;
|
||||||
|
|
||||||
// edit menu
|
// edit menu
|
||||||
procedure DoEditMenuCommand(EditorCommand: integer);
|
procedure DoCommand(EditorCommand: integer); override;
|
||||||
|
|
||||||
// tools
|
// tools
|
||||||
function DoConvertDFMtoLFM: TModalResult;
|
function DoConvertDFMtoLFM: TModalResult;
|
||||||
@ -10416,132 +10416,132 @@ end;
|
|||||||
|
|
||||||
procedure TMainIDE.mnuEditCopyClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditCopyClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecCopy);
|
DoCommand(ecCopy);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditCutClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditCutClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecCut);
|
DoCommand(ecCut);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditPasteClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditPasteClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecPaste);
|
DoCommand(ecPaste);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditRedoClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditRedoClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecRedo);
|
DoCommand(ecRedo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditUndoClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditUndoClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecUndo);
|
DoCommand(ecUndo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditIndentBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditIndentBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecBlockIndent);
|
DoCommand(ecBlockIndent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditUnindentBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditUnindentBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecBlockUnindent);
|
DoCommand(ecBlockUnindent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditEncloseBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditEncloseBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionEnclose);
|
DoCommand(ecSelectionEnclose);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditUpperCaseBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditUpperCaseBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionUpperCase);
|
DoCommand(ecSelectionUpperCase);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditLowerCaseBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditLowerCaseBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionLowerCase);
|
DoCommand(ecSelectionLowerCase);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditTabsToSpacesBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditTabsToSpacesBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionTabs2Spaces);
|
DoCommand(ecSelectionTabs2Spaces);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditCommentBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditCommentBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionComment);
|
DoCommand(ecSelectionComment);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditUncommentBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditUncommentBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionUncomment);
|
DoCommand(ecSelectionUncomment);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditConditionalBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditConditionalBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionConditional);
|
DoCommand(ecSelectionConditional);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditSortBlockClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditSortBlockClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionSort);
|
DoCommand(ecSelectionSort);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditSelectionBreakLinesClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditSelectionBreakLinesClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectionBreakLines);
|
DoCommand(ecSelectionBreakLines);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditSelectAllClick(Sender: TObject);
|
procedure TMainIDE.mnuEditSelectAllClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectAll);
|
DoCommand(ecSelectAll);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditSelectCodeBlockClick(Sender: TObject);
|
procedure TMainIDE.mnuEditSelectCodeBlockClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectCodeBlock);
|
DoCommand(ecSelectCodeBlock);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditSelectToBraceClick(Sender: TObject);
|
procedure TMainIDE.mnuEditSelectToBraceClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectToBrace);
|
DoCommand(ecSelectToBrace);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditSelectLineClick(Sender: TObject);
|
procedure TMainIDE.mnuEditSelectLineClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectLine);
|
DoCommand(ecSelectLine);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditSelectParagraphClick(Sender: TObject);
|
procedure TMainIDE.mnuEditSelectParagraphClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecSelectParagraph);
|
DoCommand(ecSelectParagraph);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertGPLNoticeClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertGPLNoticeClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertGPLNotice);
|
DoCommand(ecInsertGPLNotice);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertLGPLNoticeClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertLGPLNoticeClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertLGPLNotice);
|
DoCommand(ecInsertLGPLNotice);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertUsernameClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertUsernameClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertUserName);
|
DoCommand(ecInsertUserName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertDateTimeClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertDateTimeClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertDateTime);
|
DoCommand(ecInsertDateTime);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertChangeLogEntryClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertChangeLogEntryClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertChangeLogEntry);
|
DoCommand(ecInsertChangeLogEntry);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuSearchFindInFiles(Sender: TObject);
|
procedure TMainIDE.mnuSearchFindInFiles(Sender: TObject);
|
||||||
@ -10561,50 +10561,50 @@ end;
|
|||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCharacterClicked(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCharacterClicked(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCharacter);
|
DoCommand(ecInsertCharacter);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCVSAuthorClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCVSAuthorClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCVSAuthor);
|
DoCommand(ecInsertCVSAuthor);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCVSDateClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCVSDateClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCVSDate);
|
DoCommand(ecInsertCVSDate);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCVSHeaderClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCVSHeaderClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCVSHeader);
|
DoCommand(ecInsertCVSHeader);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCVSIDClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCVSIDClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCVSID);
|
DoCommand(ecInsertCVSID);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCVSLogClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCVSLogClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCVSLog);
|
DoCommand(ecInsertCVSLog);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCVSNameClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCVSNameClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCVSName);
|
DoCommand(ecInsertCVSName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCVSRevisionClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCVSRevisionClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCVSRevision);
|
DoCommand(ecInsertCVSRevision);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.mnuEditInsertCVSSourceClick(Sender: TObject);
|
procedure TMainIDE.mnuEditInsertCVSSourceClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DoEditMenuCommand(ecInsertCVSSource);
|
DoCommand(ecInsertCVSSource);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.DoEditMenuCommand(EditorCommand: integer);
|
procedure TMainIDE.DoCommand(EditorCommand: integer);
|
||||||
var
|
var
|
||||||
ActiveSourceEditor: TSourceEditor;
|
ActiveSourceEditor: TSourceEditor;
|
||||||
ActiveUnitInfo: TUnitInfo;
|
ActiveUnitInfo: TUnitInfo;
|
||||||
@ -10704,6 +10704,9 @@ end.
|
|||||||
|
|
||||||
{ =============================================================================
|
{ =============================================================================
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.771 2004/09/16 00:15:49 mattias
|
||||||
|
added refactoring submenu in source editor popupmenu and implemented simple var/const heuristic for extract proc
|
||||||
|
|
||||||
Revision 1.770 2004/09/14 10:23:44 mattias
|
Revision 1.770 2004/09/14 10:23:44 mattias
|
||||||
implemented finding DefineProperties in registered TPersistent, implemented auto commenting of missing units for Delphi unit conversion
|
implemented finding DefineProperties in registered TPersistent, implemented auto commenting of missing units for Delphi unit conversion
|
||||||
|
|
||||||
|
@ -193,6 +193,8 @@ type
|
|||||||
var ActiveSourceEditor: TSourceEditorInterface;
|
var ActiveSourceEditor: TSourceEditorInterface;
|
||||||
var ActiveUnitInfo: TUnitInfo); virtual; abstract;
|
var ActiveUnitInfo: TUnitInfo); virtual; abstract;
|
||||||
|
|
||||||
|
procedure DoCommand(EditorCommand: integer); virtual; abstract;
|
||||||
|
|
||||||
function GetTestBuildDir: string; virtual; abstract;
|
function GetTestBuildDir: string; virtual; abstract;
|
||||||
function GetTestUnitFilename(AnUnitInfo: TUnitInfo): string; virtual; abstract;
|
function GetTestUnitFilename(AnUnitInfo: TUnitInfo): string; virtual; abstract;
|
||||||
function IsTestUnitFilename(const AFilename: string): boolean; virtual; abstract;
|
function IsTestUnitFilename(const AFilename: string): boolean; virtual; abstract;
|
||||||
|
@ -325,7 +325,14 @@ type
|
|||||||
TSourceNotebookStates = set of TSourceNotebookState;
|
TSourceNotebookStates = set of TSourceNotebookState;
|
||||||
|
|
||||||
TSourceNotebook = class(TForm)
|
TSourceNotebook = class(TForm)
|
||||||
|
AddBreakpointMenuItem: TMenuItem;
|
||||||
|
AddWatchAtCursorMenuItem: TMenuItem;
|
||||||
ClosePageMenuItem: TMenuItem;
|
ClosePageMenuItem: TMenuItem;
|
||||||
|
CompleteCodeMenuItem: TMenuItem;
|
||||||
|
DebugMenuItem: TMenuItem;
|
||||||
|
EditorPropertiesMenuItem: TMenuItem;
|
||||||
|
EncloseSelectionMenuItem: TMenuItem;
|
||||||
|
ExtractProcMenuItem: TMenuItem;
|
||||||
FindDeclarationMenuItem: TMenuItem;
|
FindDeclarationMenuItem: TMenuItem;
|
||||||
GotoBookmarkMenuItem: TMenuItem;
|
GotoBookmarkMenuItem: TMenuItem;
|
||||||
MoveEditorLeftMenuItem: TMenuItem;
|
MoveEditorLeftMenuItem: TMenuItem;
|
||||||
@ -333,19 +340,19 @@ type
|
|||||||
Notebook: TNotebook;
|
Notebook: TNotebook;
|
||||||
OpenFileAtCursorMenuItem: TMenuItem;
|
OpenFileAtCursorMenuItem: TMenuItem;
|
||||||
ReadOnlyMenuItem: TMenuItem;
|
ReadOnlyMenuItem: TMenuItem;
|
||||||
|
RefactorMenuItem: TMenuItem;
|
||||||
|
RunToCursorMenuItem: TMenuItem;
|
||||||
SetBookmarkMenuItem: TMenuItem;
|
SetBookmarkMenuItem: TMenuItem;
|
||||||
ShowLineNumbersMenuItem: TMenuItem;
|
ShowLineNumbersMenuItem: TMenuItem;
|
||||||
ShowUnitInfoMenuItem: TMenuItem;
|
ShowUnitInfoMenuItem: TMenuItem;
|
||||||
SrcPopUpMenu: TPopupMenu;
|
SrcPopUpMenu: TPopupMenu;
|
||||||
StatusBar: TStatusBar;
|
StatusBar: TStatusBar;
|
||||||
DebugMenuItem: TMenuItem;
|
|
||||||
AddBreakpointMenuItem: TMenuItem;
|
|
||||||
AddWatchAtCursorMenuItem: TMenuItem;
|
|
||||||
RunToCursorMenuItem: TMenuItem;
|
|
||||||
ViewCallStackMenuItem: TMenuItem;
|
ViewCallStackMenuItem: TMenuItem;
|
||||||
EditorPropertiesMenuItem: TMenuItem;
|
|
||||||
Procedure AddBreakpointClicked(Sender: TObject);
|
Procedure AddBreakpointClicked(Sender: TObject);
|
||||||
|
procedure CompleteCodeMenuItemClick(Sender: TObject);
|
||||||
Procedure DeleteBreakpointClicked(Sender: TObject);
|
Procedure DeleteBreakpointClicked(Sender: TObject);
|
||||||
|
procedure EncloseSelectionMenuItemClick(Sender: TObject);
|
||||||
|
procedure ExtractProcMenuItemClick(Sender: TObject);
|
||||||
procedure RunToClicked(Sender: TObject);
|
procedure RunToClicked(Sender: TObject);
|
||||||
procedure ViewCallStackClick(Sender: TObject);
|
procedure ViewCallStackClick(Sender: TObject);
|
||||||
Procedure AddWatchAtCursor(Sender: TObject);
|
Procedure AddWatchAtCursor(Sender: TObject);
|
||||||
@ -3061,6 +3068,39 @@ Begin
|
|||||||
|
|
||||||
SrcPopupMenu.Items.Add(Seperator);
|
SrcPopupMenu.Items.Add(Seperator);
|
||||||
|
|
||||||
|
RefactorMenuItem := TMenuItem.Create(Self);
|
||||||
|
with RefactorMenuItem do begin
|
||||||
|
Name:='RefactorMenuItem';
|
||||||
|
Caption := uemRefactor;
|
||||||
|
end;
|
||||||
|
SrcPopupMenu.Items.Add(RefactorMenuItem);
|
||||||
|
|
||||||
|
CompleteCodeMenuItem := TMenuItem.Create(Self);
|
||||||
|
with CompleteCodeMenuItem do begin
|
||||||
|
Name := 'CompleteCodeMenuItem';
|
||||||
|
Caption := uemCompleteCode;
|
||||||
|
OnClick :=@CompleteCodeMenuItemClick;
|
||||||
|
end;
|
||||||
|
RefactorMenuItem.Add(CompleteCodeMenuItem);
|
||||||
|
|
||||||
|
EncloseSelectionMenuItem := TMenuItem.Create(Self);
|
||||||
|
with EncloseSelectionMenuItem do begin
|
||||||
|
Name := 'EncloseSelectionMenuItem';
|
||||||
|
Caption := uemEncloseSelection;
|
||||||
|
OnClick :=@EncloseSelectionMenuItemClick;
|
||||||
|
end;
|
||||||
|
RefactorMenuItem.Add(EncloseSelectionMenuItem);
|
||||||
|
|
||||||
|
ExtractProcMenuItem := TMenuItem.Create(Self);
|
||||||
|
with ExtractProcMenuItem do begin
|
||||||
|
Name := 'ExtractProcMenuItem';
|
||||||
|
Caption := uemExtractProc;
|
||||||
|
OnClick :=@ExtractProcMenuItemClick;
|
||||||
|
end;
|
||||||
|
RefactorMenuItem.Add(ExtractProcMenuItem);
|
||||||
|
|
||||||
|
SrcPopupMenu.Items.Add(Seperator);
|
||||||
|
|
||||||
EditorPropertiesMenuItem := TMenuItem.Create(Self);
|
EditorPropertiesMenuItem := TMenuItem.Create(Self);
|
||||||
with EditorPropertiesMenuItem do begin
|
with EditorPropertiesMenuItem do begin
|
||||||
Name := 'EditorPropertiesMenuItem';
|
Name := 'EditorPropertiesMenuItem';
|
||||||
@ -3846,6 +3886,11 @@ begin
|
|||||||
ASrcEdit.EditorComponent.CaretY);
|
ASrcEdit.EditorComponent.CaretY);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSourceNotebook.CompleteCodeMenuItemClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
MainIDEInterface.DoCommand(ecCompleteCode);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSourceNotebook.DeleteBreakpointClicked(Sender: TObject);
|
procedure TSourceNotebook.DeleteBreakpointClicked(Sender: TObject);
|
||||||
var
|
var
|
||||||
ASrcEdit: TSourceEditor;
|
ASrcEdit: TSourceEditor;
|
||||||
@ -3856,6 +3901,20 @@ begin
|
|||||||
ASrcEdit.EditorComponent.CaretY);
|
ASrcEdit.EditorComponent.CaretY);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSourceNotebook.EncloseSelectionMenuItemClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
ASrcEdit: TSourceEditor;
|
||||||
|
begin
|
||||||
|
ASrcEdit:=GetActiveSE;
|
||||||
|
if ASrcEdit=nil then exit;
|
||||||
|
ASrcEdit.EncloseSelection;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSourceNotebook.ExtractProcMenuItemClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
MainIDEInterface.DoCommand(ecExtractProc);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSourceNotebook.RunToClicked(Sender: TObject);
|
procedure TSourceNotebook.RunToClicked(Sender: TObject);
|
||||||
var
|
var
|
||||||
ASrcEdit: TSourceEditor;
|
ASrcEdit: TSourceEditor;
|
||||||
|
Loading…
Reference in New Issue
Block a user