1{
2  Author: Mattias Gaertner
3
4 ***************************************************************************
5 *                                                                         *
6 *   This source is free software; you can redistribute it and/or modify   *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 *   This code is distributed in the hope that it will be useful, but      *
12 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
13 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
14 *   General Public License for more details.                              *
15 *                                                                         *
16 *   A copy of the GNU General Public License is available on the World    *
17 *   Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also      *
18 *   obtain it by writing to the Free Software Foundation,                 *
19 *   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA.   *
20 *                                                                         *
21 ***************************************************************************
22
23  Abstract:
24    The new project dialog for lazarus.
25
26}
27unit NewProjectDlg;
28
29{$mode objfpc}{$H+}
30
31interface
32
33uses
34  Classes, SysUtils,
35  // LCL
36  Forms, Graphics, Controls, Buttons, ButtonPanel, StdCtrls, ExtCtrls, ComCtrls,
37  // BuildIntf
38  ProjectIntf,
39  // IdeIntf
40  IDEHelpIntf, IDEImagesIntf,
41  // IDE
42  LazarusIDEStrConsts, Project;
43
44type
45
46{ TNewProjectDialog }
47
48  TNewProjectDialog = class(TForm)
49    ButtonPanel: TButtonPanel;
50    DescriptionGroupBox: TGroupBox;
51    HelpLabel: TLabel;
52    Tree: TTreeView;
53    Panel1: TPanel;
54    Splitter1: TSplitter;
55    procedure HelpButtonClick(Sender: TObject);
56    procedure OkClick(Sender: TObject);
57    procedure TreeSelectionChange(Sender: TObject);
58  private
59    FProjectDescriptor: TProjectDescriptor;
60    procedure FillHelpLabel;
61    procedure SetupComponents;
62  public
63    constructor Create(AOwner: TComponent); override;
64    property ProjectDescriptor: TProjectDescriptor read FProjectDescriptor;
65  end;
66
67function ChooseNewProject(var ProjectDesc: TProjectDescriptor): TModalResult;
68
69implementation
70
71{$R *.lfm}
72
73function ChooseNewProject(var ProjectDesc: TProjectDescriptor):TModalResult;
74var
75  NewProjectDialog: TNewProjectDialog;
76begin
77  ProjectDesc:=nil;
78  NewProjectDialog:=TNewProjectDialog.Create(nil);
79  try
80    Result:=NewProjectDialog.ShowModal;
81    if Result=mrOk then
82      ProjectDesc:=NewProjectDialog.ProjectDescriptor;
83  finally
84    NewProjectDialog.Free;
85  end;
86end;
87
88{ NewProjectDialog }
89
90constructor TNewProjectDialog.Create(AOwner: TComponent);
91begin
92  inherited Create(AOwner);
93  Caption:=lisNPCreateANewProject;
94  SetupComponents;
95  FillHelpLabel;
96end;
97
98procedure TNewProjectDialog.FillHelpLabel;
99var
100  ANode: TTreeNode;
101begin
102  ANode := Tree.Selected;
103  if Assigned(ANode) and Assigned(ANode.Data) then
104  begin
105    FProjectDescriptor:=TProjectDescriptor(ANode.Data);
106    HelpLabel.Caption:=FProjectDescriptor.GetLocalizedName + LineEnding+LineEnding
107                      +FProjectDescriptor.GetLocalizedDescription;
108    ButtonPanel.OKButton.Enabled:=true;
109  end
110  else
111  begin
112    FProjectDescriptor:=nil;
113    HelpLabel.Caption:=lisChooseOneOfTheseItemsToCreateANewProject;
114    ButtonPanel.OKButton.Enabled:=false;
115  end;
116end;
117
118procedure TNewProjectDialog.SetupComponents;
119var
120  NIndexTemplate, NIndexFolder: integer;
121  RootNode, ItemNode: TTreeNode;
122  i: integer;
123begin
124  Tree.Images:=IDEImages.Images_16;
125  NIndexFolder:=IDEImages.LoadImage('folder');
126  NIndexTemplate:=IDEImages.LoadImage('template');
127
128  Tree.Items.BeginUpdate;
129  RootNode:=Tree.Items.Add(nil, dlgProject);
130  RootNode.ImageIndex:=NIndexFolder;
131  RootNode.SelectedIndex:=NIndexFolder;
132  for i:=0 to ProjectDescriptors.Count-1 do
133    if ProjectDescriptors[i].VisibleInNewDialog then
134    begin
135      ItemNode:=Tree.Items.AddChildObject(RootNode, ProjectDescriptors[i].GetLocalizedName,
136                                                    ProjectDescriptors[i]);
137      ItemNode.ImageIndex:=NIndexTemplate;
138      ItemNode.SelectedIndex:=NIndexTemplate;
139    end;
140  Tree.FullExpand;
141  Tree.Items.EndUpdate;
142
143  //select first child node
144  with Tree do
145    if Items.Count>0 then
146      Selected:=Items[1];
147
148  DescriptionGroupBox.Caption:=lisCodeHelpDescrTag;
149end;
150
151procedure TNewProjectDialog.HelpButtonClick(Sender: TObject);
152begin
153  LazarusHelp.ShowHelpForIDEControl(Self);
154end;
155
156procedure TNewProjectDialog.OkClick(Sender: TObject);
157var
158  ANode: TTreeNode;
159begin
160  ANode := Tree.Selected;
161  if Assigned(ANode) and Assigned(ANode.Data) then
162    ModalResult:=mrOk
163  else
164    ModalResult:=mrNone;
165end;
166
167procedure TNewProjectDialog.TreeSelectionChange(Sender: TObject);
168begin
169  FillHelpLabel;
170end;
171
172end.
173
174