mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-13 04:20:47 +01:00
IDE: package editor: multi popupmenu
git-svn-id: trunk@45437 -
This commit is contained in:
parent
52435dc6c2
commit
d540b9466e
@ -28,8 +28,6 @@
|
|||||||
CallRegisterProcCheckBox,
|
CallRegisterProcCheckBox,
|
||||||
AddToUsesPkgSectionCheckBox,
|
AddToUsesPkgSectionCheckBox,
|
||||||
DisableI18NForLFMCheckBox
|
DisableI18NForLFMCheckBox
|
||||||
readd
|
|
||||||
popupmenu
|
|
||||||
replace GetCurrentDependency
|
replace GetCurrentDependency
|
||||||
replace GetCurrentFile
|
replace GetCurrentFile
|
||||||
}
|
}
|
||||||
@ -611,13 +609,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TPackageEditorForm.ItemsPopupMenuPopup(Sender: TObject);
|
procedure TPackageEditorForm.ItemsPopupMenuPopup(Sender: TObject);
|
||||||
var
|
|
||||||
CurDependency: TPkgDependency;
|
|
||||||
Removed: boolean;
|
|
||||||
CurFile: TPkgFile;
|
|
||||||
Writable: Boolean;
|
|
||||||
CurNode: TTreeNode;
|
|
||||||
IsDir: Boolean;
|
|
||||||
|
|
||||||
procedure SetItem(Item: TIDEMenuCommand; AnOnClick: TNotifyEvent;
|
procedure SetItem(Item: TIDEMenuCommand; AnOnClick: TNotifyEvent;
|
||||||
aShow: boolean = true; AEnable: boolean = true);
|
aShow: boolean = true; AEnable: boolean = true);
|
||||||
@ -635,14 +626,15 @@ var
|
|||||||
NewMenuItem: TIDEMenuCommand;
|
NewMenuItem: TIDEMenuCommand;
|
||||||
begin
|
begin
|
||||||
PkgEditMenuSectionFileType.Clear;
|
PkgEditMenuSectionFileType.Clear;
|
||||||
VirtualFileExists:=(CurFile.FileType=pftVirtualUnit)
|
if FSingleSelectedFile=nil then exit;
|
||||||
and FileExistsCached(CurFile.GetFullFilename);
|
VirtualFileExists:=(FSingleSelectedFile.FileType=pftVirtualUnit)
|
||||||
|
and FileExistsCached(FSingleSelectedFile.GetFullFilename);
|
||||||
for CurPFT:=Low(TPkgFileType) to High(TPkgFileType) do begin
|
for CurPFT:=Low(TPkgFileType) to High(TPkgFileType) do begin
|
||||||
NewMenuItem:=RegisterIDEMenuCommand(PkgEditMenuSectionFileType,
|
NewMenuItem:=RegisterIDEMenuCommand(PkgEditMenuSectionFileType,
|
||||||
'SetFileType'+IntToStr(ord(CurPFT)),
|
'SetFileType'+IntToStr(ord(CurPFT)),
|
||||||
GetPkgFileTypeLocalizedName(CurPFT),
|
GetPkgFileTypeLocalizedName(CurPFT),
|
||||||
@ChangeFileTypeMenuItemClick);
|
@ChangeFileTypeMenuItemClick);
|
||||||
if CurPFT=CurFile.FileType then begin
|
if CurPFT=FSingleSelectedFile.FileType then begin
|
||||||
// menuitem to keep the current type
|
// menuitem to keep the current type
|
||||||
NewMenuItem.Enabled:=true;
|
NewMenuItem.Enabled:=true;
|
||||||
NewMenuItem.Checked:=true;
|
NewMenuItem.Checked:=true;
|
||||||
@ -652,7 +644,7 @@ var
|
|||||||
else if (not (CurPFT in PkgFileUnitTypes)) then
|
else if (not (CurPFT in PkgFileUnitTypes)) then
|
||||||
// all other files can be changed into all non unit types
|
// all other files can be changed into all non unit types
|
||||||
NewMenuItem.Enabled:=true
|
NewMenuItem.Enabled:=true
|
||||||
else if FilenameIsPascalUnit(CurFile.Filename) then
|
else if FilenameIsPascalUnit(FSingleSelectedFile.Filename) then
|
||||||
// a pascal file can be changed into anything
|
// a pascal file can be changed into anything
|
||||||
NewMenuItem.Enabled:=true
|
NewMenuItem.Enabled:=true
|
||||||
else
|
else
|
||||||
@ -661,38 +653,76 @@ var
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
TVNode: TTreeNode;
|
||||||
|
NodeData: TPENodeData;
|
||||||
|
Item: TObject;
|
||||||
|
SingleSelectedRemoved: Boolean;
|
||||||
|
SelDepCount: Integer;
|
||||||
|
SelFileCount: Integer;
|
||||||
|
SelDirCount: Integer;
|
||||||
|
SelRemovedFileCount: Integer;
|
||||||
|
Writable: Boolean;
|
||||||
|
CurDependency: TPkgDependency;
|
||||||
|
CurFile: TPkgFile;
|
||||||
begin
|
begin
|
||||||
//debugln(['TPackageEditorForm.FilesPopupMenuPopup START ',ItemsPopupMenu.Items.Count]);
|
//debugln(['TPackageEditorForm.FilesPopupMenuPopup START ',ItemsPopupMenu.Items.Count]);
|
||||||
PackageEditorMenuFilesRoot.MenuItem:=ItemsPopupMenu.Items;
|
PackageEditorMenuFilesRoot.MenuItem:=ItemsPopupMenu.Items;
|
||||||
//debugln(['TPackageEditorForm.FilesPopupMenuPopup START after connect ',ItemsPopupMenu.Items.Count]);
|
//debugln(['TPackageEditorForm.FilesPopupMenuPopup START after connect ',ItemsPopupMenu.Items.Count]);
|
||||||
PackageEditorMenuRoot.BeginUpdate;
|
PackageEditorMenuRoot.BeginUpdate;
|
||||||
try
|
try
|
||||||
CurNode:=ItemsTreeView.Selected;
|
SelFileCount:=0;
|
||||||
CurDependency:=GetCurrentDependency(Removed);
|
SelDepCount:=0;
|
||||||
|
SelDirCount:=0;
|
||||||
|
SelRemovedFileCount:=0;
|
||||||
|
SingleSelectedRemoved:=false;
|
||||||
|
for i:=0 to ItemsTreeView.SelectionCount-1 do begin
|
||||||
|
TVNode:=ItemsTreeView.Selections[i];
|
||||||
|
if GetNodeDataItem(TVNode,NodeData,Item) then begin
|
||||||
|
if Item is TPkgFile then begin
|
||||||
|
CurFile:=TPkgFile(Item);
|
||||||
|
inc(SelFileCount);
|
||||||
|
FSingleSelectedFile:=CurFile;
|
||||||
|
SingleSelectedRemoved:=NodeData.Removed;
|
||||||
|
if NodeData.Removed then
|
||||||
|
inc(SelRemovedFileCount);
|
||||||
|
end else if Item is TPkgDependency then begin
|
||||||
|
CurDependency:=TPkgDependency(Item);
|
||||||
|
inc(SelDepCount);
|
||||||
|
FSingleSelectedDependency:=CurDependency;
|
||||||
|
SingleSelectedRemoved:=NodeData.Removed;
|
||||||
|
end;
|
||||||
|
end else if IsDirectoryNode(TVNode) or (TVNode=FFilesNode) then begin
|
||||||
|
inc(SelDirCount);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (SelFileCount+SelDepCount+SelDirCount>1) then begin
|
||||||
|
// it is a multi selection
|
||||||
|
FSingleSelectedFile:=nil;
|
||||||
|
FSingleSelectedDependency:=nil;
|
||||||
|
end;
|
||||||
|
|
||||||
Writable:=(not LazPackage.ReadOnly);
|
Writable:=(not LazPackage.ReadOnly);
|
||||||
if (CurDependency=nil) then
|
|
||||||
CurFile:=GetCurrentFile(Removed)
|
|
||||||
else
|
|
||||||
CurFile:=nil;
|
|
||||||
IsDir:=IsDirectoryNode(CurNode) or (CurNode=FFilesNode);
|
|
||||||
|
|
||||||
PkgEditMenuSectionFileType.Clear;
|
PkgEditMenuSectionFileType.Clear;
|
||||||
|
|
||||||
// items for single files, under section PkgEditMenuSectionFile
|
// items for single files, under section PkgEditMenuSectionFile
|
||||||
PkgEditMenuSectionFile.Visible:=CurFile<>nil;
|
PkgEditMenuSectionFile.Visible:=SelFileCount>0;
|
||||||
if (CurFile<>nil) then begin
|
if PkgEditMenuSectionFile.Visible then begin
|
||||||
SetItem(PkgEditMenuOpenFile,@OpenFileMenuItemClick);
|
SetItem(PkgEditMenuOpenFile,@OpenFileMenuItemClick);
|
||||||
SetItem(PkgEditMenuReAddFile,@ReAddMenuItemClick,Removed);
|
SetItem(PkgEditMenuReAddFile,@ReAddMenuItemClick,SingleSelectedRemoved);
|
||||||
SetItem(PkgEditMenuRemoveFile,@RemoveBitBtnClick,not Removed,RemoveBitBtn.Enabled);
|
SetItem(PkgEditMenuRemoveFile,@RemoveBitBtnClick,SelRemovedFileCount>0,RemoveBitBtn.Enabled);
|
||||||
PkgEditMenuSectionFileType.Visible:=true;
|
|
||||||
AddFileTypeMenuItem;
|
AddFileTypeMenuItem;
|
||||||
SetItem(PkgEditMenuEditVirtualUnit,@EditVirtualUnitMenuItemClick,
|
SetItem(PkgEditMenuEditVirtualUnit,@EditVirtualUnitMenuItemClick,
|
||||||
(CurFile.FileType=pftVirtualUnit) and not Removed,Writable);
|
(FSingleSelectedFile<>nil) and (FSingleSelectedFile.FileType=pftVirtualUnit)
|
||||||
|
and not SingleSelectedRemoved,Writable);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// items for directories, under section PkgEditMenuSectionDirectory
|
// items for directories, under section PkgEditMenuSectionDirectory
|
||||||
PkgEditMenuSectionDirectory.Visible:=IsDir and ShowDirectoryHierarchy;
|
PkgEditMenuSectionDirectory.Visible:=(SelDirCount>0) and ShowDirectoryHierarchy;
|
||||||
if IsDir and ShowDirectoryHierarchy then begin
|
if PkgEditMenuSectionDirectory.Visible then begin
|
||||||
SetItem(PkgEditMenuExpandDirectory,@ExpandDirectoryMenuItemClick);
|
SetItem(PkgEditMenuExpandDirectory,@ExpandDirectoryMenuItemClick);
|
||||||
SetItem(PkgEditMenuCollapseDirectory,@CollapseDirectoryMenuItemClick);
|
SetItem(PkgEditMenuCollapseDirectory,@CollapseDirectoryMenuItemClick);
|
||||||
SetItem(PkgEditMenuUseAllUnitsInDirectory,@UseAllUnitsInDirectoryMenuItemClick);
|
SetItem(PkgEditMenuUseAllUnitsInDirectory,@UseAllUnitsInDirectoryMenuItemClick);
|
||||||
@ -700,28 +730,31 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
// items for dependencies, under section PkgEditMenuSectionDependency
|
// items for dependencies, under section PkgEditMenuSectionDependency
|
||||||
PkgEditMenuSectionDependency.Visible:=(CurDependency<>nil) or (CurNode=FRequiredPackagesNode);
|
PkgEditMenuSectionDependency.Visible:=(SelDepCount>0)
|
||||||
|
or (ItemsTreeView.Selected=FRequiredPackagesNode);
|
||||||
SetItem(PkgEditMenuOpenPackage,@OpenFileMenuItemClick,
|
SetItem(PkgEditMenuOpenPackage,@OpenFileMenuItemClick,
|
||||||
(CurDependency<>nil) and (CurDependency.RequiredPackage<>nil),
|
(FSingleSelectedDependency<>nil) and (FSingleSelectedDependency.RequiredPackage<>nil));
|
||||||
CurDependency<>nil);
|
|
||||||
SetItem(PkgEditMenuRemoveDependency,@RemoveBitBtnClick,
|
SetItem(PkgEditMenuRemoveDependency,@RemoveBitBtnClick,
|
||||||
(CurDependency<>nil) and (not Removed),
|
(FSingleSelectedDependency<>nil) and (not SingleSelectedRemoved),
|
||||||
RemoveBitBtn.Enabled);
|
Writable);
|
||||||
SetItem(PkgEditMenuReAddDependency,@ReAddMenuItemClick,
|
SetItem(PkgEditMenuReAddDependency,@ReAddMenuItemClick,
|
||||||
(CurDependency<>nil) and Removed and AddBitBtn.Enabled,
|
(FSingleSelectedDependency<>nil) and SingleSelectedRemoved,
|
||||||
CurDependency<>nil);
|
Writable);
|
||||||
SetItem(PkgEditMenuDependencyStoreFileNameAsDefault,
|
SetItem(PkgEditMenuDependencyStoreFileNameAsDefault,
|
||||||
@SetDependencyDefaultFilenameMenuItemClick,
|
@SetDependencyDefaultFilenameMenuItemClick,
|
||||||
(CurDependency<>nil) and (not Removed),
|
(FSingleSelectedDependency<>nil) and (not SingleSelectedRemoved),
|
||||||
(CurDependency<>nil) and Writable and (CurDependency.RequiredPackage<>nil));
|
Writable and (FSingleSelectedDependency<>nil)
|
||||||
|
and (FSingleSelectedDependency.RequiredPackage<>nil));
|
||||||
SetItem(PkgEditMenuDependencyStoreFileNameAsPreferred,
|
SetItem(PkgEditMenuDependencyStoreFileNameAsPreferred,
|
||||||
@SetDependencyPreferredFilenameMenuItemClick,
|
@SetDependencyPreferredFilenameMenuItemClick,
|
||||||
(CurDependency<>nil) and (not Removed),
|
(FSingleSelectedDependency<>nil) and (not SingleSelectedRemoved),
|
||||||
(CurDependency<>nil) and Writable and (CurDependency.RequiredPackage<>nil));
|
Writable and (FSingleSelectedDependency<>nil)
|
||||||
|
and (FSingleSelectedDependency.RequiredPackage<>nil));
|
||||||
SetItem(PkgEditMenuDependencyClearStoredFileName,
|
SetItem(PkgEditMenuDependencyClearStoredFileName,
|
||||||
@ClearDependencyFilenameMenuItemClick,
|
@ClearDependencyFilenameMenuItemClick,
|
||||||
(CurDependency<>nil) and (not Removed),
|
(FSingleSelectedDependency<>nil) and (not SingleSelectedRemoved),
|
||||||
(CurDependency<>nil) and Writable and (CurDependency.RequiredPackage<>nil));
|
Writable and (FSingleSelectedDependency<>nil)
|
||||||
|
and (FSingleSelectedDependency.RequiredPackage<>nil));
|
||||||
SetItem(PkgEditMenuCleanDependencies,
|
SetItem(PkgEditMenuCleanDependencies,
|
||||||
@CleanDependenciesMenuItemClick,LazPackage.FirstRequiredDependency<>nil,
|
@CleanDependenciesMenuItemClick,LazPackage.FirstRequiredDependency<>nil,
|
||||||
Writable);
|
Writable);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user