From 397deec80b3d6709155f2c179e6aef72e7abc601 Mon Sep 17 00:00:00 2001 From: mattias Date: Tue, 18 Jan 2011 14:20:03 +0000 Subject: [PATCH] IDE: package editor: menu items for expand and collapse directory git-svn-id: trunk@29109 - --- ide/lazarusidestrconsts.pas | 2 + ideintf/menuintf.pas | 1 + packager/packageeditor.pas | 97 +++++++++++++++++++++++++++++++------ 3 files changed, 84 insertions(+), 16 deletions(-) diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index dab9cc5f0c..aaeb3b125a 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -3770,6 +3770,8 @@ resourcestring lisAF2PHasRegisterProcedure = 'Has Register procedure'; lisAF2PIsVirtualUnit = 'Virtual unit (source is not in package)'; lisAF2PFileType = 'File Type'; + lisPEExpandDirectory = 'Expand directory'; + lisPECollapseDirectory = 'Collapse directory'; lisAF2PDestinationPackage = 'Destination Package'; lisAF2PShowAll = 'Show All'; lisAF2PAddFileToAPackage = 'Add file to a package'; diff --git a/ideintf/menuintf.pas b/ideintf/menuintf.pas index 83cd62a7d1..d2a5860f71 100644 --- a/ideintf/menuintf.pas +++ b/ideintf/menuintf.pas @@ -421,6 +421,7 @@ var // Package editor(s) PackageEditorMenuRoot: 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 PkgEditMenuSectionDependency: TIDEMenuSection; // e.g. open package, remove dependency PkgEditMenuSectionFiles: TIDEMenuSection; // e.g. sort files, clean up files PkgEditMenuSectionUse: TIDEMenuSection; // e.g. install, add to project diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index 6f3539b70b..ff6d04d5aa 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -61,6 +61,9 @@ var PkgEditMenuEditVirtualUnit: TIDEMenuCommand; PkgEditMenuSectionFileType: TIDEMenuSection; + PkgEditMenuExpandDirectory: TIDEMenuCommand; + PkgEditMenuCollapseDirectory: TIDEMenuCommand; + PkgEditMenuOpenPackage: TIDEMenuCommand; PkgEditMenuRemoveDependency: TIDEMenuCommand; PkgEditMenuReAddDependency: TIDEMenuCommand; @@ -181,29 +184,30 @@ type UsePopupMenu: TPopupMenu; FilesPopupMenu: TPopupMenu; procedure AddBitBtnClick(Sender: TObject); - procedure AddToUsesPkgSectionCheckBoxChange(Sender: TObject); procedure AddToProjectClick(Sender: TObject); + procedure AddToUsesPkgSectionCheckBoxChange(Sender: TObject); procedure ApplyDependencyButtonClick(Sender: TObject); procedure CallRegisterProcCheckBoxChange(Sender: TObject); procedure ChangeFileTypeMenuItemClick(Sender: TObject); + procedure ClearDependencyFilenameMenuItemClick(Sender: TObject); + procedure CollapseDirectoryMenuItemClick(Sender: TObject); procedure CompileAllCleanClick(Sender: TObject); procedure CompileBitBtnClick(Sender: TObject); procedure CompileCleanClick(Sender: TObject); procedure CompilerOptionsBitBtnClick(Sender: TObject); procedure CreateMakefileClick(Sender: TObject); procedure DirectoryHierarchySpeedButtonClick(Sender: TObject); + procedure EditVirtualUnitMenuItemClick(Sender: TObject); + procedure ExpandDirectoryMenuItemClick(Sender: TObject); procedure FilePropsGroupBoxResize(Sender: TObject); procedure FilesPopupMenuPopup(Sender: TObject); - procedure FilterEditChange(Sender: TObject); - procedure FilterEditEnter(Sender: TObject); - procedure FilterEditExit(Sender: TObject); - procedure SortAlphabeticallySpeedButtonClick(Sender: TObject); - procedure UsePopupMenuPopup(Sender: TObject); procedure FilesTreeViewDblClick(Sender: TObject); procedure FilesTreeViewKeyPress(Sender: TObject; var Key: Char); procedure FilesTreeViewSelectionChanged(Sender: TObject); + procedure FilterEditChange(Sender: TObject); + procedure FilterEditEnter(Sender: TObject); + procedure FilterEditExit(Sender: TObject); procedure FixFilesCaseMenuItemClick(Sender: TObject); - procedure ShowMissingFilesMenuItemClick(Sender: TObject); procedure HelpBitBtnClick(Sender: TObject); procedure InstallClick(Sender: TObject); procedure MaxVersionEditChange(Sender: TObject); @@ -212,9 +216,6 @@ type procedure MoveDependencyUpClick(Sender: TObject); procedure MoveFileDownMenuItemClick(Sender: TObject); procedure MoveFileUpMenuItemClick(Sender: TObject); - procedure SetDependencyDefaultFilenameMenuItemClick(Sender: TObject); - procedure SetDependencyPreferredFilenameMenuItemClick(Sender: TObject); - procedure ClearDependencyFilenameMenuItemClick(Sender: TObject); procedure OpenFileMenuItemClick(Sender: TObject); procedure OptionsBitBtnClick(Sender: TObject); procedure PackageEditorFormClose(Sender: TObject; var CloseAction: TCloseAction); @@ -224,14 +225,18 @@ type procedure RegisteredListBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); procedure RemoveBitBtnClick(Sender: TObject); - procedure EditVirtualUnitMenuItemClick(Sender: TObject); procedure RevertClick(Sender: TObject); procedure SaveAsClick(Sender: TObject); procedure SaveBitBtnClick(Sender: TObject); + procedure SetDependencyDefaultFilenameMenuItemClick(Sender: TObject); + procedure SetDependencyPreferredFilenameMenuItemClick(Sender: TObject); + procedure ShowMissingFilesMenuItemClick(Sender: TObject); + procedure SortAlphabeticallySpeedButtonClick(Sender: TObject); procedure SortFilesMenuItemClick(Sender: TObject); procedure UninstallClick(Sender: TObject); procedure UseMaxVersionCheckBoxChange(Sender: TObject); procedure UseMinVersionCheckBoxChange(Sender: TObject); + procedure UsePopupMenuPopup(Sender: TObject); procedure ViewPkgSourceClick(Sender: TObject); procedure ViewPkgTodosClick(Sender: TObject); private @@ -289,6 +294,8 @@ type procedure DoMoveCurrentFile(Offset: integer); procedure DoPublishProject; procedure DoEditVirtualUnit; + procedure DoExpandDirectory; + procedure DoCollapseDirectory; procedure DoRevert; procedure DoSave(SaveAs: boolean); procedure DoSortFiles; @@ -439,6 +446,12 @@ begin PkgEditMenuEditVirtualUnit:=RegisterIDEMenuCommand(AParent,'Edit Virtual File',lisPEEditVirtualUnit); PkgEditMenuSectionFileType:=RegisterIDESubMenu(AParent,'File Type',lisAF2PFileType); + // register the section for operations on directories + PkgEditMenuSectionDirectory:=RegisterIDEMenuSection(PackageEditorMenuRoot,'Directory'); + AParent:=PkgEditMenuSectionDirectory; + PkgEditMenuExpandDirectory:=RegisterIDEMenuCommand(AParent,'Expand directory',lisPEExpandDirectory); + PkgEditMenuCollapseDirectory:=RegisterIDEMenuCommand(AParent, 'Collapse directory', lisPECollapseDirectory); + // register the section for operations on single dependencies PkgEditMenuSectionDependency:=RegisterIDEMenuSection(PackageEditorMenuRoot,'Dependency'); AParent:=PkgEditMenuSectionDependency; @@ -553,6 +566,8 @@ var CurFile: TPkgFile; Writable: Boolean; FileIndex: Integer; + CurNode: TTreeNode; + IsDir: Boolean; procedure SetItem(Item: TIDEMenuCommand; AnOnClick: TNotifyEvent; aShow: boolean = true; AEnable: boolean = true); @@ -602,17 +617,20 @@ begin //debugln(['TPackageEditorForm.FilesPopupMenuPopup START after connect ',FilesPopupMenu.Items.Count]); PackageEditorMenuRoot.BeginUpdate; try - + CurNode:=FilesTreeView.Selected; CurDependency:=GetCurrentDependency(Removed); Writable:=(not LazPackage.ReadOnly); if (CurDependency=nil) then CurFile:=GetCurrentFile(Removed) else CurFile:=nil; + IsDir:=IsDirectoryNode(CurNode) or (CurNode=FFilesNode); PkgEditMenuSectionFileType.Clear; + + // items for single files + PkgEditMenuSectionFile.Visible:=CurFile<>nil; if (CurFile<>nil) then begin - PkgEditMenuSectionFile.Visible:=true; FileIndex:=LazPackage.IndexOfPkgFile(CurFile); SetItem(PkgEditMenuOpenFile,@OpenFileMenuItemClick); SetItem(PkgEditMenuReAddFile,@ReAddMenuItemClick,Removed); @@ -626,9 +644,16 @@ begin AddFileTypeMenuItem; SetItem(PkgEditMenuEditVirtualUnit,@EditVirtualUnitMenuItemClick, (CurFile.FileType=pftVirtualUnit) and not Removed,Writable); - end else begin - PkgEditMenuSectionFile.Visible:=false; end; + + // items for directories + PkgEditMenuSectionDirectory.Visible:=IsDir and ShowDirectoryHierarchy; + if IsDir and ShowDirectoryHierarchy then begin + SetItem(PkgEditMenuExpandDirectory,@ExpandDirectoryMenuItemClick); + SetItem(PkgEditMenuCollapseDirectory,@CollapseDirectoryMenuItemClick); + end; + + // items for all files SetItem(PkgEditMenuSortFiles,@SortFilesMenuItemClick,(LazPackage.FileCount>1),Writable); SetItem(PkgEditMenuFixFilesCase,@FixFilesCaseMenuItemClick,(LazPackage.FileCount>1),Writable); SetItem(PkgEditMenuShowMissingFiles,@ShowMissingFilesMenuItemClick,(LazPackage.FileCount>1),Writable); @@ -844,6 +869,11 @@ begin UpdateButtons; end; +procedure TPackageEditorForm.CollapseDirectoryMenuItemClick(Sender: TObject); +begin + DoCollapseDirectory; +end; + procedure TPackageEditorForm.MoveFileDownMenuItemClick(Sender: TObject); begin DoMoveCurrentFile(1); @@ -1010,6 +1040,11 @@ begin DoEditVirtualUnit; end; +procedure TPackageEditorForm.ExpandDirectoryMenuItemClick(Sender: TObject); +begin + DoExpandDirectory; +end; + procedure TPackageEditorForm.RevertClick(Sender: TObject); begin DoRevert; @@ -1148,7 +1183,8 @@ var begin // add file with AddParams do begin - if CompareFileExt(UnitFilename,'.inc',false)=0 then + if (CompareFileExt(UnitFilename,'.inc',false)=0) + or (CompareFileExt(UnitFilename,'.lrs',false)=0) then ExtendIncPathForNewIncludeFile(UnitFilename,IgnoreIncPaths); FNextSelectedPart := LazPackage.AddFile(UnitFilename,Unit_Name,FileType, PkgFileFlags,cpNormal); @@ -2406,6 +2442,35 @@ begin UpdateAll(true); end; +procedure TPackageEditorForm.DoExpandDirectory; +var + CurNode: TTreeNode; +begin + if not ShowDirectoryHierarchy then exit; + CurNode:=FilesTreeView.Selected; + if not (IsDirectoryNode(CurNode) or (CurNode=FFilesNode)) then exit; + FilesTreeView.BeginUpdate; + CurNode.Expand(true); + FilesTreeView.EndUpdate; +end; + +procedure TPackageEditorForm.DoCollapseDirectory; +var + CurNode: TTreeNode; + Node: TTreeNode; +begin + if not ShowDirectoryHierarchy then exit; + CurNode:=FilesTreeView.Selected; + if not (IsDirectoryNode(CurNode) or (CurNode=FFilesNode)) then exit; + FilesTreeView.BeginUpdate; + Node:=CurNode.GetFirstChild; + while Node<>nil do begin + Node.Collapse(true); + Node:=Node.GetNextSibling; + end; + FilesTreeView.EndUpdate; +end; + procedure TPackageEditorForm.DoMoveCurrentFile(Offset: integer); var Removed: boolean;