OSDN Git Service

プリセット置換を「編集」メニュー内に追加。
authornaru <bottle@mikage.to>
Sat, 20 Mar 2004 18:09:40 +0000 (18:09 +0000)
committernaru <bottle@mikage.to>
Sat, 20 Mar 2004 18:09:40 +0000 (18:09 +0000)
これでプリセット置換関係は一通りの実装終了、後はデバッグ

bottleclient/MainForm.dfm
bottleclient/MainForm.pas

index e2eb893..6dd8e90 100755 (executable)
@@ -470,6 +470,9 @@ object frmSender: TfrmSender
       object mnReplace: TMenuItem
         Action = actReplace
       end
+      object mnPresetReplaceRoot: TMenuItem
+        Caption = #12503#12522#12475#12483#12488#32622#25563'(&S)'
+      end
       object N10: TMenuItem
         Caption = '-'
       end
index 3019767..f8a9eef 100755 (executable)
@@ -19,7 +19,7 @@ uses
   ScriptConsts, DateUtils, BottleChainRule, BottleChainEvent,
   SakuraSeekerInstance, HEditor, HTSearch, heClasses, heFountain,
   SakuraScriptFountain, SppList, SurfacePreview, XDOM_2_3_J3, SsPlayTime,
-  RegexUtils, StrReplace, StrReplaceDialog, IdAntiFreezeBase;
+  RegexUtils, StrReplace, StrReplaceDialog, ReplacePresetEditor;
 
 type
   TSurfacePreviewType = (spHint, spEditor);
@@ -176,6 +176,7 @@ type
     mnUndo: TMenuItem;
     mnRedo: TMenuItem;
     N9: TMenuItem;
+    mnPresetReplaceRoot: TMenuItem;
     procedure actConfirmExecute(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
@@ -318,6 +319,7 @@ type
     procedure SetAdded(const Value: boolean);
     procedure mnConstClick(Sender: TObject);
     procedure mnConstGroupClick(Sender: TObject);
+    procedure mnPresetReplaceClick(Sender: TObject);
     property Added: boolean read FAdded write SetAdded;
     property Sleeping: boolean read FSleeping write SetSleeping;
     property StatusText: String read FStatusText write SetStatusText;
@@ -333,6 +335,7 @@ type
     procedure UpdateIfGhostBox;
     function BuildMenuConditionCheck(const IfGhost, Ghost: String): boolean;
     procedure BuildMenu(Root: TMenuItem; Simple: boolean);
+    procedure BuildReplaceMenu(Root: TMenuItem);
     procedure PlaySound(const FileName: String);
     //TBottleSstp\8aÖ\8cW\83C\83x\83\93\83g\83n\83\93\83h\83\89
     procedure BottleSstpResendCountChange(Sender: TObject);
@@ -535,6 +538,7 @@ begin
   FSppDir := ExtractFileDir(Application.ExeName)+'\spp';
   Spps.LoadFromDirectory(FSppDir);
   ConstructMenu(false);
+  BuildReplaceMenu(mnPresetReplaceRoot);
 
   Str := TStringList.Create;
   try
@@ -546,7 +550,7 @@ begin
         Str.LoadFromFile(ExtractFilePath(Application.ExeName)+'defrule.txt');
         BottleChainRuleList := StringToComponent(Str.Text) as TBottleChainRuleList;
       except
-        Showmessage('defrule.txt\93Ç\82Ý\8d\9e\82Ý\92\86\82É\92v\96½\93I\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81Bdefrule.txt\82ð\8dÄ\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82­\82¾\82³\82¢\81B');
+        ShowMessage('defrule.txt\93Ç\82Ý\8d\9e\82Ý\92\86\82É\92v\96½\93I\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81Bdefrule.txt\82ð\8dÄ\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82­\82¾\82³\82¢\81B');
         Application.Terminate;
         Application.ProcessMessages;
         Exit;
@@ -1483,6 +1487,7 @@ begin
     frmSetting := nil;
   end;
   //
+  BuildReplaceMenu(mnPresetReplaceRoot);
   UpdateLayout;
   tabChannel.Repaint;
   frmLog.UpdateWindow;
@@ -2361,12 +2366,9 @@ begin
       if ScriptConstList.GetMenuByID(Root.Items[i].Tag).IfGhost <> '' then
         Root.Items[i].Free;
     end;
-  end else begin
+  end else
     // \91S\95\94\8dí\8f\9c
-    for i := Root.Count-1 downto 0 do begin
-      Root.Items[i].Free;
-    end;
-  end;
+    Root.Clear;
 
   count := -1;
   for i := 0 to ScriptConstList.Count-1 do begin
@@ -2381,11 +2383,14 @@ begin
         end;
 
       Menu1 := TMenuItem.Create(Root);
-      Menu1.Caption := ScriptConstList[i][j].Caption;
-      Menu1.Hint    := ScriptConstList[i][j].Caption;
-      Menu1.AutoHotkeys := maManual;
-      Menu1.Tag := ScriptConstList[i][j].ID;
-      Menu1.OnClick := mnConstGroupClick;
+      with Menu1 do
+      begin
+        Caption := ScriptConstList[i][j].Caption;
+        Hint    := ScriptConstList[i][j].Caption;
+        AutoHotkeys := maManual;
+        Tag := ScriptConstList[i][j].ID;
+        OnClick := mnConstGroupClick;
+      end;
 
       if not Simple then begin
         Root.Add(Menu1);
@@ -3198,4 +3203,44 @@ begin
   Inc(FBeginConnectFailCount);
 end;
 
+procedure TfrmSender.BuildReplaceMenu(Root: TMenuItem);
+var
+  i: integer;
+  Presets: TReplacePresetCollection;
+  NewItem: TMenuItem;
+begin
+  Root.Clear;
+  Presets := Pref.ReplacePresets.Presets;
+  for i := 0 to Presets.Count-1 do
+  begin
+    NewItem := TMenuItem.Create(Root);
+    with NewItem do
+    begin
+      Caption := Presets[i].Title;
+      ShortCut := Presets[i].ShortCut;
+      AutoHotkeys := maManual;
+      Hint := Presets[i].Pairs.StringExpression;
+      Tag := i;
+      OnClick := mnPresetReplaceClick;
+    end;
+    Root.Add(NewItem);
+  end;
+end;
+
+procedure TfrmSender.mnPresetReplaceClick(Sender: TObject);
+var
+  Preset: TReplacePreset;
+  Lines, New: string;
+begin
+  // \83v\83\8a\83Z\83b\83g\92u\8a·\82ð\8eÀ\8ds
+  Preset := Pref.ReplacePresets.Presets[(Sender as TMenuItem).Tag];
+  Lines := memScript.Lines.Text;
+  New := Preset.Pairs.ExecuteReplace(Lines);
+  if New <> Lines then
+  begin
+    memScript.SelectAll;
+    memScript.SelText := New;
+  end;
+end;
+
 end.