LuaEditMessages.pas 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. unit LuaEditMessages;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, JvComponent, JvDockControlForm, VirtualTrees, ImgList;
  6. type
  7. PLuaEditMsgLine = ^TPLuaEditMsgLine;
  8. TPLuaEditMsgLine = record
  9. FileName: String;
  10. MsgText: String;
  11. LineNumber: Integer;
  12. MsgType: Integer;
  13. end;
  14. TfrmLuaEditMessages = class(TForm)
  15. JvDockClient1: TJvDockClient;
  16. vstLuaEditMessages: TVirtualStringTree;
  17. imlMessages: TImageList;
  18. procedure vstLuaEditMessagesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
  19. procedure vstLuaEditMessagesGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
  20. procedure vstLuaEditMessagesGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
  21. procedure vstLuaEditMessagesDblClick(Sender: TObject);
  22. private
  23. { Private declarations }
  24. public
  25. { Public declarations }
  26. function Put(MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1): PVirtualNode;
  27. function PutChild(Parent: PVirtualNode; MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1): PVirtualNode;
  28. end;
  29. var
  30. frmLuaEditMessages: TfrmLuaEditMessages;
  31. implementation
  32. uses Main, Misc;
  33. {$R *.dfm}
  34. function TfrmLuaEditMessages.Put(MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1): PVirtualNode;
  35. var
  36. pData: PLuaEditMsgLine;
  37. pNode: PVirtualNode;
  38. begin
  39. pNode := vstLuaEditMessages.AddChild(vstLuaEditMessages.RootNode);
  40. pData := vstLuaEditMessages.GetNodeData(pNode);
  41. pData.FileName := FileName;
  42. pData.MsgText := MsgText;
  43. pData.MsgType := MsgType;
  44. pData.LineNumber := LineNumber;
  45. // Popup luaedit messages window if it's an error message
  46. if MsgType = LUAEDIT_ERROR_MSG then
  47. Self.Show;
  48. vstLuaEditMessages.FullExpand();
  49. Result := pNode;
  50. end;
  51. function TfrmLuaEditMessages.PutChild(Parent: PVirtualNode; MsgText: String; MsgType: Integer; FileName: String = ''; LineNumber: Integer = -1): PVirtualNode;
  52. var
  53. pData: PLuaEditMsgLine;
  54. pNode: PVirtualNode;
  55. begin
  56. pNode := vstLuaEditMessages.AddChild(Parent);
  57. pData := vstLuaEditMessages.GetNodeData(pNode);
  58. pData.FileName := FileName;
  59. pData.MsgText := MsgText;
  60. pData.MsgType := MsgType;
  61. pData.LineNumber := LineNumber;
  62. // Popup luaedit messages window if it's an error message
  63. if MsgType = LUAEDIT_ERROR_MSG then
  64. Self.Show;
  65. vstLuaEditMessages.FullExpand();
  66. Result := pNode;
  67. end;
  68. procedure TfrmLuaEditMessages.vstLuaEditMessagesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
  69. var
  70. pData: PLuaEditMsgLine;
  71. begin
  72. case Column of
  73. 0:
  74. begin
  75. pData := vstLuaEditMessages.GetNodeData(Node);
  76. case pData.MsgType of
  77. LUAEDIT_HINT_MSG: CellText := '[HINT]';
  78. LUAEDIT_WARNING_MSG: CellText := '[WARNING]';
  79. LUAEDIT_ERROR_MSG: CellText := '[ERROR]';
  80. else
  81. CellText := '';
  82. end;
  83. end;
  84. 1:
  85. begin
  86. pData := vstLuaEditMessages.GetNodeData(Node);
  87. CellText := TrimLeft(pData.MsgText);
  88. if pData.MsgType = LUAEDIT_ERROR_MSG then
  89. CellText := UpperCase(CellText[1]) + Copy(CellText, 2, Length(CellText) - 1);
  90. end;
  91. end;
  92. end;
  93. procedure TfrmLuaEditMessages.vstLuaEditMessagesGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer);
  94. var
  95. pData: PLuaEditMsgLine;
  96. begin
  97. case Column of
  98. 0:
  99. begin
  100. pData := vstLuaEditMessages.GetNodeData(Node);
  101. ImageIndex := pData.MsgType - 1;
  102. end;
  103. end;
  104. end;
  105. procedure TfrmLuaEditMessages.vstLuaEditMessagesGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
  106. begin
  107. NodeDataSize := SizeOf(TPLuaEditMsgLine);
  108. end;
  109. procedure TfrmLuaEditMessages.vstLuaEditMessagesDblClick(Sender: TObject);
  110. var
  111. pNode: PVirtualNode;
  112. pData: PLuaEditMsgLine;
  113. begin
  114. if vstLuaEditMessages.SelectedCount = 1 then
  115. begin
  116. pNode := vstLuaEditMessages.GetFirstSelected();
  117. if Assigned(pNode) then
  118. begin
  119. pData := vstLuaEditMessages.GetNodeData(pNode);
  120. if pData.MsgType = LUAEDIT_ERROR_MSG then
  121. frmLuaEditMain.PopUpUnitToScreen(pData.FileName, pData.LineNumber, False, HIGHLIGHT_ERROR);
  122. end;
  123. end;
  124. end;
  125. end.