Componentes.Terceros.SDAC/internal/4.10.0.10/1/Source/Design/DADumpProgress.pas
2007-10-05 14:48:18 +00:00

213 lines
4.7 KiB
ObjectPascal

//////////////////////////////////////////////////
// DB Access Components
// Copyright © 1998-2007 Core Lab. All right reserved.
// DB Access
//////////////////////////////////////////////////
{$IFNDEF CLR}
{$I Dac.inc}
unit DADumpProgress;
{$ENDIF}
interface
uses
SysUtils, Classes,
{$IFNDEF LINUX}
Windows, Messages, Graphics, Controls, Forms, Dialogs,
ComCtrls, Grids, DBGrids, DBCtrls, Buttons, ExtCtrls, StdCtrls,
{$ELSE}
QGraphics, QControls, QForms, QDialogs, QStdCtrls,
QComCtrls, QGrids, QDBGrids, QDBCtrls, QButtons, QExtCtrls, Qt, QTypes,
{$ENDIF}
DBAccess, DADump;
type
TDADumpProgressForm = class(TForm)
Label1: TLabel;
BitBtn1: TBitBtn;
ProgressBar1: TProgressBar;
ProgressBar2: TProgressBar;
procedure DADumpBackupProgress(Sender: TObject; TableName: String;
TableNum, TableCount, Percent: Integer);
procedure DADumpRestoreProgress(Sender: TObject; Percent: Integer);
procedure FormActivate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormResize(Sender: TObject);
protected
IsBackup: boolean;
WaitForTerminate: boolean;
InProgress: boolean;
procedure Process;
{$IFDEF LINUX}
function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; override;
{$ENDIF}
public
DADump: TDADump;
procedure Backup;
procedure Restore;
end;
implementation
{$IFDEF IDE}
{$R *.dfm}
{$ENDIF}
{$IFDEF MSWINDOWS}
{$R DADumpProgress.dfm}
{$ENDIF}
{$IFDEF LINUX}
{$R *.xfm}
{$ENDIF}
{$IFDEF LINUX}
const
QEventType_CMFormActivate = QEventType(Integer(QEventType_ClxBase) + $1000);
{$ENDIF}
{ TDADumpProgressForm }
procedure TDADumpProgressForm.Backup;
var
OldProgress: TDABackupProgressEvent;
begin
Assert(DADump <> nil);
OldProgress := DADump.OnBackupProgress;
try
Label1.Caption := 'Backup';
IsBackup := True;
DADump.OnBackupProgress := DADumpBackupProgress;
{$IFDEF LINUX}
// ShowMessage('1 ' + IntToStr(Integer(Self)));
QApplication_postEvent(Handle, QCustomEvent_create(QEventType_CMFormActivate, Self));
// ShowMessage('2');
{$ENDIF}
ShowModal;
finally
DADump.OnBackupProgress := OldProgress;
end;
end;
procedure TDADumpProgressForm.Restore;
var
OldProgress: TDARestoreProgressEvent;
begin
Assert(DADump <> nil);
OldProgress := DADump.OnRestoreProgress;
try
Label1.Caption := 'Restore';
IsBackup := False;
DADump.OnRestoreProgress := DADumpRestoreProgress;
ShowModal;
finally
DADump.OnRestoreProgress := OldProgress;
end;
end;
procedure TDADumpProgressForm.DADumpBackupProgress(Sender: TObject;
TableName: String; TableNum, TableCount, Percent: Integer);
begin
if WaitForTerminate then
SysUtils.Abort;
Label1.Caption := 'Backup ' + TableName;
ProgressBar1.Max := TableCount;
ProgressBar1.Position := TableNum;
ProgressBar2.Position := Percent;
Update;
Application.ProcessMessages;
end;
procedure TDADumpProgressForm.DADumpRestoreProgress(Sender: TObject;
Percent: Integer);
begin
if WaitForTerminate then
SysUtils.Abort;
ProgressBar2.Position := Percent;
Update;
Application.ProcessMessages;
end;
procedure TDADumpProgressForm.Process;
begin
ProgressBar1.Enabled := IsBackup;
WaitForTerminate := False;
InProgress := True;
Cursor := crSQLWait;
try
try
if IsBackup then
DADump.Backup
else
DADump.Restore;
except
on E: Exception do
Application.ShowException(E);
end;
finally
InProgress := False;
Cursor := crDefault;
{$IFDEF MSWINDOWS}
PostMessage(Handle, WM_CLOSE, 0, 0);
{$ELSE}
QApplication_postEvent(Handle, QCloseEvent_create);
{$ENDIF}
end;
end;
procedure TDADumpProgressForm.FormActivate(Sender: TObject);
begin
{$IFDEF MSWINDOWS}
Process;
{$ENDIF}
end;
{$IFDEF LINUX}
function TDADumpProgressForm.EventFilter(Sender: QObjectH; Event: QEventH): Boolean;
begin
Result := True;
if QEvent_type(Event) = QEventType_CMFormActivate then
Process
else
Result := inherited EventFilter(Sender, Event);
end;
{$ENDIF}
procedure TDADumpProgressForm.BitBtn1Click(Sender: TObject);
begin
WaitForTerminate := True;
Close;
end;
procedure TDADumpProgressForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
WaitForTerminate := True;
while InProgress do
Sleep(300);
end;
procedure TDADumpProgressForm.FormResize(Sender: TObject);
begin
{$IFDEF LINUX}
ClientHeight := 131;
ClientWidth := 248;
ProgressBar1.Width := 232;
ProgressBar2.Width := 232;
BitBtn1.Left := 86;
{$ENDIF}
end;
end.