LuaOutput.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. unit LuaOutput;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, ComCtrls, ExtCtrls, JvComponent, JvDockControlForm,
  6. VirtualTrees, Menus, Clipbrd, Lua;
  7. type
  8. PLuaOutputLine = ^TPLuaOutputLine;
  9. TPLuaOutputLine = record
  10. FileName: String;
  11. LineText: String;
  12. LineNumber: Integer;
  13. end;
  14. TfrmLuaOutput = class(TForm)
  15. JvDockClient1: TJvDockClient;
  16. vstLuaOutput: TVirtualStringTree;
  17. ppmLuaOutput: TPopupMenu;
  18. Clear1: TMenuItem;
  19. N1: TMenuItem;
  20. FindSource1: TMenuItem;
  21. Copy1: TMenuItem;
  22. N2: TMenuItem;
  23. SelectAll1: TMenuItem;
  24. ClearAll1: TMenuItem;
  25. procedure vstLuaOutputGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
  26. procedure vstLuaOutputGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
  27. procedure ppmLuaOutputPopup(Sender: TObject);
  28. procedure SelectAll1Click(Sender: TObject);
  29. procedure Copy1Click(Sender: TObject);
  30. procedure FindSource1Click(Sender: TObject);
  31. procedure Clear1Click(Sender: TObject);
  32. procedure ClearAll1Click(Sender: TObject);
  33. procedure vstLuaOutputDblClick(Sender: TObject);
  34. private
  35. { Private declarations }
  36. public
  37. { Public declarations }
  38. procedure Put(FileName, LineText: String; LineNumber: Integer);
  39. end;
  40. var
  41. frmLuaOutput: TfrmLuaOutput;
  42. implementation
  43. uses Main, Misc;
  44. {$R *.dfm}
  45. procedure TfrmLuaOutput.Put(FileName, LineText: String; LineNumber: Integer);
  46. var
  47. pData: PLuaOutputLine;
  48. pNode: PVirtualNode;
  49. begin
  50. if LineText <> #13#10 then
  51. begin
  52. pNode := vstLuaOutput.AddChild(vstLuaOutput.RootNode);
  53. pData := vstLuaOutput.GetNodeData(pNode);
  54. pData.FileName := FileName;
  55. pData.LineText := LUA_PROMPT + LineText;
  56. pData.LineNumber := LineNumber;
  57. end;
  58. end;
  59. procedure TfrmLuaOutput.vstLuaOutputGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
  60. var
  61. pData: PLuaOutputLine;
  62. begin
  63. case Column of
  64. -1:
  65. begin
  66. pData := vstLuaOutput.GetNodeData(Node);
  67. CellText := pData.LineText;
  68. end;
  69. end;
  70. end;
  71. procedure TfrmLuaOutput.vstLuaOutputGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
  72. begin
  73. NodeDataSize := SizeOf(TPLuaOutputLine);
  74. end;
  75. procedure TfrmLuaOutput.ppmLuaOutputPopup(Sender: TObject);
  76. begin
  77. ClearAll1.Enabled := True;
  78. SelectAll1.Enabled := True;
  79. FindSource1.Enabled := (vstLuaOutput.SelectedCount = 1);
  80. Clear1.Enabled := (vstLuaOutput.SelectedCount > 0);
  81. Copy1.Enabled := (vstLuaOutput.SelectedCount > 0);
  82. end;
  83. procedure TfrmLuaOutput.SelectAll1Click(Sender: TObject);
  84. begin
  85. vstLuaOutput.SelectAll(False);
  86. end;
  87. procedure TfrmLuaOutput.Copy1Click(Sender: TObject);
  88. var
  89. pNode: PVirtualNode;
  90. pData: PLuaOutputLine;
  91. ClipboardText: String;
  92. begin
  93. ClipboardText := '';
  94. pNode := vstLuaOutput.GetFirstSelected();
  95. while Assigned(pNode) do
  96. begin
  97. pData := vstLuaOutput.GetNodeData(pNode);
  98. ClipboardText := ClipboardText + pData.LineText;
  99. pNode := vstLuaOutput.GetNextSelected(pNode);
  100. // Add carriage return if required
  101. if Assigned(pNode) then
  102. ClipboardText := ClipboardText + #13#10;
  103. end;
  104. Clipboard.SetTextBuf(PChar(ClipboardText));
  105. end;
  106. procedure TfrmLuaOutput.FindSource1Click(Sender: TObject);
  107. var
  108. pNode: PVirtualNode;
  109. pData: PLuaOutputLine;
  110. begin
  111. pNode := vstLuaOutput.GetFirstSelected();
  112. if Assigned(pNode) then
  113. begin
  114. pData := vstLuaOutput.GetNodeData(pNode);
  115. frmLuaEditMain.PopUpUnitToScreen(pData.FileName, pData.LineNumber, False, HIGHLIGHT_SELECT);
  116. end;
  117. end;
  118. procedure TfrmLuaOutput.Clear1Click(Sender: TObject);
  119. begin
  120. vstLuaOutput.DeleteSelectedNodes();
  121. end;
  122. procedure TfrmLuaOutput.ClearAll1Click(Sender: TObject);
  123. begin
  124. vstLuaOutput.Clear;
  125. end;
  126. procedure TfrmLuaOutput.vstLuaOutputDblClick(Sender: TObject);
  127. begin
  128. FindSource1Click(Sender);
  129. end;
  130. end.