IDE: package editor: multi popupmenu

git-svn-id: trunk@45437 -
This commit is contained in:
mattias 2014-06-09 23:20:35 +00:00
parent 52435dc6c2
commit d540b9466e

View File

@ -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);