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:
mattias 2004-09-16 00:15:50 +00:00
parent dea133d633
commit f252d6adac
7 changed files with 241 additions and 74 deletions

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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 '

View File

@ -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

View File

@ -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;

View File

@ -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;