mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-24 15:10:13 +01:00
ide: project inspector: register items popup menuitems
This commit is contained in:
parent
8a8bee71f8
commit
ec56ff310b
@ -399,6 +399,11 @@ var
|
|||||||
DesignerMenuSectionMisc: TIDEMenuSection;
|
DesignerMenuSectionMisc: TIDEMenuSection;
|
||||||
DesignerMenuSectionOptions: 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)
|
// Package editor(s)
|
||||||
PackageEditorMenuRoot: TIDEMenuSection = nil;
|
PackageEditorMenuRoot: TIDEMenuSection = nil;
|
||||||
PkgEditMenuSectionFiles: TIDEMenuSection; // e.g. sort files, clean up files
|
PkgEditMenuSectionFiles: TIDEMenuSection; // e.g. sort files, clean up files
|
||||||
@ -409,7 +414,7 @@ var
|
|||||||
PkgEditMenuSectionMisc: TIDEMenuSection; // e.g. options
|
PkgEditMenuSectionMisc: TIDEMenuSection; // e.g. options
|
||||||
PackageEditorMenuFilesRoot: TIDEMenuSection = nil;
|
PackageEditorMenuFilesRoot: TIDEMenuSection = nil;
|
||||||
PkgEditMenuSectionFile: TIDEMenuSection; // e.g. open file, remove file, move file up/down
|
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
|
PkgEditMenuSectionDependency: TIDEMenuSection; // e.g. open package, remove dependency
|
||||||
|
|
||||||
// Component Palette, pages drop down. (no submenus allowed / only top level / must have OnClick(Proc))
|
// Component Palette, pages drop down. (no submenus allowed / only top level / must have OnClick(Proc))
|
||||||
|
|||||||
@ -2564,6 +2564,7 @@ begin
|
|||||||
RegisterStandardSourceTabMenuItems;
|
RegisterStandardSourceTabMenuItems;
|
||||||
RegisterStandardSourceEditorMenuItems;
|
RegisterStandardSourceEditorMenuItems;
|
||||||
RegisterStandardMessagesViewMenuItems;
|
RegisterStandardMessagesViewMenuItems;
|
||||||
|
RegisterStandardProjectInspectorMenuItems;
|
||||||
RegisterStandardCodeExplorerMenuItems;
|
RegisterStandardCodeExplorerMenuItems;
|
||||||
RegisterStandardCodeTemplatesMenuItems;
|
RegisterStandardCodeTemplatesMenuItems;
|
||||||
RegisterStandardDesignerMenuItems;
|
RegisterStandardDesignerMenuItems;
|
||||||
|
|||||||
@ -110,8 +110,8 @@ object ProjectInspectorForm: TProjectInspectorForm
|
|||||||
AnchorSideTop.Control = SortAlphabeticallyButton
|
AnchorSideTop.Control = SortAlphabeticallyButton
|
||||||
AnchorSideTop.Side = asrCenter
|
AnchorSideTop.Side = asrCenter
|
||||||
Left = 95
|
Left = 95
|
||||||
Height = 32
|
Height = 30
|
||||||
Top = -2
|
Top = -1
|
||||||
Width = 365
|
Width = 365
|
||||||
ButtonWidth = 23
|
ButtonWidth = 23
|
||||||
Anchors = [akTop, akLeft, akRight]
|
Anchors = [akTop, akLeft, akRight]
|
||||||
@ -157,9 +157,6 @@ object ProjectInspectorForm: TProjectInspectorForm
|
|||||||
OnPopup = ItemsPopupMenuPopup
|
OnPopup = ItemsPopupMenuPopup
|
||||||
Left = 72
|
Left = 72
|
||||||
Top = 112
|
Top = 112
|
||||||
object MenuItem1: TMenuItem
|
|
||||||
Caption = 'New Item1'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
object AddPopupMenu: TPopupMenu
|
object AddPopupMenu: TPopupMenu
|
||||||
Left = 74
|
Left = 74
|
||||||
|
|||||||
@ -69,12 +69,33 @@ uses
|
|||||||
ProjectIntf, PackageIntf, PackageLinkIntf, PackageDependencyIntf,
|
ProjectIntf, PackageIntf, PackageLinkIntf, PackageDependencyIntf,
|
||||||
// IDEIntf
|
// IDEIntf
|
||||||
IDEHelpIntf, IDECommands, IDEDialogs, IDEImagesIntf, LazIDEIntf, ToolBarIntf,
|
IDEHelpIntf, IDECommands, IDEDialogs, IDEImagesIntf, LazIDEIntf, ToolBarIntf,
|
||||||
|
MenuIntf,
|
||||||
// IDE
|
// IDE
|
||||||
LazarusIDEStrConsts, MainBase, MainBar, IDEProcs, DialogProcs, IDEOptionDefs, Project,
|
LazarusIDEStrConsts, MainBase, MainBar, IDEProcs, DialogProcs, IDEOptionDefs, Project,
|
||||||
InputHistory, TransferMacros, EnvironmentOpts, BuildManager, BasePkgManager,
|
InputHistory, TransferMacros, EnvironmentOpts, BuildManager, BasePkgManager,
|
||||||
ProjPackChecks, ProjPackEditing, ProjPackFilePropGui, PackageDefs,
|
ProjPackChecks, ProjPackEditing, ProjPackFilePropGui, PackageDefs,
|
||||||
AddToProjectDlg, AddPkgDependencyDlg, AddFPMakeDependencyDlg, LResources;
|
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
|
type
|
||||||
TOnAddUnitToProject =
|
TOnAddUnitToProject =
|
||||||
function(Sender: TObject; AnUnitInfo: TUnitInfo): TModalresult of object;
|
function(Sender: TObject; AnUnitInfo: TUnitInfo): TModalresult of object;
|
||||||
@ -93,7 +114,6 @@ type
|
|||||||
DirectoryHierarchyButton: TSpeedButton;
|
DirectoryHierarchyButton: TSpeedButton;
|
||||||
FilterEdit: TTreeFilterEdit;
|
FilterEdit: TTreeFilterEdit;
|
||||||
PropsGroupBox: TGroupBox;
|
PropsGroupBox: TGroupBox;
|
||||||
MenuItem1: TMenuItem;
|
|
||||||
MenuItem2: TMenuItem;
|
MenuItem2: TMenuItem;
|
||||||
mnuAddFPMakeReq: TMenuItem;
|
mnuAddFPMakeReq: TMenuItem;
|
||||||
mnuAddEditorFiles: TMenuItem;
|
mnuAddEditorFiles: TMenuItem;
|
||||||
@ -279,7 +299,7 @@ var
|
|||||||
|
|
||||||
|
|
||||||
function UpdateUnitInfoResourceBaseClass(AnUnitInfo: TUnitInfo; Quiet: boolean): boolean;
|
function UpdateUnitInfoResourceBaseClass(AnUnitInfo: TUnitInfo; Quiet: boolean): boolean;
|
||||||
|
procedure RegisterStandardProjectInspectorMenuItems;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -404,6 +424,36 @@ begin
|
|||||||
end;
|
end;
|
||||||
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 }
|
{ TProjectInspectorForm }
|
||||||
|
|
||||||
@ -766,26 +816,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.ItemsPopupMenuPopup(Sender: TObject);
|
procedure TProjectInspectorForm.ItemsPopupMenuPopup(Sender: TObject);
|
||||||
var
|
|
||||||
ItemCnt: integer;
|
|
||||||
|
|
||||||
function AddPopupMenuItem(const ACaption: string; AnEvent: TNotifyEvent;
|
procedure SetItem(Item: TIDEMenuCommand; AnOnClick: TNotifyEvent;
|
||||||
EnabledFlag: boolean = True): TMenuItem;
|
aShow: boolean = true; AEnable: boolean = true);
|
||||||
begin
|
begin
|
||||||
if ItemsPopupMenu.Items.Count<=ItemCnt then begin
|
Item.OnClick:=AnOnClick;
|
||||||
Result:=TMenuItem.Create(Self);
|
Item.Visible:=aShow;
|
||||||
ItemsPopupMenu.Items.Add(Result);
|
Item.Enabled:=AEnable;
|
||||||
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);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -806,8 +843,9 @@ var
|
|||||||
CanClearDep: Integer;
|
CanClearDep: Integer;
|
||||||
CanMoveFileCount: Integer;
|
CanMoveFileCount: Integer;
|
||||||
OpenItemCapt: String;
|
OpenItemCapt: String;
|
||||||
|
OnlyFilesNodeSelected, OnlyDependenciesNodeSelected, CanI18NforLFM: Boolean;
|
||||||
begin
|
begin
|
||||||
ItemCnt:=0;
|
ProjectInspectorMenuRoot.MenuItem:=ItemsPopupMenu.Items;
|
||||||
|
|
||||||
CanRemoveCount:=0;
|
CanRemoveCount:=0;
|
||||||
CanOpenCount:=0;
|
CanOpenCount:=0;
|
||||||
@ -856,72 +894,50 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if ItemsTreeView.Selected = FFilesNode then
|
OnlyFilesNodeSelected:=ItemsTreeView.Selected = FFilesNode;
|
||||||
begin
|
SetItem(ProjInspMenuAddDiskFile,@mnuAddDiskFileClick,OnlyFilesNodeSelected);
|
||||||
// Only the Files node is selected.
|
SetItem(ProjInspMenuRemoveNonExistingFiles,@RemoveNonExistingFilesMenuItemClick,OnlyFilesNodeSelected and not LazProject.IsVirtual);
|
||||||
Assert(AddBitBtn.Enabled, 'AddBitBtn not Enabled');
|
SetItem(ProjInspMenuOpenFolder,@mnuOpenFolderClick,OnlyFilesNodeSelected);
|
||||||
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;
|
|
||||||
|
|
||||||
if LazProject.EnableI18N and LazProject.EnableI18NForLFM
|
OnlyDependenciesNodeSelected:=ItemsTreeView.Selected = FDependenciesNode;
|
||||||
and (HasLFMCount>0) then begin
|
SetItem(ProjInspMenuAddDependency,@mnuAddReqClick,OnlyDependenciesNodeSelected);
|
||||||
AddPopupMenuItem(lisEnableI18NForLFM,
|
|
||||||
@EnableI18NForLFMMenuItemClick, DisabledI18NForLFMCount>0);
|
// open, remove
|
||||||
AddPopupMenuItem(lisDisableI18NForLFM,
|
if CanOpenCount>0 then begin
|
||||||
@DisableI18NForLFMMenuItemClick, DisabledI18NForLFMCount<HasLFMCount);
|
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;
|
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
|
// Required packages section
|
||||||
if CanReAddCount>0 then
|
// undo delete
|
||||||
AddPopupMenuItem(lisPckEditReAddDependency, @ReAddMenuItemClick, true);
|
SetItem(ProjInspMenuReAddDependency,@ReAddMenuItemClick,CanReAddCount>0);
|
||||||
if SingleSelectedDep<>nil then begin
|
// move up/down
|
||||||
AddPopupMenuItem(lisPckEditMoveDependencyUp, @MoveDependencyUpClick,
|
SetItem(ProjInspMenuMoveDependencyUp,@MoveDependencyUpClick,(SingleSelectedDep<>nil) and (SingleSelectedDep.PrevRequiresDependency<>nil));
|
||||||
(SingleSelectedDep.PrevRequiresDependency<>nil));
|
SetItem(ProjInspMenuMoveDependencyDown,@MoveDependencyDownClick,(SingleSelectedDep<>nil) and (SingleSelectedDep.NextRequiresDependency<>nil));
|
||||||
AddPopupMenuItem(lisPckEditMoveDependencyDown, @MoveDependencyDownClick,
|
// default and preferred filename
|
||||||
(SingleSelectedDep.NextRequiresDependency<>nil));
|
SetItem(ProjInspMenuStoreFilenameAsDefaultOfDependencyDown,@SetDependencyDefaultFilenameMenuItemClick,HasValidDep>0);
|
||||||
end;
|
SetItem(ProjInspMenuStoreFilenameAsPreferredOfDependencyDown,@SetDependencyPreferredFilenameMenuItemClick,HasValidDep>0);
|
||||||
if HasValidDep>0 then begin
|
SetItem(ProjInspMenuClearPreferredFilenameOfDependencyDown,@ClearDependencyFilenameMenuItemClick,CanClearDep>0);
|
||||||
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);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TProjectInspectorForm.ItemsTreeViewAdvancedCustomDrawItem(
|
procedure TProjectInspectorForm.ItemsTreeViewAdvancedCustomDrawItem(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user