Subversion Repositories jumper

Rev

Rev 7 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit Choice;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, ImgList, ComCtrls, Menus, ExtCtrls;
  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
  164.     ShowMessage(Format(LNG_COULD_NOT_CREATE_DIR, [LVL_PATH]));
  165.   end;
  166. end;
  167.  
  168. end.
  169.