Subversion Repositories jumper

Rev

Rev 11 | Rev 21 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 daniel-mar 1
unit Choice;
2
 
3
interface
4
 
5
uses
6
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 daniel-mar 7
  Dialogs, StdCtrls, ImgList, ComCtrls, Menus, ExtCtrls, System.ImageList;
1 daniel-mar 8
 
9
type
10
  TLevelChoice = class(TForm)
11
    PlayBtn: TButton;
12
    CancelBtn: TButton;
13
    LevelImageList: TImageList;
14
    LevelPopupMenu: TPopupMenu;
15
    PLoadLevel: TMenuItem;
16
    PRefreshList: TMenuItem;
17
    PreviewGrp: TGroupBox;
18
    PreviewImage: TImage;
19
    LevelGrp: TGroupBox;
20
    LevelList: TListView;
21
    procedure PlayBtnClick(Sender: TObject);
22
    procedure CancelBtnClick(Sender: TObject);
23
    procedure FormShow(Sender: TObject);
24
    procedure LevelListClick(Sender: TObject);
25
    procedure LevelListChange(Sender: TObject; Item: TListItem;
26
      Change: TItemChange);
27
    procedure PRefreshListClick(Sender: TObject);
28
    procedure FormResize(Sender: TObject);
29
    procedure FormCreate(Sender: TObject);
30
  private
31
    procedure RefreshList;
32
  public
33
    function SelectedLevel: string;
34
  end;
35
 
36
var
37
  LevelChoice: TLevelChoice;
38
 
39
implementation
40
 
41
{$R *.dfm}
42
 
43
uses
44
  Functions, LevelFunctions, Constants;
45
 
46
function TLevelChoice.SelectedLevel: string;
47
begin
48
  result := Format(LVL_FILE, [LevelList.Selected.Caption]);
49
end;
50
 
51
procedure TLevelChoice.PlayBtnClick(Sender: TObject);
52
var
11 daniel-mar 53
  Level: TLevel;
1 daniel-mar 54
begin
55
  if Assigned(LevelList.Selected) then
56
  begin
57
    if LevelList.Selected.ImageIndex = 2 then
58
    begin
11 daniel-mar 59
      Level := TLevel.Create(Format(LVL_FILE, [LevelList.Selected.Caption]));
60
      try
61
        if Level.CheckLevelIntegrity(true) <> leNone then
62
        begin
63
          exit;
64
        end;
65
      finally
66
        FreeAndNil(Level);
1 daniel-mar 67
      end;
68
    end;
69
    ModalResult := mrOk;
70
  end;
71
end;
72
 
73
procedure TLevelChoice.CancelBtnClick(Sender: TObject);
74
begin
75
  ModalResult := mrCancel;
76
end;
77
 
78
procedure TLevelChoice.FormShow(Sender: TObject);
79
begin
80
  RefreshList;
81
end;
82
 
83
procedure TLevelChoice.LevelListClick(Sender: TObject);
84
var
18 daniel-mar 85
  LevelFile: string;
11 daniel-mar 86
  Level: TLevel;
1 daniel-mar 87
begin
88
  PlayBtn.Enabled := Assigned(LevelList.Selected);
89
  PLoadLevel.Enabled := Assigned(LevelList.Selected);
90
 
91
  if Assigned(LevelList.Selected) then
92
  begin
93
    LevelFile := Format(LVL_FILE, [LevelList.Selected.Caption]);
11 daniel-mar 94
    Level := TLevel.Create(LevelFile);
95
    try
96
      DrawLevelPreview(Level, PreviewImage, Color);
97
    finally
98
      FreeAndNil(Level);
99
    end;
1 daniel-mar 100
  end
101
  else
102
  begin
103
    ClearImage(PreviewImage, Color);
104
  end;
105
end;
106
 
107
procedure TLevelChoice.LevelListChange(Sender: TObject; Item: TListItem;
108
  Change: TItemChange);
109
begin
110
  if Change = ctState then LevelListClick(self);
111
end;
112
 
113
procedure TLevelChoice.PRefreshListClick(Sender: TObject);
114
begin
115
  RefreshList;
116
end;
117
 
118
procedure TLevelChoice.RefreshList;
119
var
120
  s: TSearchRec;
11 daniel-mar 121
  Level: TLevel;
1 daniel-mar 122
begin
123
  LevelList.Clear;
124
 
125
  // Levels auflisten
126
  if FindFirst(Format(LVL_FILE, ['*']), faAnyFile, s) = 0 then
127
  begin
128
    repeat
129
      with LevelList.Items.Add do
130
      begin
131
        Caption := Copy(s.Name, 1, Length(s.Name)-Length(LVL_EXT));
11 daniel-mar 132
        Level := TLevel.Create(LVL_PATH + s.Name);
18 daniel-mar 133
 
134
        if Level.CheckLevelIntegrity <> leNone then
135
          ImageIndex := 2{Error}
136
        else case Level.GetGameMode of
137
          gmNormal: ImageIndex := 0{Normal};
138
          gmDiagonal: ImageIndex := 1{Diagonal};
139
          gmUndefined: ImageIndex := 2{Error};
1 daniel-mar 140
        end;
141
      end;
142
    until FindNext(s) <> 0;
143
    FindClose(s);
144
  end;
145
end;
146
 
147
procedure TLevelChoice.FormResize(Sender: TObject);
148
var
149
  p: integer;
150
begin
151
  // WIDTH
152
  p := ClientWidth - 3*LevelGrp.Left; // 100% useable
153
  LevelGrp.Width := Round((1-MET_PREVIEW_SIZE_RATIO) * p);
154
  PreviewGrp.Width := Round(MET_PREVIEW_SIZE_RATIO * p);
155
  PreviewGrp.Left := 2*LevelGrp.Left + LevelGrp.Width;
156
  LevelList.Width := LevelGrp.Width - 2*LevelList.Left;
157
  PreviewImage.Width := PreviewGrp.Width - 2*PreviewImage.Left;
158
  PlayBtn.Left := (LevelGrp.Left + LevelGrp.Width) - PlayBtn.Width;
159
 
160
  // HEIGHT
161
  LevelGrp.Height := ClientHeight - 3*LevelGrp.Top - PlayBtn.Height;
162
  PreviewGrp.Height := LevelGrp.Height;
163
  PlayBtn.Top := 2*LevelGrp.Top + LevelGrp.Height;
164
  CancelBtn.Top := PlayBtn.Top;
165
  LevelList.Height := LevelGrp.Height - 2*LevelList.Top;
166
  PreviewImage.Height := PreviewGrp.Height - 2*PreviewImage.Top;
167
 
168
  // TODO: Icons rearrangieren
169
end;
170
 
171
procedure TLevelChoice.FormCreate(Sender: TObject);
172
begin
173
  if not ForceDirectories(ExtractFilePath(Application.ExeName) + LVL_PATH) then
174
  begin
9 daniel-mar 175
    MessageDlg(Format(LNG_COULD_NOT_CREATE_DIR, [LVL_PATH]), mtError, [mbOK], 0);
1 daniel-mar 176
  end;
177
end;
178
 
179
end.