Subversion Repositories jumper

Rev

Rev 7 | Rev 11 | 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
53
  LevelString: string;
54
begin
55
  if Assigned(LevelList.Selected) then
56
  begin
57
    if LevelList.Selected.ImageIndex = 2 then
58
    begin
59
      LevelString := Functions.ReadFile(Format(LVL_FILE, [LevelList.Selected.Caption]));
60
      // leNone könnte auftreten, wenn das Level z.B. repariert wurde...
61
      if CheckLevelIntegrity(LevelString, true) <> leNone then
62
      begin
63
        exit;
64
      end;
65
    end;
66
    ModalResult := mrOk;
67
  end;
68
end;
69
 
70
procedure TLevelChoice.CancelBtnClick(Sender: TObject);
71
begin
72
  ModalResult := mrCancel;
73
end;
74
 
75
procedure TLevelChoice.FormShow(Sender: TObject);
76
begin
77
  RefreshList;
78
end;
79
 
80
procedure TLevelChoice.LevelListClick(Sender: TObject);
81
var
82
  LevelFile, LevelString: string;
83
begin
84
  PlayBtn.Enabled := Assigned(LevelList.Selected);
85
  PLoadLevel.Enabled := Assigned(LevelList.Selected);
86
 
87
  if Assigned(LevelList.Selected) then
88
  begin
89
    LevelFile := Format(LVL_FILE, [LevelList.Selected.Caption]);
90
    LevelString := Functions.ReadFile(LevelFile);
91
    DrawLevelPreview(LevelString, PreviewImage, Color);
92
  end
93
  else
94
  begin
95
    ClearImage(PreviewImage, Color);
96
  end;
97
end;
98
 
99
procedure TLevelChoice.LevelListChange(Sender: TObject; Item: TListItem;
100
  Change: TItemChange);
101
begin
102
  if Change = ctState then LevelListClick(self);
103
end;
104
 
105
procedure TLevelChoice.PRefreshListClick(Sender: TObject);
106
begin
107
  RefreshList;
108
end;
109
 
110
procedure TLevelChoice.RefreshList;
111
var
112
  s: TSearchRec;
113
  LevelString: string;
114
begin
115
  LevelList.Clear;
116
 
117
  // Levels auflisten
118
  if FindFirst(Format(LVL_FILE, ['*']), faAnyFile, s) = 0 then
119
  begin
120
    repeat
121
      with LevelList.Items.Add do
122
      begin
123
        Caption := Copy(s.Name, 1, Length(s.Name)-Length(LVL_EXT));
124
        LevelString := Functions.ReadFile(LVL_PATH + s.Name);
125
        case GetLevelType(LevelString) of
126
          ltStandard: ImageIndex := 0;
127
          ltDiagonal: ImageIndex := 1;
128
          ltError: ImageIndex := 2;
129
        end;
130
      end;
131
    until FindNext(s) <> 0;
132
    FindClose(s);
133
  end;
134
end;
135
 
136
procedure TLevelChoice.FormResize(Sender: TObject);
137
var
138
  p: integer;
139
begin
140
  // WIDTH
141
  p := ClientWidth - 3*LevelGrp.Left; // 100% useable
142
  LevelGrp.Width := Round((1-MET_PREVIEW_SIZE_RATIO) * p);
143
  PreviewGrp.Width := Round(MET_PREVIEW_SIZE_RATIO * p);
144
  PreviewGrp.Left := 2*LevelGrp.Left + LevelGrp.Width;
145
  LevelList.Width := LevelGrp.Width - 2*LevelList.Left;
146
  PreviewImage.Width := PreviewGrp.Width - 2*PreviewImage.Left;
147
  PlayBtn.Left := (LevelGrp.Left + LevelGrp.Width) - PlayBtn.Width;
148
 
149
  // HEIGHT
150
  LevelGrp.Height := ClientHeight - 3*LevelGrp.Top - PlayBtn.Height;
151
  PreviewGrp.Height := LevelGrp.Height;
152
  PlayBtn.Top := 2*LevelGrp.Top + LevelGrp.Height;
153
  CancelBtn.Top := PlayBtn.Top;
154
  LevelList.Height := LevelGrp.Height - 2*LevelList.Top;
155
  PreviewImage.Height := PreviewGrp.Height - 2*PreviewImage.Top;
156
 
157
  // TODO: Icons rearrangieren
158
end;
159
 
160
procedure TLevelChoice.FormCreate(Sender: TObject);
161
begin
162
  if not ForceDirectories(ExtractFilePath(Application.ExeName) + LVL_PATH) then
163
  begin
9 daniel-mar 164
    MessageDlg(Format(LNG_COULD_NOT_CREATE_DIR, [LVL_PATH]), mtError, [mbOK], 0);
1 daniel-mar 165
  end;
166
end;
167
 
168
end.