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(
ExceptionOnNotFound: boolean): boolean;
// reads code brackets (not comment brackets)
// after call cursor is on the closing bracket
var CloseBracket, AntiCloseBracket: TCommonAtomFlag;
Start: TAtomPosition;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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