mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 03:56:12 +02:00
ide: project inspector: register items popup menuitems
This commit is contained in:
parent
8a8bee71f8
commit
ec56ff310b
@ -399,6 +399,11 @@ var
|
||||
DesignerMenuSectionMisc: TIDEMenuSection;
|
||||
DesignerMenuSectionOptions: TIDEMenuSection;
|
||||
|
||||
// Project inspector
|
||||
ProjectInspectorMenuRoot: TIDEMenuSection = nil;
|
||||
ProjInspMenuSectionFiles: TIDEMenuSection; // e.g. open, sort files, clean up files
|
||||
ProjInspMenuSectionDependencies: TIDEMenuSection; // e.g. // e.g. open package, remove dependency
|
||||
|
||||
// Package editor(s)
|
||||
PackageEditorMenuRoot: TIDEMenuSection = nil;
|
||||
PkgEditMenuSectionFiles: TIDEMenuSection; // e.g. sort files, clean up files
|
||||
@ -409,7 +414,7 @@ var
|
||||
PkgEditMenuSectionMisc: TIDEMenuSection; // e.g. options
|
||||
PackageEditorMenuFilesRoot: TIDEMenuSection = nil;
|
||||
PkgEditMenuSectionFile: TIDEMenuSection; // e.g. open file, remove file, move file up/down
|
||||
PkgEditMenuSectionDirectory: TIDEMenuSection; // e.g. change all properties of all files in a directory and ub directories moved ..
|
||||
PkgEditMenuSectionDirectory: TIDEMenuSection; // e.g. change all properties of all files in a directory and sub directories moved ..
|
||||
PkgEditMenuSectionDependency: TIDEMenuSection; // e.g. open package, remove dependency
|
||||
|
||||
// Component Palette, pages drop down. (no submenus allowed / only top level / must have OnClick(Proc))
|
||||
|
@ -2564,6 +2564,7 @@ begin
|
||||
RegisterStandardSourceTabMenuItems;
|
||||
RegisterStandardSourceEditorMenuItems;
|
||||
RegisterStandardMessagesViewMenuItems;
|
||||
RegisterStandardProjectInspectorMenuItems;
|
||||
RegisterStandardCodeExplorerMenuItems;
|
||||
RegisterStandardCodeTemplatesMenuItems;
|
||||
RegisterStandardDesignerMenuItems;
|
||||
|
@ -110,8 +110,8 @@ object ProjectInspectorForm: TProjectInspectorForm
|
||||
AnchorSideTop.Control = SortAlphabeticallyButton
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 95
|
||||
Height = 32
|
||||
Top = -2
|
||||
Height = 30
|
||||
Top = -1
|
||||
Width = 365
|
||||
ButtonWidth = 23
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
@ -157,9 +157,6 @@ object ProjectInspectorForm: TProjectInspectorForm
|
||||
OnPopup = ItemsPopupMenuPopup
|
||||
Left = 72
|
||||
Top = 112
|
||||
object MenuItem1: TMenuItem
|
||||
Caption = 'New Item1'
|
||||
end
|
||||
end
|
||||
object AddPopupMenu: TPopupMenu
|
||||
Left = 74
|
||||
|
@ -69,12 +69,33 @@ uses
|
||||
ProjectIntf, PackageIntf, PackageLinkIntf, PackageDependencyIntf,
|
||||
// IDEIntf
|
||||
IDEHelpIntf, IDECommands, IDEDialogs, IDEImagesIntf, LazIDEIntf, ToolBarIntf,
|
||||
MenuIntf,
|
||||
// IDE
|
||||
LazarusIDEStrConsts, MainBase, MainBar, IDEProcs, DialogProcs, IDEOptionDefs, Project,
|
||||
InputHistory, TransferMacros, EnvironmentOpts, BuildManager, BasePkgManager,
|
||||
ProjPackChecks, ProjPackEditing, ProjPackFilePropGui, PackageDefs,
|
||||
AddToProjectDlg, AddPkgDependencyDlg, AddFPMakeDependencyDlg, LResources;
|
||||
|
||||
const
|
||||
ProjectInspectorMenuRootName = 'ProjectInspector';
|
||||
var
|
||||
ProjInspMenuAddDiskFile: TIDEMenuCommand;
|
||||
ProjInspMenuRemoveNonExistingFiles: TIDEMenuCommand;
|
||||
ProjInspMenuOpenFolder: TIDEMenuCommand;
|
||||
ProjInspMenuOpen: TIDEMenuCommand; // open file or dependency
|
||||
ProjInspMenuRemove: TIDEMenuCommand;
|
||||
ProjInspMenuCopyMoveFileToDir: TIDEMenuCommand;
|
||||
ProjInspMenuEnableI18NForLFM: TIDEMenuCommand;
|
||||
ProjInspMenuDisableI18NForLFM: TIDEMenuCommand;
|
||||
|
||||
ProjInspMenuAddDependency: TIDEMenuCommand;
|
||||
ProjInspMenuReAddDependency: TIDEMenuCommand;
|
||||
ProjInspMenuMoveDependencyUp: TIDEMenuCommand;
|
||||
ProjInspMenuMoveDependencyDown: TIDEMenuCommand;
|
||||
ProjInspMenuStoreFilenameAsDefaultOfDependencyDown: TIDEMenuCommand;
|
||||
ProjInspMenuStoreFilenameAsPreferredOfDependencyDown: TIDEMenuCommand;
|
||||
ProjInspMenuClearPreferredFilenameOfDependencyDown: TIDEMenuCommand;
|
||||
|
||||
type
|
||||
TOnAddUnitToProject =
|
||||
function(Sender: TObject; AnUnitInfo: TUnitInfo): TModalresult of object;
|
||||
@ -93,7 +114,6 @@ type
|
||||
DirectoryHierarchyButton: TSpeedButton;
|
||||
FilterEdit: TTreeFilterEdit;
|
||||
PropsGroupBox: TGroupBox;
|
||||
MenuItem1: TMenuItem;
|
||||
MenuItem2: TMenuItem;
|
||||
mnuAddFPMakeReq: TMenuItem;
|
||||
mnuAddEditorFiles: TMenuItem;
|
||||
@ -279,7 +299,7 @@ var
|
||||
|
||||
|
||||
function UpdateUnitInfoResourceBaseClass(AnUnitInfo: TUnitInfo; Quiet: boolean): boolean;
|
||||
|
||||
procedure RegisterStandardProjectInspectorMenuItems;
|
||||
|
||||
implementation
|
||||
|
||||
@ -404,6 +424,36 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure RegisterStandardProjectInspectorMenuItems;
|
||||
var
|
||||
AParent: TIDEMenuSection;
|
||||
begin
|
||||
ProjectInspectorMenuRoot :=RegisterIDEMenuRoot(ProjectInspectorMenuRootName);
|
||||
|
||||
// register the section for operations on selected files
|
||||
ProjInspMenuSectionFiles:=RegisterIDEMenuSection(ProjectInspectorMenuRootName,'Files');
|
||||
AParent:=ProjInspMenuSectionFiles;
|
||||
ProjInspMenuAddDiskFile:=RegisterIDEMenuCommand(AParent,'Add disk file',lisBtnDlgAdd);
|
||||
ProjInspMenuRemoveNonExistingFiles:=RegisterIDEMenuCommand(AParent,'Remove non existing files',lisRemoveNonExistingFiles);
|
||||
ProjInspMenuOpenFolder:=RegisterIDEMenuCommand(AParent,'Open folder',lisMenuOpenFolder);
|
||||
ProjInspMenuAddDependency:=RegisterIDEMenuCommand(AParent,'Add dependency',lisBtnDlgAdd);
|
||||
ProjInspMenuOpen:=RegisterIDEMenuCommand(AParent,'Open',lisBtnDlgAdd);
|
||||
ProjInspMenuRemove:=RegisterIDEMenuCommand(AParent,'Remove',lisRemove);
|
||||
ProjInspMenuCopyMoveFileToDir:=RegisterIDEMenuCommand(AParent,'Copy/Move File to Directory',lisCopyMoveFileToDirectory);
|
||||
ProjInspMenuEnableI18NForLFM:=RegisterIDEMenuCommand(AParent,'Enable I18N for LFM',lisEnableI18NForLFM);
|
||||
ProjInspMenuDisableI18NForLFM:=RegisterIDEMenuCommand(AParent,'Disable I18N for LFM',lisDisableI18NForLFM);
|
||||
|
||||
ProjInspMenuSectionDependencies:=RegisterIDEMenuSection(ProjectInspectorMenuRootName,'Dependencies');
|
||||
AParent:=ProjInspMenuSectionDependencies;
|
||||
ProjInspMenuReAddDependency:=RegisterIDEMenuCommand(AParent,'ReAdd dependency',lisPckEditReAddDependency);
|
||||
ProjInspMenuMoveDependencyUp:=RegisterIDEMenuCommand(AParent,'Move dependency up',lisPckEditMoveDependencyUp);
|
||||
ProjInspMenuMoveDependencyDown:=RegisterIDEMenuCommand(AParent,'Move dependency down',lisPckEditMoveDependencyDown);
|
||||
ProjInspMenuStoreFilenameAsDefaultOfDependencyDown:=RegisterIDEMenuCommand(AParent,'Store filename as default of dependency',lisPckEditStoreFileNameAsDefaultForThisDependency);
|
||||
ProjInspMenuStoreFilenameAsPreferredOfDependencyDown:=RegisterIDEMenuCommand(AParent,'Store filename as preferred of dependency',lisPckEditStoreFileNameAsPreferredForThisDependency);
|
||||
ProjInspMenuClearPreferredFilenameOfDependencyDown:=RegisterIDEMenuCommand(AParent,'Clear preferred filename of dependency',lisPckEditClearDefaultPreferredFilenameOfDependency);
|
||||
|
||||
end;
|
||||
|
||||
|
||||
{ TProjectInspectorForm }
|
||||
|
||||
@ -766,26 +816,13 @@ begin
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.ItemsPopupMenuPopup(Sender: TObject);
|
||||
var
|
||||
ItemCnt: integer;
|
||||
|
||||
function AddPopupMenuItem(const ACaption: string; AnEvent: TNotifyEvent;
|
||||
EnabledFlag: boolean = True): TMenuItem;
|
||||
procedure SetItem(Item: TIDEMenuCommand; AnOnClick: TNotifyEvent;
|
||||
aShow: boolean = true; AEnable: boolean = true);
|
||||
begin
|
||||
if ItemsPopupMenu.Items.Count<=ItemCnt then begin
|
||||
Result:=TMenuItem.Create(Self);
|
||||
ItemsPopupMenu.Items.Add(Result);
|
||||
end else
|
||||
Result:=ItemsPopupMenu.Items[ItemCnt];
|
||||
Result.Caption:=ACaption;
|
||||
Result.OnClick:=AnEvent;
|
||||
Result.Enabled:=EnabledFlag;
|
||||
Result.Checked:=false;
|
||||
Result.ShowAlwaysCheckable:=false;
|
||||
Result.Visible:=true;
|
||||
Result.RadioItem:=false;
|
||||
Result.ImageIndex:=-1;
|
||||
inc(ItemCnt);
|
||||
Item.OnClick:=AnOnClick;
|
||||
Item.Visible:=aShow;
|
||||
Item.Enabled:=AEnable;
|
||||
end;
|
||||
|
||||
var
|
||||
@ -806,8 +843,9 @@ var
|
||||
CanClearDep: Integer;
|
||||
CanMoveFileCount: Integer;
|
||||
OpenItemCapt: String;
|
||||
OnlyFilesNodeSelected, OnlyDependenciesNodeSelected, CanI18NforLFM: Boolean;
|
||||
begin
|
||||
ItemCnt:=0;
|
||||
ProjectInspectorMenuRoot.MenuItem:=ItemsPopupMenu.Items;
|
||||
|
||||
CanRemoveCount:=0;
|
||||
CanOpenCount:=0;
|
||||
@ -856,72 +894,50 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
if ItemsTreeView.Selected = FFilesNode then
|
||||
begin
|
||||
// Only the Files node is selected.
|
||||
Assert(AddBitBtn.Enabled, 'AddBitBtn not Enabled');
|
||||
AddPopupMenuItem(lisBtnDlgAdd, @mnuAddDiskFileClick);
|
||||
if not LazProject.IsVirtual then
|
||||
AddPopupMenuItem(lisRemoveNonExistingFiles,@RemoveNonExistingFilesMenuItemClick);
|
||||
AddPopupMenuItem(cLineCaption, Nil, False); // Separator
|
||||
AddPopupMenuItem(lisMenuOpenFolder, @mnuOpenFolderClick);
|
||||
end
|
||||
else if ItemsTreeView.Selected = FDependenciesNode then
|
||||
begin
|
||||
// Only the Required Packages node is selected.
|
||||
AddPopupMenuItem(lisBtnDlgAdd, @mnuAddReqClick);
|
||||
end
|
||||
else begin
|
||||
// Files, dependencies or everything mixed is selected.
|
||||
if CanOpenCount>0 then begin
|
||||
OpenItemCapt := lisOpen;
|
||||
if Assigned(SingleSelectedDep) then
|
||||
case SingleSelectedDep.LoadPackageResult of
|
||||
lprAvailableOnline:
|
||||
OpenItemCapt:=lisPckEditInstall;
|
||||
lprNotFound:
|
||||
if Assigned(OPMInterface) and not OPMInterface.IsPackageListLoaded then
|
||||
OpenItemCapt:=lisPckEditCheckAvailabilityOnline;
|
||||
end;
|
||||
AddPopupMenuItem(OpenItemCapt, @OpenButtonClick);
|
||||
end;
|
||||
if CanRemoveCount>0 then
|
||||
AddPopupMenuItem(lisRemove, @RemoveBitBtnClick);
|
||||
// files section
|
||||
if CanMoveFileCount>0 then
|
||||
AddPopupMenuItem(lisCopyMoveFileToDirectory,@CopyMoveToDirMenuItemClick);
|
||||
end;
|
||||
OnlyFilesNodeSelected:=ItemsTreeView.Selected = FFilesNode;
|
||||
SetItem(ProjInspMenuAddDiskFile,@mnuAddDiskFileClick,OnlyFilesNodeSelected);
|
||||
SetItem(ProjInspMenuRemoveNonExistingFiles,@RemoveNonExistingFilesMenuItemClick,OnlyFilesNodeSelected and not LazProject.IsVirtual);
|
||||
SetItem(ProjInspMenuOpenFolder,@mnuOpenFolderClick,OnlyFilesNodeSelected);
|
||||
|
||||
if LazProject.EnableI18N and LazProject.EnableI18NForLFM
|
||||
and (HasLFMCount>0) then begin
|
||||
AddPopupMenuItem(lisEnableI18NForLFM,
|
||||
@EnableI18NForLFMMenuItemClick, DisabledI18NForLFMCount>0);
|
||||
AddPopupMenuItem(lisDisableI18NForLFM,
|
||||
@DisableI18NForLFMMenuItemClick, DisabledI18NForLFMCount<HasLFMCount);
|
||||
OnlyDependenciesNodeSelected:=ItemsTreeView.Selected = FDependenciesNode;
|
||||
SetItem(ProjInspMenuAddDependency,@mnuAddReqClick,OnlyDependenciesNodeSelected);
|
||||
|
||||
// open, remove
|
||||
if CanOpenCount>0 then begin
|
||||
OpenItemCapt := lisOpen;
|
||||
if Assigned(SingleSelectedDep) then
|
||||
case SingleSelectedDep.LoadPackageResult of
|
||||
lprAvailableOnline:
|
||||
OpenItemCapt:=lisPckEditInstall;
|
||||
lprNotFound:
|
||||
if Assigned(OPMInterface) and not OPMInterface.IsPackageListLoaded then
|
||||
OpenItemCapt:=lisPckEditCheckAvailabilityOnline;
|
||||
end;
|
||||
SetItem(ProjInspMenuOpen,@OpenButtonClick,true);
|
||||
ProjInspMenuOpen.Caption:=OpenItemCapt;
|
||||
end else begin
|
||||
SetItem(ProjInspMenuOpen,@OpenButtonClick,false);
|
||||
end;
|
||||
SetItem(ProjInspMenuRemove,@RemoveBitBtnClick,CanRemoveCount>0);
|
||||
|
||||
// move
|
||||
SetItem(ProjInspMenuCopyMoveFileToDir,@CopyMoveToDirMenuItemClick,CanMoveFileCount>0);
|
||||
|
||||
// i18n for lfm
|
||||
CanI18NforLFM:=LazProject.EnableI18N and LazProject.EnableI18NForLFM and (HasLFMCount>0);
|
||||
SetItem(ProjInspMenuEnableI18NForLFM,@EnableI18NForLFMMenuItemClick,CanI18NforLFM,DisabledI18NForLFMCount>0);
|
||||
SetItem(ProjInspMenuDisableI18NForLFM,@DisableI18NForLFMMenuItemClick,CanI18NforLFM,DisabledI18NForLFMCount<HasLFMCount);
|
||||
|
||||
// Required packages section
|
||||
if CanReAddCount>0 then
|
||||
AddPopupMenuItem(lisPckEditReAddDependency, @ReAddMenuItemClick, true);
|
||||
if SingleSelectedDep<>nil then begin
|
||||
AddPopupMenuItem(lisPckEditMoveDependencyUp, @MoveDependencyUpClick,
|
||||
(SingleSelectedDep.PrevRequiresDependency<>nil));
|
||||
AddPopupMenuItem(lisPckEditMoveDependencyDown, @MoveDependencyDownClick,
|
||||
(SingleSelectedDep.NextRequiresDependency<>nil));
|
||||
end;
|
||||
if HasValidDep>0 then begin
|
||||
AddPopupMenuItem(lisPckEditStoreFileNameAsDefaultForThisDependency,
|
||||
@SetDependencyDefaultFilenameMenuItemClick, true);
|
||||
AddPopupMenuItem(lisPckEditStoreFileNameAsPreferredForThisDependency,
|
||||
@SetDependencyPreferredFilenameMenuItemClick, true);
|
||||
end;
|
||||
if CanClearDep>0 then begin
|
||||
AddPopupMenuItem(lisPckEditClearDefaultPreferredFilenameOfDependency,
|
||||
@ClearDependencyFilenameMenuItemClick, true);
|
||||
end;
|
||||
|
||||
while ItemsPopupMenu.Items.Count>ItemCnt do
|
||||
ItemsPopupMenu.Items.Delete(ItemsPopupMenu.Items.Count-1);
|
||||
// undo delete
|
||||
SetItem(ProjInspMenuReAddDependency,@ReAddMenuItemClick,CanReAddCount>0);
|
||||
// move up/down
|
||||
SetItem(ProjInspMenuMoveDependencyUp,@MoveDependencyUpClick,(SingleSelectedDep<>nil) and (SingleSelectedDep.PrevRequiresDependency<>nil));
|
||||
SetItem(ProjInspMenuMoveDependencyDown,@MoveDependencyDownClick,(SingleSelectedDep<>nil) and (SingleSelectedDep.NextRequiresDependency<>nil));
|
||||
// default and preferred filename
|
||||
SetItem(ProjInspMenuStoreFilenameAsDefaultOfDependencyDown,@SetDependencyDefaultFilenameMenuItemClick,HasValidDep>0);
|
||||
SetItem(ProjInspMenuStoreFilenameAsPreferredOfDependencyDown,@SetDependencyPreferredFilenameMenuItemClick,HasValidDep>0);
|
||||
SetItem(ProjInspMenuClearPreferredFilenameOfDependencyDown,@ClearDependencyFilenameMenuItemClick,CanClearDep>0);
|
||||
end;
|
||||
|
||||
procedure TProjectInspectorForm.ItemsTreeViewAdvancedCustomDrawItem(
|
||||
|
Loading…
Reference in New Issue
Block a user