FMxLibMaterialPicker.pas 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. //
  2. // The graphics engine GLXEngine. The unit of GXScene for Delphi
  3. //
  4. unit FMXLibMaterialPicker;
  5. (* Allows choosing a material in a material library *)
  6. interface
  7. uses
  8. System.SysUtils,
  9. System.Types,
  10. System.UITypes,
  11. System.Classes,
  12. System.Variants,
  13. System.Math.Vectors,
  14. FMX.Types,
  15. FMX.Controls,
  16. FMX.Forms,
  17. FMX.Graphics,
  18. FMX.Dialogs,
  19. FMX.StdCtrls,
  20. FMX.Layouts,
  21. FMX.ListBox,
  22. FMX.Objects,
  23. FMX.Media,
  24. FMX.Viewport3D,
  25. FMX.Controls3D,
  26. FMX.Objects3D,
  27. FMX.Types3D,
  28. FMX.MaterialSources,
  29. FMX.Controls.Presentation,
  30. FRxMaterialPreview,
  31. GXS.Material;
  32. type
  33. TLibMaterialPicker = class(TForm)
  34. Label1: TLabel;
  35. Label2: TLabel;
  36. LBMaterials: TListBox;
  37. BBOK: TButton;
  38. ImageOK: TImage;
  39. BBCancel: TButton;
  40. MPPreview: TMaterialPreviewFrame;
  41. procedure LBMaterialsClick(Sender: TObject);
  42. procedure LBMaterialsDblClick(Sender: TObject);
  43. procedure CBObjectChange(Sender: TObject);
  44. procedure CBBackgroundChange(Sender: TObject);
  45. public
  46. function Execute(var materialName: TgxLibMaterialName;
  47. materialLibrary: TgxAbstractMaterialLibrary): Boolean;
  48. end;
  49. function GLLibMaterialPicker: TLibMaterialPicker;
  50. procedure ReleaseLibMaterialPicker;
  51. //=================================================================
  52. implementation
  53. //=================================================================
  54. {$R *.fmx}
  55. var
  56. vLibMaterialPicker: TLibMaterialPicker;
  57. function GLLibMaterialPicker: TLibMaterialPicker;
  58. begin
  59. if not Assigned(vLibMaterialPicker) then
  60. vLibMaterialPicker := TLibMaterialPicker.Create(nil);
  61. Result := vLibMaterialPicker;
  62. end;
  63. procedure ReleaseLibMaterialPicker;
  64. begin
  65. if Assigned(vLibMaterialPicker) then
  66. begin
  67. vLibMaterialPicker.Free;
  68. vLibMaterialPicker := nil;
  69. end;
  70. end;
  71. //-----------------------------------------------------
  72. // TLibMaterialPicker
  73. //-----------------------------------------------------
  74. procedure TLibMaterialPicker.CBBackgroundChange(Sender: TObject);
  75. begin
  76. //
  77. end;
  78. procedure TLibMaterialPicker.CBObjectChange(Sender: TObject);
  79. begin
  80. //
  81. end;
  82. function TLibMaterialPicker.Execute(var materialName: TgxLibMaterialName;
  83. materialLibrary: TgxAbstractMaterialLibrary): Boolean;
  84. begin
  85. with LBMaterials do
  86. begin
  87. materialLibrary.SetNamesToTStrings(LBMaterials.Items);
  88. ItemIndex := Items.IndexOf(materialName);
  89. if (ItemIndex < 0) and (Items.Count > 0) then
  90. ItemIndex := 0;
  91. BBOk.Enabled := (Items.Count > 0);
  92. end;
  93. LBMaterialsClick(Self);
  94. Result := (ShowModal = mrOk);
  95. if Result then
  96. begin
  97. with LBMaterials do
  98. if ItemIndex >= 0 then
  99. materialName := Items[ItemIndex]
  100. else
  101. materialName := '';
  102. end;
  103. end;
  104. procedure TLibMaterialPicker.LBMaterialsClick(Sender: TObject);
  105. begin
  106. with LBMaterials do
  107. if ItemIndex >= 0 then
  108. MPPreview.LibMaterial := TgxAbstractLibMaterial(Items.Objects[ItemIndex]);
  109. end;
  110. procedure TLibMaterialPicker.LBMaterialsDblClick(Sender: TObject);
  111. begin
  112. /// BBOk.Click;
  113. end;
  114. end.