unit SettingForm;
+{
+ \90Ý\92è\89æ\96Ê\81B\82»\82ê\96¢\96\9e\82Å\82à\82»\82ê\88È\8fã\82Å\82à\82È\82¢\81B
+ Pref\83I\83u\83W\83F\83N\83g\82ð\8eÀ\8dÛ\82É\91\80\8dì\82·\82é\81B
+}
+
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ComCtrls, StdCtrls, ExtCtrls, BottleDef, EllipsEd, Spin,
- CPCConfigTreeView, ColorSettingFrame;
+ ComCtrls, StdCtrls, ExtCtrls, BottleDef, Spin,
+ CPCConfigTreeView, ColorSettingFrame, BottleChainListFrame, SakuraSeekerInstance,
+ ImgList, StrListEditor, SppList, Plugins, Clipbrd, SsPlayTime, StrUtils,
+ SpecialCharEditor;
type
TfrmSetting = class(TForm)
PageControl: TPageControl;
btnClose: TButton;
tstGeneral: TTabSheet;
- tstColor: TTabSheet;
+ tstDisplay: TTabSheet;
tstKeys: TTabSheet;
rgpWhenReturn: TRadioGroup;
rgpWhenShiftReturn: TRadioGroup;
rgpWhenCtrlReturn: TRadioGroup;
memDefaultScript: TMemo;
lblDefaultScript: TLabel;
- grpLocalConfirm: TGroupBox;
- cbxColorScript: TCheckBox;
- trkColorTimeLag: TTrackBar;
- trkColorSpeed: TTrackBar;
- cbxIgnoreTimeCritical: TCheckBox;
- lblColorTimeLag: TLabel;
- lblColorSpeed: TLabel;
tstReceive: TTabSheet;
- cbxAutoStart: TCheckBox;
- tstChannel: TTabSheet;
- tvwChannels: TTreeView;
- rgpUseChannelPrefs: TRadioGroup;
- pnlChannelOpt: TPanel;
- edtSoundFile: TEllipsesEdit;
- cbxSoundArrived: TCheckBox;
- rgpTargetGhost: TGroupBox;
- cbxIgnoreIfGhost: TCheckBox;
- cbxTargetGhost: TComboBox;
- rgpTabPosition: TRadioGroup;
- cbxCanAutoAdd: TCheckBox;
OpenDialog: TOpenDialog;
spnWaitScriptEnd: TSpinEdit;
lblWaitScriptEnd: TLabel;
cbxNoSendGhostList: TCheckBox;
- tstProxy: TTabSheet;
- grpProxy: TGroupBox;
- cbxUseHttpProxy: TCheckBox;
- edtProxyAddress: TEdit;
- edtProxyPort: TEdit;
- lblProxyAddress: TLabel;
- lblProxyPort: TLabel;
- Label6: TLabel;
- cbxWarnPost: TCheckBox;
cbxConfirmOnExit: TCheckBox;
ctvBottle: TCPCConfigTreeView;
- lblGhostDropDownCount: TLabel;
- spnGhostDropDownCount: TSpinEdit;
gbxColor: TGroupBox;
frmColorSetting: TfrmColorSetting;
+ tstRule: TTabSheet;
+ frmRuleList: TfrmBottleChainList;
+ tstDetailed: TTabSheet;
+ lblFMOName: TLabel;
+ memFMOName: TMemo;
+ tstChannel: TTabSheet;
+ lblAutoJoinChannels: TLabel;
+ memAutoJoinChannels: TMemo;
+ cbxAutoStart: TCheckBox;
+ btnUseCurrentJoinChannels: TButton;
+ ImageList: TImageList;
+ tstSurfacePreview: TTabSheet;
+ lblSurfacePreview: TLabel;
+ lvwPluginList: TListView;
+ lblPluginList: TLabel;
+ ctvSurfacePreview: TCPCConfigTreeView;
+ btnVisibleGhosts: TButton;
+ cbxHideGhosts: TCheckBox;
+ cbxNoExtraSSTPHeaders: TCheckBox;
+ lblLUID: TLabel;
+ edtLUID: TEdit;
+ cbxShowRuler: TCheckBox;
+ 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 edtSoundFileButtonClick(Sender: TObject);
- procedure tvwChannelsCompare(Sender: TObject; Node1, Node2: TTreeNode;
- Data: Integer; var Compare: Integer);
- procedure tvwChannelsChange(Sender: TObject; Node: TTreeNode);
- procedure rgpUseChannelPrefsClick(Sender: TObject);
- procedure cbxSoundArrivedClick(Sender: TObject);
- procedure edtSoundFileChange(Sender: TObject);
- procedure cbxTargetGhostChange(Sender: TObject);
- procedure cbxIgnoreIfGhostClick(Sender: TObject);
- procedure cbxCanAutoAddClick(Sender: TObject);
procedure edtProxyPortKeyPress(Sender: TObject; var Key: Char);
- procedure cbxWarnPostClick(Sender: TObject);
procedure ctvBottleNodeChecked(Sender: TObject;
Node: TCPCConfigItemNode);
procedure ctvBottleNodeChecking(Sender: TObject;
Node: TCPCConfigItemNode; var Allow: Boolean);
+ procedure tstRuleShow(Sender: TObject);
+ procedure btnUseCurrentJoinChannelsClick(Sender: TObject);
+ procedure btnVisibleGhostsClick(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¾ }
- function SelChPref: TChannelPrefs;
- function BottleImage(ChPref: TChannelPrefs): integer;
+ FOldLUID: String;
+ FSpinUpdateFlag: boolean;
+ procedure LoadPlayTimeProfiles;
+ procedure PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
+ procedure SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
+ procedure UpdateSpecialChars;
public
{ Public \90é\8c¾ }
procedure Execute;
{$R *.DFM}
-uses MainForm;
+const
+ SettingIcon = 4;
procedure TfrmSetting.Execute;
var i: integer;
- Node: TTreeNode;
+ Node: TCPCGroupNode;
begin
PageControl.ActivePage := tstGeneral;
memDefaultScript.Text := Pref.DefaultScript;
+ 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;
//
- cbxColorScript.Checked := Pref.ColorScript;
- {colTalkColorH.Selected := Pref.TalkColorH;
- colTalkColorU.Selected := Pref.TalkColorU;
- colMarkUpColor.Selected := Pref.MarkUpColor;
- colMetaWordColor.Selected := Pref.MetaWordColor;
- colMarkErrorColor.Selected := Pref.MarkErrorColor;
- colBgColor.Selected := Pref.BgColor;}
with frmColorSetting do begin
Color['H'] := Pref.TalkColorH;
Color['U'] := Pref.TalkColorU;
- Color['Synchro'] := clBlack;
+ Color['Synchro'] := Pref.TalkColorS;
Color['Tag'] := Pref.MarkUpColor;
Color['Meta'] := Pref.MetaWordColor;
Color['Error'] := Pref.MarkErrorColor;
Color['Background'] := Pref.BgColor;
end;
- trkColorTimeLag.Position := Pref.ColorTimeLagValue;
- trkColorSpeed.Position := Pref.ColorSpeed;
+ //
+ 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;
- {
- cbxNoTranslate.Checked := Pref.NoTranslate;
- cbxNoDescript.Checked := Pref.NoDescript;
- cbxNoTransUrl.Checked := Pref.NoTransUrl;
- cbxSilentWhenHidden.Checked := Pref.SilentWhenHidden;
- }
try
with ctvBottle do begin
(GetNodeFromKeyPath('Arrive\NoTranslate') as TCPCCheckBoxNode).Checked := Pref.NoTranslate;
(GetNodeFromKeyPath('Arrive\UrlTag\WithSelection') as TCPCRadioNode).Check;
(GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked := Pref.SilentWhenHidden;
(GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked := Pref.FixMessySurface;
+ (GetNodeFromKeyPath('Arrive\HUTagTo01Tag') as TCPCCheckBoxNode).Checked := Pref.HUTagTo01Tag;
(GetNodeFromKeyPath('Out\ResetIfGhostAfterSend') as TCPCCheckBoxNode).Checked := Pref.ResetIfGhostAfterSend;
+ (GetNodeFromKeyPath('Out\ClearAfterSend') as TCPCCheckBoxNode).Checked := Pref.ClearAfterSend;
+ (GetNodeFromKeyPath('Out\NeedConfirmBeforeSend') as TCPCCheckBoxNode).Checked := Pref.NeedConfirmBeforeSend;
+ (GetNodeFromKeyPath('Out\Confirm') as TCPCCheckBoxNode).Checked := not Pref.NoConfirm;
+ (GetNodeFromKeyPath('Out\Warn\ScopeChangeInSynchronize') as TCPCCheckBoxNode).Checked := Pref.WarnScopeChangeInSynchronize;
+ (GetNodeFromKeyPath('Out\Warn\YenTNotExist') as TCPCCheckBoxNode).Checked := Pref.WarnYenTNotExist;
end;
except
on E: Exception do ShowMessage(E.Message);
rgpWhenReturn.ItemIndex := Ord(Pref.WhenReturn);
rgpWhenShiftReturn.ItemIndex := Ord(Pref.WhenShiftReturn);
rgpWhenCtrlReturn.ItemIndex := Ord(Pref.WhenCtrlReturn);
- //Channels
- tvwChannels.Items.Clear;
- Node := tvwChannels.Items.Add(nil, '\83f\83t\83H\83\8b\83g');
- Node.ImageIndex := 1;
- Node.SelectedIndex := 1;
- Node.Data := pointer(DefaultNode);
- for i := 0 to Pref.ChannelPrefCount-1 do begin
- Node := tvwChannels.Items.Add(nil, Pref.ChannelPrefIndex[i].ChannelName);
- Node.Data := pointer(i); //\96{\93\96\82Í\82â\82Á\82¿\82á\82¢\82¯\82È\82¢Int>Pointer\83L\83\83\83X\83g
- Node.ImageIndex := BottleImage(Pref.ChannelPrefIndex[i]);
- Node.SelectedIndex := BottleImage(Pref.ChannelPrefIndex[i]);
- end;
- cbxTargetGhost.Items.Clear;
- cbxTargetGhost.Items.Add(ChannelDefaultGhost);
- frmSender.SakuraSeeker.BeginDetect;
- for i := 0 to frmSender.SakuraSeeker.Count-1 do begin
- cbxTargetGhost.Items.Add(frmSender.SakuraSeeker[i].Name);
- end;
- rgpUseChannelPrefs.Enabled := false;
- rgpUseChannelPrefsClick(Self);
//
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;
+ cbxHideGhosts.Checked := Pref.HideGhosts;
+ memAutoJoinChannels.Lines := Pref.AutoJoinChannels;
+ cbxNoExtraSSTPHeaders.Checked := Pref.NoExtraSSTPHeaders;
+ //
+ with ctvSurfacePreview do
+ begin
+ (GetNodeFromKeyPath('OnHint\DoPreview') as TCPCCheckBoxNode).Checked := Pref.SurfacePreviewOnHint;
+ (GetNodeFromKeyPath('OnScriptPoint\DoPreview') as TCPCCheckBoxNode).Checked := Pref.SurfacePreviewOnScriptPoint;
+ Node := GetNodeFromKeyPath('OnScriptPoint\Position') as TCPCGroupNode;
+ (Node.Item[Ord(Pref.SurfacePreviewOnScriptPointPosition)] as TCPCRadioNode).Check;
+ end;
+ for i := 0 to Spps.Count-1 do
+ begin
+ with lvwPluginList.Items.Add do
+ begin
+ Caption := ExtractFileName(Spps.SppItem[i].ModuleName);
+ SubItems.Add(Spps.SppItem[i].PluginName);
+ end;
+ end;
+ //
ShowModal;
end;
procedure TfrmSetting.FormClose(Sender: TObject; var Action: TCloseAction);
+var i: integer;
+ Node: TCPCGroupNode;
begin
Pref.DefaultScript := memDefaultScript.Text;
+ 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;
//
- Pref.ColorScript := cbxColorScript.Checked;
- {Pref.TalkColorH := colTalkColorH.Selected;
- Pref.TalkColorU := colTalkColorU.Selected;
- Pref.MarkUpColor := colMarkUpColor.Selected;
- Pref.MetaWordColor := colMetaWordColor.Selected;
- Pref.MarkErrorColor := colMarkErrorColor.Selected;
- Pref.BgColor := colBgColor.Selected;}
with frmColorSetting do begin
Pref.TalkColorH := Color['H'];
Pref.TalkColorU := Color['U'];
+ Pref.TalkColorS := Color['Synchro'];
Pref.MarkUpColor := Color['Tag'];
- {TODO: Synchronized}
Pref.MetaWordColor := Color['Meta'];
Pref.MarkErrorColor := Color['Error'];
Pref.BgColor := Color['Background'];
end;
- Pref.ColorTimeLagValue := trkColorTimeLag.Position;
- Pref.ColorSpeed := trkColorSpeed.Position;
+ //
+ Pref.PlayTimeParams.ProfileName := cbxPlayTimeProfile.Text;
+ SpinControlToPlayTimeParams(Pref.PlayTimeParams);
//
Pref.AutoStart := cbxAutoStart.Checked;
Pref.TabPosition := TTabPosition(rgpTabPosition.ItemIndex);
Pref.NoTransUrl := (GetNodeFromKeyPath('Arrive\UrlTag\NoSelection') as TCPCRadioNode).Checked;
Pref.SilentWhenHidden := (GetNodeFromKeyPath('Arrive\SilentWhenHidden') as TCPCCheckBoxNode).Checked;
Pref.FixMessySurface := (GetNodeFromKeyPath('Arrive\FixMessySurface') as TCPCCheckBoxNode).Checked;
+ Pref.HUTagTo01Tag := (GetNodeFromKeyPath('Arrive\HUTagTo01Tag') as TCPCCheckBoxNode).Checked;
Pref.ResetIfGhostAfterSend := (GetNodeFromKeyPath('Out\ResetIfGhostAfterSend') as TCPCCheckBoxNode).Checked;
+ Pref.ClearAfterSend := (GetNodeFromKeyPath('Out\ClearAfterSend') as TCPCCheckBoxNode).Checked;
+ Pref.NeedConfirmBeforeSend := (GetNodeFromKeyPath('Out\NeedConfirmBeforeSend') as TCPCCheckBoxNode).Checked;
+ Pref.NoConfirm := not (GetNodeFromKeyPath('Out\Confirm') as TCPCCheckBoxNode).Checked;
+ Pref.WarnYenTNotExist := (GetNodeFromKeyPath('Out\Warn\YenTNotExist') as TCPCCheckBoxNode).Checked;
+ Pref.WarnScopeChangeInSynchronize := (GetNodeFromKeyPath('Out\Warn\ScopeChangeInSynchronize') as TCPCCheckBoxNode).Checked;
end;
except
on E: Exception do ShowMessage(E.Message);
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;
+ SakuraSeeker.FileMappingTarget := Pref.FMOName;
+ Pref.HideGhosts := cbxHideGhosts.Checked;
+ Pref.NoExtraSSTPHeaders := cbxNoExtraSSTPHeaders.Checked;
+ //
+ Pref.AutoJoinChannels := memAutoJoinChannels.Lines;
+ //
+ with ctvSurfacePreview do
+ begin
+ Pref.SurfacePreviewOnHint := (GetNodeFromKeyPath('OnHint\DoPreview') as TCPCCheckBoxNode).Checked;
+ Pref.SurfacePreviewOnScriptPoint := (GetNodeFromKeyPath('OnScriptPoint\DoPreview') as TCPCCheckBoxNode).Checked;
+ Node := GetNodeFromKeyPath('OnScriptPoint\Position') as TCPCGroupNode;
+ for i := 0 to Node.Count-1 do
+ if (Node.Item[i] as TCPCRadioNode).Checked then
+ Pref.SurfacePreviewOnScriptPointPosition := TSurfacePreviewOnScriptPointPosition(i);
+ end;
end;
-procedure TfrmSetting.edtSoundFileButtonClick(Sender: TObject);
+procedure TfrmSetting.edtProxyPortKeyPress(Sender: TObject; var Key: Char);
begin
- if OpenDialog.Execute then begin
- edtSoundFile.Text := OpenDialog.FileName;
- end;
+ if not(Key in ['0'..'9']) then Key := Char(0);
end;
-procedure TfrmSetting.tvwChannelsCompare(Sender: TObject; Node1,
- Node2: TTreeNode; Data: Integer; var Compare: Integer);
+procedure TfrmSetting.ctvBottleNodeChecked(Sender: TObject;
+ Node: TCPCConfigItemNode);
begin
- if Node1.Text = '\83f\83t\83H\83\8b\83g' then
- Compare := -1
- else if Node2.Text = '\83f\83t\83H\83\8b\83g' then
- Compare := 1
- else
- Compare := AnsiCompareStr(Node1.Text, Node2.Text);
+ //ShowMessage(ctvBottle.GetFullKeyPath(Node));
end;
-procedure TfrmSetting.tvwChannelsChange(Sender: TObject; Node: TTreeNode);
-var ChPref: TChannelPrefs;
+procedure TfrmSetting.ctvBottleNodeChecking(Sender: TObject;
+ Node: TCPCConfigItemNode; var Allow: Boolean);
begin
- rgpUseChannelPrefs.Enabled := true;
- if integer(Node.Data) = DefaultNode then begin
- ChPref := Pref.DefChannelPref;
- cbxCanAutoAdd.Enabled := false;
- cbxWarnPost.Enabled := false;
- rgpUseChannelPrefs.Enabled := false;
- cbxSoundArrived.AllowGrayed := false;
- end else begin
- ChPref := Pref.ChannelPrefIndex[integer(Node.Data)];
- cbxCanAutoAdd.Enabled := true;
- cbxWarnPost.Enabled := true;
- rgpUseChannelPrefs.Enabled := true;
- cbxSoundArrived.AllowGrayed := true;
+ if Node.KeyName = 'IgnoreBottle' then begin
+ MessageDlg('\82±\82Ì\8b@\94\\82Í\8eÀ\91\95\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ', mtError, [mbOk], 0);
+ Allow := false;
end;
- cbxCanAutoAdd.Checked := ChPref.CanAutoAdd;
- cbxWarnPost.Checked := ChPref.WarnPost;
- if ChPref.UseChannelPrefs then begin
- rgpUseChannelPrefs.ItemIndex := 0;
- end else begin
- rgpUseChannelPrefs.ItemIndex := 1;
+end;
+
+procedure TfrmSetting.tstRuleShow(Sender: TObject);
+begin
+ frmRuleList.UpdateDisplay;
+end;
+
+procedure TfrmSetting.btnUseCurrentJoinChannelsClick(Sender: TObject);
+begin
+ memAutoJoinChannels.Lines := JoinChannels;
+end;
+
+procedure TfrmSetting.btnVisibleGhostsClick(Sender: TObject);
+var i: integer;
+ FullGhosts: TStringList;
+begin
+ FullGhosts := TStringList.Create;
+ SakuraSeeker.BeginDetect;
+ try
+ for i := 0 to SakuraSeeker.Count-1 do
+ FullGhosts.Add(SakuraSeeker[i].Name);
+ StrListEdit(Pref.VisibleGhostsList, '\83S\81[\83X\83g\82ð\8ew\92è', true, FullGhosts);
+ finally
+ FullGhosts.Free;
end;
- cbxSoundArrived.State := TCheckBoxState(ChPref.SoundArrived);
- edtSoundFile.Text := ChPref.SoundFile;
- cbxIgnoreIfGhost.Checked := ChPref.IgnoreIfGhost;
- if ChPref.TargetGhost <> '' then
- cbxTargetGhost.Text := ChPref.TargetGhost
+end;
+
+procedure TfrmSetting.lvwPluginListDblClick(Sender: TObject);
+var Index: integer;
+begin
+ if lvwPluginList.Selected = nil then
+ Exit;
+ Index := lvwPluginList.Selected.Index;
+ if pfConfigure in Spps.SppItem[Index].PluginFunctions then
+ Spps.SppItem[Index].Configure
else
- cbxTargetGhost.Text := ChannelDefaultGhost;
+ ShowMessage('\92Ç\89Á\82Ì\90Ý\92è\8d\80\96Ú\82Í\82 \82è\82Ü\82¹\82ñ\81B');
end;
-procedure TfrmSetting.rgpUseChannelPrefsClick(Sender: TObject);
+procedure TfrmSetting.edtLUIDEnter(Sender: TObject);
begin
- pnlChannelOpt.Visible := ((rgpUseChannelPrefs.ItemIndex = 0) and
- (tvwChannels.Selected <> nil));
- if SelChPref <> nil then begin
- SelChPref.UseChannelPrefs := (rgpUseChannelPrefs.ItemIndex = 0);
- tvwChannels.Selected.ImageIndex := BottleImage(SelChPref);
- tvwChannels.Selected.SelectedIndex := BottleImage(SelChPref);
+ FOldLUID := edtLUID.Text;
+end;
+
+procedure TfrmSetting.edtLUIDExit(Sender: TObject);
+var TmpLUID: String;
+ i: integer;
+ Err: boolean;
+begin
+ TmpLUID := edtLUID.Text;
+ i := 1;
+ Err := false;
+ if Length(TmpLUID) <> 82 then
+ Err := true
+ else
+ while i <= Length(TmpLUID) do
+ begin
+ if not (TmpLUID[i] in ['0'..'9', 'a'..'z', 'A'..'Z', '.', ',']) then
+ begin
+ Err := true;
+ Break;
+ end;
+ Inc(i);
+ end;
+ if Err then
+ begin
+ ShowMessage('LUID\82Ì\93à\97e\82ª\95s\90³\82Å\82·');
+ edtLUID.Text := FOldLUID;
end;
end;
-function TfrmSetting.BottleImage(ChPref: TChannelPrefs): integer;
+procedure TfrmSetting.btnCopyLUIDClick(Sender: TObject);
begin
- if ChPref = Pref.DefChannelPref then Result := 1
- else if ChPref.UseChannelPrefs then Result := CheckedBottle
- else Result := UnCheckedBottle;
+ Clipboard.SetTextBuf(PChar(edtLUID.Text));
end;
-function TfrmSetting.SelChPref: TChannelPrefs;
+procedure TfrmSetting.FormCreate(Sender: TObject);
+var
+ i: integer;
+ Cap: String;
+ Node: TTreeNode;
begin
- if tvwChannels.Selected = nil then begin
- Result := nil;
- Exit;
- end else if integer(tvwChannels.Selected.Data) = DefaultNode then begin
- Result := Pref.DefChannelPref;
- end else begin
- Result := Pref.ChannelPrefIndex[integer(tvwChannels.Selected.Data)];
+ 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.cbxSoundArrivedClick(Sender: TObject);
+procedure TfrmSetting.tvwCategoryChange(Sender: TObject; Node: TTreeNode);
begin
- SelChPref.SoundArrived := TSoundArrived(cbxSoundArrived.State);
+ PageControl.ActivePageIndex := Node.Index;
+ pnlHeading.Caption := PageControl.ActivePage.Caption;
end;
-procedure TfrmSetting.edtSoundFileChange(Sender: TObject);
+procedure TfrmSetting.tvwCategoryMouseMove(Sender: TObject;
+ Shift: TShiftState; X, Y: Integer);
+var
+ Node: TTreeNode;
+ NewHint: String;
+ CPos: TPoint;
begin
- SelChPref.SoundFile := edtSoundFile.Text;
+ 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.cbxTargetGhostChange(Sender: TObject);
+procedure TfrmSetting.PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
begin
- if cbxTargetGhost.ItemIndex = 0 then
- SelChPref.TargetGhost := ''
- else
- SelChPref.TargetGhost := cbxTargetGhost.Text;
+ 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.cbxIgnoreIfGhostClick(Sender: TObject);
+procedure TfrmSetting.SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
begin
- SelChPref.IgnoreIfGhost := cbxIgnoreIfGhost.Checked;
+ with Params do
+ begin
+ CostWait := spnCostWait.Value;
+ CostSurface := spnCostSurface.Value;
+ CostChar := spnCostChar.Value;
+ CostDBChar := spnCostDBChar.Value;
+ CostQuickChar := spnCostQuickChar.Value;
+ end;
end;
-procedure TfrmSetting.cbxCanAutoAddClick(Sender: TObject);
+
+procedure TfrmSetting.LoadPlayTimeProfiles;
+var i: integer;
+ F: TSearchRec;
+ Path, Item: String;
begin
- SelChPref.CanAutoAdd := cbxCanAutoAdd.Checked;
+ 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.edtProxyPortKeyPress(Sender: TObject; var Key: Char);
+procedure TfrmSetting.cbxPlayTimeProfileChange(Sender: TObject);
+var
+ Params: TSsPlayTimeParams;
+ Strs: TStringList;
+ Path, ProName: String;
begin
- if not(Key in ['0'..'9']) then Key := Char(0);
+ 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.cbxWarnPostClick(Sender: TObject);
+procedure TfrmSetting.spnCostWaitChange(Sender: TObject);
+var
+ ProName: String;
+const
+ Modified = '(\95Ï\8dX\8dÏ\82Ý)';
begin
- SelChPref.WarnPost := cbxWarnPost.Checked;
+ 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.ctvBottleNodeChecked(Sender: TObject;
- Node: TCPCConfigItemNode);
+procedure TfrmSetting.btnPlaySpecialAddClick(Sender: TObject);
+var
+ Item: TListItem;
+ SPChar: TSsPlayTimeSpecialChar;
begin
- //ShowMessage(ctvBottle.GetFullKeyPath(Node));
+ 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.ctvBottleNodeChecking(Sender: TObject;
- Node: TCPCConfigItemNode; var Allow: Boolean);
+procedure TfrmSetting.btnPlaySpecialDeleteClick(Sender: TObject);
begin
- if Node.KeyName = 'IgnoreBottle' then begin
- MessageDlg('\82±\82Ì\8b@\94\\82Í\8eÀ\91\95\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ', mtError, [mbOk], 0);
- Allow := false;
+ 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;