OSDN Git Service

IdAntiFreezeを貼り付けた (ToDo #347)
[winbottle/winbottle.git] / bottleclient / MainForm.pas
index 6a6ed12..65448ff 100755 (executable)
@@ -18,7 +18,8 @@ uses
   IdException, HttpThread, IdHTTP, LogDownload,
   ScriptConsts, DateUtils, BottleChainRule, BottleChainEvent,
   SakuraSeekerInstance, HEditor, HTSearch, heClasses, heFountain,
-  SakuraScriptFountain, SppList, SurfacePreview, XDOM_2_3_J3, SsPlayTime;
+  SakuraScriptFountain, SppList, SurfacePreview, XDOM_2_3_J3, SsPlayTime,
+  RegexUtils, StrReplace, StrReplaceDialog, IdAntiFreezeBase, IdAntiFreeze;
 
 type
   TSurfacePreviewType = (spHint, spEditor);
@@ -159,7 +160,6 @@ type
     actResetPlugins: TAction;
     N7: TMenuItem;
     mnResetPlugins: TMenuItem;
-    ReplaceDialog: TReplaceDialog;
     actReplace: TAction;
     N10: TMenuItem;
     mnReplace: TMenuItem;
@@ -171,6 +171,12 @@ type
     actEditCopy: TEditCopy;
     tbtnSendToLogWindow: TToolButton;
     SsPlayTime: TSsPlayTime;
+    actUndo: TAction;
+    actRedo: TAction;
+    mnUndo: TMenuItem;
+    mnRedo: TMenuItem;
+    N9: TMenuItem;
+    AntiFreeze: TIdAntiFreeze;
     procedure actConfirmExecute(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
@@ -255,8 +261,6 @@ type
     procedure actResetPluginsExecute(Sender: TObject);
     procedure IdSLPP20Connect(Sender: TObject);
     procedure actReplaceExecute(Sender: TObject);
-    procedure ReplaceDialogFind(Sender: TObject);
-    procedure ReplaceDialogReplace(Sender: TObject);
     procedure actSendToEditorExecute(Sender: TObject);
     procedure actSendToLogWindowExecute(Sender: TObject);
     procedure memScriptDragOver(Sender, Source: TObject; X, Y: Integer;
@@ -264,20 +268,21 @@ type
     procedure memScriptDragDrop(Sender, Source: TObject; X, Y: Integer);
     procedure actDeleteLogItemExecute(Sender: TObject);
     procedure memScriptSelectionChange(Sender: TObject; Selected: Boolean);
+    procedure actUndoExecute(Sender: TObject);
+    procedure actRedoExecute(Sender: TObject);
   private
     FSleeping: boolean;  // \94z\91\97\83X\83\8a\81[\83v\92\86\82©\82Ç\82¤\82©
     FStatusText: String;
     FConnecting: boolean;
     FAdded: boolean;
     FBooted: boolean; //\8f\89\89ñ\8bN\93®\92Ê\90M\97p
+    FEndSession: Boolean; // Windows\8fI\97¹\82ð\8c\9f\92m\82µ\82Ätrue\82É\82È\82é
     FOriginalCaption: String;
     FAutoAddAfterGetChannel: boolean; //\83`\83\83\83\93\83l\83\8b\8eæ\93¾\8cã\82É\83_\83C\83A\83\8d\83O\82È\82µ\82É
                                       //\83`\83\83\83\93\83l\83\8b\82É\8eQ\89Á\82·\82é\82©\82Ç\82¤\82©
     FConstDir: String;
     FSppDir: String;
     //
-    FMutex: THandle; //Mutex\83I\83u\83W\83F\83N\83g\81c\93ñ\8fd\8bN\93®\96h\8e~\97p
-    //
     FNowChannel: String; //\8c»\8dÝ\91I\91ð\82³\82ê\82Ä\82¢\82é\83`\83\83\83\93\83l\83\8b
     JoinChannelsBackup: TStringList; //\88ê\8e\9e\8eg\97p
     //
@@ -353,6 +358,8 @@ type
     procedure AppendXMLLog(const FileName: String; Args: THeadValue);
   protected
     procedure WndProc(var Message: TMessage); override;
+    procedure WMQueryEndSession(var msg: TWMQueryEndSession);
+      message WM_QUERYENDSESSION;
   public
     function DoTrans(var Script: String;
       Options: TScriptTransOptions): String; overload;
@@ -551,20 +558,6 @@ begin
 
   FOriginalCaption := Self.Caption;
 
-  {$IFDEF NOMUTEX}
-  ShowMessage('\93ñ\8fd\8bN\93®\8b\96\89Â\83o\81[\83W\83\87\83\93\82Å\82·\81B'#13#10 + VersionString);
-  {$ELSE}
-  FMutex := CreateMutex(nil, true, 'SSTPBottleClient2');
-  if GetLastError = ERROR_ALREADY_EXISTS then begin
-    Beep;
-    ShowMessage('SSTP Bottle Client\82Í\93ñ\8fd\8bN\93®\82Å\82«\82Ü\82¹\82ñ');
-    CloseHandle(FMutex);
-    Application.Terminate;
-    Application.ProcessMessages; //WM_QUIT\82ð\97¬\82·
-    Exit;
-  end;
-  {$ENDIF}
-
   UpdateLayout;
   mnShowToolBar.Checked := Pref.ShowToolBar;
   mnShowConstBar.Checked := Pref.ShowConstBar;
@@ -646,9 +639,6 @@ begin
   SaveChainRuleList;
   BottleChainRuleList.Free;
 
-  {$IFDEF BOTTLEMUTEX}
-  ReleaseMutex(FMutex);
-  {$ENDIF}
 end;
 
 
@@ -763,8 +753,8 @@ begin
       IdSlpp20.Port := Pref.ProxyPort;
       IdSlpp20.ProxyMode := true;
     end else begin
-      IdSlpp20.Host := 'bottle.mikage.to';
-      IdSlpp20.Port := 9871;
+      IdSlpp20.Host := Pref.BottleServer;
+      IdSlpp20.Port := Pref.BottleServerPort;
       IdSlpp20.ProxyMode := false;
     end;
     IdSlpp20.Connect;
@@ -1210,7 +1200,7 @@ begin
     SynchronizedColor.Color := Pref.TalkColorS;
   end;
   memScript.Ruler.Visible := Pref.ShowRuler;
-  memScript.Ruler.Color := Pref.TalkColorH;
+  memScript.Ruler.Color := Pref.TextColor;
   memScript.Color := Pref.BgColor;
 
   ToolBar.Visible := Pref.ShowToolBar;
@@ -1223,6 +1213,7 @@ begin
       tpTop:    Align  := alTop;
       tpBottom: Align := alBottom;
     end;
+    TabWidth := Pref.TabWidth;
   end;
 end;
 
@@ -1900,7 +1891,7 @@ begin
   PostStr := Command.Text;
   PostStr := ParamsEncode(PostStr);
   try
-    FHttp := THTTPDownloadThread.Create(BottleServer, Pref.CgiName, PostStr);
+    FHttp := THTTPDownloadThread.Create(Pref.BottleServer, Pref.CgiName, PostStr);
     if Pref.UseHttpProxy then begin
       FHttp.ProxyServer := Pref.ProxyAddress;
       FHttp.ProxyPort   := Pref.ProxyPort;
@@ -2149,9 +2140,11 @@ end;
 procedure TfrmSender.FormCloseQuery(Sender: TObject;
   var CanClose: Boolean);
 begin
-  if not Pref.ConfirmOnExit then Exit;
+  if (not Pref.ConfirmOnExit) or FEndSession then
+    Exit;
   if MessageDlg('SSTP Bottle Client\82ð\8fI\97¹\82µ\82Ü\82·', mtConfirmation,
-                mbOkCancel, 0) = mrCancel then CanClose := false;
+                mbOkCancel, 0) = mrCancel then
+    CanClose := false;
 end;
 
 procedure TfrmSender.UpdateIfGhostBox;
@@ -2623,6 +2616,16 @@ begin
   memScript.SelectAll;
 end;
 
+procedure TfrmSender.actUndoExecute(Sender: TObject);
+begin
+  memScript.Undo;
+end;
+
+procedure TfrmSender.actRedoExecute(Sender: TObject);
+begin
+  memScript.Redo;
+end;
+
 function TfrmSender.IsSurfaceTag(const Script: String;
   var ID: integer): boolean;
 begin
@@ -2857,45 +2860,38 @@ begin
     inherited;
 end;
 
-// \8c\9f\8dõ\81E\92u\8a·\83_\83C\83A\83\8d\83O\82ð\8f\89\8aú\89»\82µ\82Ä\95\\8e¦
+// \92u\8a·
 procedure TfrmSender.actReplaceExecute(Sender: TObject);
+var
+  Form: TfrmStrReplaceDialog;
+  Lines: String;
+  Pair: TReplacePairRec;
+  Options: TReplaceFlags;
 begin
-  with ReplaceDialog do
-  begin
-    FindText := '';
-    ReplaceText := '';
-    Execute;
-  end;
-end;
-
-// \8c\9f\8dõ\81E\92u\8a·
-procedure TfrmSender.ReplaceDialogFind(Sender: TObject);
-var Opt: TSearchOptions;
-begin
-  Opt := [sfrDown];
-  if frMatchCase in ReplaceDialog.Options then
-    Opt := Opt + [sfrMatchCase];
-  if frWholeWord in ReplaceDialog.Options then
-    Opt := Opt + [sfrWholeWord];
-  memScript.Search(ReplaceDialog.FindText, Opt);
-end;
-
-// \8c\9f\8dõ\81E\92u\8a·
-procedure TfrmSender.ReplaceDialogReplace(Sender: TObject);
-var Opt: TSearchOptions;
-begin
-  Opt := [sfrDown];
-  if frMatchCase in ReplaceDialog.Options then
-    Opt := Opt + [sfrMatchCase];
-  if frWholeWord in ReplaceDialog.Options then
-    Opt := Opt + [sfrWholeWord];
-  if frReplaceAll in ReplaceDialog.Options then
-    while memScript.Search(ReplaceDialog.FindText, Opt) do
-      memScript.SelText := ReplaceDialog.ReplaceText
-  else
-  begin
-    if memScript.Search(ReplaceDialog.FindText, Opt) then
-      memScript.SelText := ReplaceDialog.ReplaceText
+  Application.CreateForm(TfrmStrReplaceDialog, Form);
+  try
+    if Form.Execute then
+    begin
+      Pair := Form.PairRec;
+      with Pair do
+      begin
+        Lines := memScript.Lines.Text;
+        Options := [rfReplaceAll];
+        if IgnoreCase then
+          Options := Options + [rfIgnoreCase];
+        if UseRegExp then
+          Lines := StringReplaceRegExp(Lines, BeforeStr, AfterStr, Options)
+        else
+          Lines := StringReplace(Lines, BeforeStr, AfterStr, Options);
+      end;
+      if Lines <> memScript.Lines.Text then
+      begin
+        memScript.SelectAll;
+        memScript.SelText := Lines;
+      end;
+    end;
+  finally
+    Form.Release;
   end;
 end;
 
@@ -3197,4 +3193,11 @@ begin
   end;
 end;
 
+procedure TfrmSender.WMQueryEndSession(var msg: TWMQueryEndSession);
+begin
+  // Windows\82ª\8fI\97¹\82µ\82æ\82¤\82Æ\82µ\82Ä\82¢\82é\82Ì\82ð\8a´\92m\82·\82é
+  FEndSession := true;
+  inherited;
+end;
+
 end.