Subversion Repositories jumper

Rev

Rev 11 | Rev 21 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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