mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 00:59: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(
|
||||
ExceptionOnNotFound: boolean): boolean;
|
||||
// reads code brackets (not comment brackets)
|
||||
// after call cursor is on the closing bracket
|
||||
var CloseBracket, AntiCloseBracket: TCommonAtomFlag;
|
||||
Start: TAtomPosition;
|
||||
|
||||
|
@ -95,11 +95,22 @@ type
|
||||
public
|
||||
Node: TCodeTreeNode;
|
||||
VarType: TExtractedProcVariableType;
|
||||
UsedInSelection: boolean;
|
||||
ReadInSelection: boolean;
|
||||
WriteInSelection: boolean;
|
||||
UsedInNonSelection: boolean;
|
||||
ReadAfterSelection: boolean;
|
||||
ReadAfterSelectionValid: boolean;
|
||||
RemovedFromOldProc: boolean;
|
||||
function UsedInSelection: boolean;
|
||||
end;
|
||||
|
||||
|
||||
{ TExtractedProcVariable }
|
||||
|
||||
function TExtractedProcVariable.UsedInSelection: boolean;
|
||||
begin
|
||||
Result:=ReadInSelection or WriteInSelection;
|
||||
end;
|
||||
|
||||
function CompareExtractedProcVariables(V1, V2: TExtractedProcVariable): integer;
|
||||
var
|
||||
cmp: Integer;
|
||||
@ -217,42 +228,80 @@ function TExtractProcTool.ExtractProc(const StartPos, EndPos: TCodeXYPosition;
|
||||
ProcType: TExtractProcType; const ProcName: string;
|
||||
var NewPos: TCodeXYPosition; var NewTopLine: integer;
|
||||
SourceChangeCache: TSourceChangeCache): boolean;
|
||||
type
|
||||
TParameterType = (ptNone, ptConst, ptVar, ptOut, ptNoSpecifier);
|
||||
const
|
||||
ShortProcFormat = [phpWithoutClassKeyword];
|
||||
ParameterTypeNames: array[TParameterType] of string = (
|
||||
'ptNone', 'ptConst', 'ptVar', 'ptOut', 'ptNoSpecifier');
|
||||
var
|
||||
BlockStartPos, BlockEndPos: integer; // the selection
|
||||
ProcNode: TCodeTreeNode; // the main proc node of the selection
|
||||
VarTree: TAVLTree;
|
||||
|
||||
procedure AddVariableToTree(VarNode: TCodeTreeNode; IsInSelection,
|
||||
IsParameter: boolean);
|
||||
IsAfterSelection, IsChanged: boolean; ParameterType: TParameterType);
|
||||
var
|
||||
NewProcVar: TExtractedProcVariable;
|
||||
AVLNode: TAVLTreeNode;
|
||||
ProcVar: TExtractedProcVariable;
|
||||
UsedInNonSelection: Boolean;
|
||||
begin
|
||||
{$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}
|
||||
UsedInNonSelection:=(not IsInSelection) or IsParameter;
|
||||
if VarTree=nil then
|
||||
VarTree:=TAVLTree.Create(@CompareExtractedProcVariables);
|
||||
AVLNode:=VarTree.FindKey(VarNode,@CompareNodeWithExtractedProcVariable);
|
||||
if AVLNode<>nil then begin
|
||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||
ProcVar.UsedInSelection:=ProcVar.UsedInSelection or IsInSelection;
|
||||
ProcVar.UsedInNonSelection:=ProcVar.UsedInNonSelection or UsedInNonSelection;
|
||||
end else begin
|
||||
NewProcVar:=TExtractedProcVariable.Create;
|
||||
NewProcVar.Node:=VarNode;
|
||||
NewProcVar.UsedInSelection:=IsInSelection;
|
||||
NewProcVar.UsedInNonSelection:=UsedInNonSelection;
|
||||
if IsParameter then
|
||||
NewProcVar.VarType:=epvtParameter
|
||||
ProcVar:=TExtractedProcVariable.Create;
|
||||
ProcVar.Node:=VarNode;
|
||||
end;
|
||||
ProcVar.ReadInSelection:=ProcVar.ReadInSelection or IsInSelection;
|
||||
ProcVar.WriteInSelection:=ProcVar.WriteInSelection
|
||||
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
|
||||
NewProcVar.VarType:=epvtLocalVar;
|
||||
VarTree.Add(NewProcVar);
|
||||
ProcVar.VarType:=epvtLocalVar;
|
||||
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;
|
||||
|
||||
@ -265,11 +314,15 @@ var
|
||||
IsInSelection: Boolean;
|
||||
ClosestProcNode: TCodeTreeNode;
|
||||
IsParameter: boolean;
|
||||
IsChanged: Boolean;
|
||||
IsAfterSelection: Boolean;
|
||||
ParameterType: TParameterType;
|
||||
begin
|
||||
Result:=false;
|
||||
// find start of variable
|
||||
VarStartPos:=FindStartOfVariable(CurPos.StartPos);
|
||||
IsInSelection:=(VarStartPos>=BlockStartPos) and (VarStartPos<BlockEndPos);
|
||||
IsAfterSelection:=(VarStartPos>=BlockEndPos);
|
||||
MoveCursorToCleanPos(VarStartPos);
|
||||
Params:=TFindDeclarationParams.Create;
|
||||
try
|
||||
@ -299,7 +352,21 @@ var
|
||||
if ClosestProcNode=ProcNode then begin
|
||||
// VarNode is a variable defined by the main proc
|
||||
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;
|
||||
@ -382,8 +449,11 @@ var
|
||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||
{$IFDEF CTDebug}
|
||||
DebugLn('TExtractProcTool.ReplaceSelectionWithCall B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
||||
' UsedInSelection=',dbgs(ProcVar.UsedInSelection),
|
||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection));
|
||||
' ReadInSelection=',dbgs(ProcVar.ReadInSelection),
|
||||
' WriteInSelection=',dbgs(ProcVar.WriteInSelection),
|
||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection),
|
||||
' ReadAfterSelection=',dbgs(ProcVar.ReadAfterSelection),
|
||||
'');
|
||||
{$ENDIF}
|
||||
if ProcVar.UsedInSelection and ProcVar.UsedInNonSelection then begin
|
||||
// variables
|
||||
@ -419,12 +489,8 @@ var
|
||||
Result:=false;
|
||||
end else begin
|
||||
CurProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||
if (not CurProcVar.UsedInSelection)
|
||||
or (CurProcVar.UsedInNonSelection) then begin
|
||||
Result:=false;
|
||||
end else begin
|
||||
Result:=true;
|
||||
end;
|
||||
Result:=(not CurProcVar.UsedInNonSelection)
|
||||
and CurProcVar.UsedInSelection;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -553,8 +619,11 @@ var
|
||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||
{$IFDEF CTDebug}
|
||||
DebugLn('TExtractProcTool.DeleteMovedLocalVariables B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
||||
' UsedInSelection=',dbgs(ProcVar.UsedInSelection),
|
||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection));
|
||||
' ReadInSelection=',dbgs(ProcVar.ReadInSelection),
|
||||
' WriteInSelection=',dbgs(ProcVar.WriteInSelection),
|
||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection),
|
||||
' ReadAfterSelection=',dbgs(ProcVar.ReadAfterSelection),
|
||||
'');
|
||||
{$ENDIF}
|
||||
if ProcVar.UsedInSelection and (not ProcVar.UsedInNonSelection) then
|
||||
begin
|
||||
@ -613,8 +682,11 @@ var
|
||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||
{$IFDEF CTDebug}
|
||||
DebugLn('TExtractProcTool.CreateProcParamList B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
||||
' UsedInSelection=',dbgs(ProcVar.UsedInSelection),
|
||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection));
|
||||
' ReadInSelection=',dbgs(ProcVar.ReadInSelection),
|
||||
' WriteInSelection=',dbgs(ProcVar.WriteInSelection),
|
||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection),
|
||||
' ReadAfterSelection=',dbgs(ProcVar.ReadAfterSelection),
|
||||
'');
|
||||
{$ENDIF}
|
||||
if ProcVar.UsedInSelection and ProcVar.UsedInNonSelection then begin
|
||||
// extract identifier and type
|
||||
@ -629,6 +701,8 @@ var
|
||||
{$ENDIF}
|
||||
// ToDo: ParamSpecifier 'var ' and none
|
||||
ParamSpecifier:='const ';
|
||||
if ProcVar.ReadAfterSelection then
|
||||
ParamSpecifier:='var ';
|
||||
CompleteParamListCode:=CompleteParamListCode
|
||||
+ParamSpecifier+ParamName+':'+ParamTypeCode;
|
||||
BaseParamListCode:=BaseParamListCode+':'+ParamTypeCode;
|
||||
@ -665,8 +739,10 @@ var
|
||||
ProcVar:=TExtractedProcVariable(AVLNode.Data);
|
||||
{$IFDEF CTDebug}
|
||||
DebugLn('TExtractProcTool.CreateProcVarSection B ',GetIdentifier(@Src[ProcVar.Node.StartPos]),
|
||||
' UsedInSelection=',dbgs(ProcVar.UsedInSelection),
|
||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection));
|
||||
' ReadInSelection=',dbgs(ProcVar.ReadInSelection),
|
||||
' WriteInSelection=',dbgs(ProcVar.WriteInSelection),
|
||||
' UsedInNonSelection=',dbgs(ProcVar.UsedInNonSelection),
|
||||
' ReadAfterSelection=',dbgs(ProcVar.ReadAfterSelection),'');
|
||||
{$ENDIF}
|
||||
if ProcVar.UsedInSelection and (not ProcVar.UsedInNonSelection) then
|
||||
begin
|
||||
|
@ -120,6 +120,8 @@ type
|
||||
function NodeIsPartOfTypeDefinition(ANode: TCodeTreeNode): boolean;
|
||||
function ExtractDefinitionNodeType(DefinitionNode: TCodeTreeNode): string;
|
||||
function ExtractDefinitionName(DefinitionNode: TCodeTreeNode): string;
|
||||
function MoveCursorToParameterSpecifier(DefinitionNode: TCodeTreeNode
|
||||
): boolean;
|
||||
|
||||
// sections
|
||||
function GetSourceType: TCodeTreeNodeDesc;
|
||||
@ -1233,6 +1235,26 @@ begin
|
||||
Result:=copy(Src,DefinitionNode.StartPos,Len);
|
||||
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
|
||||
): boolean;
|
||||
begin
|
||||
|
@ -1056,6 +1056,10 @@ resourcestring
|
||||
uemViewCallStackCursor = 'View Call Stack';
|
||||
uemMoveEditorLeft='Move Editor Left';
|
||||
uemMoveEditorRight='Move Editor Right';
|
||||
uemRefactor = 'Refactoring';
|
||||
uemCompleteCode = 'Complete Code';
|
||||
uemEncloseSelection = 'Enclose Selection';
|
||||
uemExtractProc = 'Extract Procedure';
|
||||
uemEditorproperties='Editor properties';
|
||||
ueNotImplCap='Not implemented yet';
|
||||
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;
|
||||
|
||||
// edit menu
|
||||
procedure DoEditMenuCommand(EditorCommand: integer);
|
||||
procedure DoCommand(EditorCommand: integer); override;
|
||||
|
||||
// tools
|
||||
function DoConvertDFMtoLFM: TModalResult;
|
||||
@ -10416,132 +10416,132 @@ end;
|
||||
|
||||
procedure TMainIDE.mnuEditCopyClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecCopy);
|
||||
DoCommand(ecCopy);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditCutClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecCut);
|
||||
DoCommand(ecCut);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditPasteClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecPaste);
|
||||
DoCommand(ecPaste);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditRedoClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecRedo);
|
||||
DoCommand(ecRedo);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditUndoClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecUndo);
|
||||
DoCommand(ecUndo);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditIndentBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecBlockIndent);
|
||||
DoCommand(ecBlockIndent);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditUnindentBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecBlockUnindent);
|
||||
DoCommand(ecBlockUnindent);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditEncloseBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionEnclose);
|
||||
DoCommand(ecSelectionEnclose);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditUpperCaseBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionUpperCase);
|
||||
DoCommand(ecSelectionUpperCase);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditLowerCaseBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionLowerCase);
|
||||
DoCommand(ecSelectionLowerCase);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditTabsToSpacesBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionTabs2Spaces);
|
||||
DoCommand(ecSelectionTabs2Spaces);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditCommentBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionComment);
|
||||
DoCommand(ecSelectionComment);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditUncommentBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionUncomment);
|
||||
DoCommand(ecSelectionUncomment);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditConditionalBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionConditional);
|
||||
DoCommand(ecSelectionConditional);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditSortBlockClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionSort);
|
||||
DoCommand(ecSelectionSort);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditSelectionBreakLinesClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectionBreakLines);
|
||||
DoCommand(ecSelectionBreakLines);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditSelectAllClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectAll);
|
||||
DoCommand(ecSelectAll);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditSelectCodeBlockClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectCodeBlock);
|
||||
DoCommand(ecSelectCodeBlock);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditSelectToBraceClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectToBrace);
|
||||
DoCommand(ecSelectToBrace);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditSelectLineClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectLine);
|
||||
DoCommand(ecSelectLine);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditSelectParagraphClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecSelectParagraph);
|
||||
DoCommand(ecSelectParagraph);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertGPLNoticeClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertGPLNotice);
|
||||
DoCommand(ecInsertGPLNotice);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertLGPLNoticeClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertLGPLNotice);
|
||||
DoCommand(ecInsertLGPLNotice);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertUsernameClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertUserName);
|
||||
DoCommand(ecInsertUserName);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertDateTimeClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertDateTime);
|
||||
DoCommand(ecInsertDateTime);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertChangeLogEntryClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertChangeLogEntry);
|
||||
DoCommand(ecInsertChangeLogEntry);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuSearchFindInFiles(Sender: TObject);
|
||||
@ -10561,50 +10561,50 @@ end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCharacterClicked(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCharacter);
|
||||
DoCommand(ecInsertCharacter);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCVSAuthorClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCVSAuthor);
|
||||
DoCommand(ecInsertCVSAuthor);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCVSDateClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCVSDate);
|
||||
DoCommand(ecInsertCVSDate);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCVSHeaderClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCVSHeader);
|
||||
DoCommand(ecInsertCVSHeader);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCVSIDClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCVSID);
|
||||
DoCommand(ecInsertCVSID);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCVSLogClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCVSLog);
|
||||
DoCommand(ecInsertCVSLog);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCVSNameClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCVSName);
|
||||
DoCommand(ecInsertCVSName);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCVSRevisionClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCVSRevision);
|
||||
DoCommand(ecInsertCVSRevision);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuEditInsertCVSSourceClick(Sender: TObject);
|
||||
begin
|
||||
DoEditMenuCommand(ecInsertCVSSource);
|
||||
DoCommand(ecInsertCVSSource);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoEditMenuCommand(EditorCommand: integer);
|
||||
procedure TMainIDE.DoCommand(EditorCommand: integer);
|
||||
var
|
||||
ActiveSourceEditor: TSourceEditor;
|
||||
ActiveUnitInfo: TUnitInfo;
|
||||
@ -10704,6 +10704,9 @@ end.
|
||||
|
||||
{ =============================================================================
|
||||
$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
|
||||
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 ActiveUnitInfo: TUnitInfo); virtual; abstract;
|
||||
|
||||
procedure DoCommand(EditorCommand: integer); virtual; abstract;
|
||||
|
||||
function GetTestBuildDir: string; virtual; abstract;
|
||||
function GetTestUnitFilename(AnUnitInfo: TUnitInfo): string; virtual; abstract;
|
||||
function IsTestUnitFilename(const AFilename: string): boolean; virtual; abstract;
|
||||
|
@ -325,7 +325,14 @@ type
|
||||
TSourceNotebookStates = set of TSourceNotebookState;
|
||||
|
||||
TSourceNotebook = class(TForm)
|
||||
AddBreakpointMenuItem: TMenuItem;
|
||||
AddWatchAtCursorMenuItem: TMenuItem;
|
||||
ClosePageMenuItem: TMenuItem;
|
||||
CompleteCodeMenuItem: TMenuItem;
|
||||
DebugMenuItem: TMenuItem;
|
||||
EditorPropertiesMenuItem: TMenuItem;
|
||||
EncloseSelectionMenuItem: TMenuItem;
|
||||
ExtractProcMenuItem: TMenuItem;
|
||||
FindDeclarationMenuItem: TMenuItem;
|
||||
GotoBookmarkMenuItem: TMenuItem;
|
||||
MoveEditorLeftMenuItem: TMenuItem;
|
||||
@ -333,19 +340,19 @@ type
|
||||
Notebook: TNotebook;
|
||||
OpenFileAtCursorMenuItem: TMenuItem;
|
||||
ReadOnlyMenuItem: TMenuItem;
|
||||
RefactorMenuItem: TMenuItem;
|
||||
RunToCursorMenuItem: TMenuItem;
|
||||
SetBookmarkMenuItem: TMenuItem;
|
||||
ShowLineNumbersMenuItem: TMenuItem;
|
||||
ShowUnitInfoMenuItem: TMenuItem;
|
||||
SrcPopUpMenu: TPopupMenu;
|
||||
StatusBar: TStatusBar;
|
||||
DebugMenuItem: TMenuItem;
|
||||
AddBreakpointMenuItem: TMenuItem;
|
||||
AddWatchAtCursorMenuItem: TMenuItem;
|
||||
RunToCursorMenuItem: TMenuItem;
|
||||
ViewCallStackMenuItem: TMenuItem;
|
||||
EditorPropertiesMenuItem: TMenuItem;
|
||||
Procedure AddBreakpointClicked(Sender: TObject);
|
||||
procedure CompleteCodeMenuItemClick(Sender: TObject);
|
||||
Procedure DeleteBreakpointClicked(Sender: TObject);
|
||||
procedure EncloseSelectionMenuItemClick(Sender: TObject);
|
||||
procedure ExtractProcMenuItemClick(Sender: TObject);
|
||||
procedure RunToClicked(Sender: TObject);
|
||||
procedure ViewCallStackClick(Sender: TObject);
|
||||
Procedure AddWatchAtCursor(Sender: TObject);
|
||||
@ -3061,6 +3068,39 @@ Begin
|
||||
|
||||
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);
|
||||
with EditorPropertiesMenuItem do begin
|
||||
Name := 'EditorPropertiesMenuItem';
|
||||
@ -3846,6 +3886,11 @@ begin
|
||||
ASrcEdit.EditorComponent.CaretY);
|
||||
end;
|
||||
|
||||
procedure TSourceNotebook.CompleteCodeMenuItemClick(Sender: TObject);
|
||||
begin
|
||||
MainIDEInterface.DoCommand(ecCompleteCode);
|
||||
end;
|
||||
|
||||
procedure TSourceNotebook.DeleteBreakpointClicked(Sender: TObject);
|
||||
var
|
||||
ASrcEdit: TSourceEditor;
|
||||
@ -3856,6 +3901,20 @@ begin
|
||||
ASrcEdit.EditorComponent.CaretY);
|
||||
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);
|
||||
var
|
||||
ASrcEdit: TSourceEditor;
|
||||
|
Loading…
Reference in New Issue
Block a user