2
0

FLibMaterialPicker.pas 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //
  2. // This unit is part of the GLScene Engine, http://glscene.org
  3. //
  4. unit FLibMaterialPicker;
  5. (* Allows choosing a material in a material library *)
  6. interface
  7. {$I GLScene.inc}
  8. uses
  9. System.Classes,
  10. VCL.Forms,
  11. VCL.StdCtrls,
  12. VCL.Buttons,
  13. VCL.Controls,
  14. GLSceneViewer,
  15. GLMaterial,
  16. FRMaterialPreview;
  17. type
  18. TGLLibMaterialPickerForm = class(TForm)
  19. LBMaterials: TListBox;
  20. Label1: TLabel;
  21. Label2: TLabel;
  22. BBOk: TBitBtn;
  23. BBCancel: TBitBtn;
  24. MPPreview: TRMaterialPreview;
  25. procedure LBMaterialsClick(Sender: TObject);
  26. procedure LBMaterialsKeyPress(Sender: TObject; var Key: Char);
  27. procedure LBMaterialsDblClick(Sender: TObject);
  28. private
  29. public
  30. function Execute(var materialName: TGLLibMaterialName;
  31. materialLibrary: TGLAbstractMaterialLibrary): Boolean;
  32. end;
  33. function GLLibMaterialPickerForm: TGLLibMaterialPickerForm;
  34. procedure ReleaseLibMaterialPickerForm;
  35. //-------------------------------------------------
  36. implementation
  37. //-------------------------------------------------
  38. {$R *.dfm}
  39. var
  40. vGLLibMaterialPickerForm: TGLLibMaterialPickerForm;
  41. function GLLibMaterialPickerForm: TGLLibMaterialPickerForm;
  42. begin
  43. if not Assigned(vGLLibMaterialPickerForm) then
  44. vGLLibMaterialPickerForm := TGLLibMaterialPickerForm.Create(nil);
  45. Result := vGLLibMaterialPickerForm;
  46. end;
  47. procedure ReleaseLibMaterialPickerForm;
  48. begin
  49. if Assigned(vGLLibMaterialPickerForm) then
  50. begin
  51. vGLLibMaterialPickerForm.Free;
  52. vGLLibMaterialPickerForm := nil;
  53. end;
  54. end;
  55. function TGLLibMaterialPickerForm.Execute(var materialName: TGLLibMaterialName;
  56. materialLibrary: TGLAbstractMaterialLibrary): Boolean;
  57. begin
  58. with LBMaterials do
  59. begin
  60. materialLibrary.SetNamesToTStrings(LBMaterials.Items);
  61. ItemIndex := Items.IndexOf(materialName);
  62. if (ItemIndex < 0) and (Items.Count > 0) then
  63. ItemIndex := 0;
  64. BBOk.Enabled := (Items.Count > 0);
  65. end;
  66. LBMaterialsClick(Self);
  67. Result := (ShowModal = mrOk);
  68. if Result then
  69. begin
  70. with LBMaterials do
  71. if ItemIndex >= 0 then
  72. materialName := Items[ItemIndex]
  73. else
  74. materialName := '';
  75. end;
  76. end;
  77. procedure TGLLibMaterialPickerForm.LBMaterialsClick(Sender: TObject);
  78. begin
  79. with LBMaterials do
  80. if ItemIndex >= 0 then
  81. MPPreview.LibMaterial := TGLAbstractLibMaterial(Items.Objects[ItemIndex]);
  82. end;
  83. procedure TGLLibMaterialPickerForm.LBMaterialsKeyPress(Sender: TObject;
  84. var Key: Char);
  85. begin
  86. LBMaterialsClick(Sender);
  87. end;
  88. procedure TGLLibMaterialPickerForm.LBMaterialsDblClick(Sender: TObject);
  89. begin
  90. BBOk.Click;
  91. end;
  92. //-----------------------------------------------------------------
  93. initialization
  94. //-----------------------------------------------------------------
  95. finalization
  96. ReleaseLibMaterialPickerForm;
  97. end.