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