OSDN Git Service

PlayTimeParams editor changed
[winbottle/winbottle.git] / bottleclient / SettingForm.pas
index a10d1b9..0c8dad0 100755 (executable)
@@ -11,7 +11,8 @@ uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   ComCtrls, StdCtrls, ExtCtrls, BottleDef, Spin,
   CPCConfigTreeView, ColorSettingFrame, BottleChainListFrame, SakuraSeekerInstance,
-  ImgList, StrListEditor, SppList, Plugins, Clipbrd, SsPlayTime, StrUtils;
+  ImgList, StrListEditor, SppList, Plugins, Clipbrd, SsPlayTime, StrUtils,
+  SpecialCharEditor;
 
 type
   TfrmSetting = class(TForm)
@@ -83,8 +84,6 @@ type
     grpPlayTimeParams: TGroupBox;
     lblPlayTimeProfile: TLabel;
     cbxPlayTimeProfile: TComboBox;
-    spnCostDBWhiteSpace: TSpinEdit;
-    spnCostWhiteSpace: TSpinEdit;
     spnCostDBChar: TSpinEdit;
     spnCostWait: TSpinEdit;
     spnCostSurface: TSpinEdit;
@@ -94,10 +93,12 @@ type
     lblCostSurface: TLabel;
     lblCostChar: TLabel;
     lblCostDBChar: TLabel;
-    lblCostWhiteSpace: TLabel;
-    lblCostDBWhiteSpace: 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;
@@ -118,13 +119,17 @@ type
     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 PlayTimeParamsToControl(Params: TSsPlayTimeParams);
-    procedure ControlToPlayTimeParams(Params: TSsPlayTimeParams);
+    procedure PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
+    procedure SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
+    procedure UpdateSpecialChars;
   public
     { Public \90é\8c¾ }
     procedure Execute;
@@ -175,7 +180,8 @@ begin
   cbxPlayTimeProfile.Items.Add(Pref.PlayTimeParams.ProfileName);
   cbxPlayTimeProfile.ItemIndex := 0;
   LoadPlayTimeProfiles;
-  PlayTimeParamsToControl(Pref.PlayTimeParams);
+  PlayTimeParamsToSpinControl(Pref.PlayTimeParams);
+  UpdateSpecialChars;
   //
   cbxAutoStart.Checked := Pref.AutoStart;
   rgpTabPosition.ItemIndex := Ord(Pref.TabPosition);
@@ -265,7 +271,7 @@ begin
   end;
   //
   Pref.PlayTimeParams.ProfileName := cbxPlayTimeProfile.Text;
-  ControlToPlayTimeParams(Pref.PlayTimeParams);
+  SpinControlToPlayTimeParams(Pref.PlayTimeParams);
   //
   Pref.AutoStart := cbxAutoStart.Checked;
   Pref.TabPosition := TTabPosition(rgpTabPosition.ItemIndex);
@@ -464,7 +470,7 @@ begin
   end;
 end;
 
-procedure TfrmSetting.PlayTimeParamsToControl(Params: TSsPlayTimeParams);
+procedure TfrmSetting.PlayTimeParamsToSpinControl(Params: TSsPlayTimeParams);
 begin
   FSpinUpdateFlag := true;
   with Params do
@@ -473,14 +479,13 @@ begin
     spnCostSurface.Value      := CostSurface;
     spnCostChar.Value         := CostChar;
     spnCostDBChar.Value       := CostDBChar;
-    spnCostWhiteSpace.Value   := CostWhiteSpace;
-    spnCostDBWhiteSpace.Value := CostDBWhiteSpace;
     spnCostQuickChar.Value    := CostQuickChar;
+    lvwCostSpecials.Items.Clear;
   end;
   FSpinUpdateFlag := false;
 end;
 
-procedure TfrmSetting.ControlToPlayTimeParams(Params: TSsPlayTimeParams);
+procedure TfrmSetting.SpinControlToPlayTimeParams(Params: TSsPlayTimeParams);
 begin
   with Params do
   begin
@@ -488,8 +493,6 @@ begin
     CostSurface      := spnCostSurface.Value;
     CostChar         := spnCostChar.Value;
     CostDBChar       := spnCostDBChar.Value;
-    CostWhiteSpace   := spnCostWhiteSpace.Value;
-    CostDBWhiteSpace := spnCostDBWhiteSpace.Value;
     CostQuickChar    := spnCostQuickChar.Value;
   end;
 end;
@@ -526,7 +529,13 @@ begin
       Path := ExtractFilePath(Application.ExeName) + 'playtime\';
       Strs.LoadFromFile(Path + ProName + '.txt');
       Params := StringToComponent(Strs.Text) as TSsPlayTimeParams;
-      PlayTimeParamsToControl(Params);
+      try
+        PlayTimeParamsToSpinControl(Params);
+        Pref.PlayTimeParams.Assign(Params);
+        UpdateSpecialChars;
+      finally
+        Params.Free;
+      end;
     finally
       Strs.Free;
     end;
@@ -545,7 +554,6 @@ procedure TfrmSetting.btnSavePlayTimeProfileClick(Sender: TObject);
 var
   ProfileName, Path, FileName: String;
   Strs: TStringList;
-  TmpParams: TSsPlayTimeParams;
 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
@@ -559,15 +567,10 @@ begin
           Exit;
       Strs := TStringList.Create;
       try
-        TmpParams := TSsPlayTimeParams.Create(nil);
-        try
-          ControlToPlayTimeParams(TmpParams);
-          TmpParams.ProfileName := ProfileName;
-          Strs.Text := ComponentToString(TmpParams);
-          Strs.SaveToFile(FileName);
-        finally
-          TmpParams.Free;
-        end;
+        SpinControlToPlayTimeParams(Pref.PlayTimeParams);
+        Pref.PlayTimeParams.ProfileName := ProfileName;
+        Strs.Text := ComponentToString(Pref.PlayTimeParams);
+        Strs.SaveToFile(FileName);
       finally
         Strs.Free;
       end;
@@ -606,4 +609,94 @@ begin
   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.