unit printlist;

{$mode delphi}{$H+}

// -------------------------------------
// Print TListView-Content
// -------------------------------------


interface

uses
  Classes, Controls, Forms, Dialogs, StdCtrls, Printers, laz.VirtualTrees,
  PrintersDlgs, SysUtils;

type

  { TprintlistForm }

  TprintlistForm = class(TForm)
    comboPrinters: TComboBox;
    btnConfigure: TButton;
    btnCancel: TButton;
    btnPrint: TButton;
    PrinterSetup: TPrinterSetupDialog;
    lblSelect: TLabel;
    chkPrintHeader: TCheckBox;
    procedure btnConfigureClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure comboPrintersChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


implementation

uses main, apphelpers, {table_editor, }dbconnection;

{$R *.lfm}


procedure TprintlistForm.FormShow(Sender: TObject);
begin
  // show!
  Screen.Cursor := crHourGlass;
  comboPrinters.Items := Printer.printers;
  try
    if comboPrinters.Items.Count > 0 then begin
      comboPrinters.ItemIndex := Printer.printerIndex;
      btnConfigure.Enabled := True;
    end;
  except
    on E:Exception do begin
      btnConfigure.Enabled := False;
      ErrorDialog(E.Message);
    end;
  end;
  Screen.Cursor := crDefault;
end;

procedure TprintlistForm.btnConfigureClick(Sender: TObject);
begin
  Screen.Cursor := crHourglass;
  printerSetup.Execute;
  comboPrinters.ItemIndex := Printer.PrinterIndex;
  Screen.Cursor := crDefault;
end;

procedure TprintlistForm.btnPrintClick(Sender: TObject);
var
  list: TVirtualStringTree;
begin
  // print!
  Screen.Cursor := crHourglass;
  list := nil;
  // which ListView to print?
  case Mainform.PageControlMain.ActivePageIndex of
    0: case Mainform.PageControlHost.ActivePageIndex of
      0: list := Mainform.ListDatabases;
      1: list := Mainform.ListVariables;
      2: list := Mainform.ListStatus;
      3: list := Mainform.ListProcesses;
      else list := Mainform.ListCommandStats;
      end;
    1: list := Mainform.ListTables;
    2: begin
      if Assigned(Mainform.ActiveObjectEditor)
        and (Mainform.ActiveObjectEditor.DBObject.NodeType = lntTable)
        and Mainform.ActiveObjectEditor.Visible then
      list := (Mainform.ActiveObjectEditor as TfrmTableEditor).listColumns;
    end;
    else list := Mainform.ActiveGrid;
  end;
  if Assigned(list) then
  try
    list.Print(Printer, chkPrintHeader.Checked);
  except
    on E:EPrinter do
      ErrorDialog(E.Message);
  end;
  Screen.Cursor := crDefault;
end;


procedure TprintlistForm.comboPrintersChange(Sender: TObject);
begin
  // chose printer
  Screen.Cursor := crHourglass;
  Printer.PrinterIndex := comboPrinters.ItemIndex;
  Screen.Cursor := crDefault;
end;

end.
