IDEIntf: implemented TIDEMenuSection.Visible, added menu items for package editor

git-svn-id: trunk@26159 -
This commit is contained in:
mattias 2010-06-17 14:44:59 +00:00
parent 6e5c9ebf1c
commit 2a3b817e5c
5 changed files with 261 additions and 147 deletions

View File

@ -3786,7 +3786,7 @@ resourcestring
lisPckEditAddToProject = 'Add to project'; lisPckEditAddToProject = 'Add to project';
lisPckEditInstall = 'Install'; lisPckEditInstall = 'Install';
lisPckEditUninstall = 'Uninstall'; lisPckEditUninstall = 'Uninstall';
lisPckEditViewPackgeSource = 'View Package Source'; lisPckEditViewPackageSource = 'View Package Source';
lisPEViewToDoList = 'View ToDo list'; lisPEViewToDoList = 'View ToDo list';
lisPckEditGeneralOptions = 'General Options'; lisPckEditGeneralOptions = 'General Options';
lisPckEditSaveChanges = 'Save Changes?'; lisPckEditSaveChanges = 'Save Changes?';

View File

@ -12698,7 +12698,7 @@ begin
begin begin
IDEWindowCreators.ShowForm(SearchResultsView,true); IDEWindowCreators.ShowForm(SearchResultsView,true);
if IDEDockMaster=nil then if IDEDockMaster=nil then
// the sourcenotebook is more interesting than the messages // the sourcenotebook is more interesting than the search results
SourceEditorManager.ShowActiveWindowOnTop(False); SourceEditorManager.ShowActiveWindowOnTop(False);
end; end;
end; end;

View File

@ -368,7 +368,7 @@ var
itmInfoHelps: TIDEMenuSection; itmInfoHelps: TIDEMenuSection;
itmHelpTools: TIDEMenuSection; itmHelpTools: TIDEMenuSection;
// Source Editor: Popupmenu // Source Editor(s): Popupmenu
SourceEditorMenuRoot: TIDEMenuSection = nil; SourceEditorMenuRoot: TIDEMenuSection = nil;
// Source Editor: First dynamic section for often used context sensitive stuff // Source Editor: First dynamic section for often used context sensitive stuff
// The items are cleared automatically after each popup. // The items are cleared automatically after each popup.
@ -415,6 +415,17 @@ var
DesignerMenuSectionMisc: TIDEMenuSection; DesignerMenuSectionMisc: TIDEMenuSection;
DesignerMenuSectionOptions: TIDEMenuSection; DesignerMenuSectionOptions: TIDEMenuSection;
// Package editor(s)
PackageEditorMenuRoot: TIDEMenuSection = nil;
PkgEditMenuSectionFile: TIDEMenuSection; // e.g. open file, remove file, move file up/down
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
PkgEditMenuSectionSave: TIDEMenuSection; // e.g. save as, revert, publish
PkgEditMenuSectionCompile: TIDEMenuSection; // e.g. build clean, create Makefile
PkgEditMenuSectionAddRemove: TIDEMenuSection; // e.g. add unit, add dependency
PkgEditMenuSectionMisc: TIDEMenuSection; // e.g. options
function RegisterIDEMenuRoot(const Name: string; MenuItem: TMenuItem = nil function RegisterIDEMenuRoot(const Name: string; MenuItem: TMenuItem = nil
): TIDEMenuSection; ): TIDEMenuSection;
function RegisterIDEMenuSection(Parent: TIDEMenuSection; function RegisterIDEMenuSection(Parent: TIDEMenuSection;
@ -639,15 +650,11 @@ procedure TIDEMenuItem.SetMenuItem(const AValue: TMenuItem);
begin begin
if FMenuItem = AValue then exit; if FMenuItem = AValue then exit;
if FMenuItem <> nil then ClearMenuItems; if FMenuItem <> nil then ClearMenuItems;
if FMenuItem = nil then FMenuItem := AValue;
begin AutoFreeMenuItem := False;
FMenuItem := AValue;
AutoFreeMenuItem := False;
if MenuItem <> nil then
MenuItem.AddHandlerOnDestroy(@MenuItemDestroy);
end;
if MenuItem <> nil then if MenuItem <> nil then
begin begin
MenuItem.AddHandlerOnDestroy(@MenuItemDestroy);
MenuItem.Caption := Caption; MenuItem.Caption := Caption;
MenuItem.Bitmap := FBitmap; MenuItem.Bitmap := FBitmap;
MenuItem.Hint := Hint; MenuItem.Hint := Hint;
@ -896,7 +903,7 @@ var
procedure UpdateNeedTopSeparator; procedure UpdateNeedTopSeparator;
// a separator at top is needed, if // a separator at top is needed, if
// - this section is imbedded (not ChildsAsSubMenu) // - this section is embedded (not ChildsAsSubMenu)
// - and this section is visible // - and this section is visible
// - and this section has visible childs // - and this section has visible childs
// - and there is a visible menu item in front // - and there is a visible menu item in front
@ -912,7 +919,7 @@ var
if Section[i].VisibleActive then begin if Section[i].VisibleActive then begin
// there is a visible menu item in front // there is a visible menu item in front
// => the Top separator is needed // => the Top separator is needed
//debugln('TIDEMenuSection.UpdateNeedTopSeparator Name="',Name,'" ItemInFront="',Section[i].Name,'"'); //debugln('TIDEMenuSection.UpdateNeedTopSeparator Name="',Name,'" ItemInFront="',Section[i].Name,'" ');
NewNeedTopSeparator:=true; NewNeedTopSeparator:=true;
break; break;
end; end;
@ -1061,8 +1068,9 @@ begin
inc(ContainerMenuIndex); inc(ContainerMenuIndex);
// update childs // update childs
for i:=0 to FInvalidChildStartIndex-1 do if Visible then
inc(ContainerMenuIndex,Items[i].Size); for i:=0 to FInvalidChildStartIndex-1 do
inc(ContainerMenuIndex,Items[i].Size);
while (FInvalidChildStartIndex<=FInvalidChildEndIndex) while (FInvalidChildStartIndex<=FInvalidChildEndIndex)
and (FInvalidChildStartIndex<Count) do begin and (FInvalidChildStartIndex<Count) do begin
Item:=Items[FInvalidChildStartIndex]; Item:=Items[FInvalidChildStartIndex];
@ -1074,9 +1082,10 @@ begin
CurSection:=TIDEMenuSection(Item) CurSection:=TIDEMenuSection(Item)
else else
CurSection:=nil; CurSection:=nil;
// insert menu item if Visible then begin
if (CurSection=nil) or CurSection.ChildsAsSubMenu then begin // insert menu item
if ContainerMenuItem<>nil then begin if ((CurSection=nil) or CurSection.ChildsAsSubMenu)
and (ContainerMenuItem<>nil) then begin
Item.CreateMenuItem; Item.CreateMenuItem;
if Item.MenuItem.Parent=nil then begin if Item.MenuItem.Parent=nil then begin
{$IFDEF VerboseMenuIntf} {$IFDEF VerboseMenuIntf}
@ -1085,17 +1094,24 @@ begin
ContainerMenuItem.Insert(ContainerMenuIndex,Item.MenuItem); ContainerMenuItem.Insert(ContainerMenuIndex,Item.MenuItem);
end; end;
end; end;
// update grand childs
if CurSection<>nil then begin
CurSection:=TIDEMenuSection(Item);
CurSection.FInvalidChildStartIndex:=0;
CurSection.FInvalidChildEndIndex:=CurSection.Count-1;
CurSection.UpdateMenuStructure;
end;
//debugln('TIDEMenuSection.UpdateMenuStructure Increase ContainerMenuIndex MenuItem Name="',Name,'" Item="',Item.Name,'" ContainerMenuIndex=',dbgs(ContainerMenuIndex),' Item.Size=',dbgs(Item.Size));
inc(ContainerMenuIndex,Item.Size);
end else begin
// clear menu items
Item.MenuItem:=nil;
if CurSection<>nil then begin
// Separators are not needed anymore
FreeAndNil(CurSection.FTopSeparator);
FreeAndNil(CurSection.FBottomSeparator);
end;
end; end;
// update grand childs
if CurSection<>nil then begin
CurSection:=TIDEMenuSection(Item);
CurSection.FInvalidChildStartIndex:=0;
CurSection.FInvalidChildEndIndex:=CurSection.Count-1;
CurSection.UpdateMenuStructure;
end;
// next
//debugln('TIDEMenuSection.UpdateMenuStructure Increase ContainerMenuIndex MenuItem Name="',Name,'" Item="',Item.Name,'" ContainerMenuIndex=',dbgs(ContainerMenuIndex),' Item.Size=',dbgs(Item.Size));
inc(ContainerMenuIndex,Item.Size);
end; end;
// update BottomSeparator // update BottomSeparator
@ -1174,6 +1190,8 @@ procedure TIDEMenuSection.ItemVisibleActiveChanged(AnItem: TIDEMenuItem);
var var
OldVisibleActive: Boolean; OldVisibleActive: Boolean;
NowVisibleActive: Boolean; NowVisibleActive: Boolean;
FromIndex: LongInt;
ToIndex: LongInt;
begin begin
if imssClearing in FStates then if imssClearing in FStates then
exit; exit;
@ -1182,7 +1200,11 @@ begin
RaiseGDBException(''); RaiseGDBException('');
AnItem.FLastVisibleActive:=NowVisibleActive; AnItem.FLastVisibleActive:=NowVisibleActive;
Invalidate(AnItem.SectionIndex,AnItem.SectionIndex); FromIndex:=AnItem.SectionIndex;
ToIndex:=AnItem.SectionIndex;
if (FromIndex>0) and NowVisibleActive then dec(FromIndex);
if (ToIndex<Count-1) and not NowVisibleActive then inc(ToIndex);
Invalidate(FromIndex,ToIndex);
{$IFDEF VerboseMenuIntf} {$IFDEF VerboseMenuIntf}
debugln('TIDEMenuSection.ItemVisibleActiveChanged Self="',Name,'" AnItem="',AnItem.Name,'" AnItem.VisibleActive=',dbgs(AnItem.VisibleActive)); debugln('TIDEMenuSection.ItemVisibleActiveChanged Self="',Name,'" AnItem="',AnItem.Name,'" AnItem.VisibleActive=',dbgs(AnItem.VisibleActive));
{$ENDIF} {$ENDIF}
@ -1375,7 +1397,7 @@ end;
function TIDEMenuSection.VisibleActive: boolean; function TIDEMenuSection.VisibleActive: boolean;
begin begin
Result:=VisibleCount>0; Result:=Visible and (VisibleCount>0);
end; end;
function TIDEMenuSection.Size: integer; function TIDEMenuSection.Size: integer;

View File

@ -41,13 +41,58 @@ uses
Classes, SysUtils, Forms, Controls, StdCtrls, ComCtrls, Buttons, LResources, Classes, SysUtils, Forms, Controls, StdCtrls, ComCtrls, Buttons, LResources,
Graphics, LCLType, LCLProc, Menus, Dialogs, FileUtil, AVL_Tree, Graphics, LCLType, LCLProc, Menus, Dialogs, FileUtil, AVL_Tree,
// IDEIntf CodeTools // IDEIntf CodeTools
HelpIntfs, LazIDEIntf, ProjectIntf, FormEditingIntf, Laz_XMLCfg, PackageIntf, MenuIntf, HelpIntfs, LazIDEIntf, ProjectIntf, FormEditingIntf, Laz_XMLCfg,
PackageIntf,
// IDE // IDE
MainIntf, IDEProcs, LazConf, LazarusIDEStrConsts, IDEOptionDefs, IDEDefs, MainIntf, IDEProcs, LazConf, LazarusIDEStrConsts, IDEOptionDefs, IDEDefs,
IDEContextHelpEdit, CompilerOptions, CompilerOptionsDlg, ComponentReg, IDEContextHelpEdit, CompilerOptions, CompilerOptionsDlg, ComponentReg,
PackageDefs, PkgOptionsDlg, AddToPackageDlg, PkgVirtualUnitEditor, PackageDefs, PkgOptionsDlg, AddToPackageDlg, PkgVirtualUnitEditor,
PackageSystem; PackageSystem;
const
PackageEditorMenuRootName = 'PackageEditor';
var
PkgEditMenuOpenFile: TIDEMenuCommand;
PkgEditMenuRemoveFile: TIDEMenuCommand;
PkgEditMenuReAddFile: TIDEMenuCommand;
PkgEditMenuMoveFileUp: TIDEMenuCommand;
PkgEditMenuMoveFileDown: TIDEMenuCommand;
PkgEditMenuEditVirtualUnit: TIDEMenuCommand;
PkgEditMenuSectionFileType: TIDEMenuSection;
PkgEditMenuOpenPackage: TIDEMenuCommand;
PkgEditMenuRemoveDependency: TIDEMenuCommand;
PkgEditMenuReAddDependency: TIDEMenuCommand;
PkgEditMenuMoveDependencyUp: TIDEMenuCommand;
PkgEditMenuMoveDependencyDown: TIDEMenuCommand;
PkgEditMenuDependencyStoreFileNameAsDefault: TIDEMenuCommand;
PkgEditMenuDependencyStoreFileNameAsPreferred: TIDEMenuCommand;
PkgEditMenuDependencyClearStoredFileName: TIDEMenuCommand;
PkgEditMenuSortFiles: TIDEMenuCommand;
PkgEditMenuFixFilesCase: TIDEMenuCommand;
PkgEditMenuAddToProject: TIDEMenuCommand;
PkgEditMenuInstall: TIDEMenuCommand;
PkgEditMenuUninstall: TIDEMenuCommand;
PkgEditMenuSave: TIDEMenuCommand;
PkgEditMenuSaveAs: TIDEMenuCommand;
PkgEditMenuRevert: TIDEMenuCommand;
PkgEditMenuPublish: TIDEMenuCommand;
PkgEditMenuCompile: TIDEMenuCommand;
PkgEditMenuRecompileClean: TIDEMenuCommand;
PkgEditMenuRecompileAllRequired: TIDEMenuCommand;
PkgEditMenuCreateMakefile: TIDEMenuCommand;
PkgEditMenuAdd: TIDEMenuCommand;
PkgEditMenuRemove: TIDEMenuCommand;
PkgEditMenuGeneralOptions: TIDEMenuCommand;
PkgEditMenuCompilerOptions: TIDEMenuCommand;
PkgEditMenuViewPackageSource: TIDEMenuCommand;
type type
TOnCreatePkgMakefile = TOnCreatePkgMakefile =
function(Sender: TObject; APackage: TLazPackage): TModalResult of object; function(Sender: TObject; APackage: TLazPackage): TModalResult of object;
@ -331,6 +376,7 @@ type
var var
PackageEditors: TPackageEditors; PackageEditors: TPackageEditors;
procedure RegisterStandardPackageEditorMenuItems;
implementation implementation
@ -371,6 +417,78 @@ begin
Result:=CompareFilenames(Filename,Layout.Filename); Result:=CompareFilenames(Filename,Layout.Filename);
end; end;
procedure RegisterStandardPackageEditorMenuItems;
var
AParent: TIDEMenuSection;
begin
PackageEditorMenuRoot:=RegisterIDEMenuRoot(PackageEditorMenuRootName);
// register the section for operations on single files
PkgEditMenuSectionFile:=RegisterIDEMenuSection(PackageEditorMenuRoot,'File');
AParent:=PkgEditMenuSectionFile;
PkgEditMenuOpenFile:=RegisterIDEMenuCommand(AParent,'Open File',lisOpenFile);
PkgEditMenuRemoveFile:=RegisterIDEMenuCommand(AParent,'Remove File',lisPckEditRemoveFile);
PkgEditMenuReAddFile:=RegisterIDEMenuCommand(AParent,'ReAdd File',lisPckEditReAddFile);
PkgEditMenuMoveFileUp:=RegisterIDEMenuCommand(AParent,'Move File Up',lisPEMoveFileUp);
PkgEditMenuMoveFileDown:=RegisterIDEMenuCommand(AParent,'Move File Down',lisPEMoveFileDown);
PkgEditMenuEditVirtualUnit:=RegisterIDEMenuCommand(AParent,'Edit Virtual File',lisPEEditVirtualUnit);
PkgEditMenuSectionFileType:=RegisterIDESubMenu(AParent,'File Type',lisAF2PFileType);
// register the section for operations on single dependencies
PkgEditMenuSectionDependency:=RegisterIDEMenuSection(PackageEditorMenuRoot,'Dependency');
AParent:=PkgEditMenuSectionDependency;
PkgEditMenuOpenPackage:=RegisterIDEMenuCommand(AParent,'Open Package',lisMenuOpenPackage);
PkgEditMenuRemoveDependency:=RegisterIDEMenuCommand(AParent,'Remove Dependency',lisPckEditRemoveDependency);
PkgEditMenuReAddDependency:=RegisterIDEMenuCommand(AParent,'ReAdd Dependency',lisPckEditReAddDependency);
PkgEditMenuMoveDependencyUp:=RegisterIDEMenuCommand(AParent,'Move Dependency Up',lisPckEditMoveDependencyUp);
PkgEditMenuMoveDependencyDown:=RegisterIDEMenuCommand(AParent,'Move Dependency Down',lisPckEditMoveDependencyDown);
PkgEditMenuDependencyStoreFileNameAsDefault:=RegisterIDEMenuCommand(AParent,'Dependency Store Filename As Default',lisPckEditStoreFileNameAsDefaultForThisDependency);
PkgEditMenuDependencyStoreFileNameAsPreferred:=RegisterIDEMenuCommand(AParent,'Dependency Store Filename As Preferred',lisPckEditStoreFileNameAsPreferredForThisDependency);
PkgEditMenuDependencyClearStoredFileName:=RegisterIDEMenuCommand(AParent,'Dependency Clear Stored Filename',lisPckEditClearDefaultPreferredFilenameOfDependency);
// register the section for operations on all files
PkgEditMenuSectionFiles:=RegisterIDEMenuSection(PackageEditorMenuRoot,'Files');
AParent:=PkgEditMenuSectionFiles;
PkgEditMenuSortFiles:=RegisterIDEMenuCommand(AParent,'Sort Files',lisPESortFiles);
PkgEditMenuFixFilesCase:=RegisterIDEMenuCommand(AParent,'Fix Files Case',lisPEFixFilesCase);
// register the section for using the package
PkgEditMenuSectionUse:=RegisterIDEMenuSection(PackageEditorMenuRoot,'Use');
AParent:=PkgEditMenuSectionUse;
PkgEditMenuAddToProject:=RegisterIDEMenuCommand(AParent,'Add To Project',lisPckEditAddToProject);
PkgEditMenuInstall:=RegisterIDEMenuCommand(AParent,'Install',lisPckEditInstall);
PkgEditMenuUninstall:=RegisterIDEMenuCommand(AParent,'Uninstall',lisPckEditUninstall);
// register the section for saving the package
PkgEditMenuSectionSave:=RegisterIDEMenuSection(PackageEditorMenuRoot,'Save');
AParent:=PkgEditMenuSectionSave;
PkgEditMenuSave:=RegisterIDEMenuCommand(AParent,'Save',lisMenuSave);
PkgEditMenuSaveAs:=RegisterIDEMenuCommand(AParent,'Save As',lisMenuSaveAs);
PkgEditMenuRevert:=RegisterIDEMenuCommand(AParent,'Revert',lisMenuRevert);
PkgEditMenuPublish:=RegisterIDEMenuCommand(AParent,'Publish',lisPkgEditPublishPackage);
// register the section for compiling the package
PkgEditMenuSectionCompile:=RegisterIDEMenuSection(PackageEditorMenuRoot,'Compile');
AParent:=PkgEditMenuSectionCompile;
PkgEditMenuCompile:=RegisterIDEMenuCommand(AParent,'Compile',lisPckEditCompile);
PkgEditMenuRecompileClean:=RegisterIDEMenuCommand(AParent,'Recompile Clean',lisPckEditRecompileClean);
PkgEditMenuRecompileAllRequired:=RegisterIDEMenuCommand(AParent,'Recompile All Required',lisPckEditRecompileAllRequired);
PkgEditMenuCreateMakefile:=RegisterIDEMenuCommand(AParent,'Create Makefile',lisPckEditCreateMakefile);
// register the section for adding to or removing from package
PkgEditMenuSectionAddRemove:=RegisterIDEMenuSection(PackageEditorMenuRoot,'AddRemove');
AParent:=PkgEditMenuSectionCompile;
PkgEditMenuAdd:=RegisterIDEMenuCommand(AParent,'Add',lisCodeTemplAdd);
PkgEditMenuRemove:=RegisterIDEMenuCommand(AParent,'Remove',lisExtToolRemove);
// register the section for other things
PkgEditMenuSectionMisc:=RegisterIDEMenuSection(PackageEditorMenuRoot,'Misc');
AParent:=PkgEditMenuSectionMisc;
PkgEditMenuGeneralOptions:=RegisterIDEMenuCommand(AParent,'General Options',lisPckEditGeneralOptions);
PkgEditMenuCompilerOptions:=RegisterIDEMenuCommand(AParent,'Compiler Options',dlgCompilerOptions);
PkgEditMenuViewPackageSource:=RegisterIDEMenuCommand(AParent,'View Package Source',lisPckEditViewPackageSource);
end;
{ TPackageEditorForm } { TPackageEditorForm }
procedure TPackageEditorForm.PublishClick(Sender: TObject); procedure TPackageEditorForm.PublishClick(Sender: TObject);
@ -417,43 +535,34 @@ end;
procedure TPackageEditorForm.FilesPopupMenuPopup(Sender: TObject); procedure TPackageEditorForm.FilesPopupMenuPopup(Sender: TObject);
var var
ItemCnt: Integer;
CurDependency: TPkgDependency; CurDependency: TPkgDependency;
Removed: boolean; Removed: boolean;
CurFile: TPkgFile; CurFile: TPkgFile;
Writable: Boolean; Writable: Boolean;
FileIndex: Integer; FileIndex: Integer;
function AddPopupMenuItem(const ACaption: string; AnEvent: TNotifyEvent; procedure SetItem(Item: TIDEMenuCommand; AnOnClick: TNotifyEvent;
EnabledFlag: boolean): TMenuItem; aShow: boolean = true; AEnable: boolean = true);
begin begin
if FilesPopupMenu.Items.Count<=ItemCnt then begin Item.OnClick:=AnOnClick;
Result:=TMenuItem.Create(Self); Item.Visible:=aShow;
FilesPopupMenu.Items.Add(Result); Item.Enabled:=AEnable;
end else begin
Result:=FilesPopupMenu.Items[ItemCnt];
while Result.Count>0 do Result.Delete(Result.Count-1);
end;
Result.Caption:=ACaption;
Result.OnClick:=AnEvent;
Result.Enabled:=EnabledFlag;
inc(ItemCnt);
end; end;
procedure AddFileTypeMenuItem; procedure AddFileTypeMenuItem;
var var
FileTypeMenuItem: TMenuItem;
CurPFT: TPkgFileType; CurPFT: TPkgFileType;
NewMenuItem: TMenuItem;
VirtualFileExists: Boolean; VirtualFileExists: Boolean;
NewMenuItem: TIDEMenuCommand;
begin begin
FileTypeMenuItem:=AddPopupMenuItem(lisAF2PFileType, nil, true); PkgEditMenuSectionFileType.Clear;
VirtualFileExists:=(CurFile.FileType=pftVirtualUnit) VirtualFileExists:=(CurFile.FileType=pftVirtualUnit)
and FileExistsUTF8(CurFile.Filename); and FileExistsUTF8(CurFile.Filename);
for CurPFT:=Low(TPkgFileType) to High(TPkgFileType) do begin for CurPFT:=Low(TPkgFileType) to High(TPkgFileType) do begin
NewMenuItem:=TMenuItem.Create(Self); NewMenuItem:=RegisterIDEMenuCommand(PkgEditMenuSectionFileType,
NewMenuItem.Caption:=GetPkgFileTypeLocalizedName(CurPFT); 'SetFileType'+IntToStr(ord(CurPFT)),
NewMenuItem.OnClick:=@ChangeFileTypeMenuItemClick; GetPkgFileTypeLocalizedName(CurPFT),
@ChangeFileTypeMenuItemClick);
if CurPFT=CurFile.FileType then begin if CurPFT=CurFile.FileType then begin
// menuitem to keep the current type // menuitem to keep the current type
NewMenuItem.Enabled:=true; NewMenuItem.Enabled:=true;
@ -470,110 +579,92 @@ var
else else
// default is to not allow // default is to not allow
NewMenuItem.Enabled:=false; NewMenuItem.Enabled:=false;
FileTypeMenuItem.Add(NewMenuItem);
end; end;
end; end;
begin begin
ItemCnt:=0; PackageEditorMenuRoot.MenuItem:=FilesPopupMenu.Items;
//debugln(['TPackageEditorForm.FilesPopupMenuPopup START ',FilesPopupMenu.Items.Count]);
PackageEditorMenuRoot.BeginUpdate;
try
CurDependency:=GetCurrentDependency(Removed); CurDependency:=GetCurrentDependency(Removed);
Writable:=(not LazPackage.ReadOnly); Writable:=(not LazPackage.ReadOnly);
if (CurDependency=nil) then if (CurDependency=nil) then
CurFile:=GetCurrentFile(Removed) CurFile:=GetCurrentFile(Removed)
else else
CurFile:=nil; CurFile:=nil;
if (CurFile<>nil) then begin PkgEditMenuSectionFileType.Clear;
FileIndex:=LazPackage.IndexOfPkgFile(CurFile); if (CurFile<>nil) then begin
if not Removed then begin PkgEditMenuSectionFile.Visible:=true;
AddPopupMenuItem(lisOpenFile, @OpenFileMenuItemClick, true); FileIndex:=LazPackage.IndexOfPkgFile(CurFile);
AddPopupMenuItem(lisPckEditRemoveFile, @RemoveBitBtnClick, SetItem(PkgEditMenuOpenFile,@OpenFileMenuItemClick);
RemoveBitBtn.Enabled); SetItem(PkgEditMenuReAddFile,@ReAddMenuItemClick,Removed);
AddPopupMenuItem(lisPEMoveFileUp, @MoveFileUpMenuItemClick, SetItem(PkgEditMenuRemoveFile,@RemoveBitBtnClick,not Removed,RemoveBitBtn.Enabled);
(FileIndex>0) and Writable); SetItem(PkgEditMenuMoveFileUp,@MoveFileUpMenuItemClick,not Removed,(FileIndex>0) and Writable);
AddPopupMenuItem(lisPEMoveFileDown, @MoveFileDownMenuItemClick, SetItem(PkgEditMenuMoveFileDown,@MoveFileDownMenuItemClick,
(FileIndex<LazPackage.FileCount-1) and Writable); not Removed,(FileIndex>LazPackage.FileCount-1) and Writable);
PkgEditMenuSectionFileType.Visible:=true;
AddFileTypeMenuItem; AddFileTypeMenuItem;
if CurFile.FileType=pftVirtualUnit then SetItem(PkgEditMenuEditVirtualUnit,@EditVirtualUnitMenuItemClick,
AddPopupMenuItem(lisPEEditVirtualUnit, @EditVirtualUnitMenuItemClick, (CurFile.FileType=pftVirtualUnit) and not Removed,Writable);
Writable);
end else begin end else begin
AddPopupMenuItem(lisOpenFile, @OpenFileMenuItemClick, true); PkgEditMenuSectionFile.Visible:=false;
AddPopupMenuItem(lisPckEditReAddFile, @ReAddMenuItemClick,
AddBitBtn.Enabled);
end; end;
end; SetItem(PkgEditMenuSortFiles,@SortFilesMenuItemClick,(LazPackage.FileCount>1),Writable);
if (LazPackage.FileCount>1) then begin SetItem(PkgEditMenuFixFilesCase,@FixFilesCaseMenuItemClick,(LazPackage.FileCount>1),Writable);
AddPopupMenuItem(lisPESortFiles, @SortFilesMenuItemClick, Writable);
AddPopupMenuItem(lisPEFixFilesCase, @FixFilesCaseMenuItemClick, Writable);
end;
if CurDependency<>nil then begin if CurDependency<>nil then begin
if (not Removed) then begin PkgEditMenuSectionDependency.Visible:=true;
AddPopupMenuItem(lisMenuOpenPackage, @OpenFileMenuItemClick, true); SetItem(PkgEditMenuOpenPackage,@OpenFileMenuItemClick,CurDependency.RequiredPackage<>nil);
AddPopupMenuItem(lisPckEditRemoveDependency, @RemoveBitBtnClick, SetItem(PkgEditMenuRemoveDependency,@RemoveBitBtnClick,not Removed,
RemoveBitBtn.Enabled); RemoveBitBtn.Enabled);
AddPopupMenuItem(lisPckEditMoveDependencyUp, @MoveDependencyUpClick, SetItem(PkgEditMenuReAddDependency,@ReAddMenuItemClick,Removed and AddBitBtn.Enabled);
(CurDependency.PrevRequiresDependency<>nil) SetItem(PkgEditMenuMoveDependencyUp,@MoveDependencyUpClick,not Removed,
and Writable); (CurDependency.PrevRequiresDependency<>nil) and Writable);
AddPopupMenuItem(lisPckEditMoveDependencyDown, @MoveDependencyDownClick, SetItem(PkgEditMenuMoveDependencyDown,@MoveDependencyDownClick,not Removed,
(CurDependency.NextRequiresDependency<>nil) (CurDependency.NextRequiresDependency<>nil) and Writable);
and Writable); SetItem(PkgEditMenuDependencyStoreFileNameAsDefault,
AddPopupMenuItem(lisPckEditStoreFileNameAsDefaultForThisDependency, @SetDependencyDefaultFilenameMenuItemClick,not Removed,
@SetDependencyDefaultFilenameMenuItemClick, Writable and (CurDependency.RequiredPackage<>nil));
Writable and (CurDependency.RequiredPackage<>nil)); SetItem(PkgEditMenuDependencyStoreFileNameAsPreferred,
AddPopupMenuItem(lisPckEditStoreFileNameAsPreferredForThisDependency, @SetDependencyPreferredFilenameMenuItemClick,not Removed,
@SetDependencyPreferredFilenameMenuItemClick, Writable and (CurDependency.RequiredPackage<>nil));
Writable and (CurDependency.RequiredPackage<>nil)); SetItem(PkgEditMenuDependencyClearStoredFileName,
AddPopupMenuItem(lisPckEditClearDefaultPreferredFilenameOfDependency, @ClearDependencyFilenameMenuItemClick,not Removed,
@ClearDependencyFilenameMenuItemClick, Writable and (CurDependency.DefaultFilename<>''));
Writable and (CurDependency.DefaultFilename<>'')); end else
end else begin PkgEditMenuSectionDependency.Visible:=false;
AddPopupMenuItem(lisMenuOpenPackage, @OpenFileMenuItemClick, true);
AddPopupMenuItem(lisPckEditReAddDependency, @ReAddMenuItemClick, SetItem(PkgEditMenuAddToProject,@AddToProjectClick,true,CanBeAddedToProject);
AddBitBtn.Enabled); SetItem(PkgEditMenuInstall,@InstallClick,true,not LazPackage.AutoCreated);
end; SetItem(PkgEditMenuUninstall,@UninstallClick,true,
(LazPackage.Installed<>pitNope) or (LazPackage.AutoInstall<>pitNope));
SetItem(PkgEditMenuSave,@SaveBitBtnClick,true,SaveBitBtn.Enabled);
SetItem(PkgEditMenuSaveAs,@SaveAsClick,true,not LazPackage.AutoCreated);
SetItem(PkgEditMenuRevert,@RevertClick,true,
(not LazPackage.AutoCreated) and FileExistsUTF8(LazPackage.Filename));
SetItem(PkgEditMenuPublish,@PublishClick,true,
(not LazPackage.AutoCreated) and LazPackage.HasDirectory);
SetItem(PkgEditMenuCompile,@CompileBitBtnClick,true,CompileBitBtn.Enabled);
SetItem(PkgEditMenuRecompileClean,@CompileCleanClick,true,CompileBitBtn.Enabled);
SetItem(PkgEditMenuRecompileAllRequired,@CompileAllCleanClick,true,CompileBitBtn.Enabled);
SetItem(PkgEditMenuCreateMakefile,@CreateMakefileClick,true,CompileBitBtn.Enabled);
SetItem(PkgEditMenuAdd,@AddBitBtnClick,true,AddBitBtn.Enabled);
SetItem(PkgEditMenuRemove,@RemoveBitBtnClick,true,RemoveBitBtn.Enabled);
SetItem(PkgEditMenuGeneralOptions,@OptionsBitBtnClick,true,OptionsBitBtn.Enabled);
SetItem(PkgEditMenuCompilerOptions,@CompilerOptionsBitBtnClick,true,
CompilerOptionsBitBtn.Enabled);
SetItem(PkgEditMenuViewPackageSource,@ViewPkgSourceClick);
finally
PackageEditorMenuRoot.EndUpdate;
end; end;
//debugln(['TPackageEditorForm.FilesPopupMenuPopup END ',FilesPopupMenu.Items.Count]); PackageEditorMenuRoot.WriteDebugReport(' ',true);
if ItemCnt>0 then
AddPopupMenuItem('-',nil,true);
AddPopupMenuItem(lisPckEditAddToProject, @AddToProjectClick,
CanBeAddedToProject);
AddPopupMenuItem(lisPckEditInstall, @InstallClick,not LazPackage.AutoCreated);
AddPopupMenuItem(lisPckEditUninstall, @UninstallClick,
(LazPackage.Installed<>pitNope) or (LazPackage.AutoInstall<>pitNope));
AddPopupMenuItem('-',nil,true);
AddPopupMenuItem(lisMenuSave, @SaveBitBtnClick, SaveBitBtn.Enabled);
AddPopupMenuItem(lisMenuSaveAs, @SaveAsClick, not LazPackage.AutoCreated);
AddPopupMenuItem(lisMenuRevert, @RevertClick, (not LazPackage.AutoCreated) and
FileExistsUTF8(LazPackage.Filename));
AddPopupMenuItem(lisPkgEditPublishPackage, @PublishClick,
(not LazPackage.AutoCreated) and (LazPackage.HasDirectory));
AddPopupMenuItem('-',nil,true);
AddPopupMenuItem(lisPckEditCompile, @CompileBitBtnClick, CompileBitBtn.Enabled
);
AddPopupMenuItem(lisPckEditRecompileClean, @CompileCleanClick,
CompileBitBtn.Enabled);
AddPopupMenuItem(lisPckEditRecompileAllRequired, @CompileAllCleanClick,
CompileBitBtn.Enabled);
AddPopupMenuItem(lisPckEditCreateMakefile, @CreateMakefileClick,
CompileBitBtn.Enabled);
AddPopupMenuItem('-',nil,true);
AddPopupMenuItem(lisCodeTemplAdd, @AddBitBtnClick, AddBitBtn.Enabled);
AddPopupMenuItem(lisExtToolRemove, @RemoveBitBtnClick, RemoveBitBtn.Enabled);
AddPopupMenuItem('-',nil,true);
AddPopupMenuItem(lisPckEditGeneralOptions, @OptionsBitBtnClick,
OptionsBitBtn.Enabled);
AddPopupMenuItem(dlgCompilerOptions, @CompilerOptionsBitBtnClick,
CompilerOptionsBitBtn.Enabled);
AddPopupMenuItem(lisPckEditViewPackgeSource, @ViewPkgSourceClick,true);
AddPopupMenuItem(lisPEViewToDoList, @ViewPkgTodosClick, true);
// remove unneeded menu items
while FilesPopupMenu.Items.Count>ItemCnt do
FilesPopupMenu.Items.Delete(FilesPopupMenu.Items.Count-1);
end; end;
procedure TPackageEditorForm.UsePopupMenuPopup(Sender: TObject); procedure TPackageEditorForm.UsePopupMenuPopup(Sender: TObject);
@ -1444,7 +1535,7 @@ begin
OnDrawItem:=@RegisteredListBoxDrawItem; OnDrawItem:=@RegisteredListBoxDrawItem;
Style:= lbOwnerDrawFixed; Style:= lbOwnerDrawFixed;
Parent:=RegisteredPluginsGroupBox; Parent:=RegisteredPluginsGroupBox;
//DebugLn('TPackageEditorForm.SetupComponents AAAAAAAAAA'); //DebugLn('TPackageEditorForm.SetupComponents ');
end; end;
UseMinVersionCheckBox:=TCheckBox.Create(Self); UseMinVersionCheckBox:=TCheckBox.Create(Self);

View File

@ -1871,6 +1871,7 @@ begin
IDEWindowCreators.Add(NonModalIDEWindowNames[nmiwPkgGraphExplorer], IDEWindowCreators.Add(NonModalIDEWindowNames[nmiwPkgGraphExplorer],
nil,@CreateIDEWindow,'250','200','400','300'); nil,@CreateIDEWindow,'250','200','400','300');
RegisterStandardPackageEditorMenuItems;
end; end;
procedure TPkgManager.ConnectSourceNotebookEvents; procedure TPkgManager.ConnectSourceNotebookEvents;
@ -2147,7 +2148,7 @@ begin
end; end;
// save package file links // save package file links
DebugLn(['TPkgManager.AddPackageToGraph ',APackage.Name]); //DebugLn(['TPkgManager.AddPackageToGraph ',APackage.Name]);
PkgLinks.SaveUserLinks; PkgLinks.SaveUserLinks;
Result:=mrOk; Result:=mrOk;