OSDN Git Service

Prepare for log download feature
authornaru <bottle@mikage.to>
Sun, 1 Dec 2002 03:56:38 +0000 (03:56 +0000)
committernaru <bottle@mikage.to>
Sun, 1 Dec 2002 03:56:38 +0000 (03:56 +0000)
bottleclient/LogForm.dfm
bottleclient/LogForm.pas
bottleclient/Logs.pas
bottleclient/MainForm.dfm
bottleclient/MainForm.pas
bottleclient/SstpBottle.dpr

index 3a5151c..8a63cfd 100755 (executable)
@@ -3,12 +3,12 @@ object frmLog: TfrmLog
   Top = 602
   Width = 494
   Height = 480
-  Caption = '\83\8d\83O - \83_\83u\83\8b\83N\83\8a\83b\83N\82Å\8dÄ\90¶'
+  Caption = #12525#12464' - '#12480#12502#12523#12463#12522#12483#12463#12391#20877#29983
   Color = clBtnFace
   Font.Charset = SHIFTJIS_CHARSET
   Font.Color = clWindowText
   Font.Height = -12
-  Font.Name = '\82l\82\82o\83S\83V\83b\83N'
+  Font.Name = #65325#65331' '#65328#12468#12471#12483#12463
   Font.Style = []
   OldCreateOrder = False
   ShowHint = True
@@ -30,16 +30,16 @@ object frmLog: TfrmLog
     object tbtnClear: TToolButton
       Left = 0
       Top = 0
-      Hint = '\83\8d\83O\8fÁ\8b\8e|\82·\82×\82Ä\82Ì\95\\8e¦\82³\82ê\82Ä\82¢\82é\83\8d\83O\82ð\8fÁ\8b\8e\82µ\82Ü\82·'
-      Caption = '\83\8d\83O\8fÁ\8b\8e'
+      Hint = #12525#12464#28040#21435'|'#12377#12409#12390#12398#34920#31034#12373#12428#12390#12356#12427#12525#12464#12434#28040#21435#12375#12414#12377
+      Caption = #12525#12464#28040#21435
       ImageIndex = 21
       OnClick = tbtnClearClick
     end
     object tbtnSaveLog: TToolButton
       Left = 23
       Top = 0
-      Hint = '\83\8d\83O\83t\83@\83C\83\8b\95Û\91¶'
-      Caption = '\95Û\91¶'
+      Hint = #12525#12464#12501#12449#12452#12523#20445#23384
+      Caption = #20445#23384
       DropdownMenu = PopupMenuSaveLog
       Enabled = False
       ImageIndex = 27
@@ -54,33 +54,39 @@ object frmLog: TfrmLog
       ImageIndex = 29
       Style = tbsSeparator
     end
-    object tbtnVoteMessage: TToolButton
+    object tbtnPreviewStyle: TToolButton
       Left = 65
       Top = 0
-      Action = frmSender.actVoteMessage
+      Hint = #12525#12464#12503#12524#12499#12517#12540#12398#34920#31034#24418#24335#12434#22793#26356#12375#12414#12377
+      Caption = 'tbtnPreviewStyle'
+      DropdownMenu = PopupMenuPreviewStyle
+      ImageIndex = 33
+      Style = tbsDropDown
+      OnClick = tbtnPreviewStyleClick
     end
-    object tbtnAgreeMessage: TToolButton
-      Left = 88
+    object tbtnDownloadLog: TToolButton
+      Left = 99
       Top = 0
-      Action = frmSender.actAgreeMessage
+      Action = frmSender.actDownloadLog
     end
     object ToolButton2: TToolButton
-      Left = 111
+      Left = 122
       Top = 0
       Width = 8
       Caption = 'ToolButton2'
+      Enabled = False
       ImageIndex = 33
       Style = tbsSeparator
     end
-    object tbtnPreviewStyle: TToolButton
-      Left = 119
+    object tbtnVoteMessage: TToolButton
+      Left = 130
       Top = 0
-      Hint = '\83\8d\83O\83v\83\8c\83r\83\85\81[\82Ì\95\\8e¦\8c`\8e®\82ð\95Ï\8dX\82µ\82Ü\82·'
-      Caption = 'tbtnPreviewStyle'
-      DropdownMenu = PopupMenuPreviewStyle
-      ImageIndex = 33
-      Style = tbsDropDown
-      OnClick = tbtnPreviewStyleClick
+      Action = frmSender.actVoteMessage
+    end
+    object tbtnAgreeMessage: TToolButton
+      Left = 153
+      Top = 0
+      Action = frmSender.actAgreeMessage
     end
   end
   object pnlUpper: TPanel
@@ -100,7 +106,6 @@ object frmLog: TfrmLog
         item
           Width = 50
         end>
-      SimplePanel = False
     end
     object pnlPanel: TPanel
       Left = 0
@@ -119,52 +124,6 @@ object frmLog: TfrmLog
         Align = alBottom
         ResizeStyle = rsUpdate
       end
-      object lvwLog: TListView
-        Left = 0
-        Top = 0
-        Width = 486
-        Height = 314
-        Align = alClient
-        Columns = <
-          item
-            Caption = '\93ú\95t'
-            Width = 120
-          end
-          item
-            Caption = '\83`\83\83\83\93\83l\83\8b'
-            Width = 100
-          end
-          item
-            Alignment = taRightJustify
-            Caption = '\93\8a\95['
-            Width = 40
-          end
-          item
-            Alignment = taRightJustify
-            Caption = '\93¯\88Ó'
-            Width = 40
-          end
-          item
-            Caption = '\83X\83N\83\8a\83v\83g'
-            Width = 400
-          end>
-        HideSelection = False
-        OwnerData = True
-        ReadOnly = True
-        RowSelect = True
-        PopupMenu = PopupMenuListView
-        SmallImages = frmSender.imgIcon
-        TabOrder = 0
-        ViewStyle = vsReport
-        OnChange = lvwLogChange
-        OnClick = lvwLogClick
-        OnColumnClick = lvwLogColumnClick
-        OnCustomDrawItem = lvwLogCustomDrawItem
-        OnCustomDrawSubItem = lvwLogCustomDrawSubItem
-        OnData = lvwLogData
-        OnDblClick = lvwLogDblClick
-        OnKeyPress = lvwLogKeyPress
-      end
       object edtScript: TRichEdit
         Left = 0
         Top = 317
@@ -174,14 +133,81 @@ object frmLog: TfrmLog
         Font.Charset = SHIFTJIS_CHARSET
         Font.Color = clWindowText
         Font.Height = -12
-        Font.Name = '\82l\82\83S\83V\83b\83N'
+        Font.Name = #65325#65331' '#12468#12471#12483#12463
         Font.Style = []
         HideScrollBars = False
         ParentFont = False
         PopupMenu = PopupMenuPreview
         ReadOnly = True
         ScrollBars = ssVertical
+        TabOrder = 0
+      end
+      object Panel1: TPanel
+        Left = 0
+        Top = 0
+        Width = 486
+        Height = 314
+        Align = alClient
         TabOrder = 1
+        object TabControl1: TTabControl
+          Left = 1
+          Top = 1
+          Width = 484
+          Height = 26
+          Align = alTop
+          TabOrder = 0
+          Tabs.Strings = (
+            #12459#12524#12531#12488)
+          TabIndex = 0
+        end
+        object lvwLog: TListView
+          Left = 1
+          Top = 27
+          Width = 484
+          Height = 286
+          Align = alClient
+          BevelInner = bvNone
+          BorderStyle = bsNone
+          Columns = <
+            item
+              Caption = #26085#20184
+              Width = 120
+            end
+            item
+              Caption = #12481#12515#12531#12493#12523
+              Width = 100
+            end
+            item
+              Alignment = taRightJustify
+              Caption = #25237#31080
+              Width = 40
+            end
+            item
+              Alignment = taRightJustify
+              Caption = #21516#24847
+              Width = 40
+            end
+            item
+              Caption = #12473#12463#12522#12503#12488
+              Width = 400
+            end>
+          HideSelection = False
+          OwnerData = True
+          ReadOnly = True
+          RowSelect = True
+          PopupMenu = PopupMenuListView
+          SmallImages = frmSender.imgIcon
+          TabOrder = 1
+          ViewStyle = vsReport
+          OnChange = lvwLogChange
+          OnClick = lvwLogClick
+          OnColumnClick = lvwLogColumnClick
+          OnCustomDrawItem = lvwLogCustomDrawItem
+          OnCustomDrawSubItem = lvwLogCustomDrawSubItem
+          OnData = lvwLogData
+          OnDblClick = lvwLogDblClick
+          OnKeyPress = lvwLogKeyPress
+        end
       end
     end
   end
@@ -202,7 +228,7 @@ object frmLog: TfrmLog
     Left = 376
     Top = 56
     object mnPopUpCopyScript: TMenuItem
-      Caption = '\82±\82ÌBottle\83X\83N\83\8a\83v\83g\82ð\83R\83s\81['
+      Caption = #12371#12398'Bottle'#12473#12463#12522#12503#12488#12434#12467#12500#12540
       Enabled = False
       OnClick = mnPopUpCopyScriptClick
     end
@@ -213,17 +239,17 @@ object frmLog: TfrmLog
       Action = frmSender.actAgreeMessage
     end
     object mnJumpURL: TMenuItem
-      Caption = '&URL\83W\83\83\83\93\83v'
+      Caption = '&URL'#12472#12515#12531#12503
       Enabled = False
     end
   end
   object SaveDialog: TSaveDialog
     DefaultExt = 'txt'
     Filter = 
-      '\83\8d\83O\83t\83@\83C\83\8b (*.log)|*.log|\83e\83L\83X\83g\83t\83@\83C\83\8b (*.txt)|*.txt|XML\83t' +
-      '\83@\83C\83\8b (*.xml)|*.xml|\82·\82×\82Ä\82Ì\83t\83@\83C\83\8b (*.*)|*.*'
+      #12525#12464#12501#12449#12452#12523' (*.log)|*.log|'#12486#12461#12473#12488#12501#12449#12452#12523' (*.txt)|*.txt|XML'#12501#12449#12452#12523' (*.xml)|*.xm' +
+      'l|'#12377#12409#12390#12398#12501#12449#12452#12523' (*.*)|*.*'
     Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
-    Title = '\83\8d\83O\83t\83@\83C\83\8b\82Ì\95Û\91¶'
+    Title = #12525#12464#12501#12449#12452#12523#12398#20445#23384
     Left = 344
     Top = 56
   end
@@ -231,20 +257,20 @@ object frmLog: TfrmLog
     Left = 304
     Top = 56
     object mnSaveLog: TMenuItem
-      Caption = 'sstp.log\8c`\8e®(&S)'
+      Caption = 'sstp.log'#24418#24335'(&S)'
       Default = True
       OnClick = mnSaveLogClick
     end
     object mnSaveLogChannel: TMenuItem
-      Caption = 'sstp.log\8c`\8e®(\83`\83\83\83\93\83l\83\8b\95t)(&C)'
+      Caption = 'sstp.log'#24418#24335'('#12481#12515#12531#12493#12523#20184')(&C)'
       OnClick = mnSaveLogChannelClick
     end
     object mnSaveLogScript: TMenuItem
-      Caption = '\83X\83N\83\8a\83v\83g\82Ì\82Ý(&N)'
+      Caption = #12473#12463#12522#12503#12488#12398#12415'(&N)'
       OnClick = mnSaveLogScriptClick
     end
     object mnSaveLogXML: TMenuItem
-      Caption = '&XML\8c`\8e®'
+      Caption = '&XML'#24418#24335
       OnClick = mnSaveLogXMLClick
     end
   end
@@ -253,17 +279,17 @@ object frmLog: TfrmLog
     Left = 272
     Top = 54
     object mnPreviewStyleConversation: TMenuItem
-      Caption = '\91Î\98b\8c`\8e®(&D)'
+      Caption = #23550#35441#24418#24335'(&D)'
       OnClick = mnPreviewStyleClick
     end
     object mnPreviewStyleScript: TMenuItem
       Tag = 1
-      Caption = '\83X\83N\83\8a\83v\83g\95\\8e¦(&S)'
+      Caption = #12473#12463#12522#12503#12488#34920#31034'(&S)'
       OnClick = mnPreviewStyleClick
     end
     object mnPreviewStyleScriptWithLineBreak: TMenuItem
       Tag = 2
-      Caption = '\83X\83N\83\8a\83v\83g\95\\8e¦(\89ü\8ds\82 \82è)(&N)'
+      Caption = #12473#12463#12522#12503#12488#34920#31034'('#25913#34892#12354#12426')(&N)'
       OnClick = mnPreviewStyleClick
     end
   end
index a2955d4..17b650a 100755 (executable)
@@ -5,7 +5,7 @@ interface
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   ComCtrls, ToolWin, StdCtrls, ExtCtrls, SsParser, BottleDef, Menus,
-  Clipbrd, Logs, ShellAPI, Commctrl, DirectSstp;
+  Clipbrd, Logs, ShellAPI, Commctrl, DirectSstp, Contnrs;
 
 type
   TSaveLogType = (stLog, stLogWithChannels, stText, stXML);
@@ -24,7 +24,6 @@ type
     mnPopUpVoteMessage: TMenuItem;
     SaveDialog: TSaveDialog;
     pnlPanel: TPanel;
-    lvwLog: TListView;
     Splitter: TSplitter;
     edtScript: TRichEdit;
     mnPopUpCopyScript: TMenuItem;
@@ -43,6 +42,10 @@ type
     mnPreviewStyleConversation: TMenuItem;
     mnPreviewStyleScript: TMenuItem;
     mnPreviewStyleScriptWithLineBreak: TMenuItem;
+    Panel1: TPanel;
+    TabControl1: TTabControl;
+    lvwLog: TListView;
+    tbtnDownloadLog: TToolButton;
     procedure tbtnClearClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure lvwLogChange(Sender: TObject; Item: TListItem;
@@ -72,6 +75,7 @@ type
     SortColumn: integer;  //\97ñ\83N\83\8a\83b\83N\83\\81[\83g\97p
     SortDesc: boolean;    //\97ñ\83N\83\8a\83b\83N\83\\81[\83g\97p
     FLastScript: String; //\83X\83N\83\8a\83v\83g\8dÄ\95`\89æ\97}\90§\97p
+    FExtendedBottleLogList: TObjectList;
     procedure UpdateScript(const Script: String);
     procedure UpdateScriptConversationColor(const Script: String);
     procedure UpdateScriptConversationNoColor(const Script: String);
@@ -85,6 +89,7 @@ type
     procedure CreateParams(var Params: TCreateParams); override;
   public
     { Public \90é\8c¾ }
+    function SelectedBottleLog: TBottleLogList;
     procedure AddScriptLog(const Script, Channel, MID, Ghost: String);
     procedure AddSystemLog(const MessageString: String);
     procedure SetBottleStatusToPlaying(const MID: String);
@@ -122,8 +127,8 @@ begin
   lvwLog.OnChange := nil; //\83C\83x\83\93\83g\94­\90¶(\82¢\82ë\82¢\82ë\8dÄ\95`\89æ\82ª\8bN\82«\82é)\82Ì\97}\90§
   if lvwLog.Selected <> nil then Sel := lvwLog.Selected.Index else Sel := -1;
   LogItem := TLogItem.Create(ltBottle, MID, Channel, Script, Ghost, Now());
-  BottleLog.Insert(0, LogItem);
-  lvwLog.Items.Count := BottleLog.Count;
+  CurrentBottleLog.Insert(0, LogItem);
+  lvwLog.Items.Count := CurrentBottleLog.Count;
   UpdateWindow;
   if Sel >= 0 then begin
     lvwLog.Selected := lvwLog.Items[Sel + 1];
@@ -141,8 +146,8 @@ begin
   lvwLog.OnChange := nil;
   if lvwLog.Selected <> nil then Sel := lvwLog.Selected.Index else Sel := -1;
   LogItem := TLogItem.Create(ltSystemLog, '', '', MessageString, '', Now());
-  BottleLog.Insert(0, LogItem);
-  lvwLog.Items.Count := BottleLog.Count;
+  CurrentBottleLog.Insert(0, LogItem);
+  lvwLog.Items.Count := CurrentBottleLog.Count;
   UpdateWindow;
   if Sel >= 0 then begin
     lvwLog.Selected := lvwLog.Items[Sel + 1];
@@ -155,14 +160,20 @@ end;
 
 procedure TfrmLog.tbtnClearClick(Sender: TObject);
 begin
-  BottleLog.Clear;
-  lvwLog.Items.Count := 0;
-  lvwLog.Invalidate;
-  lvwLogChange(Self, nil, ctState);
+  if SelectedBottleLog = CurrentBottleLog then begin
+    CurrentBottleLog.Clear;
+    lvwLog.Items.Count := 0;
+    lvwLog.Invalidate;
+    lvwLogChange(Self, nil, ctState);
+  end else begin
+    {TODO: \83\8d\83O\8dí\8f\9c\83{\83^\83\93\82Ì\8f\88\97\9d}
+  end;
 end;
 
 procedure TfrmLog.FormCreate(Sender: TObject);
 begin
+  FExtendedBottleLogList := TObjectList.Create;
+
   SsParser.TagPattern.Assign(frmSender.SsParser.TagPattern);
   SsParser.MetaPattern.Assign(frmSender.SsParser.MetaPattern);
 
@@ -186,6 +197,8 @@ begin
     Bottom := Self.Top + Self.Height - 1;
   end;
   Pref.LogWindowDividerPos := edtScript.Height;
+
+  FreeAndNil(FExtendedBottleLogList);
 end;
 
 procedure TfrmLog.lvwLogChange(Sender: TObject; Item: TListItem;
@@ -197,8 +210,8 @@ begin
   if Change = ctState then begin
     Script := '';
     if lvwLog.Selected <> nil then begin
-      Log := BottleLog.Bottles[lvwLog.Selected.Index];
-      if Log.LogType = ltBottle then begin
+      Log := SelectedBottleLog.Bottles[lvwLog.Selected.Index];
+      if (Log.LogType = ltBottle) and not frmSender.Connecting then begin
         Script := Log.Script;
         frmSender.actVoteMessage.Enabled := true;
         frmSender.actAgreeMessage.Enabled := true;
@@ -229,7 +242,7 @@ var Script: String;
 begin
   if lvwLog.Selected = nil then Exit;
   //Log := TLogItem(lvwLog.Selected.Data);
-  Log := BottleLog.Bottles[lvwLog.Selected.Index];
+  Log := SelectedBottleLog.Bottles[lvwLog.Selected.Index];
   if Log = nil then Exit;
   if Log.LogType <> ltBottle then Exit;
   Script := Log.Script;
@@ -367,7 +380,7 @@ var SortType: TBottleLogSortType;
     SelectedMID: String;
 begin
   if lvwLog.Selected <> nil then
-    SelectedMID := BottleLog.Bottles[lvwLog.Selected.Index].MID;
+    SelectedMID := SelectedBottleLog.Bottles[lvwLog.Selected.Index].MID;
   if SortColumn = Column.Index then
     SortDesc := not SortDesc
   else begin
@@ -382,7 +395,7 @@ begin
     subScript:  SortType := stScript;
   else SortType := stLogTime;
   end;
-  BottleLog.SortBottles(SortType, SortDesc);
+  SelectedBottleLog.SortBottles(SortType, SortDesc);
   lvwLog.Invalidate;
   SelAndFocusMessage(SelectedMID);
 end;
@@ -393,7 +406,7 @@ var
   Log: TLogItem;
   Clip: TClipBoard;
 begin
-  Log := BottleLog.Bottles[frmLog.lvwLog.Selected.Index];
+  Log := SelectedBottleLog.Bottles[frmLog.lvwLog.Selected.Index];
   if Log = nil then Exit;
   Clip := ClipBoard();
   Clip.SetTextBuf(PChar(Log.Script));
@@ -401,8 +414,8 @@ end;
 
 procedure TfrmLog.SetBottleStatusToOpened(const MID: String);
 begin
-  if BottleLog.Bottle(MID) <> nil then begin
-    BottleLog.Bottle(MID).State := lsOpened;
+  if CurrentBottleLog.Bottle(MID) <> nil then begin
+    CurrentBottleLog.Bottle(MID).State := lsOpened;
     lvwLog.OnChange := nil;
     lvwLog.Invalidate;
     lvwLog.OnChange := lvwLogChange;
@@ -411,8 +424,8 @@ end;
 
 procedure TfrmLog.SetBottleStatusToPlaying(const MID: String);
 begin
-  if BottleLog.Bottle(MID) <> nil then begin
-    BottleLog.Bottle(MID).State := lsPlaying;
+  if CurrentBottleLog.Bottle(MID) <> nil then begin
+    CurrentBottleLog.Bottle(MID).State := lsPlaying;
     lvwLog.OnChange := nil;
     lvwLog.Invalidate;
     lvwLog.OnChange := lvwLogChange;
@@ -436,8 +449,8 @@ begin
       Log := TStringList.Create;
       case SaveType of
         stLog, stLogWithChannels: begin
-          for i := 0 to BottleLog.Count -1 do begin
-            LogItem := BottleLog.Bottles[i];
+          for i := 0 to SelectedBottleLog.Count -1 do begin
+            LogItem := SelectedBottleLog.Bottles[i];
             if LogItem = nil then Continue;
             if LogItem.LogType <> ltBottle then Continue;
             Date := FormatDateTime('yyyy/mm/dd hh:nn:ss ', LogItem.LogTime);
@@ -450,8 +463,8 @@ begin
           end;
         end;
         stText: begin
-          for i := 0 to BottleLog.Count -1 do begin
-            LogItem := BottleLog.Bottles[i];
+          for i := 0 to SelectedBottleLog.Count -1 do begin
+            LogItem := SelectedBottleLog.Bottles[i];
             if LogItem = nil then Continue;
             if LogItem.LogType <> ltBottle then Continue;
             Log.Add(LogItem.Script);
@@ -460,8 +473,8 @@ begin
         stXML: begin
           Log.Add('<?xml version=''1.0'' encoding=''Shift_JIS''?>');
           Log.Add('<bottlelog>');
-          for i := 0 to BottleLog.Count -1 do begin
-            LogItem := BottleLog.Bottles[i];
+          for i := 0 to SelectedBottleLog.Count -1 do begin
+            LogItem := SelectedBottleLog.Bottles[i];
             if LogItem = nil then Continue;
             if LogItem.LogType <> ltBottle then Continue;
             Date := FormatDateTime('yyyy/mm/dd hh:nn:ss', LogItem.LogTime);
@@ -508,7 +521,7 @@ var i: integer;
     Log: TLogItem;
 begin
   i := Item.Index;
-  Log := BottleLog.Bottles[i];
+  Log := SelectedBottleLog.Bottles[i];
   with Item do begin
     Caption := FormatDateTime('yy/mm/dd hh:nn:ss', Log.LogTime);
     SubItems.Clear;
@@ -546,7 +559,7 @@ begin
     if lvwLog.Color <> clWindow then lvwLog.Color := clWindow;
     if lvwLog.Font.Color <> clWindowText then lvwLog.Font.Color := clWindowText;
   end;
-  lvwLog.Items.Count := BottleLog.Count;
+  lvwLog.Items.Count := SelectedBottleLog.Count;
   lvwLog.Invalidate;
   //lvwLogChange(Self, lvwLog.Selected, ctState);
 end;
@@ -562,7 +575,7 @@ begin
   end;
   mnJumpURL.Enabled := false;
   if lvwLog.Selected = nil then Exit;
-  Log := BottleLog.Bottles[lvwLog.Selected.Index];
+  Log := SelectedBottleLog.Bottles[lvwLog.Selected.Index];
   if Log = nil then Exit;
   Urls := nil;
   try
@@ -625,8 +638,8 @@ procedure TfrmLog.SelAndFocusMessage(const MID: String);
 var i: integer;
     Log: TLogItem;
 begin
-  for i := 0 to BottleLog.Count-1 do begin
-    Log := BottleLog.Items[i] as TLogItem;
+  for i := 0 to SelectedBottleLog.Count-1 do begin
+    Log := SelectedBottleLog.Items[i] as TLogItem;
     if Log.MID = MID then begin
       lvwLog.Items[i].Selected := true;
       lvwLog.Items[i].Focused := true;
@@ -789,4 +802,9 @@ begin
   Result := S;
 end;
 
+function TfrmLog.SelectedBottleLog: TBottleLogList;
+begin
+  Result := CurrentBottleLog;
+end;
+
 end.
index 168da3a..3f450c8 100755 (executable)
@@ -48,13 +48,14 @@ type
   private
     function GetBottles(Index: integer): TLogItem;
   public
+    constructor Create;
     procedure SortBottles(LogSortType: TBottleLogSortType; Desc: boolean);
     function Bottle(MID: String): TLogItem;
     property Bottles[Index: integer]: TLogItem read GetBottles;
   end;
 
 var
-  BottleLog: TBottleLogList;
+  CurrentBottleLog: TBottleLogList; //\83J\83\8c\83\93\83g
   ASortType: TBottleLogSortType; //LogCompare\8aÖ\90\94\82©\82ç\8c©\82¦\82é\82æ\82¤\82É\88ê\8e\9e\91Þ\94ð\97p
   ASortDesc: boolean;
 
@@ -165,6 +166,12 @@ begin
     end;
 end;
 
+constructor TBottleLogList.Create;
+begin
+  inherited;
+  OwnsObjects := true;
+end;
+
 function TBottleLogList.GetBottles(Index: integer): TLogItem;
 begin
   Result := Items[Index] as TLogItem;
@@ -179,14 +186,13 @@ end;
 
 initialization
   try
-    BottleLog := TBottleLogList.Create;
-    BottleLog.OwnsObjects := true;
+    CurrentBottleLog := TBottleLogList.Create;
   except
     ShowMessage('BottleLog\8f\89\8aú\89»\8e¸\94s');
     Application.Terminate;
   end;
 
 finalization
-  BottleLog.Free;
+  CurrentBottleLog.Free;
 
 end.
index b9ed56f..7cd5fd5 100755 (executable)
@@ -439,10 +439,6 @@ object frmSender: TfrmSender
       end
     end
   end
-  object ColorDialog: TColorDialog
-    Left = 232
-    Top = 72
-  end
   object ActionList: TActionList
     Images = imgIcon
     Left = 200
@@ -608,6 +604,12 @@ object frmSender: TfrmSender
       ShortCut = 16462
       OnExecute = actResetGhostExecute
     end
+    object actDownloadLog: TAction
+      Caption = #12525#12464#12480#12454#12531#12525#12540#12489
+      Hint = #12508#12488#12523#12469#12540#12496#12363#12425#12508#12488#12523#12398#12525#12464#12434#12480#12454#12531#12525#12540#12489
+      ImageIndex = 36
+      OnExecute = actDownloadLogExecute
+    end
   end
   object mnPopUp: TPopupMenu
     Images = imgIcon
@@ -696,7 +698,7 @@ object frmSender: TfrmSender
     Left = 8
     Top = 72
     Bitmap = {
-      494C010124002700040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010125002700040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600
       000000000000360000002800000040000000A0000000010020000000000000A0
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -707,28 +709,39 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      0000D4F0FF00D4F0FF00D4F0FF00D4F0FF00D4F0FF00D4F0FF00D4F0FF000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000000000000000000000000000FF000000FF0000000000
+      0000B1E2FF00B1E2FF00B1E2FF00B1E2FF00B1E2FF00B1E2FF00B1E2FF00B1E2
+      FF00B1E2FF00B1E2FF00B1E2FF00000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000000000000000000000000000FF000000FF0000000000
+      0000B1E2FF000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000000000000000000000000000FF000000FF6B8F000000
+      0000B1E2FF00B1E2FF0000000000000000000000000000000000000000000000
+      0000B1E2FF00B1E2FF00B1E2FF00000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000000000000000000000000000FF6B8F00FF6B8F000000
+      00000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -736,6 +749,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000FFFF0000F0FBFF00F0FBFF00FFFF0000FFFF0000FFFF
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -743,6 +757,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000FFFF0000F0FBFF00F0FBFF00F0FBFF00FFFF0000FFFF
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -750,6 +765,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000FFFF0000F0FBFF00F0FBFF00F0FBFF00FFFF0000FFFF
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -757,6 +773,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000FFFF0000FFFF0000F0FBFF00F0FBFF00F0FBFF00FFFF
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -764,6 +781,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000FFFF0000FFFF0000F0FBFF00F0FBFF00FFFF0000FFFF
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -771,6 +789,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -778,6 +797,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      00000000000000000000FFFF000000969600009696000096960000969600FFFF
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -793,6 +813,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000009696000096960000969600009696000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -800,26 +821,7 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
+      0000000000000000000000000000009696000096960000969600009696000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -1980,11 +1982,11 @@ object frmSender: TfrmSender
       0000000000000000000000000000000000000000000000000000000000000000
       000000000000000000000000000000000000424D3E000000000000003E000000
       2800000040000000A00000000100010000000000000500000000000000000000
-      000000000000000000000000FFFFFF0000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      0000000000000000000000000000000000000000000000000000000000000000
-      00000000000000000000000000000000E0FFFFFFFFFFFFFF807FFFFFFFFFFFFF
+      000000000000000000000000FFFFFF00F01F0000000000000001000000000000
+      0000000000000000000100000000000000000000000000000001000000000000
+      0807000000000000F807000000000000F807000000000000F807000000000000
+      F807000000000000F807000000000000F807000000000000FC0F000000000000
+      FE1F000000000000FE1F000000000000E0FFFFFFFFFFFFFF807FFFFFFFFFFFFF
       807F0000FFFFFFFFC1FF0000FF7FFEFFF1FF0000FE7FFE7FF0E70000FC7FFE3F
       C0E30000F807E01FC0630000F007E00FE0630000E007E007F0010000F007E00F
       F8010000F807E01FFC010000FC7FFE3FFE010000FE7FFE7FFF000001FF7FFEFF
@@ -2020,8 +2022,7 @@ object frmSender: TfrmSender
       F00BFFFFFC018000F00BFB7FFC010000F00BF93FFC010000F00BF81F00010000
       F00B800F00010001F00B800700010003B00B8003000100038003800700030003
       C027800F00070003802FF81F000F0FC3C01FF93F00FF0003C0FFFB7F01FF8007
-      93FFFFFF03FFF87FB33FFFFFFFFFFFFF00000000000000000000000000000000
-      000000000000}
+      93FFFFFF03FFF87FB33FFFFFFFFFFFFF}
   end
   object mnPopupConst: TPopupMenu
     Images = imgIcon
@@ -2087,6 +2088,7 @@ object frmSender: TfrmSender
   end
   object DirectSstp: TDirectSstp
     SstpSender = 'My Program'
+    Interval = 2000
     Sleep = False
     TargetHWnd = 0
     OnResendTrying = DirectSstpResendTrying
index de625cd..5b7cd19 100755 (executable)
@@ -10,7 +10,7 @@ uses
   RichEdit, Clipbrd, SsParser, MPlayer, SakuraSeeker,
   HeadValue, Logs,
   IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdSLPP20,
-  IdException, HttpThread, IdHTTP, IdURI, DirectSstp, XPMan;
+  IdException, HttpThread, IdHTTP, IdURI, DirectSstp, XPMan, LogDownload;
 
 type
   TfrmSender = class(TForm)
@@ -24,7 +24,6 @@ type
     mnHelp: TMenuItem;
     mnAbout: TMenuItem;
     mnEditConst: TMenuItem;
-    ColorDialog: TColorDialog;
     ActionList: TActionList;
     actEditCopy: TEditCopy;
     actEditCut: TEditCut;
@@ -142,6 +141,7 @@ type
     timDisconnectCheckTimer: TTimer;
     DirectSstp: TDirectSstp;
     XPManifest: TXPManifest;
+    actDownloadLog: TAction;
     procedure actConfirmExecute(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormDestroy(Sender: TObject);
@@ -223,6 +223,7 @@ type
     procedure actNextGhostExecute(Sender: TObject);
     procedure actResetGhostExecute(Sender: TObject);
     procedure timDisconnectCheckTimerTimer(Sender: TObject);
+    procedure actDownloadLogExecute(Sender: TObject);
   private
     FSleeping: boolean;
     FStatusText: String;
@@ -262,7 +263,6 @@ type
     procedure SetConnecting(const Value: boolean);
     procedure SetAdded(const Value: boolean);
     procedure mnConstClick(Sender: TObject);
-    property Connecting: boolean read FConnecting write SetConnecting;
     property Added: boolean read FAdded write SetAdded;
     property Sleeping: boolean read FSleeping write SetSleeping;
     property StatusText: String read FStatusText write SetStatusText;
@@ -285,6 +285,7 @@ type
     procedure RetryBeginConnect;
     procedure EndConnect;
     procedure Notified;
+    property Connecting: boolean read FConnecting write SetConnecting;
     property ChannelList: TChannelList read FChannelList;
     function SetHWndToFavoriteGhost(const Ghost: String): String;
     function GhostNameToSetName(const Ghost: String): String;
@@ -448,8 +449,9 @@ begin
     actStart.Enabled := true;
     actStop.Enabled := true;
     actSend.Enabled := true;
-    actVoteMessage.Enabled := true;
-    actAgreeMessage.Enabled := true;
+    //actVoteMessage.Enabled := true;
+    //actAgreeMessage.Enabled := true;
+    frmLog.lvwLogChange(Self, nil, ctState);
     mnGetNewId.Enabled := Pref.LUID = '';
     Screen.Cursor := crDefault;
   end;
@@ -1262,13 +1264,13 @@ begin
       end;
       etForceBroadcastInformation: begin
         if HeadValue['Type'] = 'Vote' then begin
-          if BottleLog.Bottle(HeadValue['MID']) <> nil then begin
-            BottleLog.Bottle(HeadValue['MID']).Votes := StrToIntDef(HeadValue['Num'], 0);
+          if CurrentBottleLog.Bottle(HeadValue['MID']) <> nil then begin
+            CurrentBottleLog.Bottle(HeadValue['MID']).Votes := StrToIntDef(HeadValue['Num'], 0);
             frmLog.lvwLog.Invalidate;
           end;
         end else if HeadValue['Type'] = 'Agree' then begin
-          if BottleLog.Bottle(HeadValue['MID']) <> nil then begin
-            BottleLog.Bottle(HeadValue['MID']).Agrees := StrToIntDef(HeadValue['Num'], 0);
+          if CurrentBottleLog.Bottle(HeadValue['MID']) <> nil then begin
+            CurrentBottleLog.Bottle(HeadValue['MID']).Agrees := StrToIntDef(HeadValue['Num'], 0);
             frmLog.lvwLog.Invalidate;
           end;
         end;
@@ -1329,8 +1331,8 @@ begin
   if Re = mrOk then begin
     DirectSstp.ClearCue;
   end;
-  for i := 0 to BottleLog.Count-1 do
-    BottleLog.Bottles[i].State := lsOpened;
+  for i := 0 to CurrentBottleLog.Count-1 do
+    CurrentBottleLog.Bottles[i].State := lsOpened;
   frmLog.UpdateWindow;
 end;
 
@@ -1739,7 +1741,8 @@ end;
 procedure TfrmSender.actVoteMessageExecute(Sender: TObject);
 var Log: TLogItem;
 begin
-  Log := BottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
+  if frmLog.lvwLog.Selected = nil then Exit;
+  Log := frmLog.SelectedBottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
   if Log = nil then Exit;
   if Log.LogType <> ltBottle then Exit;
   PostCommand([
@@ -1754,7 +1757,8 @@ end;
 procedure TfrmSender.actAgreeMessageExecute(Sender: TObject);
 var Log: TLogItem;
 begin
-  Log := BottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
+  if frmLog.lvwLog.Selected = nil then Exit;
+  Log := frmLog.SelectedBottleLog[frmLog.lvwLog.Selected.Index] as TLogItem;
   if Log = nil then Exit;
   if Log.LogType <> ltBottle then Exit;
   PostCommand([
@@ -2079,4 +2083,9 @@ begin
   end;
 end;
 
+procedure TfrmSender.actDownloadLogExecute(Sender: TObject);
+begin
+  frmLogDownload.Execute;
+end;
+
 end.
index f5b1b58..5ab7edc 100755 (executable)
@@ -25,7 +25,8 @@ uses
   ChannelListForm in 'ChannelListForm.pas' {frmChannelList},
   MessageBox in 'MessageBox.pas' {frmMessageBox},
   Logs in 'Logs.pas',
-  HttpThread in 'HttpThread.pas';
+  HttpThread in 'HttpThread.pas',
+  LogDownload in 'LogDownload.pas' {frmLogDownload};
 
 {$R *.RES}
 {$DEFINE Mani}
@@ -43,6 +44,7 @@ begin
   Application.CreateForm(TfrmLog, frmLog);
   Application.CreateForm(TfrmChannelList, frmChannelList);
   Application.CreateForm(TfrmMessageBox, frmMessageBox);
+  Application.CreateForm(TfrmLogDownload, frmLogDownload);
   if not Application.Terminated then frmSender.Show;
   Application.Run;
 end.