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