source: tags/1.2.0/Locale.pas

Last change on this file was 205, checked in by chronos, 4 years ago
  • Fixed: Removed various code compilation warnings and hints.
File size: 4.2 KB
Line 
1unit Locale;
2
3{$mode delphi}
4
5interface
6
7uses
8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
9 ScreenTools, Messg, ButtonA, Registry, fgl, Directories, DrawDlg, ButtonC;
10
11type
12 TLanguage = class
13 ShortName: string;
14 FullName: string;
15 Author: string;
16 end;
17
18 { TLanguages }
19
20 TLanguages = class(TFPGObjectList<TLanguage>)
21 procedure AddItem(const ShortName, FullName: string);
22 procedure LoadToStrings(Strings: TStrings);
23 function Search(ShortName: string): Integer;
24 end;
25
26 { TLocaleDlg }
27
28 TLocaleDlg = class(TDrawDlg)
29 ButtonFullscreen: TButtonC;
30 List: TListBox;
31 OKBtn: TButtonA;
32 CancelBtn: TButtonA;
33 procedure ButtonFullscreenClick(Sender: TObject);
34 procedure CancelBtnClick(Sender: TObject);
35 procedure FormCreate(Sender: TObject);
36 procedure FormDestroy(Sender: TObject);
37 procedure FormPaint(Sender: TObject);
38 procedure FormShow(Sender: TObject);
39 procedure OKBtnClick(Sender: TObject);
40 private
41 { private declarations }
42 public
43 Languages: TLanguages;
44 end;
45
46var
47 LocaleDlg: TLocaleDlg;
48
49implementation
50
51{$R *.lfm}
52
53{ TLanguages }
54
55procedure TLanguages.AddItem(const ShortName, FullName: string);
56var
57 Language: TLanguage;
58begin
59 Language := TLanguage.Create;
60 Language.ShortName := ShortName;
61 Language.FullName := FullName;
62 Add(Language);
63end;
64
65procedure TLanguages.LoadToStrings(Strings: TStrings);
66var
67 I: Integer;
68begin
69 Strings.Clear;
70 for I := 0 to Count - 1 do
71 Strings.Add(Items[I].FullName);
72end;
73
74function TLanguages.Search(ShortName: string): Integer;
75var
76 I: Integer;
77begin
78 I := 0;
79 while (I < Count) and (Items[I].ShortName <> ShortName) do Inc(I);
80 if I < Count then Result := I
81 else Result := -1;
82end;
83
84{ TLocaleDlg }
85
86procedure TLocaleDlg.FormCreate(Sender: TObject);
87begin
88 Canvas.Font.Assign(UniFont[ftNormal]);
89 Canvas.Brush.Style := bsClear;
90
91 Languages := TLanguages.Create;
92 Languages.AddItem('', 'System');
93 Languages.AddItem('cs', 'Czech');
94 Languages.AddItem('de', 'German');
95 Languages.AddItem('en', 'English');
96 Languages.AddItem('it', 'Italian');
97 Languages.AddItem('ru', 'Russian');
98 Languages.AddItem('zh-Hant', 'Traditional Chinese');
99 Languages.AddItem('zh-Hans', 'Simplified Chinese');
100
101 OKBtn.Caption := Phrases.Lookup('BTN_OK');
102 CancelBtn.Caption := Phrases.Lookup('BTN_CANCEL');
103 OkBtn.Graphic := GrExt[HGrSystem].Data;
104 CancelBtn.Graphic := GrExt[HGrSystem].Data;
105
106 ButtonFullscreen.Graphic := GrExt[HGrSystem].Data;
107 if FullScreen then ButtonFullscreen.ButtonIndex := 3
108 else ButtonFullscreen.ButtonIndex := 2;
109end;
110
111procedure TLocaleDlg.CancelBtnClick(Sender: TObject);
112begin
113 ModalResult := mrCancel;
114end;
115
116procedure TLocaleDlg.ButtonFullscreenClick(Sender: TObject);
117begin
118 FullScreen := not FullScreen;
119 ButtonFullscreen.ButtonIndex := ButtonFullscreen.ButtonIndex xor 1;
120end;
121
122procedure TLocaleDlg.FormDestroy(Sender: TObject);
123begin
124 FreeAndNil(Languages);
125end;
126
127procedure TLocaleDlg.FormPaint(Sender: TObject);
128var
129 S: string;
130begin
131 PaintBackground(self, 3, 3, ClientWidth - 6, ClientHeight - 6);
132 Frame(Canvas, 0, 0, ClientWidth - 1, ClientHeight - 1, 0, 0);
133 Frame(Canvas, 1, 1, ClientWidth - 2, ClientHeight - 2,
134 MainTexture.clBevelLight, MainTexture.clBevelShade);
135 Frame(Canvas, 2, 2, ClientWidth - 3, ClientHeight - 3,
136 MainTexture.clBevelLight, MainTexture.clBevelShade);
137 EditFrame(Canvas, List.BoundsRect, MainTexture);
138 BtnFrame(Canvas, OKBtn.BoundsRect, MainTexture);
139 BtnFrame(Canvas, CancelBtn.BoundsRect, MainTexture);
140
141 RFrame(Canvas, ButtonFullscreen.Left - 1, ButtonFullscreen.Top - 1,
142 ButtonFullscreen.Left + 12, ButtonFullscreen.Top + 12, MainTexture.clBevelShade,
143 MainTexture.clBevelLight);
144
145 s := Phrases.Lookup('SETTINGS', 0);
146 LoweredTextOut(Canvas, -2, MainTexture, ButtonFullscreen.Left + 32,
147 ButtonFullscreen.Top - 4, s);
148end;
149
150procedure TLocaleDlg.FormShow(Sender: TObject);
151begin
152 Languages.LoadToStrings(List.Items);
153 List.ItemIndex := Languages.Search(LocaleCode);
154 if (List.ItemIndex = -1) and (Languages.Count > 0) then
155 List.ItemIndex := 0;
156 List.Font.Color := MainTexture.clMark;
157end;
158
159procedure TLocaleDlg.OKBtnClick(Sender: TObject);
160begin
161 LocaleCode := Languages[List.ItemIndex].ShortName;
162 ModalResult := mrOk;
163end;
164
165end.
166
Note: See TracBrowser for help on using the repository browser.