IDE: src editor: fixed adding dynamic menu items

git-svn-id: trunk@12543 -
This commit is contained in:
mattias 2007-10-21 13:00:58 +00:00
parent adf0df7012
commit 9f455244c8
2 changed files with 117 additions and 105 deletions

View File

@ -3761,7 +3761,7 @@ var
MarkSrcEdit: TSourceEditor; MarkSrcEdit: TSourceEditor;
MarkDesc: String; MarkDesc: String;
MarkEditorIndex: Integer; MarkEditorIndex: Integer;
MarkMenuItem: TMenuItem; MarkMenuItem: TIDEMenuItem;
EditorComp: TSynEdit; EditorComp: TSynEdit;
Marks: PSourceMark; Marks: PSourceMark;
MarkCount: integer; MarkCount: integer;
@ -3772,110 +3772,127 @@ var
SelAvailAndWritable: Boolean; SelAvailAndWritable: Boolean;
CurFilename: String; CurFilename: String;
begin begin
RemoveUserDefinedMenuItems; //SourceEditorMenuRoot.WriteDebugReport('TSourceNotebook.SrcPopUpMenuPopup START ',true);
RemoveContextMenuItems; //SourceEditorMenuRoot.ConsistencyCheck;
ASrcEdit:= SourceEditorMenuRoot.BeginUpdate;
try
RemoveUserDefinedMenuItems;
RemoveContextMenuItems;
ASrcEdit:=
FindSourceEditorWithEditorComponent(TPopupMenu(Sender).PopupComponent); FindSourceEditorWithEditorComponent(TPopupMenu(Sender).PopupComponent);
if ASrcEdit=nil then exit; if ASrcEdit=nil then begin
EditorComp:=ASrcEdit.EditorComponent; ASrcEdit:=GetActiveSE;
if ASrcEdit=nil then begin
// Readonly, ShowLineNumbers DebugLn(['TSourceNotebook.SrcPopUpMenuPopup ASrcEdit=nil ',dbgsName(TPopupMenu(Sender).PopupComponent)]);
SrcEditMenuReadOnly.MenuItem.Checked:=ASrcEdit.ReadOnly; exit;
SrcEditMenuShowLineNumbers.MenuItem.Checked:=EditorComp.Gutter.ShowLineNumbers;
UpdateHighlightMenuItems;
// bookmarks
for BookMarkID:=0 to 9 do begin
MarkDesc:=' '+IntToStr(BookMarkID);
MarkSrcEdit:=FindBookmark(BookMarkID);
if (MarkSrcEdit<>nil)
and MarkSrcEdit.EditorComponent.GetBookMark(BookMarkID,BookMarkX,BookMarkY)
then begin
MarkEditorIndex:=FindPageWithEditor(MarkSrcEdit);
MarkDesc:=MarkDesc+': '+Notebook.Pages[MarkEditorIndex]
+' ('+IntToStr(BookMarkY)+','+IntToStr(BookMarkX)+')';
end;
// goto book mark item
MarkMenuItem:=SrcEditSubMenuGotoBookmarks.MenuItem[BookMarkID];
MarkMenuItem.Checked:=(MarkSrcEdit<>nil);
MarkMenuItem.Caption:=uemBookmarkN+MarkDesc;
// set book mark item
MarkMenuItem:=SrcEditSubMenuSetBookmarks.MenuItem[BookMarkID];
MarkMenuItem.Checked:=(MarkSrcEdit<>nil);
MarkMenuItem.Caption:=uemSetBookmark+MarkDesc;
end;
// editor layout
SrcEditMenuMoveEditorLeft.MenuItem.Enabled:=
(NoteBook<>nil) and (NoteBook.PageCount>1);
SrcEditMenuMoveEditorRight.MenuItem.Enabled:=
(NoteBook<>nil) and (NoteBook.PageCount>1);
EditorPopupPoint:=EditorComp.ScreenToClient(SrcPopUpMenu.PopupPoint);
if EditorPopupPoint.X>EditorComp.GutterWidth then begin
// user clicked on text
SelAvail:=ASrcEdit.EditorComponent.SelAvail;
SelAvailAndWritable:=SelAvail and (not ASrcEdit.ReadOnly);
SrcEditMenuEncloseSelection.MenuItem.Enabled := SelAvailAndWritable;
SrcEditMenuExtractProc.MenuItem.Enabled := SelAvailAndWritable;
SrcEditMenuInvertAssignment.MenuItem.Enabled := SelAvailAndWritable;
SrcEditMenuFindIdentifierReferences.MenuItem.Enabled:=
IsValidIdent(ASrcEdit.GetWordAtCurrentCaret);
SrcEditMenuRenameIdentifier.MenuItem.Enabled:=
IsValidIdent(ASrcEdit.GetWordAtCurrentCaret)
and (not ASrcEdit.ReadOnly);
end else begin
// user clicked on gutter
SourceEditorMarks.GetMarksForLine(EditorComp,EditorComp.CaretY,
Marks,MarkCount);
if Marks<>nil then begin
for i:=0 to MarkCount-1 do begin
CurMark:=Marks[i];
CurMark.CreatePopupMenuItems(@AddUserDefinedPopupMenuItem);
end; end;
FreeMem(Marks);
end; end;
end; EditorComp:=ASrcEdit.EditorComponent;
// add context specific menu items // Readonly, ShowLineNumbers
CurFilename:=ASrcEdit.FileName; SrcEditMenuReadOnly.MenuItem.Checked:=ASrcEdit.ReadOnly;
if (FilenameIsAbsolute(CurFilename)) then begin SrcEditMenuShowLineNumbers.MenuItem.Checked:=EditorComp.Gutter.ShowLineNumbers;
if FilenameIsPascalUnit(CurFilename) then begin UpdateHighlightMenuItems;
if FileExists(ChangeFileExt(CurFilename,'.lfm')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.lfm'),
true,@OnPopupMenuOpenLFMFile);
if FileExists(ChangeFileExt(CurFilename,'.lrs')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.lrs'),
true,@OnPopupMenuOpenLRSFile);
end;
if (CompareFileExt(CurFilename,'.lfm',true)=0) then begin
if FileExists(ChangeFileExt(CurFilename,'.pas')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.pas'),
true,@OnPopupMenuOpenPasFile);
if FileExists(ChangeFileExt(CurFilename,'.pp')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.pp'),
true,@OnPopupMenuOpenPPFile);
if FileExists(ChangeFileExt(CurFilename,'.p')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.p'),
true,@OnPopupMenuOpenPFile);
end;
if (CompareFileExt(CurFilename,'.lpi',true)=0)
or (CompareFileExt(CurFilename,'.lpk',true)=0) then begin
AddContextPopupMenuItem('Open '+ExtractFileName(CurFilename),true,
@OnPopupMenuOpenFile);
end;
end;
if Assigned(OnPopupMenu) then OnPopupMenu(@AddContextPopupMenuItem);
SourceEditorMenuRoot.NotifySubSectionOnShow(Self); // bookmarks
//SourceEditorMenuRoot.WriteDebugReport(' ',true); for BookMarkID:=0 to 9 do begin
MarkDesc:=' '+IntToStr(BookMarkID);
MarkSrcEdit:=FindBookmark(BookMarkID);
if (MarkSrcEdit<>nil)
and MarkSrcEdit.EditorComponent.GetBookMark(BookMarkID,BookMarkX,BookMarkY)
then begin
MarkEditorIndex:=FindPageWithEditor(MarkSrcEdit);
MarkDesc:=MarkDesc+': '+Notebook.Pages[MarkEditorIndex]
+' ('+IntToStr(BookMarkY)+','+IntToStr(BookMarkX)+')';
end;
// goto book mark item
MarkMenuItem:=SrcEditSubMenuGotoBookmarks[BookMarkID];
if MarkMenuItem is TIDEMenuCommand then
TIDEMenuCommand(MarkMenuItem).Checked:=(MarkSrcEdit<>nil);
MarkMenuItem.Caption:=uemBookmarkN+MarkDesc;
// set book mark item
MarkMenuItem:=SrcEditSubMenuSetBookmarks[BookMarkID];
if MarkMenuItem is TIDEMenuCommand then
TIDEMenuCommand(MarkMenuItem).Checked:=(MarkSrcEdit<>nil);
MarkMenuItem.Caption:=uemSetBookmark+MarkDesc;
end;
// editor layout
SrcEditMenuMoveEditorLeft.MenuItem.Enabled:=
(NoteBook<>nil) and (NoteBook.PageCount>1);
SrcEditMenuMoveEditorRight.MenuItem.Enabled:=
(NoteBook<>nil) and (NoteBook.PageCount>1);
EditorPopupPoint:=EditorComp.ScreenToClient(SrcPopUpMenu.PopupPoint);
if EditorPopupPoint.X>EditorComp.GutterWidth then begin
// user clicked on text
SelAvail:=ASrcEdit.EditorComponent.SelAvail;
SelAvailAndWritable:=SelAvail and (not ASrcEdit.ReadOnly);
SrcEditMenuEncloseSelection.Enabled := SelAvailAndWritable;
SrcEditMenuExtractProc.Enabled := SelAvailAndWritable;
SrcEditMenuInvertAssignment.Enabled := SelAvailAndWritable;
SrcEditMenuFindIdentifierReferences.Enabled:=
IsValidIdent(ASrcEdit.GetWordAtCurrentCaret);
SrcEditMenuRenameIdentifier.Enabled:=
IsValidIdent(ASrcEdit.GetWordAtCurrentCaret)
and (not ASrcEdit.ReadOnly);
end else begin
// user clicked on gutter
SourceEditorMarks.GetMarksForLine(EditorComp,EditorComp.CaretY,
Marks,MarkCount);
if Marks<>nil then begin
for i:=0 to MarkCount-1 do begin
CurMark:=Marks[i];
CurMark.CreatePopupMenuItems(@AddUserDefinedPopupMenuItem);
end;
FreeMem(Marks);
end;
end;
// add context specific menu items
CurFilename:=ASrcEdit.FileName;
if (FilenameIsAbsolute(CurFilename)) then begin
if FilenameIsPascalUnit(CurFilename) then begin
if FileExists(ChangeFileExt(CurFilename,'.lfm')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.lfm'),
true,@OnPopupMenuOpenLFMFile);
if FileExists(ChangeFileExt(CurFilename,'.lrs')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.lrs'),
true,@OnPopupMenuOpenLRSFile);
end;
if (CompareFileExt(CurFilename,'.lfm',true)=0) then begin
if FileExists(ChangeFileExt(CurFilename,'.pas')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.pas'),
true,@OnPopupMenuOpenPasFile);
if FileExists(ChangeFileExt(CurFilename,'.pp')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.pp'),
true,@OnPopupMenuOpenPPFile);
if FileExists(ChangeFileExt(CurFilename,'.p')) then
AddContextPopupMenuItem(
'Open '+ChangeFileExt(ExtractFileName(CurFilename),'.p'),
true,@OnPopupMenuOpenPFile);
end;
if (CompareFileExt(CurFilename,'.lpi',true)=0)
or (CompareFileExt(CurFilename,'.lpk',true)=0) then begin
AddContextPopupMenuItem('Open '+ExtractFileName(CurFilename),true,
@OnPopupMenuOpenFile);
end;
end;
if Assigned(OnPopupMenu) then OnPopupMenu(@AddContextPopupMenuItem);
SourceEditorMenuRoot.NotifySubSectionOnShow(Self);
finally
SourceEditorMenuRoot.EndUpdate;
end;
//SourceEditorMenuRoot.WriteDebugReport('TSourceNotebook.SrcPopUpMenuPopup END ',true);
//SourceEditorMenuRoot.ConsistencyCheck;
end; end;
procedure TSourceNotebook.NotebookShowTabHint(Sender: TObject; procedure TSourceNotebook.NotebookShowTabHint(Sender: TObject;
@ -4035,12 +4052,8 @@ end;
function TSourceNotebook.AddContextPopupMenuItem(const NewCaption: string; function TSourceNotebook.AddContextPopupMenuItem(const NewCaption: string;
const NewEnabled: boolean; const NewOnClick: TNotifyEvent): TIDEMenuItem; const NewEnabled: boolean; const NewOnClick: TNotifyEvent): TIDEMenuItem;
begin begin
//DebugLn(['TSourceNotebook.AddContextPopupMenuItem ',NewCaption]);
Result:=RegisterIDEMenuCommand(SrcEditMenuSectionFileDynamic.GetPath, Result:=RegisterIDEMenuCommand(SrcEditMenuSectionFileDynamic.GetPath,
'FileDynamic',NewCaption,NewOnClick); 'FileDynamic',NewCaption,NewOnClick);
//DebugLn(['TSourceNotebook.AddContextPopupMenuItem CHECKING CONSISTENCY']);
//SourceEditorMenuRoot.WriteDebugReport('',true);
//SourceEditorMenuRoot.ConsistencyCheck;
Result.Enabled:=NewEnabled; Result.Enabled:=NewEnabled;
end; end;

View File

@ -691,7 +691,6 @@ begin
//debugln('TIDEMenuItem.CreateMenuItem ',dbgsName(Self),' Name="',Name,'"'); //debugln('TIDEMenuItem.CreateMenuItem ',dbgsName(Self),' Name="',Name,'"');
{$ENDIF} {$ENDIF}
MenuItem:=MenuItemClass.Create(nil); MenuItem:=MenuItemClass.Create(nil);
MenuItem.AddHandlerOnDestroy(@MenuItemDestroy);
AutoFreeMenuItem:=true; AutoFreeMenuItem:=true;
end; end;