OSDN Git Service

1つのSsParserインスタンスで複数の処理が出来るように変更。
[winbottle/winbottle.git] / bottleclient / MainForm.pas
index 9ddeead..68a94cc 100755 (executable)
@@ -12,17 +12,15 @@ uses
   Menus, StdCtrls, ComCtrls, BRegExp, BottleDef, BottleSstp,
   DirectSstp, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
   IdSLPP20, SsParser, ImgList, AppEvnts, TaskTray, StdActns,
-  ActnList, MPlayer, MenuBar, ToolWin,
-  IniFiles, ExtCtrls, ShellAPI, Contnrs,
+  ActnList, MPlayer, MenuBar, ToolWin, SsPlayTime, heClasses, heFountain,
+  SakuraScriptFountain, HEditor,
+  IniFiles, ShellAPI, Contnrs,
   ConstEditor, Buttons, Clipbrd, HeadValue, Logs, MultipleChoiceEditor,
   IdException, HttpThread, IdHTTP, LogDownload,
   ScriptConsts, DateUtils, BottleChainRule, BottleChainEvent,
-  SakuraSeekerInstance, HEditor, HTSearch, heClasses, heFountain,
-  SakuraScriptFountain, SppList, SurfacePreview, XDOM_2_3_J3, SsPlayTime,
-  RegexUtils, StrReplace, StrReplaceDialog, ReplacePresetEditor;
-
-const
-  WM_SHOWED = WM_USER + 100;
+  SakuraSeekerInstance, HTSearch,
+  SppList, SurfacePreview, XDOM_2_3_J3,
+  RegexUtils, StrReplace, StrReplaceDialog, ReplacePresetEditor, ExtCtrls;
 
 type
   TSurfacePreviewType = (spHint, spEditor);
@@ -362,9 +360,6 @@ type
     //
     procedure AppendTextLog(const FileName, Line: String);
     procedure AppendXMLLog(const FileName: String; Args: THeadValue);
-
-    procedure WMShowed(var Message: TMessage); message WM_SHOWED;
-
   protected
     procedure WndProc(var Message: TMessage); override;
     procedure WMQueryEndSession(var msg: TWMQueryEndSession);
@@ -623,6 +618,8 @@ begin
   // \83^\83X\83N\83o\81[\82Ì\8dÄ\8bN\93®(Explorer\82ª\97\8e\82¿\82½\82Æ\82«)\82ð\8c\9f\8fo\82·\82é
   FWM_TaskBarCreated := RegisterWindowMessage('TaskBarCreated');
 
+  // \83X\83N\83\8a\83v\83g\95\8e\9a\97ñ\82Ì\8f\89\8aú\89»
+  actClearExecute(Sender);
   // \83^\83X\83N\83g\83\8c\83C\82É\83A\83C\83R\83\93\82ð\92Ç\89Á
   ChangeTaskIcon;
   // \83`\83\83\83\93\83l\83\8b\8eQ\89Á\8aÖ\8cW\82Ì\83^\83u\82Ì\8f\88\97\9d\82È\82Ç(\83`\83\83\83\93\83l\83\8b\95s\8eQ\89Á\82Å\8f\89\8aú\89»)
@@ -681,7 +678,7 @@ begin
     actStart.Enabled := true;
     actStop.Enabled := true;
     actSend.Enabled := true;
-    frmLog.lvwLogChange(Self, nil, ctState);
+    frmLog.lvwLogClick(Self);
     mnGetNewId.Enabled := Pref.LUID = '';
     Screen.Cursor := crDefault;
   end;
@@ -841,7 +838,7 @@ begin
                      HeadValue['ExtraMessage']);
       end else begin
         Beep;
-        frmMessageBox.ShowMessage('SSTP Bottle\83T\81[\83o\82ª\89½\82ç\82©\82Ì\83G\83\89\81[\82ð\95Ô\82µ\82Ü\82µ\82½\81B');
+        frmMessageBox.ShowMessage('SSTP Bottle\83T\81[\83o\82ª\89½\82ç\82©\82Ì\83G\83\89\81[\82ð\95Ô\82µ\82Ü\82µ\82½\81B'#13#10 + '\81i\83R\83}\83\93\83h\81u' + Command + '\81v\82ð\8f\88\97\9d\92\86\81j');
       end;
     end;
     if (Command = 'sendBroadcast') and (ResStr = 'OK') then begin
@@ -950,7 +947,6 @@ end;
 procedure TfrmSender.FormShow(Sender: TObject);
 begin
   if FBooted or Application.Terminated then Exit;
-
   //LUID\82ª\8eæ\93¾\82³\82ê\82Ä\82¢\82ê\82Î\91\81\91¬\93o\98^\81B\82»\82¤\82Å\82È\82¯\82ê\82ÎLUID\8eæ\93¾\81B
   if Pref.LUID <> '' then BeginConnect
   else mnGetNewIdClick(Self);
@@ -962,28 +958,24 @@ begin
   frmSurfacePreview.Show;
   Self.Show;
 
+  //\83G\83f\83B\83^\83v\83\8c\83r\83\85\81[\82ª\91O\89ñ\95\\8e¦\8fó\91Ô\82È\82ç\82±\82±\82Å\95\\8e¦\82·\82é
+  if Pref.ShowEditorPreviewWindow then actEditorPreviewExecute(Sender);
+
   SakuraSeeker.BeginDetect;
   SakuraSeekerDetectResultChanged(self);
   if (SakuraSeeker.Count = 0) and not Pref.NoWarnOfEmptyFMO then
     frmMessageBox.ShowMessage('\83S\81[\83X\83g(SSTP\83T\81[\83o)\82ª1\82Â\82à\8bN\93®\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B'#13#10 +
       'SSTP Bottle\82ð\97\98\97p\82·\82é\82½\82ß\82É\82Í\81A\83S\81[\83X\83g\82ð\93¯\8e\9e\82É\8bN\93®\82µ\82Ä\82­\82¾\82³\82¢\81B'#13#10 +
       '\8fÚ\8d×\82Í\83w\83\8b\83v\82ð\82²\97\97\89º\82³\82¢\81B');
-
-  //\83E\83C\83\93\83h\83E\82Ì\8f\89\8aú\89»\82ð\91Ò\82Â\95K\97v\82ª\82 \82é\8f\88\97\9d\82ÍWMShowed\82Ö\93\8a\82°\8d\9e\82Þ\82±\82Æ
-  PostMessage(Handle, WM_SHOWED, 0, 0);
-end;
-
-procedure TfrmSender.WMShowed(var Message: TMessage);
-begin
-  // \83X\83N\83\8a\83v\83g\95\8e\9a\97ñ\82Ì\8f\89\8aú\89»
-  ClearEditor;
 end;
 
 procedure TfrmSender.actAboutClick(Sender: TObject);
-var Str: String;
+var
+  Str: String;
 begin
   Str := VersionString + #13#10 + BottleDisclaimer + #13#10#13#10;
-  Str := Str + Format('Compiler Version: %f', [CompilerVersion]);
+  Str := Str + Format('Compiler Version: %f', [CompilerVersion]) + #13#10;
+  Str := Str + 'Indy Version: ' + IdSLPP20.Version;
   frmMessageBox.ShowMessage(Str);
 end;
 
@@ -1294,7 +1286,8 @@ begin
                 Url[UrlCount] := SsParser.GetParam(SsParser[i], UrlCount*2+2);
                 UrlName[UrlCount] := SsParser.GetParam(SsParser[i], UrlCount*2+3);
                 if UrlName[UrlCount] = '' then UrlName[UrlCount] := Url[UrlCount];
-                if Pos('http://', Url[UrlCount]) > 0 then Inc(UrlCount);
+                //https\82È\82Ç\82ª\92Ç\89Á\82³\82ê\82é\8e\9e\91Î\8dô\81c\81c://\82ð\8c\9f\8dõ\82·\82ê\82Î\82½\82Ô\82ñ\91å\8fä\95v
+                if Pos('://', Url[UrlCount]) > 0 then Inc(UrlCount);
               end;
             end;
             if UrlCount > 0 then UrlCancel := SsParser.GetParam(SsParser[i], 1);
@@ -1305,7 +1298,8 @@ begin
             Url[0] := SsParser.GetParam(SsParser[i], 1);
             UrlName[0] := '\8ds\82­\81@\81@\81@\81@\81@\81@';
             UrlCancel  := '\8ds\82©\82È\82¢\81@\81@\81@\81@';
-            if Pos('http://', Url[0]) > 0 then begin
+            //https\82È\82Ç\82ª\92Ç\89Á\82³\82ê\82é\8e\9e\91Î\8dô\81c\81c://\82ð\8c\9f\8dõ\82·\82ê\82Î\82½\82Ô\82ñ\91å\8fä\95v
+            if Pos('://', Url[0]) > 0 then begin
               UrlCount := 1;
               if not QuickSection then
                 Script := Script + '\_q' + Url[0] + '\_q'
@@ -1390,6 +1384,11 @@ begin
         Result := '"' + SsParser[i] + '"'#13#10 +
                   '\82Í\81ASSTP Bottle\82Å\94F\82ß\82ç\82ê\82È\82¢\82©\81A\94F\8e¯\82Å\82«\82È\82¢\83^\83O\82Å\82·\81B';
         Exit;
+      end else if SsParser.MarkUpType[i] = mtStr then begin
+        if Pos(#9,SsParser[i]) > 0 then begin
+          Result := '\83^\83u\95\8e\9a\82Í\81ASSTP Bottle\82Å\8eg\97p\82Å\82«\82Ü\82¹\82ñ\81B';
+          Exit;
+        end;
       end;
     end;
     if (SsParser[0] <> '\t') and Pref.WarnYenTNotExist then begin
@@ -1981,8 +1980,8 @@ end;
 procedure TfrmSender.actVoteMessageExecute(Sender: TObject);
 var Log: TLogItem;
 begin
-  if frmLog.lvwLog.Selected = nil then Exit;
-  Log := frmLog.SelectedBottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
+  if frmLog.lvwLog.ItemIndex < 0 then Exit;
+  Log := frmLog.SelectedBottleLog[frmLog.lvwLog.ItemIndex] as TLogItem;
   if Log = nil then Exit;
   if Log.LogType <> ltBottle then Exit;
   PostCommand([
@@ -1997,8 +1996,8 @@ end;
 procedure TfrmSender.actAgreeMessageExecute(Sender: TObject);
 var Log: TLogItem;
 begin
-  if frmLog.lvwLog.Selected = nil then Exit;
-  Log := frmLog.SelectedBottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
+  if frmLog.lvwLog.ItemIndex < 0 then Exit;
+  Log := frmLog.SelectedBottleLog[frmLog.lvwLog.ItemIndex] as TLogItem;
   if Log = nil then Exit;
   if Log.LogType <> ltBottle then Exit;
   PostCommand([
@@ -2595,12 +2594,12 @@ begin
   end;
   FBottleSstp.Clear;
   frmLog.AllBottleOpened;
-  if frmLog.lvwLog.Selected = nil then Exit;
+  if frmLog.lvwLog.ItemIndex < 0 then Exit;
   Log := frmLog.SelectedBottleLog;
   if Log = nil then Exit;
   FBottleSSTP.OnResendCountChange := nil;
   errCount := 0;
-  for i := frmLog.lvwLog.Selected.Index downto 0 do begin
+  for i := frmLog.lvwLog.ItemIndex downto 0 do begin
     if (Log[i] as TLogItem).LogType <> ltBottle then Continue;
     InsertItem := TLogItem.Create(Log[i] as TLogItem);
     try
@@ -2654,17 +2653,21 @@ begin
 end;
 
 procedure TfrmSender.FormResize(Sender: TObject);
-var w: integer;
+var w, SelS, SelL: integer;
 begin
   // \83G\83f\83B\83^\81[\95\94\95ª\82Ì\83\8f\81[\83h\83\89\83b\83v\95\9d\82ð\92²\90®\82·\82é
   if memScript.ColWidth <> 0 then
   begin
     with memScript do
     begin
+      SelS := SelStart;
+      SelL := SelLength;
       w := Width - LeftMargin - ColWidth div 2;
       if ScrollBars in [ssVertical, ssBoth] then
         w := w - GetSystemMetrics(SM_CYVSCROLL);
       WrapOption.WrapByte := w div ColWidth;
+      SelStart  := SelS;
+      SelLength := SelL;
     end;
   end;
 end;
@@ -2843,6 +2846,7 @@ begin
     frmEditorTalkShow.TalkShowFrame.SetPreviewFont(memScript.Font);
     frmEditorTalkShow.Show;
   end;
+  Pref.ShowEditorPreviewWindow := True;
   EditorPreview;
 end;
 
@@ -2970,8 +2974,8 @@ end;
 procedure TfrmSender.actSendToEditorExecute(Sender: TObject);
 var Log: TLogItem;
 begin
-  if frmLog.lvwLog.Selected = nil then Exit;
-  Log := frmLog.SelectedBottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
+  if frmLog.lvwLog.ItemIndex < 0 then Exit;
+  Log := frmLog.SelectedBottleLog[frmLog.lvwLog.ItemIndex] as TLogItem;
   if Log = nil then Exit;
   CopyFromLogToEditor(Log);
 end;
@@ -3037,11 +3041,11 @@ begin
   // \83\8d\83O\83E\83B\83\93\83h\83E\82Ì\8cÂ\95Ê\83\8d\83O\82ð\8dí\8f\9c\82·\82é
   if frmLog.SelectedBottleLog = nil then
     Exit;
-  if frmLog.lvwLog.Selected = nil then
+  if frmLog.lvwLog.ItemIndex = -1 then
     Exit;
-  frmLog.SelectedBottleLog.Delete(frmLog.lvwLog.Selected.Index);
+  frmLog.SelectedBottleLog.Delete(frmLog.lvwLog.ItemIndex);
   frmLog.UpdateWindow;
-  frmLog.lvwLogChange(Self, nil, ctState);
+  frmLog.lvwLogClick(Self);
 end;
 
 procedure TfrmSender.ClearEditor;