MainFormUnit.pas 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. unit MainFormUnit;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. Vcl.Menus,
  12. Vcl.StdCtrls,
  13. Vcl.ExtDlgs,
  14. GLS.Gui, GLS.Scene, GLS.SceneViewer,
  15. GLS.Objects, GLS.HUDObjects, GLS.Windows, GLS.BitmapFont, GLS.WindowsFont,
  16. GLS.Texture, FGuiSkinEditor, GLS.Material, GLS.Coordinates,
  17. GLS.BaseClasses;
  18. type
  19. TForm1 = class(TForm)
  20. MainMenu1: TMainMenu;
  21. File1: TMenuItem;
  22. Open1: TMenuItem;
  23. Save1: TMenuItem;
  24. Close1: TMenuItem;
  25. N1: TMenuItem;
  26. Import1: TMenuItem;
  27. N2: TMenuItem;
  28. Exit1: TMenuItem;
  29. OpenDialog: TOpenDialog;
  30. SaveDialog: TSaveDialog;
  31. GLGuiLayout1: TGLGuiLayout;
  32. ImportDialog: TOpenDialog;
  33. Edit1: TMenuItem;
  34. EditLayout1: TMenuItem;
  35. ListBox: TListBox;
  36. ListPopup: TPopupMenu;
  37. Add1: TMenuItem;
  38. Remove1: TMenuItem;
  39. Edit2: TMenuItem;
  40. N3: TMenuItem;
  41. GLScene1: TGLScene;
  42. GLSceneViewer1: TGLSceneViewer;
  43. GLCamera1: TGLCamera;
  44. GLPanel1: TGLPanel;
  45. WindowsBitmapFont1: TGLWindowsBitmapFont;
  46. Image1: TMenuItem;
  47. Load1: TMenuItem;
  48. OpenPictureDialog: TOpenPictureDialog;
  49. GLMaterialLibrary1: TGLMaterialLibrary;
  50. HUDSprite1: TGLHUDSprite;
  51. Edit3: TEdit;
  52. Label1: TLabel;
  53. Button1: TButton;
  54. Button2: TButton;
  55. procedure Open1Click(Sender: TObject);
  56. procedure Save1Click(Sender: TObject);
  57. procedure Close1Click(Sender: TObject);
  58. procedure Import1Click(Sender: TObject);
  59. procedure EditLayout1Click(Sender: TObject);
  60. procedure Add1Click(Sender: TObject);
  61. procedure Remove1Click(Sender: TObject);
  62. procedure Edit2Click(Sender: TObject);
  63. procedure ListBoxClick(Sender: TObject);
  64. procedure Load1Click(Sender: TObject);
  65. procedure Edit3Change(Sender: TObject);
  66. procedure Exit1Click(Sender: TObject);
  67. procedure FormCreate(Sender: TObject);
  68. procedure Button1Click(Sender: TObject);
  69. procedure Edit3KeyPress(Sender: TObject; var Key: Char);
  70. procedure Button2Click(Sender: TObject);
  71. private
  72. public
  73. Procedure UpdateLayoutList;
  74. end;
  75. var
  76. Form1: TForm1;
  77. implementation
  78. {$R *.dfm}
  79. procedure TForm1.FormCreate(Sender: TObject);
  80. var
  81. MediaPath : String;
  82. I : Integer;
  83. begin
  84. MediaPath := ExtractFilePath(ParamStr(0));
  85. I := Pos(UpperCase('Demos'), UpperCase(MediaPath));
  86. if (I <> 0) then
  87. begin
  88. Delete(MediaPath, I+6, Length(MediaPath)-I-2);
  89. SetCurrentDir(MediaPath+'Media\');
  90. end;
  91. GLMaterialLibrary1.Materials[0].Material.Texture.Image.
  92. LoadFromFile('DefaultSkin.bmp');
  93. end;
  94. procedure TForm1.Open1Click(Sender: TObject);
  95. begin
  96. If OpenDialog.Execute then
  97. Begin
  98. GLScene1.BeginUpdate;
  99. try
  100. GLGuiLayout1.Clear;
  101. GLGuiLayout1.LoadFromFile(OpenDialog.FileName);
  102. UpdateLayoutList;
  103. finally
  104. GLScene1.EndUpdate;
  105. end;
  106. End;
  107. end;
  108. procedure TForm1.Save1Click(Sender: TObject);
  109. begin
  110. if SaveDialog.Execute then
  111. Begin
  112. GLGuiLayout1.SaveToFile(SaveDialog.FileName);
  113. End;
  114. end;
  115. procedure TForm1.Close1Click(Sender: TObject);
  116. begin
  117. GLScene1.BeginUpdate;
  118. try
  119. GLGuiLayout1.Clear;
  120. UpdateLayoutList;
  121. finally
  122. GLScene1.EndUpdate;
  123. end;
  124. End;
  125. procedure TForm1.Import1Click(Sender: TObject);
  126. Var
  127. XC : Integer;
  128. begin
  129. if ImportDialog.Execute then
  130. Begin
  131. GLScene1.BeginUpdate;
  132. try
  133. For XC := 0 to ImportDialog.Files.Count-1 do
  134. Begin
  135. try
  136. GLGuiLayout1.LoadFromFile(ImportDialog.Files[XC]);
  137. except
  138. end;
  139. End;
  140. UpdateLayoutList;
  141. finally
  142. GLScene1.EndUpdate;
  143. end;
  144. End;
  145. end;
  146. procedure TForm1.EditLayout1Click(Sender: TObject);
  147. begin
  148. Hide;
  149. GLScene1.BeginUpdate;
  150. try
  151. If ListBox.ItemIndex >= 0 then
  152. GUIComponentDialog((ListBox.Items.Objects[ListBox.ItemIndex] as TGLGuiComponent).Elements)
  153. finally
  154. GLScene1.EndUpdate;
  155. Show;
  156. end;
  157. end;
  158. Procedure TForm1.UpdateLayoutList;
  159. var
  160. i : Integer;
  161. begin
  162. ListBox.Clear;
  163. With GLGuiLayout1.GuiComponents do for i:=0 to Count-1 do
  164. ListBox.Items.AddObject(Items[i].Name, Items[i]);
  165. ListBox.Selected[GLGuiLayout1.GuiComponents.Count-1] := True;
  166. End;
  167. procedure TForm1.Add1Click(Sender: TObject);
  168. Var
  169. GuiComp : TGLGuiComponent;
  170. begin
  171. GuiComp := GLGuiLayout1.GuiComponents.Add as TGLGuiComponent;
  172. If ListBox.ItemIndex >= 0 then
  173. begin
  174. GuiComp.Name := 'Newly Added';
  175. end else GuiComp.Name := Edit3.Text;
  176. UpdateLayoutList;
  177. end;
  178. procedure TForm1.Remove1Click(Sender: TObject);
  179. Var
  180. S : String;
  181. begin
  182. If ListBox.ItemIndex >= 0 then
  183. Begin
  184. GLScene1.BeginUpdate;
  185. try
  186. GLGuiLayout1.GUIComponents.Delete(ListBox.ItemIndex);
  187. ListBox.Items.Delete(ListBox.ItemIndex);
  188. S := GLPanel1.GuiLayoutName;
  189. GLPanel1.GuiLayoutName := '';
  190. GLPanel1.GuiLayoutName := S;
  191. finally
  192. GLScene1.EndUpdate;
  193. end;
  194. End;
  195. end;
  196. procedure TForm1.Edit2Click(Sender: TObject);
  197. begin
  198. If ListBox.ItemIndex >= 0 then
  199. GUIComponentDialog((ListBox.Items.Objects[ListBox.ItemIndex] as TGLGuiComponent).Elements)
  200. end;
  201. procedure TForm1.ListBoxClick(Sender: TObject);
  202. begin
  203. GLScene1.BeginUpdate;
  204. try
  205. If ListBox.ItemIndex >= 0 then
  206. Begin
  207. GLPanel1.GuiLayoutName := GLGuiLayout1.GuiComponents.Items[ListBox.ItemIndex].Name;
  208. Edit3.text := GLPanel1.GuiLayoutName;
  209. End else
  210. Begin
  211. GLPanel1.GuiLayoutName := '';
  212. Edit3.text := 'Newly Added';
  213. End;
  214. GLPanel1.DoChanges;
  215. finally
  216. GLScene1.EndUpdate;
  217. end;
  218. end;
  219. procedure TForm1.Load1Click(Sender: TObject);
  220. Var
  221. Mat : TGLLibMaterial;
  222. MatName : String;
  223. begin
  224. If OpenPictureDialog.Execute then
  225. Begin
  226. GLScene1.BeginUpdate;
  227. try
  228. MatName := ExtractFileName(OpenPictureDialog.FileName);
  229. Mat := GLMaterialLibrary1.Materials.GetLibMaterialByName(MatName);
  230. If not Assigned(Mat) then
  231. Begin
  232. GLMaterialLibrary1.AddTextureMaterial(MatName,OpenPictureDialog.FileName).Material.Texture.TextureMode := tmReplace;
  233. End;
  234. GLGuiLayout1.Material.LibMaterialName := MatName;
  235. HUDSprite1.Material.LibMaterialName := MatName;
  236. finally
  237. GLScene1.EndUpdate;
  238. end;
  239. End;
  240. end;
  241. procedure TForm1.Edit3Change(Sender: TObject);
  242. begin
  243. If (ListBox.ItemIndex >= 0) then
  244. Begin
  245. ListBox.Items[ListBox.ItemIndex] := Edit3.Text;
  246. GLGuiLayout1.GuiComponents.Items[ListBox.ItemIndex].Name := Edit3.Text;
  247. End;
  248. end;
  249. procedure TForm1.Exit1Click(Sender: TObject);
  250. begin
  251. Application.Terminate;
  252. end;
  253. procedure TForm1.Button1Click(Sender: TObject);
  254. begin
  255. Add1Click(Sender);
  256. end;
  257. procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
  258. begin
  259. If Key = #13 then Add1Click(Sender);
  260. end;
  261. procedure TForm1.Button2Click(Sender: TObject);
  262. begin
  263. Edit2Click(Sender);
  264. end;
  265. end.