1{ Register IDE items 2} 3unit RegProjectGroup; 4 5{$mode objfpc}{$H+} 6 7interface 8 9uses 10 Classes, SysUtils, LCLType, 11 MenuIntf, IDECommands, ToolBarIntf, IDEOptEditorIntf, IDEOptionsIntf, 12 LazIDEIntf, ProjectGroupIntf, 13 // project groups 14 ProjectGroupStrConst, ProjectGroup, ProjectGroupEditor, PrjGrpOptionsFrm; 15 16var 17 PGOptionsFrameID: integer = 1000; 18 19procedure RegisterProjectGroupEditorMenuItems; 20procedure Register; 21 22implementation 23 24{$R pg_images.res} 25 26const 27 ProjectGroupEditorMenuRootName = 'ProjectGroupEditorMenu'; 28 29procedure RegisterProjectGroupEditorMenuItems; 30 31 procedure RegisterMenuCmd(out MenuCmd: TIDEMenuCommand; 32 Section: TIDEMenuSection; const Name, Caption: string); 33 begin 34 MenuCmd:=RegisterIDEMenuCommand(Section,Name,Caption); 35 end; 36 37var 38 MnuRoot, MnuSection: TIDEMenuSection; 39begin 40 MnuRoot:=RegisterIDEMenuRoot(ProjectGroupEditorMenuRootName); 41 ProjectGroupEditorMenuRoot:=MnuRoot; 42 43 PGEditMenuSectionFiles:=RegisterIDEMenuSection(MnuRoot,'File'); 44 45 MnuSection:=RegisterIDEMenuSection(MnuRoot,'Compile'); 46 PGEditMenuSectionCompile:=MnuSection; 47 RegisterMenuCmd(MnuCmdTargetCompile,MnuSection,'TargetCompile',lisTargetCompile); 48 RegisterMenuCmd(MnuCmdTargetCompileClean,MnuSection,'TargetCompileClean',lisTargetCompileClean); 49 RegisterMenuCmd(MnuCmdTargetCompileFromHere,MnuSection,'TargetCompileFromHere',lisTargetCompileFromHere); 50 // ToDo: clean ... -> clean up dialog 51 // ToDo: set build mode of all projects 52 53 MnuSection:=RegisterIDEMenuSection(MnuRoot,'AddRemove'); 54 PGEditMenuSectionAddRemove:=MnuSection; 55 RegisterMenuCmd(MnuCmdTargetAdd,MnuSection,'TargetAdd',lisTargetAdd); 56 RegisterMenuCmd(MnuCmdTargetRemove,MnuSection,'TargetRemove',lisTargetRemove); 57 // ToDo: redo 58 59 MnuSection:=RegisterIDEMenuSection(MnuRoot,'Use'); 60 PGEditMenuSectionUse:=MnuSection; 61 RegisterMenuCmd(MnuCmdTargetInstall,MnuSection,'TargetInstall',lisTargetInstall);// ToDo 62 RegisterMenuCmd(MnuCmdTargetUninstall,MnuSection,'TargetUninstall',lisTargetUninstall);// ToDo 63 RegisterMenuCmd(MnuCmdTargetEarlier,MnuSection,'TargetEarlier',lisTargetEarlier);// ToDo: Ctrl+Up 64 RegisterMenuCmd(MnuCmdTargetLater,MnuSection,'TargetLater',lisTargetLater);// ToDo: Ctrl+Down 65 RegisterMenuCmd(MnuCmdTargetActivate,MnuSection,'TargetActivate',lisTargetActivate); 66 RegisterMenuCmd(MnuCmdTargetOpen,MnuSection,'TargetOpen',lisTargetOpen); 67 RegisterMenuCmd(MnuCmdTargetRun,MnuSection,'TargetRun',lisTargetRun); 68 RegisterMenuCmd(MnuCmdTargetProperties,MnuSection,'TargetProperties',lisTargetProperties); 69 70 MnuSection:=RegisterIDEMenuSection(MnuRoot,'Misc'); 71 PGEditMenuSectionMisc:=MnuSection; 72 RegisterMenuCmd(MnuCmdTargetCopyFilename,MnuSection,'CopyFilename',lisTargetCopyFilename); 73 RegisterMenuCmd(MnuCmdProjGrpUndo, MnuSection, 'Undo', lisUndo); 74 RegisterMenuCmd(MnuCmdProjGrpRedo, MnuSection, 'Redo', lisRedo); 75 RegisterMenuCmd(MnuCmdProjGrpOptions, MnuSection, 'Options', lisOptions); 76 // ToDo: View source (project) 77 78 // ToDo: find in files 79 // ToDo: find references in files 80 81 // ToDo: D&D order compile targets 82end; 83 84procedure ViewProjectGroupsClicked(Sender: TObject); 85begin 86 ShowProjectGroupEditor(Sender,IDEProjectGroupManager.CurrentProjectGroup); 87end; 88 89procedure Register; 90 91 procedure RegisterMnuCmd(out Cmd: TIDECommand; out MenuCmd: TIDEMenuCommand; 92 Section: TIDEMenuSection; const Name, Caption: string; 93 const OnExecuteMethod: TNotifyEvent; 94 const ResourceName: String = ''); 95 var 96 ButtonCmd: TIDEButtonCommand; 97 begin 98 Cmd:=RegisterIDECommand(PGCmdCategory,Name,Caption,OnExecuteMethod); 99 MenuCmd:=RegisterIDEMenuCommand(Section,Name,Caption,nil,nil,Cmd,ResourceName); 100 ButtonCmd:=RegisterIDEButtonCommand(Cmd); 101 ButtonCmd.ImageIndex:=MenuCmd.ImageIndex; 102 end; 103 104var 105 IDECommandCategory: TIDECommandCategory; 106 ViewProjectGroupsIDEMenuCommand: TIDEMenuCommand; 107begin 108 IDEProjectGroupManager:=TIDEProjectGroupManager.Create; 109 ProjectGroupManager:=IDEProjectGroupManager; 110 IDEProjectGroupManager.Options.LoadSafe; 111 112 PGCmdCategory:=RegisterIDECommandCategory(nil,ProjectGroupCmdCategoryName,lisProjectGroups); 113 114 RegisterMnuCmd(CmdNewProjectGroup,MnuCmdNewProjectGroup,itmProjectNewSection, 115 'New Project Group',lisNewProjectGroupMenuC,@IDEProjectGroupManager.DoNewClick, 116 'pg_new'); 117 RegisterMnuCmd(CmdOpenProjectGroup,MnuCmdOpenProjectGroup,itmProjectOpenSection, 118 'Open Project Group',lisOpenProjectGroup,@IDEProjectGroupManager.DoOpenClick, 119 'pg_open'); 120 PGOpenRecentSubMenu:=RegisterIDESubMenu(itmProjectOpenSection, 121 'Open recent Project Group',lisOpenRecentProjectGroup, nil, nil, 122 'pg_open_recent'); 123 RegisterMnuCmd(CmdSaveProjectGroup,MnuCmdSaveProjectGroup,itmProjectSaveSection, 124 'Save Project Group',lisSaveProjectGroup,@IDEProjectGroupManager.DoSaveClick, 125 'pg_save'); 126 MnuCmdSaveProjectGroup.Enabled:=false; 127 RegisterMnuCmd(CmdSaveProjectGroupAs,MnuCmdSaveProjectGroupAs,itmProjectSaveSection, 128 'Save Project Group as',lisSaveProjectGroupAs,@IDEProjectGroupManager.DoSaveAsClick, 129 'pg_save_as'); 130 MnuCmdSaveProjectGroupAs.Enabled:=false; 131 132 RegisterProjectGroupEditorMenuItems; 133 134 IDEProjectGroupManager.UpdateRecentProjectGroupMenu; 135 136 SetProjectGroupEditorCallBack; 137 138 ViewProjectGroupsIDEMenuCommand:=RegisterIDEMenuCommand(itmViewMainWindows, 139 'mnuProjectGroups', lisProjectGroups, nil, @ViewProjectGroupsClicked, nil, 140 'pg_item'); 141 142 ViewProjGrpShortCutX := IDEShortCut(VK_UNKNOWN, [], VK_UNKNOWN, []); 143 IDECommandCategory := IDECommandList.FindCategoryByName(CommandCategoryViewName); 144 if IDECommandCategory <> nil then 145 begin 146 ViewProjectGroupsCommand := RegisterIDECommand(IDECommandCategory, 'Project Groups', 147 lisProjectGroups, ViewProjGrpShortCutX, nil, @ViewProjectGroupsClicked); 148 if ViewProjectGroupsCommand <> nil then 149 begin 150 ViewProjectGroupsButtonCommand := RegisterIDEButtonCommand(ViewProjectGroupsCommand); 151 if ViewProjectGroupsButtonCommand<>nil then 152 ViewProjectGroupsButtonCommand.ImageIndex:=ViewProjectGroupsIDEMenuCommand.ImageIndex 153 else 154 ; 155 end; 156 end; 157 158 // add IDE options frame 159 PGOptionsFrameID:=RegisterIDEOptionsEditor(GroupEnvironment, 160 TProjGrpOptionsFrame,PGOptionsFrameID)^.Index; 161 162 163end; 164 165finalization 166 FreeAndNil(IDEProjectGroupManager); 167 168end. 169 170