Subversion Repositories spacemission

Rev

Rev 1 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 daniel-mar 1
unit DXReg;
2
 
3
interface
4
 
4 daniel-mar 5
{$I DelphiXcfg.inc}
1 daniel-mar 6
 
7
uses
8
  Windows, SysUtils, Classes, Forms, Dialogs, Graphics, TypInfo,
4 daniel-mar 9
  Controls, StdCtrls, ExtCtrls, Buttons,
10
{$IFDEF D3DRM}Colli3DX, {$ENDIF}
11
{$IFNDEF VER6UP}DsgnIntf,
12
{$ELSE}Designintf, DesignEditors, VCLEditors, PropertyCategories,
13
{$ENDIF}
14
  DXDraws, DXSounds, DIB, DXWave, DXInput, DXPlay, DXSprite, DXClass;
1 daniel-mar 15
 
4 daniel-mar 16
type
1 daniel-mar 17
 
4 daniel-mar 18
  {  TDXDrawDisplayProperty  }
19
 
20
  TDXDrawDisplayProperty = class(TClassProperty)
21
  public
22
    function GetAttributes: TPropertyAttributes; override;
23
    function GetValue: string; override;
24
    procedure GetValues(Proc: TGetStrProc); override;
25
    procedure SetValue(const Value: string); override;
26
  end;
27
 
28
  {  TDIBProperty  }
29
 
30
  TDIBProperty = class(TPropertyEditor)
31
  public
32
    procedure Edit; override;
33
    function GetValue: string; override;
34
    function GetAttributes: TPropertyAttributes; override;
35
  end;
36
 
37
  {  TDXDIBEditor  }
38
 
39
  TDXDIBEditor = class(TComponentEditor)
40
  public
41
    procedure Edit; override;
42
    procedure ExecuteVerb(Index: Integer); override;
43
    function GetVerb(Index: Integer): string; override;
44
    function GetVerbCount: Integer; override;
45
  end;
46
 
47
  {  TPictureCollectionItem_PictureProperty  }
48
 
49
  TPictureCollectionItem_PictureProperty = class(TPropertyEditor)
50
  public
51
    procedure Edit; override;
52
    function GetValue: string; override;
53
    function GetAttributes: TPropertyAttributes; override;
54
  end;
55
 
56
  {  TDXImageListEditor  }
57
 
58
  TDXImageListEditor = class(TComponentEditor)
59
  private
60
    procedure ListBox1DblClick(Sender: TObject);
61
  public
62
    procedure ExecuteVerb(Index: Integer); override;
63
    function GetVerb(Index: Integer): string; override;
64
    function GetVerbCount: Integer; override;
65
  end;
66
 
67
  { TDXSpriteEngineEditor}
68
 
69
  TDXSpriteEngineEditor = class(TComponentEditor)
70
  private
71
    procedure ListBox1DblClick(Sender: TObject);
72
  public
73
    procedure ExecuteVerb(Index: Integer); override;
74
    function GetVerb(Index: Integer): string; override;
75
    function GetVerbCount: Integer; override;
76
  end;
77
 
78
  {  TWaveProperty  }
79
 
80
  TWaveProperty = class(TPropertyEditor)
81
  public
82
    procedure Edit; override;
83
    function GetValue: string; override;
84
    function GetAttributes: TPropertyAttributes; override;
85
  end;
86
 
87
  {  TDXWaveEditor  }
88
 
89
  TDXWaveEditor = class(TComponentEditor)
90
  public
91
    procedure Edit; override;
92
    procedure ExecuteVerb(Index: Integer); override;
93
    function GetVerb(Index: Integer): string; override;
94
    function GetVerbCount: Integer; override;
95
  end;
96
 
97
  {  TDXWaveListEditor  }
98
 
99
  TDXWaveListEditor = class(TComponentEditor)
100
  public
101
    procedure ExecuteVerb(Index: Integer); override;
102
    function GetVerb(Index: Integer): string; override;
103
    function GetVerbCount: Integer; override;
104
  end;
105
 
106
  {  TForceFeedbackEffectsProperty  }
107
 
108
  TForceFeedbackEffectsProperty = class(TClassProperty)
109
  public
110
    procedure Edit; override;
111
    function GetValue: string; override;
112
    function GetAttributes: TPropertyAttributes; override;
113
  end;
114
 
115
  {  TDXInputEditor  }
116
 
117
  TDXInputEditor = class(TComponentEditor)
118
  public
119
    procedure Edit; override;
120
    procedure ExecuteVerb(Index: Integer); override;
121
    function GetVerb(Index: Integer): string; override;
122
    function GetVerbCount: Integer; override;
123
  end;
124
 
125
  {  TGUIDProperty  }
126
 
127
  TGUIDProperty = class(TStringProperty)
128
  public
129
    procedure Edit; override;
130
    function GetAttributes: TPropertyAttributes; override;
131
  end;
132
 
133
  {  TSpriteProperty  }
134
 
135
  TSpriteProperty = class(TClassProperty)
136
  public
137
    procedure Edit; override;
138
    function GetValue: string; override;
139
    function GetAttributes: TPropertyAttributes; override;
140
  end;
141
 
142
  {  TMidiProperty  }
143
 
144
  TMidiProperty = class(TClassProperty)
145
  public
146
    procedure Edit; override;
147
    function GetValue: string; override;
148
    function GetAttributes: TPropertyAttributes; override;
149
  end;
150
 
151
  TMidiEditor = class(TDefaultEditor)
152
  public
153
{$IFDEF VER6UP}
154
    procedure EditProperty(const Prop: IProperty; var Continue: Boolean); override;
155
{$ELSE}
156
    procedure EditProperty(PropertyEditor: TPropertyEditor;
157
      var continue, FreeEditor: Boolean); override;
158
{$ENDIF}
159
  end;
160
 
161
  {  TDXMidiListEditor  }
162
 
163
  TDXMidiListEditor = class(TComponentEditor)
164
  public
165
    procedure ExecuteVerb(Index: Integer); override;
166
    function GetVerb(Index: Integer): string; override;
167
    function GetVerbCount: Integer; override;
168
  end;
169
 
170
  {  Trace editor}
171
 
172
  TDXDrawEditor = class(TComponentEditor)
173
  public
174
    procedure ExecuteVerb(Index: Integer); override;
175
    function GetVerb(Index: Integer): string; override;
176
    function GetVerbCount: Integer; override;
177
  end;
178
 
1 daniel-mar 179
procedure Register;
180
 
181
implementation
182
 
4 daniel-mar 183
uses DXPictEdit, DXWaveEdit, DXFFBEdit, DXInptEdit, DXGUIDEdit, DXSpriteEdit,
184
  DXMidiEdit, DXDIBEffectEdit, {$IFDEF VER4UP}DXGlueItEdit,{$ENDIF} DXPathEdit;
1 daniel-mar 185
 
186
const
187
  SNone = '(None)';
4 daniel-mar 188
 
1 daniel-mar 189
  SSettingImage = '&Image...';
190
  SSettingWave = '&Wave...';
191
  SDXGFileFilter = 'DXG file(*.dxg)|*.dxg|All files(*.*)|*.*';
192
  SDXGOpenFileFilter = 'DXG file(*.dxg)|*.dxg|Bitmap file(*.bmp)|*.bmp|All files(*.*)|*.*';
4 daniel-mar 193
  SDXWFileFilter = 'DXW file(*.dxw)|*.dxg|All files(*.*)|*.*';
1 daniel-mar 194
  SDXWOpenFileFilter = 'DXW file(*.dxw)|*.dxw|Wave file(*.wav)|*.wav|All files(*.*)|*.*';
4 daniel-mar 195
  SDXMFileFilter = 'DXM file(*.dxm)|*.dxm|All files(*.*)|*.*';
196
  SDXMOpenFileFilter = 'DXM file(*.dxm)|*.dxm|Midi file(*.mid)|*.mid|All files(*.*)|*.*';
197
 
1 daniel-mar 198
  SSinglePlayer = '&Single player';
199
  SMultiPlayer1 = 'Multi player &1';
200
  SMultiPlayer2 = 'Multi player &2';
201
 
202
  SOpen = '&Open...';
4 daniel-mar 203
  SSave = '&Save...';
1 daniel-mar 204
 
205
procedure Register;
206
begin
4 daniel-mar 207
  RegisterPropertyEditor(TypeInfo(TDXDrawDisplay), nil, '',
208
    TDXDrawDisplayProperty);
209
 
210
  RegisterPropertyEditor(TypeInfo(TDIB), nil, '', TDIBProperty);
211
  RegisterComponentEditor(TCustomDXDIB, TDXDIBEditor);
212
 
213
  RegisterPropertyEditor(TypeInfo(TPicture), TPictureCollectionItem, 'Picture', TPictureCollectionItem_PictureProperty);
214
  RegisterComponentEditor(TCustomDXImageList, TDXImageListEditor);
215
 
216
  RegisterPropertyEditor(TypeInfo(TWave), nil, '', TWaveProperty);
217
  RegisterComponentEditor(TCustomDXWave, TDXWaveEditor);
218
 
219
  RegisterComponentEditor(TCustomDXWaveList, TDXWaveListEditor);
220
 
221
  RegisterPropertyEditor(TypeInfo(TForceFeedbackEffects), nil, '', TForceFeedbackEffectsProperty);
222
 
223
  RegisterComponentEditor(TCustomDXInput, TDXInputEditor);
224
 
225
  RegisterPropertyEditor(TypeInfo(string), TCustomDXPlay, 'GUID', TGUIDProperty);
226
 
227
  RegisterPropertyEditor(TypeInfo(TImageSprite), NIL, '', TSpriteProperty);
228
  RegisterPropertyEditor(TypeInfo(TImageSpriteEx), NIL, '', TSpriteProperty);
229
  RegisterPropertyEditor(TypeInfo(TSprite), NIL, '', TSpriteProperty);
230
  RegisterPropertyEditor(TypeInfo(TBackgroundSprite), NIL, '', TSpriteProperty);
231
 
232
  RegisterPropertyEditor(TypeInfo(TMusicDataProp), nil, 'MIDI', TMidiProperty);
233
  RegisterComponentEditor(TDXMusic, TDXMidiListEditor);
234
  RegisterComponentEditor(TDXSpriteEngine, TDXSpriteEngineEditor);
235
 
1 daniel-mar 236
  RegisterComponents('DelphiX',
237
    [TDXDraw,
4 daniel-mar 238
     TDXDIB,
239
     TDXImageList,
240
{$IFDEF DX3D_deprecated}
241
     TDX3D,
242
{$ENDIF}
243
     TDXSound,
244
     TDXWave,
245
     TDXWaveList,
246
     TDXInput,
247
     TDXPlay,
248
     TDXSpriteEngine,
249
     TDXTimer,
250
     TDXPaintBox,
251
     TDXFont,
252
     TDXPowerFont,
253
     TDXMusic
254
    ]);
255
  RegisterComponentEditor(TCustomDXDraw, TDXDrawEditor);
1 daniel-mar 256
end;
257
 
4 daniel-mar 258
{ TDXDrawDisplayProperty }
1 daniel-mar 259
 
4 daniel-mar 260
function TDXDrawDisplayProperty.GetAttributes: TPropertyAttributes;
261
begin
262
  Result := inherited GetAttributes + [paValueList] - [paReadOnly];
263
end;
1 daniel-mar 264
 
4 daniel-mar 265
const
266
  SDisplayMode = '%dx%dx%d';
267
 
268
function TDXDrawDisplayProperty.GetValue: string;
269
begin
270
  with TDXDrawDisplay(GetOrdValue) do
271
    Result := Format(SDisplayMode, [Width, Height, BitCount]);
272
end;
273
 
274
procedure TDXDrawDisplayProperty.GetValues(Proc: TGetStrProc);
275
const
276
  List: array[0..2] of TPoint = (
277
    (X: 640; Y: 480),
278
    (X: 800; Y: 600),
279
    (X: 1024; Y: 768));
280
var
281
  BitCount, i: Integer;
282
begin
283
  for i := Low(List) to High(List) do
284
    for BitCount := 1 to 3 do
285
      Proc(Format(SDisplayMode, [List[i].x, List[i].y, BitCount * 8]));
286
end;
287
 
288
procedure TDXDrawDisplayProperty.SetValue(const Value: string);
289
var
290
  s: string;
291
  i, AWidth, AHeight, ABitCount: Integer;
292
begin
293
  s := Value;
294
 
295
  i := Pos('x', s);
296
  AWidth := StrToInt(Copy(s, 1, i - 1));
297
  s := Copy(s, i + 1, Length(s));
298
 
299
  i := Pos('x', s);
300
  AHeight := StrToInt(Copy(s, 1, i - 1));
301
  s := Copy(s, i + 1, Length(s));
302
 
303
  ABitCount := StrToInt(s);
304
 
305
  with TDXDrawDisplay(GetOrdValue) do
306
  begin
307
    Width := AWidth;
308
    Height := AHeight;
309
    BitCount := ABitCount;
310
  end;
311
 
312
  SetOrdValue(GetOrdValue);
313
end;
314
 
315
{  TDIBProperty  }
316
 
317
procedure TDIBProperty.Edit;
318
var
319
  Form: TDelphiXPictureEditForm;
320
begin
321
  Form := TDelphiXPictureEditForm.Create(nil);
322
  try
323
    Form.ViewBox.Picture.Assign(TDIB(GetOrdValue));
324
    Form.DIBClassOnly := True;
325
    Form.ShowModal;
326
    if Form.Tag <> 0 then
327
    begin
328
      SetOrdValue(Integer(Form.ViewBox.Picture.Graphic));
329
      Designer.Modified;
330
    end;
331
  finally
332
    Form.Free;
333
  end;
334
end;
335
 
336
function TDIBProperty.GetAttributes: TPropertyAttributes;
337
begin
338
  Result := [paDialog, paReadOnly];
339
end;
340
 
341
function TDIBProperty.GetValue: string;
342
begin
343
  if TDIB(GetOrdValue).Size = 0 then
344
    Result := SNone
345
  else
346
    Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
347
end;
348
 
349
{  TDXDIBEditor  }
350
 
351
procedure TDXDIBEditor.Edit;
352
var
353
  Form: TDelphiXPictureEditForm;
354
begin
355
  Form := TDelphiXPictureEditForm.Create(nil);
356
  try
357
    Form.ViewBox.Picture.Assign(TCustomDXDIB(Component).DIB);
358
    Form.DIBClassOnly := True;
359
    Form.ShowModal;
360
    if Form.Tag <> 0 then
361
    begin
362
      TCustomDXDIB(Component).DIB.Assign(TGraphic(Form.ViewBox.Picture.Graphic));
363
      Designer.Modified;
364
    end;
365
  finally
366
    Form.Free;
367
  end;
368
end;
369
 
370
procedure TDXDIBEditor.ExecuteVerb(Index: Integer);
371
begin
372
  case Index of
373
    0: Edit;
374
  end;
375
end;
376
 
377
function TDXDIBEditor.GetVerb(Index: Integer): string;
378
begin
379
  case Index of
380
    0: Result := SSettingImage;
381
  end;
382
end;
383
 
384
function TDXDIBEditor.GetVerbCount: Integer;
385
begin
386
  Result := 1;
387
end;
388
 
389
{  TPictureCollectionItem_PictureProperty  }
390
 
391
procedure TPictureCollectionItem_PictureProperty.Edit;
392
var
393
  Form: TDelphiXPictureEditForm;
394
  Item: TPictureCollectionItem;
395
  TempDIB: TDIB;
396
begin
397
  Form := TDelphiXPictureEditForm.Create(nil);
398
  try
399
    Form.ViewBox.Picture := TPicture(GetOrdValue);
400
    Form.ShowModal;
401
    if Form.Tag <> 0 then
402
    begin
403
      SetOrdValue(Integer(Form.ViewBox.Picture));
404
 
405
      Item := GetComponent(0) as TPictureCollectionItem;
406
      if Item.Picture.Graphic <> nil then
407
      begin
408
        TempDIB := TDIB.Create;
409
        try
410
          TempDIB.SetSize(1, 1, 24);
411
          TempDIB.Canvas.Draw(0, 0, Item.Picture.Graphic);
412
          Item.TransparentColor := TempDIB.Pixels[0, 0];
413
        finally
414
          TempDIB.Free;
415
        end;
416
      end;
417
      Designer.Modified;
418
    end;
419
  finally
420
    Form.Free;
421
  end;
422
end;
423
 
424
function TPictureCollectionItem_PictureProperty.GetAttributes: TPropertyAttributes;
425
begin
426
  Result := [paDialog, paReadOnly];
427
end;
428
 
429
function TPictureCollectionItem_PictureProperty.GetValue: string;
430
begin
431
  if (TPicture(GetOrdValue).Graphic = nil) or (TPicture(GetOrdValue).Graphic.Empty) then
432
    Result := SNone
433
  else
434
    Result := Format('(%s)', [TPicture(GetOrdValue).Graphic.ClassName]);
435
end;
436
 
437
{  dialog  }
438
function CreateListBox(DblClck: TNotifyEvent; out lstbx: TListBox): TForm;
439
var
440
  Panel1: TPanel;
441
  Panel2: TPanel;
442
  BitBtn1: TBitBtn;
443
  BitBtn2: TBitBtn;
444
begin
445
  Result := TForm.Create(nil);
446
  Panel1 := TPanel.Create(Result);
447
  lstbx := TListBox.Create(Result);
448
  Panel2 := TPanel.Create(Result);
449
  BitBtn1 := TBitBtn.Create(Result);
450
  BitBtn2 := TBitBtn.Create(Result);
451
  with Result do
452
  begin
453
    Name := 'Form12';
454
    Left := 0;
455
    Top := 0;
456
    BorderStyle := bsDialog;
457
    Caption := 'Select Item';
458
    ClientHeight := 206;
459
    ClientWidth := 228;
460
    Color := clBtnFace;
461
    Font.Charset := DEFAULT_CHARSET;
462
    Font.Color := clWindowText;
463
    Font.Height := -11;
464
    Font.Name := 'Tahoma';
465
    Font.Style := [];
466
    Position := poScreenCenter;
467
    PixelsPerInch := 96;
468
  end;
469
  with Panel1 do
470
  begin
471
    Name := 'Panel1';
472
    Parent := Result;
473
    Left := 0;
474
    Top := 0;
475
    Width := 228;
476
    Height := 165;
477
    Align := alClient;
478
    BevelOuter := bvNone;
479
    BorderWidth := 4;
480
    Caption := '';
481
    TabOrder := 0;
482
  end;
483
  with lstbx do
484
  begin
485
    Name := 'ListBox1';
486
    Parent := Panel1;
487
    Left := 4;
488
    Top := 4;
489
    Width := 220;
490
    Height := 157;
491
    Align := alClient;
492
    ItemHeight := 13;
493
    TabOrder := 0;
494
    OnDblClick := DblClck;
495
  end;
496
  with Panel2 do
497
  begin
498
    Name := 'Panel2';
499
    Parent := Result;
500
    Left := 0;
501
    Top := 165;
502
    Width := 228;
503
    Height := 41;
504
    Align := alBottom;
505
    BevelOuter := bvNone;
506
    Caption := '';
507
    TabOrder := 1;
508
  end;
509
  with BitBtn1 do
510
  begin
511
    Name := 'BitBtn1';
512
    Parent := Panel2;
513
    Left := 24;
514
    Top := 8;
515
    Width := 75;
516
    Height := 25;
517
    TabOrder := 0;
518
    Kind := bkOK;
519
  end;
520
  with BitBtn2 do
521
  begin
522
    Name := 'BitBtn2';
523
    Parent := Panel2;
524
    Left := 128;
525
    Top := 8;
526
    Width := 75;
527
    Height := 25;
528
    TabOrder := 1;
529
    Kind := bkCancel;
530
  end;
531
end;
532
function Alter(const str, altstr: string): string;
533
begin
534
  if str = '' then Result := altstr
535
  else Result := str;
536
end;
537
 
538
{  TDXImageListEditor  }
539
 
540
procedure TDXImageListEditor.ExecuteVerb(Index: Integer);
541
var
542
  OpenDialog: TOpenDialog;
543
  SaveDialog: TSaveDialog;
544
  DelphiXDIBEffectEditForm: TTDelphiXDIBEffectEditForm;
545
  {$IFDEF VER4UP}
546
  DXGlueItEditForm: TDXGlueItEditor;
547
  {$ENDIF}
548
  Q: TPictureCollectionItem;
549
  I, N: Integer;
550
  S, Z: string;
551
  {$IFDEF VER4UP}
552
  QQ: TCustomDXImageList;
553
  FrmListBox: TForm;
554
  ListBox1: TListBox;
555
  {$ENDIF}
556
begin
557
  case Index of
558
    0: begin
559
        OpenDialog := TOpenDialog.Create(nil);
560
        try
561
          OpenDialog.DefaultExt := 'dxg';
562
          OpenDialog.Filter := SDXGOpenFileFilter;
563
          OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
564
          if OpenDialog.Execute then
565
          begin
566
            if OpenDialog.FilterIndex = 2 then
567
            begin
568
              for i := 0 to OpenDialog.Files.Count - 1 do
569
                with TPictureCollectionItem.Create(TCustomDXImageList(Component).Items) do
570
                begin
571
                  try
572
                    Picture.LoadFromFile(OpenDialog.Files[i]);
573
                    Name := ExtractFileName(OpenDialog.Files[i]);
574
                  except
575
                    Free;
576
                    raise;
577
                  end;
578
                end;
579
            end else
580
              TCustomDXImageList(Component).Items.LoadFromFile(OpenDialog.FileName);
581
            Designer.Modified;
582
          end;
583
        finally
584
          OpenDialog.Free;
585
        end;
586
      end;
587
    1: begin
588
        SaveDialog := TSaveDialog.Create(nil);
589
        try
590
          SaveDialog.DefaultExt := 'dxg';
591
          SaveDialog.Filter := SDXGFileFilter;
592
          SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
593
          if SaveDialog.Execute then
594
            TCustomDXImageList(Component).Items.SaveToFile(SaveDialog.FileName);
595
        finally
596
          SaveDialog.Free;
597
        end;
598
      end;
599
    2:
600
      begin {Create shine effect...}
601
        {special effect}
602
        DelphiXDIBEffectEditForm := TTDelphiXDIBEffectEditForm.Create(nil);
603
        try
604
          DelphiXDIBEffectEditForm.ShowModal;
605
          if DelphiXDIBEffectEditForm.Tag = 1 then begin
606
            {check all names in list of images}
607
            N := 0;
608
            Z := DelphiXDIBEffectEditForm.eName.Text; S := Z;
609
            I := TCustomDXImageList(Component).Items.IndexOf(Z);
610
            {hleda jmeno}
611
            while I <> -1 do begin
612
              S := Format('%s_%d', [Z, N]); {new name}
613
              I := TCustomDXImageList(Component).Items.IndexOf(S);
614
              Inc(N);
615
            end;
616
            {add item}
617
            Q := TPictureCollectionItem(TCustomDXImageList(Component).Items.Add);
618
            Q.Picture.Assign(DelphiXDIBEffectEditForm.ResultDIB);
619
            Q.Name := S; {it has to name!}
620
            Q.Transparent := False; {transparend will be set in future}
621
            Designer.Modified;
622
          end;
623
        finally
624
          DelphiXDIBEffectEditForm.Free;
625
        end;
626
      end;
627
    {$IFDEF VER4UP}
628
    3:  {Glue-it editor}
629
      begin
630
        DXGlueItEditForm := TDXGlueItEditor.Create(nil);
631
        try
632
          QQ := TCustomDXImageList(Component); Q := nil;
633
 
634
          if QQ.Items.Count > 0 then begin
635
            FrmListBox := CreateListBox(ListBox1DblClick, ListBox1);
636
            try
637
              for I := 0 to QQ.Items.Count - 1 do begin
638
                S := QQ.Items[I].Name;
639
                ListBox1.Items.Add(Alter(S, '(unnamed).' + IntToStr(I)));
640
              end;
641
 
642
              case FrmListBox.ShowModal of
643
              mrOk: //when select one
644
                begin
645
                  //when image selected
646
                  if ListBox1.ItemIndex <> -1 then begin
647
                    Q := QQ.Items[ListBox1.ItemIndex];
648
                    //load one image into editor
649
                    DXGlueItEditForm.LoadImageFromList(Q.Name, Q.Picture, Q.Width,
650
                      Q.Height, Q.Transparent, Q.TransparentColor);
651
                    //image loadet, noe se up edit mode
652
                    DXGlueItEditForm.Operation := ogiEdit;
653
                  end;
654
                end;
655
              mrCancel: DXGlueItEditForm.Operation := ogiNew;
656
              else
657
                Exit
658
              end {case};
659
            finally
660
              FrmListBox.Free;
661
            end;
662
          end
663
          else
664
            DXGlueItEditForm.Operation := ogiNew;
665
          DXGlueItEditForm.ShowModal;
666
          if DXGlueItEditForm.Tag = 1 then begin
667
            //when image as new. it has to create new item
668
            if DXGlueItEditForm.Operation = ogiNew then
669
              Q := TPictureCollectionItem(TCustomDXImageList(Component).Items.Add);
670
            //and store edited image into
671
            if Assigned(Q) then
672
              DXGlueItEditForm.SaveImageIntoList(Q);
673
            //signal to designer that anything was changed;
674
            Designer.Modified;
675
          end;
676
        finally
677
          DXGlueItEditForm.Free;
678
        end;
679
      end;
680
    {$ENDIF}  
681
  end;
682
end;
683
 
684
function TDXImageListEditor.GetVerb(Index: Integer): string;
685
begin
686
  case Index of
687
    0: Result := SOpen;
688
    1: Result := SSave;
689
    2: Result := 'Shine effect...';
690
    {$IFDEF VER4UP}
691
    //fix bug by Pásztor Károly [fenistil@hu.hu]
692
    3: Result := 'Glue it...';
693
    {$ENDIF}
694
  end;
695
end;
696
 
697
function TDXImageListEditor.GetVerbCount: Integer;
698
begin
699
  Result := {$IFDEF VER4UP}4{$ELSE}3{$ENDIF};
700
end;
701
 
702
procedure TDXImageListEditor.ListBox1DblClick(Sender: TObject);
703
begin
704
  if Sender is TListBox then with (Sender as TListBox) do
705
    if ItemIndex <> -1 then
706
      (Owner as TForm).ModalResult := mrOk;
707
end;
708
 
709
{  TWaveProperty  }
710
 
711
procedure TWaveProperty.Edit;
712
var
713
  Form: TDelphiXWaveEditForm;
714
begin
715
  Form := TDelphiXWaveEditForm.Create(nil);
716
  try
717
    Form.Wave := TWave(GetOrdValue);
718
    Form.ShowModal;
719
    if Form.Tag <> 0 then
720
    begin
721
      SetOrdValue(Integer(Form.Wave));
722
      Designer.Modified;
723
    end;
724
  finally
725
    Form.Free;
726
  end;
727
end;
728
 
729
function TWaveProperty.GetAttributes: TPropertyAttributes;
730
begin
731
  Result := [paDialog, paReadOnly];
732
end;
733
 
734
function TWaveProperty.GetValue: string;
735
begin
736
  if TWave(GetOrdValue).Size = 0 then
737
    Result := SNone
738
  else
739
    Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
740
end;
741
 
742
{  TDXWaveEditor  }
743
 
744
procedure TDXWaveEditor.Edit;
745
var
746
  Form: TDelphiXWaveEditForm;
747
begin
748
  Form := TDelphiXWaveEditForm.Create(nil);
749
  try
750
    Form.Wave := TCustomDXWave(Component).Wave;
751
    Form.ShowModal;
752
    if Form.Tag <> 0 then
753
    begin
754
      TCustomDXWave(Component).Wave := Form.Wave;
755
      Designer.Modified;
756
    end;
757
  finally
758
    Form.Free;
759
  end;
760
end;
761
 
762
procedure TDXWaveEditor.ExecuteVerb(Index: Integer);
763
begin
764
  case Index of
765
    0: Edit;
766
  end;
767
end;
768
 
769
function TDXWaveEditor.GetVerb(Index: Integer): string;
770
begin
771
  case Index of
772
    0: Result := SSettingWave;
773
  end;
774
end;
775
 
776
function TDXWaveEditor.GetVerbCount: Integer;
777
begin
778
  Result := 1;
779
end;
780
 
781
{  TDXWaveListEditor  }
782
 
783
procedure TDXWaveListEditor.ExecuteVerb(Index: Integer);
784
var
785
  OpenDialog: TOpenDialog;
786
  SaveDialog: TSaveDialog;
787
  i: Integer;
788
begin
789
  case Index of
790
    0: begin
791
        OpenDialog := TOpenDialog.Create(nil);
792
        try
793
          OpenDialog.DefaultExt := 'dxw';
794
          OpenDialog.Filter := SDXWOpenFileFilter;
795
          OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
796
          if OpenDialog.Execute then
797
          begin
798
            if OpenDialog.FilterIndex = 2 then
799
            begin
800
              for i := 0 to OpenDialog.Files.Count - 1 do
801
                with TWaveCollectionItem.Create(TCustomDXWaveList(Component).Items) do
802
                begin
803
                  try
804
                    Wave.LoadFromFile(OpenDialog.Files[i]);
805
                    Name := ExtractFileName(OpenDialog.Files[i]);
806
                  except
807
                    Free;
808
                    raise;
809
                  end;
810
                end;
811
            end else
812
              TCustomDXWaveList(Component).Items.LoadFromFile(OpenDialog.FileName);
813
            Designer.Modified;
814
          end;
815
        finally
816
          OpenDialog.Free;
817
        end;
818
      end;
819
    1: begin
820
        SaveDialog := TSaveDialog.Create(nil);
821
        try
822
          SaveDialog.DefaultExt := 'dxw';
823
          SaveDialog.Filter := SDXWFileFilter;
824
          SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
825
          if SaveDialog.Execute then
826
            TCustomDXWaveList(Component).Items.SaveToFile(SaveDialog.FileName);
827
        finally
828
          SaveDialog.Free;
829
        end;
830
      end;
831
  end;
832
end;
833
 
834
function TDXWaveListEditor.GetVerb(Index: Integer): string;
835
begin
836
  case Index of
837
    0: Result := SOpen;
838
    1: Result := SSave;
839
  end;
840
end;
841
 
842
function TDXWaveListEditor.GetVerbCount: Integer;
843
begin
844
  Result := 2;
845
end;
846
 
847
{  TForceFeedbackEffectsProperty  }
848
 
849
procedure TForceFeedbackEffectsProperty.Edit;
850
var
851
  Form: TDelphiXFFEditForm;
852
  Effects: TForceFeedbackEffects;
853
begin
854
  Effects := TForceFeedbackEffects(GetOrdValue);
855
 
856
  Form := TDelphiXFFEditForm.Create(nil);
857
  try
858
    if Effects.Input is TJoystick then
859
      Form.Effects := Form.DXInput.Joystick.Effects
860
    else if Effects.Input is TKeyboard then
861
      Form.Effects := Form.DXInput.Keyboard.Effects
862
    else if Effects.Input is TMouse then
863
      Form.Effects := Form.DXInput.Mouse.Effects
864
    else Exit;
865
 
866
    Form.Effects.Assign(TForceFeedbackEffects(GetOrdValue));
867
    Form.ShowModal;
868
    if Form.Tag <> 0 then
869
    begin
870
      SetOrdValue(Integer(Form.Effects));
871
      Designer.Modified;
872
    end;
873
  finally
874
    Form.Free;
875
  end;
876
end;
877
 
878
function TForceFeedbackEffectsProperty.GetAttributes: TPropertyAttributes;
879
begin
880
  Result := [paDialog, paReadOnly];
881
end;
882
 
883
function TForceFeedbackEffectsProperty.GetValue: string;
884
begin
885
  if TForceFeedbackEffects(GetOrdValue).Count = 0 then
886
    Result := SNone
887
  else
888
    Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
889
end;
890
 
891
{  TDXInputEditor  }
892
 
893
procedure TDXInputEditor.Edit;
894
var
895
  Form: TDelphiXInputEditForm;
896
begin
897
  Form := TDelphiXInputEditForm.Create(nil);
898
  try
899
    Form.DXInput := TCustomDXInput(Component);
900
    Form.ShowModal;
901
    if Form.Tag <> 0 then
902
      Designer.Modified;
903
  finally
904
    Form.Free;
905
  end;
906
end;
907
 
908
procedure TDXInputEditor.ExecuteVerb(Index: Integer);
909
begin
910
  case Index of
911
    0: begin
912
        with TCustomDXInput(Component) do
913
        begin
914
          Joystick.ID := 0;
915
          Keyboard.KeyAssigns := DefKeyAssign;
916
        end;
917
        Designer.Modified;
918
      end;
919
    1: begin
920
        with TCustomDXInput(Component) do
921
        begin
922
          Joystick.ID := 0;
923
          Keyboard.KeyAssigns := DefKeyAssign2_1;
924
        end;
925
        Designer.Modified;
926
      end;
927
    2: begin
928
        with TCustomDXInput(Component) do
929
        begin
930
          Joystick.ID := 1;
931
          Keyboard.KeyAssigns := DefKeyAssign2_2;
932
        end;
933
        Designer.Modified;
934
      end;
935
  end;
936
end;
937
 
938
function TDXInputEditor.GetVerb(Index: Integer): string;
939
begin
940
  case Index of
941
    0: Result := SSinglePlayer;
942
    1: Result := SMultiPlayer1;
943
    2: Result := SMultiPlayer2;
944
  end;
945
end;
946
 
947
function TDXInputEditor.GetVerbCount: Integer;
948
begin
949
  Result := 3;
950
end;
951
 
952
{  TGUIDProperty  }
953
 
954
procedure TGUIDProperty.Edit;
955
var
956
  Form: TDelphiXGUIDEditForm;
957
begin
958
  Form := TDelphiXGUIDEditForm.Create(nil);
959
  try
960
    Form.GUID := GetStrValue;
961
    Form.ShowModal;
962
    if Form.Tag <> 0 then
963
    begin
964
      SetStrValue(Form.GUID);
965
      Designer.Modified;
966
    end;
967
  finally
968
    Form.Free;
969
  end;
970
end;
971
 
972
function TGUIDProperty.GetAttributes: TPropertyAttributes;
973
begin
974
  Result := inherited GetAttributes + [paDialog];
975
end;
976
 
977
{ TSpriteProperty }
978
 
979
procedure TSpriteProperty.Edit;
980
var
981
  DirectAccessToSprite: TSprite;
982
  Form: TDelphiXSpriteEditForm;
983
  //FormDesigner: IDesigner;
984
begin
985
  DirectAccessToSprite := TSprite(GetOrdValue);
986
  //FormDesigner := Designer;
987
  Form := TDelphiXSpriteEditForm.Create(nil);
988
  {FormDesigner.GetComponentNames(GetTypeData(GetPropType), Proc);}
989
  try
990
    Form.LoadDataToForm(DirectAccessToSprite);
991
    //Form.Sprite.AsSign(TPersistent(GetOrdValue));
992
    Form.ShowModal;
993
    if Form.Tag <> 0 then
994
    begin
995
      DirectAccessToSprite := TSprite(Form.SaveDataFromForm);
996
      SetOrdValue(Integer(DirectAccessToSprite));
997
      Designer.Modified;
998
    end;
999
  finally
1000
    Form.Free;
1001
  end;
1002
end;
1003
 
1004
function TSpriteProperty.GetAttributes: TPropertyAttributes;
1005
begin
1006
  Result := [paDialog];
1007
end;
1008
 
1009
function TSpriteProperty.GetValue: string;
1010
begin
1011
  Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
1012
end;
1013
 
1014
{  TMidiProperty  }
1015
 
1016
procedure TMidiProperty.Edit;
1017
var
1018
  DelphiXMidiEditForm: TDelphiXMidiEditForm;
1019
  DirectAccessToMidiData: TMusicDataProp;
1020
  S: string; I: Integer;
1021
begin
1022
  DirectAccessToMidiData := TMusicDataProp(GetOrdValue);
1023
  DelphiXMidiEditForm := TDelphiXMidiEditForm.Create(nil);
1024
  try
1025
    DelphiXMidiEditForm.MidiData := DirectAccessToMidiData.MusicData;
1026
    DelphiXMidiEditForm.MidiFileName := DirectAccessToMidiData.MidiName;
1027
    DelphiXMidiEditForm.Showmodal;
1028
    if DelphiXMidiEditForm.Tag = 1 then begin
1029
      DirectAccessToMidiData.MusicData := DelphiXMidiEditForm.MidiData;
1030
      S := '';
1031
      if DelphiXMidiEditForm.MidiFileName <> '' then begin
1032
        S := ExtractFileName(DelphiXMidiEditForm.MidiFileName);
1033
        I := Pos(ExtractFileExt(S), S);
1034
        if I > 0 then S := Copy(S, 1, I - 1);
1035
      end;
1036
      DirectAccessToMidiData.MidiName := S;
1037
      Designer.Modified;
1038
    end;
1039
  finally
1040
    DelphiXMidiEditForm.Free;
1041
  end;
1042
end;
1043
 
1044
function TMidiProperty.GetAttributes: TPropertyAttributes;
1045
begin
1046
  Result := [paDialog];
1047
end;
1048
 
1049
function TMidiProperty.GetValue: string;
1050
var
1051
  S: string;
1052
begin
1053
  S := TMusicDataProp(GetOrdValue).MusicData;
1054
  if Length(S) = 0 then
1055
    Result := SNone
1056
  else
1057
    Result := '(Midi)';
1058
end;
1059
 
1060
{$IFDEF VER6UP}
1061
procedure TMidiEditor.EditProperty(const Prop: IProperty; var Continue: Boolean);
1062
{$ELSE}
1063
procedure TMidiEditor.EditProperty(PropertyEditor: TPropertyEditor;
1064
  var continue, FreeEditor: Boolean);
1065
{$ENDIF}
1066
var
1067
  PropName: string;
1068
begin
1069
  PropName := {$IFDEF VER6UP}Prop{$ELSE}PropertyEditor{$ENDIF}.GetName;
1070
  if (CompareText(PropName, 'Midi') = 0) then
1071
  begin
1072
{$IFDEF VER6UP}Prop{$ELSE}PropertyEditor{$ENDIF}.edit;
1073
    continue := false;
1074
  end;
1075
end;
1076
 
1077
{ TDXMidiListEditor }
1078
 
1079
procedure TDXMidiListEditor.ExecuteVerb(Index: Integer);
1080
var
1081
  OpenDialog: TOpenDialog;
1082
  SaveDialog: TSaveDialog;
1083
  i: Integer;
1084
begin
1085
  case Index of
1086
    0: begin
1087
        OpenDialog := TOpenDialog.Create(nil);
1088
        try
1089
          OpenDialog.DefaultExt := 'dxm';
1090
          OpenDialog.Filter := SDXMOpenFileFilter;
1091
          OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
1092
          if OpenDialog.Execute then
1093
          begin
1094
            if OpenDialog.FilterIndex = 2 then
1095
            begin
1096
              for i := 0 to OpenDialog.Files.Count - 1 do
1097
                with TMusicListCollectionItem.Create(TDXMusic(Component).Midis) do
1098
                begin
1099
                  try
1100
                    LoadFromFile(OpenDialog.Files[i]);
1101
                    Name := ExtractFileName(OpenDialog.Files[i]);
1102
                  except
1103
                    Free;
1104
                    raise;
1105
                  end;
1106
                end;
1107
            end
1108
            else
1109
              TDXMusic(Component).Midis.LoadFromFile(OpenDialog.FileName);
1110
            Designer.Modified;
1111
          end;
1112
        finally
1113
          OpenDialog.Free;
1114
        end;
1115
      end;
1116
    1: begin
1117
        SaveDialog := TSaveDialog.Create(nil);
1118
        try
1119
          SaveDialog.DefaultExt := 'dxm';
1120
          SaveDialog.Filter := SDXMFileFilter;
1121
          SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
1122
          if SaveDialog.Execute then
1123
            TCustomDXWaveList(Component).Items.SaveToFile(SaveDialog.FileName);
1124
        finally
1125
          SaveDialog.Free;
1126
        end;
1127
      end;
1128
  end;
1129
end;
1130
 
1131
function TDXMidiListEditor.GetVerbCount: Integer;
1132
begin
1133
  Result := 2;
1134
end;
1135
 
1136
function TDXMidiListEditor.GetVerb(Index: Integer): string;
1137
begin
1138
  case Index of
1139
    0: Result := SOpen;
1140
    1: Result := SSave;
1141
  end;
1142
end;
1143
 
1144
{ TDXSpriteEngineEditor }
1145
 
1146
procedure TDXSpriteEngineEditor.ListBox1DblClick(Sender: TObject);
1147
begin
1148
  if Sender is TListBox then with (Sender as TListBox) do
1149
    if ItemIndex <> -1 then
1150
      (Owner as TForm).ModalResult := mrOk;
1151
end;
1152
 
1153
procedure TDXSpriteEngineEditor.ExecuteVerb(Index: Integer);
1154
var
1155
  FrmListBox: TForm;
1156
  ListBox1: TListBox;
1157
  DelphiXSpriteEditForm: TDelphiXSpriteEditForm;
1158
  ASprite: TSprite;
1159
  I, Z: Integer;
1160
  S: string;
1161
  Q: TCustomDXSpriteEngine;
1162
begin
1163
  case Index of
1164
    0: begin
1165
        FrmListBox := nil;
1166
        Z := 0; //default value
1167
        DelphiXSpriteEditForm := TDelphiXSpriteEditForm.Create(nil);
1168
        try
1169
          Q := TCustomDXSpriteEngine(Component);
1170
          case Q.Items.Count of
1171
            0: begin
1172
              ShowMessage('You must create any item of sprite first!');
1173
              Exit;
1174
            end;
1175
            1: ASprite := Q.Items[Z].Sprite;
1176
          else
1177
            FrmListBox := CreateListBox(ListBox1DblClick, ListBox1);
1178
            for I := 0 to Q.Items.Count - 1 do begin
1179
              S := Q.Items[I].Name;
1180
              ListBox1.Items.Add(Alter(S, '(unnamed).' + IntToStr(I)));
1181
            end;
1182
            if FrmListBox.ShowModal <> mrOk then Exit;
1183
            Z := ListBox1.ItemIndex;
1184
            if Z = -1 then Exit;
1185
            ASprite := Q.Items[Z].Sprite;
1186
            {synchronize of names}
1187
            if ASprite.Caption = '' then
1188
              if Q.Items[ListBox1.ItemIndex].Name <> '' then
1189
                ASprite.Caption := Q.Items[Z].Name;
1190
          end {case};
1191
          DelphiXSpriteEditForm.LoadDataToForm(ASprite);
1192
          DelphiXSpriteEditForm.ShowModal;
1193
          if DelphiXSpriteEditForm.Tag <> 0 then begin
1194
            ASprite := TSprite(DelphiXSpriteEditForm.SaveDataFromForm);
1195
            if Q.Items[Z].Name = '' then
1196
              if ASprite.Caption <> '' then
1197
                Q.Items[Z].Name := ASprite.Caption;
1198
            Designer.Modified;
1199
          end;
1200
        finally
1201
          if Assigned(FrmListBox) then FrmListBox.Free;
1202
          DelphiXSpriteEditForm.Free;
1203
        end;
1204
      end;
1205
  end;
1206
end;
1207
 
1208
function TDXSpriteEngineEditor.GetVerbCount: Integer;
1209
begin
1210
  Result := 1;
1211
end;
1212
 
1213
function TDXSpriteEngineEditor.GetVerb(Index: Integer): string;
1214
begin
1215
  case Index of
1216
    0: Result := 'Sprite Editor';
1217
  end;
1218
end;
1219
 
1220
{ TDXDrawEditor }
1221
 
1222
procedure TDXDrawEditor.ExecuteVerb(Index: Integer);
1223
var
1224
  ediform: TDelphiXPathsEditForm;
1225
  Q: TCustomDXDraw;
1226
  I: Integer;
1227
  S: string;
1228
  T: TTrace;
1229
  {$IFNDEF VER4UP}
1230
  H: TTrace;
1231
  J: Integer;
1232
  {$ENDIF}
1233
begin
1234
  case Index of
1235
    0: begin
1236
      Q := TCustomDXDraw(Component);
1237
      {paths editor}
1238
      ediform := TDelphiXPathsEditForm.Create(nil);
1239
      try
1240
        ediform.Pane.Width := Q.Display.Width;
1241
        ediform.Pane.Height := Q.Display.Width;
1242
        for I := 0 to Q.Traces.Count - 1 do begin
1243
          S := Q.Traces.Items[I].Name;
1244
          T := ediform.PrivateTraces.Add;
1245
          T.Name := S;
1246
          {$IFDEF VER4UP}
1247
          T.Assign(Q.Traces.Items[I]);
1248
          {$ELSE}
1249
          T.Blit := Q.Traces.Items[I].Blit;
1250
          {$ENDIF}
1251
          if Trim(S) = '' then S := Format('(unnamed[%d])', [I]);
1252
          ediform.cbListOfTraces.Items.Add(S);
1253
        end;
1254
        ediform.ShowTracesOnPane;
1255
 
1256
        ediform.ShowModal;
1257
 
1258
        if ediform.Tag = 1 then begin
1259
          {clear traces}
1260
          Q.Traces.Clear;
1261
          {rewrite backward}
1262
          for i := 0 to ediform.PrivateTraces.Count -1 do begin
1263
            T := Q.Traces.Add;
1264
            T.Name := ediform.PrivateTraces.Items[I].Name;
1265
            {$IFDEF VER4UP}
1266
            T.Assign(ediform.PrivateTraces.Items[i]);
1267
            {$ELSE}
1268
            H := ediform.PrivateTraces.Items[i];
1269
            T.Blit := H.Blit;
1270
            T.Blit.SetPathLen(H.Blit.GetPathCount);
1271
            for J := 0 to H.Blit.GetPathCount - 1 do begin
1272
              T.Blit.Path[J] := H.Blit.Path[J]
1273
            end
1274
            {$ENDIF}
1275
          end;
1276
          {prepis zmeny}
1277
          Designer.Modified;
1278
        end;
1279
      finally
1280
        ediform.Free;
1281
      end;
1282
    end;
1283
  end;
1284
end;
1285
 
1286
function TDXDrawEditor.GetVerbCount: Integer;
1287
begin
1288
  Result := 1;
1289
end;
1290
 
1291
function TDXDrawEditor.GetVerb(Index: Integer): string;
1292
begin
1293
  case Index of
1294
    0: Result := 'Traces Editor';
1295
  end;
1296
end;
1297
 
1298
end.