OSDN Git Service

Use Plugins.pas instead of SppTypes.pas
[winbottle/winbottle.git] / bottleclient / SettingForm.pas
1 unit SettingForm;
2
3 interface
4
5 uses
6   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7   ComCtrls, StdCtrls, ExtCtrls, BottleDef, Spin,
8   CPCConfigTreeView, ColorSettingFrame, BottleChainListFrame, SakuraSeekerInstance,
9   ImgList, StrListEditor, SppList, Plugins;
10
11 type
12   TfrmSetting = class(TForm)
13     PageControl: TPageControl;
14     btnClose: TButton;
15     tstGeneral: TTabSheet;
16     tstColor: TTabSheet;
17     tstKeys: TTabSheet;
18     rgpWhenReturn: TRadioGroup;
19     rgpWhenShiftReturn: TRadioGroup;
20     rgpWhenCtrlReturn: TRadioGroup;
21     memDefaultScript: TMemo;
22     lblDefaultScript: TLabel;
23     grpLocalConfirm: TGroupBox;
24     cbxIgnoreTimeCritical: TCheckBox;
25     tstReceive: TTabSheet;
26     rgpTabPosition: TRadioGroup;
27     OpenDialog: TOpenDialog;
28     spnWaitScriptEnd: TSpinEdit;
29     lblWaitScriptEnd: TLabel;
30     cbxNoSendGhostList: TCheckBox;
31     cbxConfirmOnExit: TCheckBox;
32     ctvBottle: TCPCConfigTreeView;
33     lblGhostDropDownCount: TLabel;
34     spnGhostDropDownCount: TSpinEdit;
35     gbxColor: TGroupBox;
36     frmColorSetting: TfrmColorSetting;
37     tstRule: TTabSheet;
38     frmRuleList: TfrmBottleChainList;
39     tstDetailed: TTabSheet;
40     lblFMOName: TLabel;
41     memFMOName: TMemo;
42     grpProxy: TGroupBox;
43     lblProxyAddress: TLabel;
44     lblProxyPort: TLabel;
45     edtProxyAddress: TEdit;
46     edtProxyPort: TEdit;
47     cbxUseHttpProxy: TCheckBox;
48     tstChannel: TTabSheet;
49     lblAutoJoinChannels: TLabel;
50     memAutoJoinChannels: TMemo;
51     cbxAutoStart: TCheckBox;
52     btnUseCurrentJoinChannels: TButton;
53     Label6: TLabel;
54     ImageList: TImageList;
55     cbxShowRuler: TCheckBox;
56     tstSurfacePreview: TTabSheet;
57     lblSurfacePreview: TLabel;
58     lvwPluginList: TListView;
59     lblPluginList: TLabel;
60     ctvSurfacePreview: TCPCConfigTreeView;
61     btnVisibleGhosts: TButton;
62     cbxHideGhosts: TCheckBox;
63     cbxNoExtraSSTPHeaders: TCheckBox;
64     lblLUID: TLabel;
65     edtLUID: TEdit;
66     procedure FormClose(Sender: TObject; var Action: TCloseAction);
67     procedure edtProxyPortKeyPress(Sender: TObject; var Key: Char);
68     procedure ctvBottleNodeChecked(Sender: TObject;
69       Node: TCPCConfigItemNode);
70     procedure ctvBottleNodeChecking(Sender: TObject;
71       Node: TCPCConfigItemNode; var Allow: Boolean);
72     procedure tstRuleShow(Sender: TObject);
73     procedure btnUseCurrentJoinChannelsClick(Sender: TObject);
74     procedure btnVisibleGhostsClick(Sender: TObject);
75     procedure lvwPluginListDblClick(Sender: TObject);
76     procedure edtLUIDEnter(Sender: TObject);
77     procedure edtLUIDExit(Sender: TObject);
78   private
79     { Private \90é\8c¾ }
80     FOldLUID: String;
81   public
82     { Public \90é\8c¾ }
83     procedure Execute;
84   end;
85
86 var
87   frmSetting: TfrmSetting;
88
89 const
90   DefaultNode = -1;
91   ChannelDefaultGhost = '(\83`\83\83\83\93\83l\83\8b\90\84\8f§\83S\81[\83X\83g)';
92   CheckedBottle = 22;
93   UnCheckedBottle = 17;
94
95 implementation
96
97 {$R *.DFM}
98
99 procedure TfrmSetting.Execute;
100 var i: integer;
101     Node: TCPCGroupNode;
102 begin
103   PageControl.ActivePage := tstGeneral;
104   memDefaultScript.Text := Pref.DefaultScript;
105   cbxShowRuler.Checked := Pref.ShowRuler;
106   cbxIgnoreTimeCritical.Checked := Pref.IgnoreTimeCritical;
107   cbxNoSendGhostList.Checked := Pref.NoSendGhostList;
108   cbxConfirmOnExit.Checked := Pref.ConfirmOnExit;
109   //
110   with frmColorSetting do begin
111     Color['H'] := Pref.TalkColorH;
112     Color['U'] := Pref.TalkColorU;
113     Color['Synchro'] := Pref.TalkColorS;
114     Color['Tag'] := Pref.MarkUpColor;
115     Color['Meta'] := Pref.MetaWordColor;
116     Color['Error'] := Pref.MarkErrorColor;
117     Color['Background'] := Pref.BgColor;
118   end;
119   //
120   cbxAutoStart.Checked := Pref.AutoStart;
121   rgpTabPosition.ItemIndex := Ord(Pref.TabPosition);
122   spnGhostDropDownCount.Value := Pref.GhostDropDownCount;
123   try
124     with ctvBottle do begin
125       (GetNodeFromKeyPath('Arrive\NoTranslate') as TCPCCheckBoxNode).Checked := Pref.NoTranslate;
126       (GetNodeFromKeyPath('Arrive\NoDescript') as TCPCCheckBoxNode).Checked := Pref.NoDescript;
127       if Pref.NoTransUrl then
128         (GetNodeFromKeyPath('Arrive\UrlTag\NoSelection') as TCPCRadioNode).Check
129       else
130         (GetNodeFromKeyPath('Arrive\UrlTag\WithSelection') as TCPCRadioNode).Check;
131       (GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked := Pref.SilentWhenHidden;
132       (GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked := Pref.FixMessySurface;
133       (GetNodeFromKeyPath('Arrive\HUTagTo01Tag') as TCPCCheckBoxNode).Checked := Pref.HUTagTo01Tag;
134       (GetNodeFromKeyPath('Out\ResetIfGhostAfterSend') as TCPCCheckBoxNode).Checked := Pref.ResetIfGhostAfterSend;
135       (GetNodeFromKeyPath('Out\ClearAfterSend') as TCPCCheckBoxNode).Checked := Pref.ClearAfterSend;
136       (GetNodeFromKeyPath('Out\NeedConfirmBeforeSend') as TCPCCheckBoxNode).Checked := Pref.NeedConfirmBeforeSend;
137       (GetNodeFromKeyPath('Out\Confirm') as TCPCCheckBoxNode).Checked := not Pref.NoConfirm;
138       (GetNodeFromKeyPath('Out\Warn\ScopeChangeInSynchronize') as TCPCCheckBoxNode).Checked := Pref.WarnScopeChangeInSynchronize;
139       (GetNodeFromKeyPath('Out\Warn\YenTNotExist') as TCPCCheckBoxNode).Checked := Pref.WarnYenTNotExist;
140     end;
141   except
142     on E: Exception do ShowMessage(E.Message);
143   end;
144   //cbxIgnoreFrequentYenS.Checked := Pref.IgnoreFrequentYenS;
145   spnWaitScriptEnd.Value := Pref.WaitScriptEnd;
146   //
147   rgpWhenReturn.ItemIndex := Ord(Pref.WhenReturn);
148   rgpWhenShiftReturn.ItemIndex := Ord(Pref.WhenShiftReturn);
149   rgpWhenCtrlReturn.ItemIndex := Ord(Pref.WhenCtrlReturn);
150   //
151   cbxUseHttpProxy.Checked := Pref.UseHttpProxy;
152   edtProxyAddress.Text := Pref.ProxyAddress;
153   edtProxyPort.Text := IntToStr(Pref.ProxyPort);
154   edtLUID.Text := Pref.LUID;
155   //
156   memFMOName.Lines := Pref.FMOName;
157   cbxHideGhosts.Checked := Pref.HideGhosts;
158   memAutoJoinChannels.Lines := Pref.AutoJoinChannels;
159   cbxNoExtraSSTPHeaders.Checked := Pref.NoExtraSSTPHeaders;
160   //
161   with ctvSurfacePreview do
162   begin
163     (GetNodeFromKeyPath('OnHint\DoPreview') as TCPCCheckBoxNode).Checked := Pref.SurfacePreviewOnHint;
164     (GetNodeFromKeyPath('OnScriptPoint\DoPreview') as TCPCCheckBoxNode).Checked := Pref.SurfacePreviewOnScriptPoint;
165     Node := GetNodeFromKeyPath('OnScriptPoint\Position') as TCPCGroupNode;
166     (Node.Item[Ord(Pref.SurfacePreviewOnScriptPointPosition)] as TCPCRadioNode).Check;
167   end;
168   for i := 0 to Spps.Count-1 do
169   begin
170     with lvwPluginList.Items.Add do
171     begin
172       Caption := ExtractFileName(Spps.SppItem[i].ModuleName);
173       SubItems.Add(Spps.SppItem[i].ModuleName);
174     end;
175   end;
176   //
177   ShowModal;
178 end;
179
180 procedure TfrmSetting.FormClose(Sender: TObject; var Action: TCloseAction);
181 var i: integer;
182     Node: TCPCGroupNode;
183 begin
184   Pref.DefaultScript := memDefaultScript.Text;
185   Pref.ShowRuler := cbxShowRuler.Checked;
186   Pref.IgnoreTimeCritical := cbxIgnoreTimeCritical.Checked;
187   Pref.NoSendGhostList := cbxNoSendGhostList.Checked;
188   Pref.ConfirmOnExit := cbxConfirmOnExit.Checked;
189   //
190   with frmColorSetting do begin
191     Pref.TalkColorH := Color['H'];
192     Pref.TalkColorU := Color['U'];
193     Pref.TalkColorS := Color['Synchro'];
194     Pref.MarkUpColor := Color['Tag'];
195     Pref.MetaWordColor := Color['Meta'];
196     Pref.MarkErrorColor := Color['Error'];
197     Pref.BgColor := Color['Background'];
198   end;
199   //
200   Pref.AutoStart := cbxAutoStart.Checked;
201   Pref.TabPosition := TTabPosition(rgpTabPosition.ItemIndex);
202   Pref.GhostDropDownCount := spnGhostDropDownCount.Value;
203   try
204     with ctvBottle do begin
205       Pref.NoTranslate := (GetNodeFromKeyPath('Arrive\NoTranslate') as TCPCCheckBoxNode).Checked;
206       Pref.NoDescript := (GetNodeFromKeyPath('Arrive\NoDescript') as TCPCCheckBoxNode).Checked;
207       Pref.NoTransUrl := (GetNodeFromKeyPath('Arrive\UrlTag\NoSelection') as TCPCRadioNode).Checked;
208       Pref.SilentWhenHidden := (GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked;
209       Pref.FixMessySurface := (GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked;
210       Pref.HUTagTo01Tag := (GetNodeFromKeyPath('Arrive\HUTagTo01Tag') as TCPCCheckBoxNode).Checked;
211       Pref.ResetIfGhostAfterSend := (GetNodeFromKeyPath('Out\ResetIfGhostAfterSend') as TCPCCheckBoxNode).Checked;
212       Pref.ClearAfterSend := (GetNodeFromKeyPath('Out\ClearAfterSend') as TCPCCheckBoxNode).Checked;
213       Pref.NeedConfirmBeforeSend := (GetNodeFromKeyPath('Out\NeedConfirmBeforeSend') as TCPCCheckBoxNode).Checked;
214       Pref.NoConfirm := not (GetNodeFromKeyPath('Out\Confirm') as TCPCCheckBoxNode).Checked;
215       Pref.WarnYenTNotExist := (GetNodeFromKeyPath('Out\Warn\YenTNotExist') as TCPCCheckBoxNode).Checked;
216       Pref.WarnScopeChangeInSynchronize := (GetNodeFromKeyPath('Out\Warn\ScopeChangeInSynchronize') as TCPCCheckBoxNode).Checked;
217     end;
218   except
219     on E: Exception do ShowMessage(E.Message);
220   end;
221   //Pref.IgnoreFrequentYenS := cbxIgnoreFrequentYenS.Checked;
222   Pref.WaitScriptEnd := spnWaitScriptEnd.Value;
223   //
224   Pref.WhenReturn := TReturnKeyFunction(rgpWhenReturn.ItemIndex);
225   Pref.WhenShiftReturn := TReturnKeyFunction(rgpWhenShiftReturn.ItemIndex);
226   Pref.WhenCtrlReturn := TReturnKeyFunction(rgpWhenCtrlReturn.ItemIndex);
227   //
228   Pref.UseHttpProxy := cbxUseHttpProxy.Checked;
229   Pref.ProxyAddress := edtProxyAddress.Text;
230   Pref.ProxyPort := StrToInt(edtProxyPort.Text);
231   Pref.LUID := edtLUID.Text;
232   //
233   Pref.FMOName := memFMOName.Lines;
234   SakuraSeeker.FileMappingTarget := Pref.FMOName;
235   Pref.HideGhosts := cbxHideGhosts.Checked;
236   Pref.NoExtraSSTPHeaders := cbxNoExtraSSTPHeaders.Checked;
237   //
238   Pref.AutoJoinChannels := memAutoJoinChannels.Lines;
239   //
240   with ctvSurfacePreview do
241   begin
242     Pref.SurfacePreviewOnHint := (GetNodeFromKeyPath('OnHint\DoPreview') as TCPCCheckBoxNode).Checked;
243     Pref.SurfacePreviewOnScriptPoint := (GetNodeFromKeyPath('OnScriptPoint\DoPreview') as TCPCCheckBoxNode).Checked;
244     Node := GetNodeFromKeyPath('OnScriptPoint\Position') as TCPCGroupNode;
245     for i := 0 to Node.Count-1 do
246       if (Node.Item[i] as TCPCRadioNode).Checked then
247         Pref.SurfacePreviewOnScriptPointPosition := TSurfacePreviewOnScriptPointPosition(i);
248   end;
249 end;
250
251 procedure TfrmSetting.edtProxyPortKeyPress(Sender: TObject; var Key: Char);
252 begin
253   if not(Key in ['0'..'9']) then Key := Char(0);
254 end;
255
256 procedure TfrmSetting.ctvBottleNodeChecked(Sender: TObject;
257   Node: TCPCConfigItemNode);
258 begin
259   //ShowMessage(ctvBottle.GetFullKeyPath(Node));
260 end;
261
262 procedure TfrmSetting.ctvBottleNodeChecking(Sender: TObject;
263   Node: TCPCConfigItemNode; var Allow: Boolean);
264 begin
265   if Node.KeyName = 'IgnoreBottle' then begin
266     MessageDlg('\82±\82Ì\8b@\94\\82Í\8eÀ\91\95\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ', mtError, [mbOk], 0);
267     Allow := false;
268   end;
269 end;
270
271 procedure TfrmSetting.tstRuleShow(Sender: TObject);
272 begin
273   frmRuleList.UpdateDisplay;
274 end;
275
276 procedure TfrmSetting.btnUseCurrentJoinChannelsClick(Sender: TObject);
277 begin
278   memAutoJoinChannels.Lines := JoinChannels;
279 end;
280
281 procedure TfrmSetting.btnVisibleGhostsClick(Sender: TObject);
282 var i: integer;
283     FullGhosts: TStringList;
284 begin
285   FullGhosts := TStringList.Create;
286   SakuraSeeker.BeginDetect;
287   try
288     for i := 0 to SakuraSeeker.Count-1 do
289       FullGhosts.Add(SakuraSeeker[i].Name);
290     StrListEdit(Pref.VisibleGhostsList, '\83S\81[\83X\83g\82ð\8ew\92è', true, FullGhosts);
291   finally
292     FullGhosts.Free;
293   end;
294 end;
295
296 procedure TfrmSetting.lvwPluginListDblClick(Sender: TObject);
297 var Index: integer;
298 begin
299   if lvwPluginList.Selected = nil then
300     Exit;
301   Index := lvwPluginList.Selected.Index;
302   if pfConfigure in Spps.SppItem[Index].PluginFunctions then
303     Spps.SppItem[Index].Configure
304   else
305     ShowMessage('\92Ç\89Á\82Ì\90Ý\92è\8d\80\96Ú\82Í\82 \82è\82Ü\82¹\82ñ\81B');
306 end;
307
308 procedure TfrmSetting.edtLUIDEnter(Sender: TObject);
309 begin
310   FOldLUID := edtLUID.Text;
311 end;
312
313 procedure TfrmSetting.edtLUIDExit(Sender: TObject);
314 var TmpLUID: String;
315     i: integer;
316     Err: boolean;
317 begin
318   TmpLUID := edtLUID.Text;
319   i := 1;
320   Err := false;
321   if Length(TmpLUID) <> 82 then
322     Err := true
323   else
324     while i <= Length(TmpLUID) do
325     begin
326       if not (TmpLUID[i] in ['0'..'9', 'a'..'z', 'A'..'Z', '.', ',']) then
327       begin
328         Err := true;
329         Break;
330       end;
331       Inc(i);
332     end;
333   if Err then
334   begin
335     ShowMessage('LUID\82Ì\93à\97e\82ª\95s\90³\82Å\82·');
336     edtLUID.Text := FOldLUID;
337   end;
338 end;
339
340 end.