mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 20:59:08 +02:00
IDE: src editor: fixed adding dynamic menu items
git-svn-id: trunk@12543 -
This commit is contained in:
parent
adf0df7012
commit
9f455244c8
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user