6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7 ComCtrls, StdCtrls, ExtCtrls, ColorCBX, BottleDef, EllipsEd, Spin,
11 TfrmSetting = class(TForm)
12 PageControl: TPageControl;
14 tstGeneral: TTabSheet;
17 rgpWhenReturn: TRadioGroup;
18 rgpWhenShiftReturn: TRadioGroup;
19 rgpWhenCtrlReturn: TRadioGroup;
20 memDefaultScript: TMemo;
21 lblDefaultScript: TLabel;
22 grpLocalConfirm: TGroupBox;
23 ColorDialog: TColorDialog;
24 cbxColorScript: TCheckBox;
25 trkColorTimeLag: TTrackBar;
26 trkColorSpeed: TTrackBar;
28 colTalkColorU: TColorCBox;
29 colMetaWordColor: TColorCBox;
33 colTalkColorH: TColorCBox;
35 colMarkUpColor: TColorCBox;
37 colMarkErrorColor: TColorCBox;
38 cbxIgnoreTimeCritical: TCheckBox;
39 lblColorTimeLag: TLabel;
40 lblColorSpeed: TLabel;
41 colBgColor: TColorCBox;
43 tstReceive: TTabSheet;
46 cbxAutoStart: TCheckBox;
47 tstChannel: TTabSheet;
48 tvwChannels: TTreeView;
49 rgpUseChannelPrefs: TRadioGroup;
50 pnlChannelOpt: TPanel;
51 edtSoundFile: TEllipsesEdit;
52 cbxSoundArrived: TCheckBox;
53 rgpTargetGhost: TGroupBox;
54 cbxIgnoreIfGhost: TCheckBox;
55 cbxTargetGhost: TComboBox;
56 cbxUsePort: TCheckBox;
57 rgpTabPosition: TRadioGroup;
58 cbxCanAutoAdd: TCheckBox;
59 OpenDialog: TOpenDialog;
60 spnWaitScriptEnd: TSpinEdit;
61 lblWaitScriptEnd: TLabel;
62 cbxNoSendGhostList: TCheckBox;
65 cbxUseHttpProxy: TCheckBox;
66 edtProxyAddress: TEdit;
68 lblProxyAddress: TLabel;
71 cbxWarnPost: TCheckBox;
72 cbxConfirmOnExit: TCheckBox;
73 ctvBottle: TCPCConfigTreeView;
74 procedure ColorPick(Sender: TObject; var Col: TColor);
75 procedure FormClose(Sender: TObject; var Action: TCloseAction);
76 procedure cbxPortChange(Sender: TObject);
77 procedure edtSoundFileButtonClick(Sender: TObject);
78 procedure tvwChannelsCompare(Sender: TObject; Node1, Node2: TTreeNode;
79 Data: Integer; var Compare: Integer);
80 procedure tvwChannelsChange(Sender: TObject; Node: TTreeNode);
81 procedure rgpUseChannelPrefsClick(Sender: TObject);
82 procedure cbxSoundArrivedClick(Sender: TObject);
83 procedure edtSoundFileChange(Sender: TObject);
84 procedure cbxTargetGhostChange(Sender: TObject);
85 procedure cbxIgnoreIfGhostClick(Sender: TObject);
86 procedure cbxUsePortClick(Sender: TObject);
87 procedure cbxCanAutoAddClick(Sender: TObject);
88 procedure edtProxyPortKeyPress(Sender: TObject; var Key: Char);
89 procedure cbxWarnPostClick(Sender: TObject);
90 procedure ctvBottleNodeChecked(Sender: TObject;
91 Node: TCPCConfigItemNode);
92 procedure ctvBottleNodeChecking(Sender: TObject;
93 Node: TCPCConfigItemNode; var Allow: Boolean);
96 function SelChPref: TChannelPrefs;
97 function BottleImage(ChPref: TChannelPrefs): integer;
104 frmSetting: TfrmSetting;
108 ChannelDefaultGhost = '(
\83`
\83\83\83\93\83l
\83\8b\90\84\8f§
\83S
\81[
\83X
\83g)';
110 UnCheckedBottle = 17;
118 procedure TfrmSetting.ColorPick(Sender: TObject; var Col: TColor);
120 ColorDialog.Color := Col;
121 if ColorDialog.Execute then begin
122 Col := ColorDialog.Color;
126 procedure TfrmSetting.Execute;
130 PageControl.ActivePage := tstGeneral;
131 memDefaultScript.Text := Pref.DefaultScript;
132 cbxIgnoreTimeCritical.Checked := Pref.IgnoreTimeCritical;
133 cbxNoSendGhostList.Checked := Pref.NoSendGhostList;
134 cbxConfirmOnExit.Checked := Pref.ConfirmOnExit;
136 cbxColorScript.Checked := Pref.ColorScript;
137 colTalkColorH.SelColor := Pref.TalkColorH;
138 colTalkColorU.SelColor := Pref.TalkColorU;
139 colMarkUpColor.SelColor := Pref.MarkUpColor;
140 colMetaWordColor.SelColor := Pref.MetaWordColor;
141 colMarkErrorColor.SelColor := Pref.MarkErrorColor;
142 colBgColor.SelColor := Pref.BgColor;
143 trkColorTimeLag.Position := Pref.ColorTimeLagValue;
144 trkColorSpeed.Position := Pref.ColorSpeed;
146 cbxAutoStart.Checked := Pref.AutoStart;
147 rgpTabPosition.ItemIndex := Ord(Pref.TabPosition);
149 cbxNoTranslate.Checked := Pref.NoTranslate;
150 cbxNoDescript.Checked := Pref.NoDescript;
151 cbxNoTransUrl.Checked := Pref.NoTransUrl;
152 cbxSilentWhenHidden.Checked := Pref.SilentWhenHidden;
155 with ctvBottle do begin
156 (GetNodeFromKeyPath('Arrive\NoTranslate') as TCPCCheckBoxNode).Checked := Pref.NoTranslate;
157 (GetNodeFromKeyPath('Arrive\NoDescript') as TCPCCheckBoxNode).Checked := Pref.NoTranslate;
158 if Pref.NoTransUrl then
159 (GetNodeFromKeyPath('Arrive\UrlTag\NoSelection') as TCPCRadioNode).Check
161 (GetNodeFromKeyPath('Arrive\UrlTag\WithSelection') as TCPCRadioNode).Check;
162 (GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked := Pref.SilentWhenHidden;
163 (GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked := Pref.FixMessySurface;
166 on E: Exception do ShowMessage(E.Message);
168 //cbxIgnoreFrequentYenS.Checked := Pref.IgnoreFrequentYenS;
169 spnWaitScriptEnd.Value := Pref.WaitScriptEnd;
171 rgpWhenReturn.ItemIndex := Ord(Pref.WhenReturn);
172 rgpWhenShiftReturn.ItemIndex := Ord(Pref.WhenShiftReturn);
173 rgpWhenCtrlReturn.ItemIndex := Ord(Pref.WhenCtrlReturn);
175 cbxPort.ItemIndex := cbxPort.Items.Count-1; //
\81u
\82»
\82Ì
\91¼
\81v
176 for i := 0 to cbxPort.Items.Count-2 do begin
177 if StrToIntDef(cbxPort.Items[i], 0) = Pref.ServerPort then
178 cbxPort.ItemIndex := i;
180 cbxUsePort.Checked := Pref.UsePort;
181 cbxPort.Enabled := cbxUsePort.Checked;
182 cbxUsePort.OnClick := cbxUsePortClick; //Dialog
\8aJ
\82¢
\82½
\8fu
\8aÔ
\82É
\8cx
\8d\90\82³
\82ê
\82È
\82¢
\82æ
\82¤
185 tvwChannels.Items.Clear;
186 Node := tvwChannels.Items.Add(nil, '
\83f
\83t
\83H
\83\8b\83g');
187 Node.ImageIndex := 1;
188 Node.SelectedIndex := 1;
189 Node.Data := pointer(DefaultNode);
190 for i := 0 to Pref.ChannelPrefCount-1 do begin
191 Node := tvwChannels.Items.Add(nil, Pref.ChannelPrefIndex[i].ChannelName);
192 Node.Data := pointer(i); //
\96{
\93\96\82Í
\82â
\82Á
\82¿
\82á
\82¢
\82¯
\82È
\82¢Int>Pointer
\83L
\83\83\83X
\83g
193 Node.ImageIndex := BottleImage(Pref.ChannelPrefIndex[i]);
194 Node.SelectedIndex := BottleImage(Pref.ChannelPrefIndex[i]);
196 cbxTargetGhost.Items.Clear;
197 cbxTargetGhost.Items.Add(ChannelDefaultGhost);
198 frmSender.SakuraSeeker.BeginDetect;
199 for i := 0 to frmSender.SakuraSeeker.Count-1 do begin
200 cbxTargetGhost.Items.Add(frmSender.SakuraSeeker[i].Name);
202 rgpUseChannelPrefs.Enabled := false;
203 rgpUseChannelPrefsClick(Self);
205 cbxUseHttpProxy.Checked := Pref.UseHttpProxy;
206 edtProxyAddress.Text := Pref.ProxyAddress;
207 edtProxyPort.Text := IntToStr(Pref.ProxyPort);
211 procedure TfrmSetting.FormClose(Sender: TObject; var Action: TCloseAction);
213 Pref.DefaultScript := memDefaultScript.Text;
214 Pref.IgnoreTimeCritical := cbxIgnoreTimeCritical.Checked;
215 Pref.NoSendGhostList := cbxNoSendGhostList.Checked;
216 Pref.ConfirmOnExit := cbxConfirmOnExit.Checked;
218 Pref.ColorScript := cbxColorScript.Checked;
219 Pref.TalkColorH := colTalkColorH.SelColor;
220 Pref.TalkColorU := colTalkColorU.SelColor;
221 Pref.MarkUpColor := colMarkUpColor.SelColor;
222 Pref.MetaWordColor := colMetaWordColor.SelColor;
223 Pref.MarkErrorColor := colMarkErrorColor.SelColor;
224 Pref.BgColor := colBgColor.SelColor;
225 Pref.ColorTimeLagValue := trkColorTimeLag.Position;
226 Pref.ColorSpeed := trkColorSpeed.Position;
228 Pref.AutoStart := cbxAutoStart.Checked;
229 Pref.TabPosition := TTabPosition(rgpTabPosition.ItemIndex);
231 with ctvBottle do begin
232 Pref.NoTranslate := (GetNodeFromKeyPath('Arrive\NoTranslate') as TCPCCheckBoxNode).Checked;
233 Pref.NoDescript := (GetNodeFromKeyPath('Arrive\NoDescript') as TCPCCheckBoxNode).Checked;
234 Pref.NoTransUrl := (GetNodeFromKeyPath('Arrive\UrlTag\NoSelection') as TCPCRadioNode).Checked;
235 Pref.SilentWhenHidden := (GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked;
236 Pref.FixMessySurface := (GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked;
239 on E: Exception do ShowMessage(E.Message);
241 //Pref.IgnoreFrequentYenS := cbxIgnoreFrequentYenS.Checked;
242 Pref.WaitScriptEnd := spnWaitScriptEnd.Value;
244 Pref.WhenReturn := TReturnKeyFunction(rgpWhenReturn.ItemIndex);
245 Pref.WhenShiftReturn := TReturnKeyFunction(rgpWhenShiftReturn.ItemIndex);
246 Pref.WhenCtrlReturn := TReturnKeyFunction(rgpWhenCtrlReturn.ItemIndex);
248 Pref.UsePort := cbxUsePort.Checked;
250 Pref.UseHttpProxy := cbxUseHttpProxy.Checked;
251 Pref.ProxyAddress := edtProxyAddress.Text;
252 Pref.ProxyPort := StrToInt(edtProxyPort.Text);
255 procedure TfrmSetting.cbxPortChange(Sender: TObject);
259 with cbxPort do begin
260 if ItemIndex = Items.Count-1 then begin
262 Str := IntToStr(Pref.ServerPort);
263 if InputQuery('
\83|
\81[
\83g
\94Ô
\8d\86\82Ì
\8ew
\92è', '
\83|
\81[
\83g
\94Ô
\8d\86', Str) then begin
264 Pref.ServerPort := StrToIntDef(Str, Pref.ServerPort);
267 Pref.ServerPort := StrToIntDef(Items[ItemIndex], Pref.ServerPort);
269 for i := 0 to Items.Count-2 do begin
270 if Pref.ServerPort = StrToInt(Items[i]) then ItemIndex := i;
275 procedure TfrmSetting.edtSoundFileButtonClick(Sender: TObject);
277 if OpenDialog.Execute then begin
278 edtSoundFile.Text := OpenDialog.FileName;
282 procedure TfrmSetting.tvwChannelsCompare(Sender: TObject; Node1,
283 Node2: TTreeNode; Data: Integer; var Compare: Integer);
285 if Node1.Text = '
\83f
\83t
\83H
\83\8b\83g' then
287 else if Node2.Text = '
\83f
\83t
\83H
\83\8b\83g' then
290 Compare := AnsiCompareStr(Node1.Text, Node2.Text);
293 procedure TfrmSetting.tvwChannelsChange(Sender: TObject; Node: TTreeNode);
294 var ChPref: TChannelPrefs;
296 rgpUseChannelPrefs.Enabled := true;
297 if integer(Node.Data) = DefaultNode then begin
298 ChPref := Pref.DefChannelPref;
299 cbxCanAutoAdd.Enabled := false;
300 cbxWarnPost.Enabled := false;
301 rgpUseChannelPrefs.Enabled := false;
302 cbxSoundArrived.AllowGrayed := false;
304 ChPref := Pref.ChannelPrefIndex[integer(Node.Data)];
305 cbxCanAutoAdd.Enabled := true;
306 cbxWarnPost.Enabled := true;
307 rgpUseChannelPrefs.Enabled := true;
308 cbxSoundArrived.AllowGrayed := true;
310 cbxCanAutoAdd.Checked := ChPref.CanAutoAdd;
311 cbxWarnPost.Checked := ChPref.WarnPost;
312 if ChPref.UseChannelPrefs then begin
313 rgpUseChannelPrefs.ItemIndex := 0;
315 rgpUseChannelPrefs.ItemIndex := 1;
317 cbxSoundArrived.State := TCheckBoxState(ChPref.SoundArrived);
318 edtSoundFile.Text := ChPref.SoundFile;
319 cbxIgnoreIfGhost.Checked := ChPref.IgnoreIfGhost;
320 if ChPref.TargetGhost <> '' then
321 cbxTargetGhost.Text := ChPref.TargetGhost
323 cbxTargetGhost.Text := ChannelDefaultGhost;
326 procedure TfrmSetting.rgpUseChannelPrefsClick(Sender: TObject);
328 pnlChannelOpt.Visible := ((rgpUseChannelPrefs.ItemIndex = 0) and
329 (tvwChannels.Selected <> nil));
330 if SelChPref <> nil then begin
331 SelChPref.UseChannelPrefs := (rgpUseChannelPrefs.ItemIndex = 0);
332 tvwChannels.Selected.ImageIndex := BottleImage(SelChPref);
333 tvwChannels.Selected.SelectedIndex := BottleImage(SelChPref);
337 function TfrmSetting.BottleImage(ChPref: TChannelPrefs): integer;
339 if ChPref = Pref.DefChannelPref then Result := 1
340 else if ChPref.UseChannelPrefs then Result := CheckedBottle
341 else Result := UnCheckedBottle;
344 function TfrmSetting.SelChPref: TChannelPrefs;
346 if tvwChannels.Selected = nil then begin
349 end else if integer(tvwChannels.Selected.Data) = DefaultNode then begin
350 Result := Pref.DefChannelPref;
352 Result := Pref.ChannelPrefIndex[integer(tvwChannels.Selected.Data)];
356 procedure TfrmSetting.cbxSoundArrivedClick(Sender: TObject);
358 SelChPref.SoundArrived := TSoundArrived(cbxSoundArrived.State);
361 procedure TfrmSetting.edtSoundFileChange(Sender: TObject);
363 SelChPref.SoundFile := edtSoundFile.Text;
366 procedure TfrmSetting.cbxTargetGhostChange(Sender: TObject);
368 if cbxTargetGhost.ItemIndex = 0 then
369 SelChPref.TargetGhost := ''
371 SelChPref.TargetGhost := cbxTargetGhost.Text;
374 procedure TfrmSetting.cbxIgnoreIfGhostClick(Sender: TObject);
376 SelChPref.IgnoreIfGhost := cbxIgnoreIfGhost.Checked;
379 procedure TfrmSetting.cbxUsePortClick(Sender: TObject);
381 const Mes = '
\8f]
\97\88\82Ì
\95û
\96@
\82ð
\91I
\91ð
\82µ
\82½
\8fê
\8d\87\81ASSTP
\82ð
\8eó
\90M
\82Å
\82«
\82é
\83S
\81[
\83X
\83g
\82Í'+
382 '
\83\89\83\93\83_
\83\80\82È
\88ê
\91Ì
\82¾
\82¯
\82Æ
\82È
\82è
\81AIfGhost
\82ª
\88ê
\90Ø
\8eg
\97p
\82Å
\82«
\82È
\82
\82È
\82è
\82Ü
\82·
\81B';
384 if cbxUsePort.Checked then begin
385 Re := MessageDlg(Mes, mtWarning, mbOkCancel, 0);
386 if Re = mrCancel then cbxUsePort.Checked := false;
388 cbxPort.Enabled := cbxUsePort.Checked;
389 Pref.UsePort := cbxUsePort.Checked;
392 procedure TfrmSetting.cbxCanAutoAddClick(Sender: TObject);
394 SelChPref.CanAutoAdd := cbxCanAutoAdd.Checked;
397 procedure TfrmSetting.edtProxyPortKeyPress(Sender: TObject; var Key: Char);
399 if not(Key in ['0'..'9']) then Key := Char(0);
402 procedure TfrmSetting.cbxWarnPostClick(Sender: TObject);
404 SelChPref.WarnPost := cbxWarnPost.Checked;
407 procedure TfrmSetting.ctvBottleNodeChecked(Sender: TObject;
408 Node: TCPCConfigItemNode);
410 //ShowMessage(ctvBottle.GetFullKeyPath(Node));
413 procedure TfrmSetting.ctvBottleNodeChecking(Sender: TObject;
414 Node: TCPCConfigItemNode; var Allow: Boolean);
416 if Node.KeyName = 'IgnoreBottle' then begin
417 MessageDlg('
\82±
\82Ì
\8b@
\94\
\82Í
\8eÀ
\91\95\82³
\82ê
\82Ä
\82¢
\82Ü
\82¹
\82ñ', mtError, [mbOk], 0);