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