File: Log.pas

package info (click to toggle)
c-evo-dh 3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,540 kB
  • sloc: pascal: 57,645; xml: 243; makefile: 114; sh: 4
file content (142 lines) | stat: -rw-r--r-- 3,545 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
{$INCLUDE Switches.inc}
unit Log;

interface

uses
  LCLIntf, LCLType, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  StdCtrls, Menus;

type
  TLogDlg = class(TForm)
    LogPopup: TPopupMenu;
    mLog0: TMenuItem;
    mLog1: TMenuItem;
    mLog2: TMenuItem;
    mLog3: TMenuItem;
    N1: TMenuItem;
    mClear: TMenuItem;
    mSlot: TMenuItem;
    N2: TMenuItem;
    mInvalid: TMenuItem;
    mTime: TMenuItem;
    List: TMemo;
    mNegotiation: TMenuItem;
    procedure mLogClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure mClearClick(Sender: TObject);
    procedure mSlotClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
    procedure Toggle(Sender: TObject);
    procedure ListMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormKeyUp(Sender: TObject; var Key: word; Shift: TShiftState);
  public
    Host: TForm;
    procedure Add(Level, Turn: Integer; Text: pchar);
  private
    MaxLevel: Integer;
  end;

var
  LogDlg: TLogDlg;


implementation

uses
  ClientTools, Tribes;

{$R *.lfm}

const
  MaxLines = 1000;

procedure TLogDlg.FormCreate(Sender: TObject);
begin
  MaxLevel := 0;
end;

procedure TLogDlg.mLogClick(Sender: TObject);
begin
  MaxLevel := TMenuItem(Sender).Tag;
  TMenuItem(Sender).Checked := true;
end;

procedure TLogDlg.Add(Level, Turn: Integer; Text: pchar);
begin
  if (MaxLevel > 0) and (Level <= MaxLevel) or (Level = 1 shl 16 + 1) and
    mInvalid.Checked or (Level = 1 shl 16 + 2) and mTime.Checked or
    (Level = 1 shl 16 + 3) and mNegotiation.Checked then
  begin
    if List.Lines.Count = MaxLines then
      List.Lines.Delete(0);
    List.Lines.Add(char(48 + Turn div 100 mod 10) +
      char(48 + Turn div 10 mod 10) + char(48 + Turn mod 10) + ' ' + Text);
    PostMessage(List.Handle, WM_VSCROLL, SB_BOTTOM, 0);
    Update;
  end;
end;

procedure TLogDlg.mClearClick(Sender: TObject);
begin
  List.Clear;
end;

procedure TLogDlg.mSlotClick(Sender: TObject);
const
  SlotNo: array [0 .. 2, 0 .. 2] of Integer = ((8, 1, 2), (7, 0, 3), (6, 5, 4));
var
  X, Y: Integer;
  s: string;
begin
  for Y := 0 to 2 do
  begin
    s := '| ';
    for X := 0 to 2 do
      if G.Difficulty[SlotNo[Y, X]] = 0 then
        s := s + 'SUP |'
      else if G.Difficulty[SlotNo[Y, X]] < 0 then
        s := s + '--- |'
      else
      begin
        if SlotNo[Y, X] in [6 .. 8] then
        begin // check multi control
          if G.Difficulty[SlotNo[Y, X] + 3] >= 0 then
            s := s + Tribe[SlotNo[Y, X] + 3].TPhrase('SHORTNAME') + '+';
          if G.Difficulty[SlotNo[Y, X] + 6] >= 0 then
            s := s + Tribe[SlotNo[Y, X] + 6].TPhrase('SHORTNAME') + '+';
        end;
        s := s + Tribe[SlotNo[Y, X]].TPhrase('SHORTNAME') + ' | ';
      end;
    List.Lines.Add(s);
  end;
  PostMessage(List.Handle, WM_VSCROLL, SB_BOTTOM, 0);
end;

procedure TLogDlg.FormKeyDown(Sender: TObject; var Key: word;
  Shift: TShiftState);
begin
  if Host <> nil then
    Host.OnKeyDown(Sender, Key, Shift);
end;

procedure TLogDlg.Toggle(Sender: TObject);
begin
  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
end;

procedure TLogDlg.ListMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
    LogPopup.Popup(Left + X, Top + Y);
end;

procedure TLogDlg.FormKeyUp(Sender: TObject; var Key: word; Shift: TShiftState);
begin
  if Host <> nil then
    Host.OnKeyUp(Sender, Key, Shift);
end;

end.