Subversion Repositories spacemission

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. unit DXReg_original;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, SysUtils, Classes, DsgnIntf, Forms, Dialogs, Graphics, TypInfo,
  7.   DXDraws, DXSounds, DIB, Wave, DXInput, DXPlay, DXSprite, DXClass;
  8.  
  9. type
  10.  
  11.   {  TDXDrawDisplayProperty  }
  12.  
  13.   TDXDrawDisplayProperty = class(TClassProperty)
  14.   public
  15.     function GetAttributes: TPropertyAttributes; override;
  16.     function GetValue: string; override;
  17.     procedure GetValues(Proc: TGetStrProc); override;
  18.     procedure SetValue(const Value: string); override;
  19.   end;
  20.  
  21.   {  TDIBProperty  }
  22.  
  23.   TDIBProperty = class(TPropertyEditor)
  24.   public
  25.     procedure Edit; override;
  26.     function GetValue: string; override;
  27.     function GetAttributes: TPropertyAttributes; override;
  28.   end;
  29.  
  30.   {  TDXDIBEditor  }
  31.  
  32.   TDXDIBEditor = class(TComponentEditor)
  33.   public
  34.     procedure Edit; override;
  35.     procedure ExecuteVerb(Index: Integer); override;
  36.     function GetVerb(Index: Integer): string; override;
  37.     function GetVerbCount: Integer; override;
  38.   end;
  39.  
  40.   {  TPictureCollectionItem_PictureProperty  }
  41.  
  42.   TPictureCollectionItem_PictureProperty = class(TPropertyEditor)
  43.   public
  44.     procedure Edit; override;
  45.     function GetValue: string; override;
  46.     function GetAttributes: TPropertyAttributes; override;
  47.   end;
  48.  
  49.   {  TDXImageListEditor  }
  50.  
  51.   TDXImageListEditor = class(TComponentEditor)
  52.   public
  53.     procedure ExecuteVerb(Index: Integer); override;
  54.     function GetVerb(Index: Integer): string; override;
  55.     function GetVerbCount: Integer; override;
  56.   end;
  57.  
  58.   {  TWaveProperty  }
  59.  
  60.   TWaveProperty = class(TPropertyEditor)
  61.   public
  62.     procedure Edit; override;
  63.     function GetValue: string; override;
  64.     function GetAttributes: TPropertyAttributes; override;
  65.   end;
  66.  
  67.   {  TDXWaveEditor  }
  68.  
  69.   TDXWaveEditor = class(TComponentEditor)
  70.   public
  71.     procedure Edit; override;
  72.     procedure ExecuteVerb(Index: Integer); override;
  73.     function GetVerb(Index: Integer): string; override;
  74.     function GetVerbCount: Integer; override;
  75.   end;
  76.  
  77.   {  TDXWaveListEditor  }
  78.  
  79.   TDXWaveListEditor = class(TComponentEditor)
  80.   public
  81.     procedure ExecuteVerb(Index: Integer); override;
  82.     function GetVerb(Index: Integer): string; override;
  83.     function GetVerbCount: Integer; override;
  84.   end;
  85.  
  86.   {  TForceFeedbackEffectsProperty  }
  87.  
  88.   TForceFeedbackEffectsProperty = class(TClassProperty)
  89.   public
  90.     procedure Edit; override;
  91.     function GetValue: string; override;
  92.     function GetAttributes: TPropertyAttributes; override;
  93.   end;
  94.  
  95.   {  TDXInputEditor  }
  96.  
  97.   TDXInputEditor = class(TComponentEditor)
  98.   public
  99.     procedure Edit; override;
  100.     procedure ExecuteVerb(Index: Integer); override;
  101.     function GetVerb(Index: Integer): string; override;
  102.     function GetVerbCount: Integer; override;
  103.   end;
  104.  
  105.   {  TGUIDProperty  }
  106.  
  107.   TGUIDProperty = class(TStringProperty)
  108.   public
  109.     procedure Edit; override;
  110.     function GetAttributes: TPropertyAttributes; override;
  111.   end;
  112.  
  113. procedure Register;
  114.  
  115. implementation
  116.  
  117. uses DXPictEdit, DXWaveEdit, DXFFBEdit, DXInptEdit, DXGUIDEdit;
  118.  
  119. const
  120.   SNone = '(None)';
  121.  
  122.   SSettingImage = '&Image...';
  123.   SSettingWave = '&Wave...';
  124.   SDXGFileFilter = 'DXG file(*.dxg)|*.dxg|All files(*.*)|*.*';
  125.   SDXGOpenFileFilter = 'DXG file(*.dxg)|*.dxg|Bitmap file(*.bmp)|*.bmp|All files(*.*)|*.*';
  126.   SDXWFileFilter = 'DXW file(*.dxw)|*.dxg|All files(*.*)|*.*';
  127.   SDXWOpenFileFilter = 'DXW file(*.dxw)|*.dxw|Wave file(*.wav)|*.wav|All files(*.*)|*.*';
  128.   SSinglePlayer = '&Single player';
  129.   SMultiPlayer1 = 'Multi player &1';
  130.   SMultiPlayer2 = 'Multi player &2';
  131.  
  132.   SOpen = '&Open...';
  133.   SSave = '&Save..';
  134.  
  135. procedure Register;
  136. begin
  137.   RegisterPropertyEditor(TypeInfo(TDXDrawDisplay), nil, '',
  138.     TDXDrawDisplayProperty);
  139.  
  140.   RegisterPropertyEditor(TypeInfo(TDIB), nil, '', TDIBProperty);
  141.   RegisterComponentEditor(TCustomDXDIB, TDXDIBEditor);
  142.  
  143.   RegisterPropertyEditor(TypeInfo(TPicture), TPictureCollectionItem, 'Picture', TPictureCollectionItem_PictureProperty);
  144.   RegisterComponentEditor(TCustomDXImageList, TDXImageListEditor);
  145.  
  146.   RegisterPropertyEditor(TypeInfo(TWave), nil, '', TWaveProperty);
  147.   RegisterComponentEditor(TCustomDXWave, TDXWaveEditor);
  148.  
  149.   RegisterComponentEditor(TCustomDXWaveList, TDXWaveListEditor);
  150.  
  151.   RegisterPropertyEditor(TypeInfo(TForceFeedbackEffects), nil, '', TForceFeedbackEffectsProperty);
  152.  
  153.   RegisterComponentEditor(TCustomDXInput, TDXInputEditor);
  154.  
  155.   RegisterPropertyEditor(TypeInfo(string), TCustomDXPlay, 'GUID', TGUIDProperty);
  156.  
  157.   RegisterComponents('DelphiX',
  158.     [TDXDraw,
  159.     TDXDIB,
  160.     TDXImageList,
  161.     TDX3D,
  162.     TDXSound,
  163.     TDXWave,
  164.     TDXWaveList,
  165.     TDXInput,
  166.     TDXPlay,
  167.     TDXSpriteEngine,
  168.     TDXTimer,
  169.     TDXPaintBox]);
  170. end;
  171.  
  172. { TDXDrawDisplayProperty }
  173.  
  174. function TDXDrawDisplayProperty.GetAttributes: TPropertyAttributes;
  175. begin
  176.   Result := inherited GetAttributes + [paValueList] - [paReadOnly];
  177. end;
  178.  
  179. const
  180.   SDisplayMode = '%dx%dx%d';
  181.  
  182. function TDXDrawDisplayProperty.GetValue: string;
  183. begin
  184.   with TDXDrawDisplay(GetOrdValue) do
  185.     Result := Format(SDisplayMode, [Width, Height, BitCount]);
  186. end;
  187.  
  188. procedure TDXDrawDisplayProperty.GetValues(Proc: TGetStrProc);
  189. const            
  190.   List: array[0..2] of TPoint = (
  191.   (X:  640; Y:  480),
  192.   (X:  800; Y:  600),
  193.   (X: 1024; Y:  768));
  194. var
  195.   BitCount, i: Integer;
  196. begin
  197.   for i:=Low(List) to High(List) do
  198.     for BitCount:=1 to 3 do
  199.       Proc(Format(SDisplayMode, [List[i].x, List[i].y, BitCount*8]));
  200. end;
  201.  
  202. procedure TDXDrawDisplayProperty.SetValue(const Value: string);
  203. var
  204.   s: string;
  205.   i, AWidth, AHeight, ABitCount: Integer;
  206. begin
  207.   s := Value;
  208.  
  209.   i := Pos('x', s);
  210.   AWidth := StrToInt(Copy(s, 1, i-1));
  211.   s := Copy(s, i+1, Length(s));
  212.  
  213.   i := Pos('x', s);
  214.   AHeight := StrToInt(Copy(s, 1, i-1));
  215.   s := Copy(s, i+1, Length(s));
  216.  
  217.   ABitCount := StrToInt(s);
  218.  
  219.   with TDXDrawDisplay(GetOrdValue) do
  220.   begin
  221.     Width := AWidth;
  222.     Height := AHeight;
  223.     BitCount := ABitCount;
  224.   end;
  225.  
  226.   SetOrdValue(GetOrdValue);
  227. end;
  228.  
  229. {  TDIBProperty  }
  230.  
  231. procedure TDIBProperty.Edit;
  232. var
  233.   Form: TDelphiXPictureEditForm;
  234. begin
  235.   Form := TDelphiXPictureEditForm.Create(nil);
  236.   try
  237.     Form.ViewBox.Picture.Assign(TDIB(GetOrdValue));
  238.     Form.DIBClassOnly := True;
  239.     Form.ShowModal;
  240.     if Form.Tag<>0 then
  241.     begin
  242.       SetOrdValue(Integer(Form.ViewBox.Picture.Graphic));
  243.       Designer.Modified;
  244.     end;
  245.   finally
  246.     Form.Free;
  247.   end;
  248. end;
  249.  
  250. function TDIBProperty.GetAttributes: TPropertyAttributes;
  251. begin
  252.   Result := [paDialog, paReadOnly];
  253. end;
  254.  
  255. function TDIBProperty.GetValue: string;
  256. begin
  257.   if TDIB(GetOrdValue).Size=0 then
  258.     Result := SNone
  259.   else
  260.     Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
  261. end;
  262.  
  263. {  TDXDIBEditor  }
  264.  
  265. procedure TDXDIBEditor.Edit;
  266. var
  267.   Form: TDelphiXPictureEditForm;
  268. begin
  269.   Form := TDelphiXPictureEditForm.Create(nil);
  270.   try
  271.     Form.ViewBox.Picture.Assign(TCustomDXDIB(Component).DIB);
  272.     Form.DIBClassOnly := True;
  273.     Form.ShowModal;
  274.     if Form.Tag<>0 then
  275.     begin
  276.       TCustomDXDIB(Component).DIB.Assign(TGraphic(Form.ViewBox.Picture.Graphic));
  277.       Designer.Modified;
  278.     end;
  279.   finally
  280.     Form.Free;
  281.   end;
  282. end;
  283.  
  284. procedure TDXDIBEditor.ExecuteVerb(Index: Integer);
  285. begin
  286.   case Index of
  287.     0: Edit;
  288.   end;
  289. end;
  290.  
  291. function TDXDIBEditor.GetVerb(Index: Integer): string;
  292. begin
  293.   case Index of
  294.     0: Result := SSettingImage;
  295.   end;
  296. end;
  297.  
  298. function TDXDIBEditor.GetVerbCount: Integer;
  299. begin
  300.   Result := 1;
  301. end;
  302.  
  303. {  TPictureCollectionItem_PictureProperty  }
  304.  
  305. procedure TPictureCollectionItem_PictureProperty.Edit;
  306. var
  307.   Form: TDelphiXPictureEditForm;
  308.   Item: TPictureCollectionItem;
  309.   TempDIB: TDIB;
  310. begin
  311.   Form := TDelphiXPictureEditForm.Create(nil);
  312.   try
  313.     Form.ViewBox.Picture := TPicture(GetOrdValue);
  314.     Form.ShowModal;
  315.     if Form.Tag<>0 then
  316.     begin
  317.       SetOrdValue(Integer(Form.ViewBox.Picture));
  318.  
  319.       Item := GetComponent(0) as TPictureCollectionItem;
  320.       if Item.Picture.Graphic<>nil then
  321.       begin
  322.         TempDIB := TDIB.Create;
  323.         try
  324.           TempDIB.SetSize(1, 1, 24);
  325.           TempDIB.Canvas.Draw(0, 0, Item.Picture.Graphic);
  326.           Item.TransparentColor := TempDIB.Pixels[0, 0];
  327.         finally
  328.           TempDIB.Free;
  329.         end;
  330.       end;
  331.       Designer.Modified;
  332.     end;
  333.   finally
  334.     Form.Free;
  335.   end;
  336. end;
  337.  
  338. function TPictureCollectionItem_PictureProperty.GetAttributes: TPropertyAttributes;
  339. begin
  340.   Result := [paDialog, paReadOnly];
  341. end;
  342.  
  343. function TPictureCollectionItem_PictureProperty.GetValue: string;
  344. begin
  345.   if (TPicture(GetOrdValue).Graphic=nil) or (TPicture(GetOrdValue).Graphic.Empty) then
  346.     Result := SNone
  347.   else
  348.     Result := Format('(%s)', [TPicture(GetOrdValue).Graphic.ClassName]);
  349. end;
  350.  
  351. {  TDXImageListEditor  }
  352.  
  353. procedure TDXImageListEditor.ExecuteVerb(Index: Integer);
  354. var
  355.   OpenDialog: TOpenDialog;
  356.   SaveDialog: TSaveDialog;
  357.   i: Integer;
  358. begin
  359.   case Index of
  360.     0: begin
  361.          OpenDialog := TOpenDialog.Create(nil);
  362.          try
  363.            OpenDialog.DefaultExt := 'dxg';
  364.            OpenDialog.Filter := SDXGOpenFileFilter;
  365.            OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
  366.            if OpenDialog.Execute then
  367.            begin
  368.              if OpenDialog.FilterIndex=2 then
  369.              begin
  370.                for i:=0 to OpenDialog.Files.Count-1 do
  371.                  with TPictureCollectionItem.Create(TCustomDXImageList(Component).Items) do
  372.                  begin
  373.                    try
  374.                      Picture.LoadFromFile(OpenDialog.Files[i]);
  375.                      Name := ExtractFileName(OpenDialog.Files[i]);
  376.                    except
  377.                      Free;
  378.                      raise;
  379.                    end;
  380.                  end;
  381.              end else
  382.                TCustomDXImageList(Component).Items.LoadFromFile(OpenDialog.FileName);
  383.              Designer.Modified;
  384.            end;
  385.          finally
  386.            OpenDialog.Free;
  387.          end;
  388.        end;
  389.     1: begin
  390.          SaveDialog := TSaveDialog.Create(nil);
  391.          try
  392.            SaveDialog.DefaultExt := 'dxg';
  393.            SaveDialog.Filter := SDXGFileFilter;
  394.            SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
  395.            if SaveDialog.Execute then
  396.              TCustomDXImageList(Component).Items.SaveToFile(SaveDialog.FileName);
  397.          finally
  398.            SaveDialog.Free;
  399.          end;
  400.        end;
  401.   end;
  402. end;
  403.  
  404. function TDXImageListEditor.GetVerb(Index: Integer): string;
  405. begin
  406.   case Index of
  407.     0: Result := SOpen;
  408.     1: Result := SSave;
  409.   end;
  410. end;
  411.  
  412. function TDXImageListEditor.GetVerbCount: Integer;
  413. begin
  414.   Result := 2;
  415. end;
  416.  
  417. {  TWaveProperty  }
  418.  
  419. procedure TWaveProperty.Edit;
  420. var
  421.   Form: TDelphiXWaveEditForm;
  422. begin
  423.   Form := TDelphiXWaveEditForm.Create(nil);
  424.   try
  425.     Form.Wave := TWave(GetOrdValue);
  426.     Form.ShowModal;
  427.     if Form.Tag<>0 then
  428.     begin
  429.       SetOrdValue(Integer(Form.Wave));
  430.       Designer.Modified;
  431.     end;
  432.   finally
  433.     Form.Free;
  434.   end;
  435. end;
  436.  
  437. function TWaveProperty.GetAttributes: TPropertyAttributes;
  438. begin
  439.   Result := [paDialog, paReadOnly];
  440. end;
  441.  
  442. function TWaveProperty.GetValue: string;
  443. begin
  444.   if TWave(GetOrdValue).Size=0 then
  445.     Result := SNone
  446.   else
  447.     Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
  448. end;
  449.  
  450. {  TDXWaveEditor  }
  451.  
  452. procedure TDXWaveEditor.Edit;
  453. var
  454.   Form: TDelphiXWaveEditForm;
  455. begin
  456.   Form := TDelphiXWaveEditForm.Create(nil);
  457.   try
  458.     Form.Wave := TCustomDXWave(Component).Wave;
  459.     Form.ShowModal;
  460.     if Form.Tag<>0 then
  461.     begin
  462.       TCustomDXWave(Component).Wave := Form.Wave;
  463.       Designer.Modified;
  464.     end;
  465.   finally
  466.     Form.Free;
  467.   end;
  468. end;
  469.  
  470. procedure TDXWaveEditor.ExecuteVerb(Index: Integer);
  471. begin
  472.   case Index of
  473.     0: Edit;
  474.   end;
  475. end;
  476.  
  477. function TDXWaveEditor.GetVerb(Index: Integer): string;
  478. begin
  479.   case Index of
  480.     0: Result := SSettingWave;
  481.   end;
  482. end;
  483.  
  484. function TDXWaveEditor.GetVerbCount: Integer;
  485. begin
  486.   Result := 1;
  487. end;
  488.  
  489. {  TDXWaveListEditor  }
  490.  
  491. procedure TDXWaveListEditor.ExecuteVerb(Index: Integer);
  492. var
  493.   OpenDialog: TOpenDialog;
  494.   SaveDialog: TSaveDialog;
  495.   i: Integer;
  496. begin
  497.   case Index of
  498.     0: begin
  499.          OpenDialog := TOpenDialog.Create(nil);
  500.          try
  501.            OpenDialog.DefaultExt := 'dxw';
  502.            OpenDialog.Filter := SDXWOpenFileFilter;
  503.            OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
  504.            if OpenDialog.Execute then
  505.            begin
  506.              if OpenDialog.FilterIndex=2 then
  507.              begin
  508.                for i:=0 to OpenDialog.Files.Count-1 do
  509.                  with TWaveCollectionItem.Create(TCustomDXWaveList(Component).Items) do
  510.                  begin
  511.                    try
  512.                      Wave.LoadFromFile(OpenDialog.Files[i]);
  513.                      Name := ExtractFileName(OpenDialog.Files[i]);
  514.                    except
  515.                      Free;
  516.                      raise;
  517.                    end;
  518.                  end;
  519.              end else
  520.                TCustomDXWaveList(Component).Items.LoadFromFile(OpenDialog.FileName);
  521.              Designer.Modified;
  522.            end;
  523.          finally
  524.            OpenDialog.Free;
  525.          end;
  526.        end;
  527.     1: begin
  528.          SaveDialog := TSaveDialog.Create(nil);
  529.          try
  530.            SaveDialog.DefaultExt := 'dxw';
  531.            SaveDialog.Filter := SDXWFileFilter;
  532.            SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
  533.            if SaveDialog.Execute then
  534.              TCustomDXWaveList(Component).Items.SaveToFile(SaveDialog.FileName);
  535.          finally
  536.            SaveDialog.Free;
  537.          end;
  538.        end;
  539.   end;
  540. end;
  541.  
  542. function TDXWaveListEditor.GetVerb(Index: Integer): string;
  543. begin
  544.   case Index of
  545.     0: Result := SOpen;
  546.     1: Result := SSave;
  547.   end;
  548. end;
  549.  
  550. function TDXWaveListEditor.GetVerbCount: Integer;
  551. begin
  552.   Result := 2;
  553. end;
  554.  
  555. {  TForceFeedbackEffectsProperty  }
  556.  
  557. procedure TForceFeedbackEffectsProperty.Edit;
  558. var
  559.   Form: TDelphiXFFEditForm;
  560.   Effects: TForceFeedbackEffects;
  561. begin
  562.   Effects := TForceFeedbackEffects(GetOrdValue);
  563.  
  564.   Form := TDelphiXFFEditForm.Create(nil);
  565.   try
  566.     if Effects.Input is TJoystick then
  567.       Form.Effects := Form.DXInput.Joystick.Effects
  568.     else if Effects.Input is TKeyboard then
  569.       Form.Effects := Form.DXInput.Keyboard.Effects
  570.     else if Effects.Input is TMouse then
  571.       Form.Effects := Form.DXInput.Mouse.Effects
  572.     else Exit;
  573.  
  574.     Form.Effects.Assign(TForceFeedbackEffects(GetOrdValue));
  575.     Form.ShowModal;
  576.     if Form.Tag<>0 then
  577.     begin
  578.       SetOrdValue(Integer(Form.Effects));
  579.       Designer.Modified;
  580.     end;
  581.   finally
  582.     Form.Free;
  583.   end;
  584. end;
  585.  
  586. function TForceFeedbackEffectsProperty.GetAttributes: TPropertyAttributes;
  587. begin
  588.   Result := [paDialog, paReadOnly];
  589. end;
  590.  
  591. function TForceFeedbackEffectsProperty.GetValue: string;
  592. begin
  593.   if TForceFeedbackEffects(GetOrdValue).Count=0 then
  594.     Result := SNone
  595.   else
  596.     Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
  597. end;
  598.  
  599. {  TDXInputEditor  }
  600.  
  601. procedure TDXInputEditor.Edit;
  602. var
  603.   Form: TDelphiXInputEditForm;
  604. begin
  605.   Form := TDelphiXInputEditForm.Create(nil);
  606.   try
  607.     Form.DXInput := TCustomDXInput(Component);
  608.     Form.ShowModal;
  609.     if Form.Tag<>0 then
  610.       Designer.Modified;
  611.   finally
  612.     Form.Free;
  613.   end;
  614. end;
  615.  
  616. procedure TDXInputEditor.ExecuteVerb(Index: Integer);
  617. begin
  618.   case Index of
  619.     0: begin
  620.          with TCustomDXInput(Component) do
  621.          begin
  622.            Joystick.ID := 0;
  623.            Keyboard.KeyAssigns := DefKeyAssign;
  624.          end;
  625.          Designer.Modified;
  626.        end;
  627.     1: begin
  628.          with TCustomDXInput(Component) do
  629.          begin
  630.            Joystick.ID := 0;
  631.            Keyboard.KeyAssigns := DefKeyAssign2_1;
  632.          end;
  633.          Designer.Modified;
  634.        end;
  635.     2: begin
  636.          with TCustomDXInput(Component) do
  637.          begin
  638.            Joystick.ID := 1;
  639.            Keyboard.KeyAssigns := DefKeyAssign2_2;
  640.          end;
  641.          Designer.Modified;
  642.        end;
  643.   end;
  644. end;
  645.  
  646. function TDXInputEditor.GetVerb(Index: Integer): string;
  647. begin
  648.   case Index of
  649.     0: Result := SSinglePlayer;
  650.     1: Result := SMultiPlayer1;
  651.     2: Result := SMultiPlayer2;
  652.   end;
  653. end;
  654.  
  655. function TDXInputEditor.GetVerbCount: Integer;
  656. begin
  657.   Result := 3;
  658. end;
  659.  
  660. {  TGUIDProperty  }
  661.  
  662. procedure TGUIDProperty.Edit;
  663. var
  664.   Form: TDelphiXGUIDEditForm;
  665. begin
  666.   Form := TDelphiXGUIDEditForm.Create(nil);
  667.   try
  668.     Form.GUID := GetStrValue;
  669.     Form.ShowModal;
  670.     if Form.Tag<>0 then
  671.     begin
  672.       SetStrValue(Form.GUID);
  673.       Designer.Modified;
  674.     end;
  675.   finally
  676.     Form.Free;
  677.   end;
  678. end;
  679.  
  680. function TGUIDProperty.GetAttributes: TPropertyAttributes;
  681. begin
  682.   Result := inherited GetAttributes + [paDialog];
  683. end;
  684.  
  685. end.
  686.