Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, BottleDef, Spin,
CPCConfigTreeView, ColorSettingFrame, BottleChainListFrame, SakuraSeekerInstance,
- ImgList, StrListEditor, SppList, Plugins;
+ ImgList, StrListEditor, SppList, Plugins, Clipbrd, SsPlayTime, StrUtils,
+ SpecialCharEditor;
type
TfrmSetting = class(TForm)
rgpWhenCtrlReturn: TRadioGroup;
memDefaultScript: TMemo;
lblDefaultScript: TLabel;
- grpLocalConfirm: TGroupBox;
- cbxIgnoreTimeCritical: TCheckBox;
tstReceive: TTabSheet;
OpenDialog: TOpenDialog;
spnWaitScriptEnd: TSpinEdit;
tstDetailed: TTabSheet;
lblFMOName: TLabel;
memFMOName: TMemo;
- grpProxy: TGroupBox;
- lblProxyAddress: TLabel;
- lblProxyPort: TLabel;
- edtProxyAddress: TEdit;
- edtProxyPort: TEdit;
- cbxUseHttpProxy: TCheckBox;
tstChannel: TTabSheet;
lblAutoJoinChannels: TLabel;
memAutoJoinChannels: TMemo;
cbxAutoStart: TCheckBox;
btnUseCurrentJoinChannels: TButton;
- Label6: TLabel;
ImageList: TImageList;
tstSurfacePreview: TTabSheet;
lblSurfacePreview: TLabel;
rgpTabPosition: TRadioGroup;
lblGhostDropDownCount: TLabel;
spnGhostDropDownCount: TSpinEdit;
+ cbxIgnoreTimeCritical: TCheckBox;
+ cbxAutoClip: TCheckBox;
+ btnCopyLUID: TButton;
+ tvwCategory: TTreeView;
+ Label1: TLabel;
+ pnlHeading: TPanel;
+ cbxConfirmOnTabClose: TCheckBox;
+ tstConnection: TTabSheet;
+ grpProxy: TGroupBox;
+ lblProxyAddress: TLabel;
+ lblProxyPort: TLabel;
+ Label6: TLabel;
+ edtProxyAddress: TEdit;
+ edtProxyPort: TEdit;
+ cbxUseHttpProxy: TCheckBox;
+ spnReconnectWait: TSpinEdit;
+ lblReconnectWait: TLabel;
+ lblPartialConfirmFormat: TLabel;
+ edtPartialConfirmFormat: TEdit;
+ cbxAutoPartialConfirm: TCheckBox;
+ tstPlayTime: TTabSheet;
+ grpPlayTimeParams: TGroupBox;
+ lblPlayTimeProfile: TLabel;
+ cbxPlayTimeProfile: TComboBox;
+ spnCostDBChar: TSpinEdit;
+ spnCostWait: TSpinEdit;
+ spnCostSurface: TSpinEdit;
+ spnCostChar: TSpinEdit;
+ spnCostQuickChar: TSpinEdit;
+ lblCostWait: TLabel;
+ lblCostSurface: TLabel;
+ lblCostChar: TLabel;
+ lblCostDBChar: TLabel;
+ lblCostQuickChar: TLabel;
+ btnSavePlayTimeProfile: TButton;
+ lvwCostSpecials: TListView;
+ lblCostSpecials: TLabel;
+ btnPlaySpecialAdd: TButton;
+ btnPlaySpecialDelete: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure edtProxyPortKeyPress(Sender: TObject; var Key: Char);
procedure ctvBottleNodeChecked(Sender: TObject;
procedure lvwPluginListDblClick(Sender: TObject);
procedure edtLUIDEnter(Sender: TObject);
procedure edtLUIDExit(Sender: TObject);
+ procedure btnCopyLUIDClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure tvwCategoryChange(Sender: TObject; Node: TTreeNode);
+ procedure tvwCategoryMouseMove(Sender: TObject; Shift: TShiftState; X,
+ Y: Integer);
+ procedure cbxPlayTimeProfileChange(Sender: TObject);
+ procedure btnSavePlayTimeProfileClick(Sender: TObject);
+ procedure spnCostWaitChange(Sender: TObject);
+ procedure btnPlaySpecialAddClick(Sender: TObject);
+ procedure btnPlaySpecialDeleteClick(Sender: TObject);
+ procedure lvwCostSpecialsDblClick(Sender: TObject);
private
{ Private \90é\8c¾ }
FOldLUID: String;
+ FSpinUpdateFlag: boolean;
+ procedure LoadPlayTimeProfiles;
+ procedure PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
+ procedure SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
+ procedure UpdateSpecialChars;
public
{ Public \90é\8c¾ }
procedure Execute;
{$R *.DFM}
+const
+ SettingIcon = 4;
+
procedure TfrmSetting.Execute;
var i: integer;
Node: TCPCGroupNode;
cbxShowRuler.Checked := Pref.ShowRuler;
cbxIgnoreTimeCritical.Checked := Pref.IgnoreTimeCritical;
cbxNoSendGhostList.Checked := Pref.NoSendGhostList;
+ edtPartialConfirmFormat.Text := Pref.PartialConfirmFormat;
+ cbxAutoPartialConfirm.Checked := Pref.AutoPartialConfirm;
cbxConfirmOnExit.Checked := Pref.ConfirmOnExit;
+ cbxConfirmOnTabClose.Checked := Pref.ConfirmOnTabClose;
+ cbxAutoClip.Checked := Pref.AutoClip;
//
with frmColorSetting do begin
Color['H'] := Pref.TalkColorH;
Color['Background'] := Pref.BgColor;
end;
//
+ cbxPlayTimeProfile.Items.Clear;
+ cbxPlayTimeProfile.Items.Add(Pref.PlayTimeParams.ProfileName);
+ cbxPlayTimeProfile.ItemIndex := 0;
+ LoadPlayTimeProfiles;
+ PlayTimeParamsToSpinControl(Pref.PlayTimeParams);
+ UpdateSpecialChars;
+ //
cbxAutoStart.Checked := Pref.AutoStart;
rgpTabPosition.ItemIndex := Ord(Pref.TabPosition);
spnGhostDropDownCount.Value := Pref.GhostDropDownCount;
cbxUseHttpProxy.Checked := Pref.UseHttpProxy;
edtProxyAddress.Text := Pref.ProxyAddress;
edtProxyPort.Text := IntToStr(Pref.ProxyPort);
+ //
+ spnReconnectWait.Value := Pref.ReconnectWait;
+ //
edtLUID.Text := Pref.LUID;
//
memFMOName.Lines := Pref.FMOName;
Pref.ShowRuler := cbxShowRuler.Checked;
Pref.IgnoreTimeCritical := cbxIgnoreTimeCritical.Checked;
Pref.NoSendGhostList := cbxNoSendGhostList.Checked;
+ Pref.PartialConfirmFormat := edtPartialConfirmFormat.Text;
+ Pref.AutoPartialConfirm := cbxAutoPartialConfirm.Checked;
Pref.ConfirmOnExit := cbxConfirmOnExit.Checked;
+ Pref.ConfirmOnTabClose := cbxConfirmOnTabClose.Checked;
+ Pref.AutoClip := cbxAutoClip.Checked;
//
with frmColorSetting do begin
Pref.TalkColorH := Color['H'];
Pref.BgColor := Color['Background'];
end;
//
+ Pref.PlayTimeParams.ProfileName := cbxPlayTimeProfile.Text;
+ SpinControlToPlayTimeParams(Pref.PlayTimeParams);
+ //
Pref.AutoStart := cbxAutoStart.Checked;
Pref.TabPosition := TTabPosition(rgpTabPosition.ItemIndex);
Pref.GhostDropDownCount := spnGhostDropDownCount.Value;
Pref.UseHttpProxy := cbxUseHttpProxy.Checked;
Pref.ProxyAddress := edtProxyAddress.Text;
Pref.ProxyPort := StrToInt(edtProxyPort.Text);
+ //
+ Pref.ReconnectWait := spnReconnectWait.Value;
+ //
Pref.LUID := edtLUID.Text;
//
Pref.FMOName := memFMOName.Lines;
end;
end;
+procedure TfrmSetting.btnCopyLUIDClick(Sender: TObject);
+begin
+ Clipboard.SetTextBuf(PChar(edtLUID.Text));
+end;
+
+procedure TfrmSetting.FormCreate(Sender: TObject);
+var
+ i: integer;
+ Cap: String;
+ Node: TTreeNode;
+begin
+ for i := 0 to PageControl.PageCount-1 do
+ begin
+ Cap := PageControl.Pages[i].Caption;
+ if Pos(':', Cap) > 0 then
+ Cap := Copy(Cap, 1, Pos(':', Cap)-1);
+ Node := tvwCategory.Items.Add(nil, Cap);
+ Node.ImageIndex := -1;
+ Node.SelectedIndex := SettingIcon;
+ end;
+ tvwCategoryChange(Self, tvwCategory.Items[0]);
+ tvwCategory.Items[0].Selected := true;
+end;
+
+procedure TfrmSetting.tvwCategoryChange(Sender: TObject; Node: TTreeNode);
+begin
+ PageControl.ActivePageIndex := Node.Index;
+ pnlHeading.Caption := PageControl.ActivePage.Caption;
+end;
+
+procedure TfrmSetting.tvwCategoryMouseMove(Sender: TObject;
+ Shift: TShiftState; X, Y: Integer);
+var
+ Node: TTreeNode;
+ NewHint: String;
+ CPos: TPoint;
+begin
+ Node := tvwCategory.GetNodeAt(X, Y);
+ if Node <> nil then
+ begin
+ NewHint := PageControl.Pages[Node.Index].Caption;
+ if tvwCategory.Hint <> NewHint then
+ begin
+ tvwCategory.Hint := NewHint;
+ GetCursorPos(CPos);
+ Application.ActivateHint(CPos);
+ end;
+ end else
+ begin
+ tvwCategory.Hint := '';
+ Application.HideHint;
+ end;
+end;
+
+procedure TfrmSetting.PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
+begin
+ FSpinUpdateFlag := true;
+ with Params do
+ begin
+ spnCostWait.Value := CostWait;
+ spnCostSurface.Value := CostSurface;
+ spnCostChar.Value := CostChar;
+ spnCostDBChar.Value := CostDBChar;
+ spnCostQuickChar.Value := CostQuickChar;
+ lvwCostSpecials.Items.Clear;
+ end;
+ FSpinUpdateFlag := false;
+end;
+
+procedure TfrmSetting.SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
+begin
+ with Params do
+ begin
+ CostWait := spnCostWait.Value;
+ CostSurface := spnCostSurface.Value;
+ CostChar := spnCostChar.Value;
+ CostDBChar := spnCostDBChar.Value;
+ CostQuickChar := spnCostQuickChar.Value;
+ end;
+end;
+
+
+procedure TfrmSetting.LoadPlayTimeProfiles;
+var i: integer;
+ F: TSearchRec;
+ Path, Item: String;
+begin
+ Path := ExtractFilePath(Application.ExeName);
+ i := FindFirst(Path + 'playtime\*.txt', 0, F);
+ if i = 0 then begin
+ repeat
+ Item := ChangeFileExt(F.Name, '');
+ if cbxPlayTimeProfile.Items.IndexOf(Item) < 0 then
+ cbxPlayTimeProfile.Items.Add(ChangeFileExt(F.Name, ''));
+ i := FindNext(F);
+ until i <> 0;
+ end;
+ FindClose(F);
+end;
+
+procedure TfrmSetting.cbxPlayTimeProfileChange(Sender: TObject);
+var
+ Params: TSsPlayTimeParams;
+ Strs: TStringList;
+ Path, ProName: String;
+begin
+ try
+ Strs := TStringList.Create;
+ ProName := cbxPlayTimeProfile.Text;
+ try
+ Path := ExtractFilePath(Application.ExeName) + 'playtime\';
+ Strs.LoadFromFile(Path + ProName + '.txt');
+ Params := StringToComponent(Strs.Text) as TSsPlayTimeParams;
+ try
+ PlayTimeParamsToSpinControl(Params);
+ Pref.PlayTimeParams.Assign(Params);
+ UpdateSpecialChars;
+ finally
+ Params.Free;
+ end;
+ finally
+ Strs.Free;
+ end;
+ with cbxPlayTimeProfile do
+ begin
+ Items.Clear;
+ LoadPlayTimeProfiles;
+ ItemIndex := Items.IndexOf(ProName);
+ end;
+ except
+ ; // Do nothing
+ end;
+end;
+
+procedure TfrmSetting.btnSavePlayTimeProfileClick(Sender: TObject);
+var
+ ProfileName, Path, FileName: String;
+ Strs: TStringList;
+begin
+ ProfileName := cbxPlayTimeProfile.Text;
+ if InputQuery('\83v\83\8d\83t\83@\83C\83\8b\96¼', '\95Û\91¶\82·\82é\83v\83\8d\83t\83@\83C\83\8b\96¼', ProfileName) then
+ begin
+ try
+ Path := ExtractFilePath(Application.ExeName) + 'playtime\';
+ FileName := Path + ProfileName + '.txt';
+ if FileExists(FileName) then
+ if MessageDlg(Format('\83v\83\8d\83t\83@\83C\83\8b"%s"\82ð\8fã\8f\91\82«\82µ\82Ü\82·', [ProfileName]),
+ mtConfirmation, mbOkCancel, 0) = mrCancel then
+ Exit;
+ Strs := TStringList.Create;
+ try
+ SpinControlToPlayTimeParams(Pref.PlayTimeParams);
+ Pref.PlayTimeParams.ProfileName := ProfileName;
+ Strs.Text := ComponentToString(Pref.PlayTimeParams);
+ Strs.SaveToFile(FileName);
+ finally
+ Strs.Free;
+ end;
+ with cbxPlayTimeProfile do
+ begin
+ Items.Clear;
+ Items.Add(ProfileName);
+ ItemIndex := 0;
+ LoadPlayTimeProfiles;
+ end;
+ except
+ on E: Exception do
+ ShowMessage('\95Û\91¶\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B' + E.Message);
+ end;
+ end;
+end;
+
+procedure TfrmSetting.spnCostWaitChange(Sender: TObject);
+var
+ ProName: String;
+const
+ Modified = '(\95Ï\8dX\8dÏ\82Ý)';
+begin
+ if FSpinUpdateFlag then
+ Exit;
+ if RightBStr(cbxPlayTimeProfile.Text, Length(Modified)) <> Modified then
+ begin
+ ProName := Format('%s%s', [cbxPlayTimeProfile.Text, Modified]);
+ with cbxPlayTimeProfile do
+ begin
+ Items.Clear;
+ Items.Add(ProName);
+ ItemIndex := 0;
+ LoadPlayTimeProfiles;
+ end;
+ end;
+end;
+
+procedure TfrmSetting.btnPlaySpecialAddClick(Sender: TObject);
+var
+ Item: TListItem;
+ SPChar: TSsPlayTimeSpecialChar;
+begin
+ Application.CreateForm(TfrmSpecialCharEditor, frmSpecialCharEditor);
+ try
+ with frmSpecialCharEditor do
+ begin
+ SpecialChar := '';
+ Cost := 50;
+ if Execute then
+ begin
+ SPChar := Pref.PlayTimeParams.SpecialChars.Add as TSsPlayTimeSpecialChar;
+ SPChar.Char := SpecialChar;
+ SPChar.Wait := Cost;
+ Item := lvwCostSpecials.Items.Add;
+ Item.Caption := SPChar.DisplayChar;
+ Item.SubItems.Add(IntToStr(Cost));
+ spnCostWaitChange(Self);
+ end;
+ end;
+ finally
+ frmSpecialCharEditor.Release;
+ end;
+end;
+
+procedure TfrmSetting.btnPlaySpecialDeleteClick(Sender: TObject);
+begin
+ with lvwCostSpecials do
+ if Selected <> nil then
+ begin
+ Pref.PlayTimeParams.SpecialChars.Delete(Selected.Index);
+ Selected.Delete;
+ spnCostWaitChange(Self);
+ end;
+end;
+
+procedure TfrmSetting.lvwCostSpecialsDblClick(Sender: TObject);
+var
+ Item: TListItem;
+ SPChar: TSsPlayTimeSpecialChar;
+begin
+ with lvwCostSpecials do
+ begin
+ Item := Selected;
+ if Item <> nil then
+ begin
+ Application.CreateForm(TfrmSpecialCharEditor, frmSpecialCharEditor);
+ try
+ with frmSpecialCharEditor do
+ begin
+ SPChar := Pref.PlayTimeParams.SpecialChars.Items[Item.Index] as TSsPlayTimeSpecialChar;
+ SpecialChar := SPChar.Char;
+ Cost := SPChar.Wait;
+ if Execute then
+ begin
+ SPChar.Char := SpecialChar;
+ SPChar.Wait := Cost;
+ Item.Caption := SPChar.DisplayChar;
+ Item.SubItems[0] := IntToStr(Cost);
+ spnCostWaitChange(Self);
+ end;
+ end;
+ finally
+ frmSpecialCharEditor.Release;
+ end;
+ end;
+ end;
+end;
+
+procedure TfrmSetting.UpdateSpecialChars;
+var
+ i: integer;
+ Item: TListItem;
+ SPChar: TSsPlayTimeSpecialChar;
+begin
+ with lvwCostSpecials do
+ begin
+ Items.Clear;
+ for i := 0 to Pref.PlayTimeParams.SpecialChars.Count-1 do
+ begin
+ SPChar := Pref.PlayTimeParams.SpecialChars.Items[i] as TSsPlayTimeSpecialChar;
+ Item := Items.Add;
+ Item.Caption := SPChar.DisplayChar;
+ Item.SubItems.Add(IntToStr(SPChar.Wait));
+ end;
+ end;
+end;
+
end.