lazarus/debugger/debugoutputform.pp
2018-06-24 12:40:43 +00:00

186 lines
5.0 KiB
ObjectPascal

{ $Id$ }
{ ------------------------------------------
debugoutputform.pp - Shows target output
------------------------------------------
@created(Wed Feb 25st WET 2001)
@lastmod($Date$)
@author(Marc Weustink <marc@@dommelstein.net>)
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
* *
***************************************************************************
}
unit DebugOutputForm;
(* DBG_WITH_DEBUGGER_DEBUG:
This enables direct access to the debugger.
WARNING:
- This bypasses some of the internals of the debugger.
- It does intentionally no check or validation
- Using this feature without full knowledge of all internals of the debugger,
can *HANG* or *CRASH* the debugger or the entire IDE.
*)
{$mode objfpc}
{$H+}
interface
uses
Classes, Controls, Forms, Clipbrd,
IDEWindowIntf,
BaseDebugManager, StdCtrls, Menus, ExtCtrls, DebuggerDlg
{$IFDEF DBG_WITH_DEBUGGER_DEBUG}
, CmdLineDebugger
{$ENDIF}
;
type
{ TDbgOutputForm }
TDbgOutputForm = class(TDebuggerDlg)
popCopyAll: TMenuItem;
txtOutput: TMemo;
mnuPopup: TPopupMenu;
popClear: TMenuItem;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure popClearClick(Sender: TObject);
procedure popCopyAllClick(Sender: TObject);
private
{$IFDEF DBG_WITH_DEBUGGER_DEBUG}
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
{$ENDIF}
protected
procedure Loaded; override;
public
{$IFDEF DBG_WITH_DEBUGGER_DEBUG}
constructor Create(TheOwner: TComponent); override;
{$ENDIF}
procedure AddText(const AText: String);
procedure Clear;
procedure SetLogText(Lines: TStrings);
procedure GetLogText(Lines: TStrings);
end;
implementation
{$R *.lfm}
uses
LazarusIDEStrConsts;
var
DbgOutputDlgWindowCreator: TIDEWindowCreator;
procedure TDbgOutputForm.AddText(const AText: String);
begin
txtOutput.Lines.Add(AText);
end;
procedure TDbgOutputForm.Clear;
begin
txtOutput.Lines.Clear;
end;
procedure TDbgOutputForm.SetLogText(Lines: TStrings);
begin
txtOutput.Lines.Assign(Lines);
end;
procedure TDbgOutputForm.GetLogText(Lines: TStrings);
begin
Lines.Assign(txtOutput.Lines);
end;
{$IFDEF DBG_WITH_DEBUGGER_DEBUG}
constructor TDbgOutputForm.Create(TheOwner: TComponent);
var
p: TPanel;
b: TButton;
begin
inherited;
p := TPanel.Create(Self);
p.Parent := Self;
p.Align := alBottom;
p.AutoSize := True;
p.Caption := '';
Edit1 := TEdit.Create(Self);
Edit1.Parent := p;
Edit1.Align := alClient;
b := TButton.Create(Self);
b.Parent := p;
b.Align := alRight;
b.OnClick := @Button1Click;
b.Caption := 'Execute';
b.AutoSize := True;
end;
{$ENDIF}
procedure TDbgOutputForm.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
CloseAction := caFree;
end;
{$IFDEF DBG_WITH_DEBUGGER_DEBUG}
procedure TDbgOutputForm.Button1Click(Sender: TObject);
begin
DebugBoss.Debugger.TestCmd(Edit1.Text);
end;
{$ENDIF}
procedure TDbgOutputForm.FormCreate(Sender: TObject);
begin
txtOutput.Lines.Clear;
Caption:= lisMenuViewDebugOutput;
popClear.Caption:=lisClear;
popCopyAll.Caption:=lisCopyAllOutputClipboard;
end;
procedure TDbgOutputForm.Loaded;
begin
inherited Loaded;
// Not yet through resources
txtOutput.Scrollbars := ssBoth;
end;
procedure TDbgOutputForm.popClearClick(Sender: TObject);
begin
Clear;
end;
procedure TDbgOutputForm.popCopyAllClick(Sender: TObject);
begin
Clipboard.AsText := txtOutput.Text;
end;
initialization
DbgOutputDlgWindowCreator := IDEWindowCreators.Add(DebugDialogNames[ddtOutput]);
DbgOutputDlgWindowCreator.OnCreateFormProc := @CreateDebugDialog;
DbgOutputDlgWindowCreator.CreateSimpleLayout;
end.