Repo for the search and displace ingest module that takes odf, docx and pdf and transforms it into .md to be used with search and displace operations
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

284 lines
7.9 KiB

unit MainForm;
interface
uses
Classes, SysUtils, FileUtil, Forms,
Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
ComCtrls, ActnList,
// App units
Runner, Options;
type
{ TFormMain }
TFormMain = class(TForm)
ActDeskew: TAction;
ActFinish: TAction;
ActAddFiles: TAction;
ActClearFiles: TAction;
ActBrowseOutputDir: TAction;
ActShowAbout: TAction;
ActShowAdvOptions: TAction;
ActionList: TActionList;
ApplicationProperties: TApplicationProperties;
BtnAddFiles: TButton;
BtnDeskew: TButton;
BtnClear: TButton;
BtnFinish: TButton;
BtnBrowseOutputDir: TButton;
BtnAdvOptions: TButton;
BtnAbout: TButton;
CheckDefaultOutputFileOptions: TCheckBox;
ColorBtnBackground: TColorButton;
ComboFileFormat: TComboBox;
EdDirOutput: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
LabOptOutputFolder: TLabel;
LabBackColor: TLabel;
LabDeskewProgressTitle: TLabel;
LabOptFileFormat: TLabel;
LabProgressTitle: TLabel;
LabCurrentFile: TLabel;
MemoOutput: TMemo;
MemoFiles: TMemo;
Notebook: TNotebook;
PageIn: TPage;
PageOut: TPage;
Panel1: TPanel;
PanelProgress: TPanel;
PanelOut: TPanel;
PanelFiles: TPanel;
PanelOptions: TPanel;
ProgressBar: TProgressBar;
procedure ActAddFilesExecute(Sender: TObject);
procedure ActBrowseOutputDirExecute(Sender: TObject);
procedure ActClearFilesExecute(Sender: TObject);
procedure ActDeskewExecute(Sender: TObject);
procedure ActDeskewUpdate(Sender: TObject);
procedure ActFinishExecute(Sender: TObject);
procedure ActShowAboutExecute(Sender: TObject);
procedure ActShowAdvOptionsExecute(Sender: TObject);
procedure ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
private
FRunner: TRunner;
procedure RunnerFinished(Sender: TObject; Reason: TFinishReason);
procedure RunnerProgress(Sender: TObject; Index: Integer);
procedure GatherOptions(AOptions: TOptions);
public
procedure ApplyOptions(AOptions: TOptions);
end;
var
FormMain: TFormMain;
implementation
{$R *.lfm}
uses
ImagingUtility, Imaging, DataModule, AdvOptionsForm, AboutForm, Config;
{ TFormMain }
procedure TFormMain.FormCreate(Sender: TObject);
begin
FRunner := TRunner.Create(MemoOutput);
FRunner.OnFinished := RunnerFinished;
FRunner.OnProgress := RunnerProgress;
Caption := Application.Title + ' v' + Module.VersionString;
ComboFileFormat.Items.Clear;
ComboFileFormat.Items.AddObject('Same as input', TObject(ffSameAsInput));
ComboFileFormat.Items.AddObject('PNG', TObject(ffPng));
ComboFileFormat.Items.AddObject('JPEG', TObject(ffJpeg));
ComboFileFormat.Items.AddObject('TIFF (support depends on platform)', TObject(ffTiff));
ComboFileFormat.Items.AddObject('BMP', TObject(ffBmp));
ComboFileFormat.Items.AddObject('PSD', TObject(ffPsd));
ComboFileFormat.Items.AddObject('TGA', TObject(ffTga));
ComboFileFormat.Items.AddObject('JNG', TObject(ffJng));
ComboFileFormat.Items.AddObject('PPM', TObject(ffPpm));
ComboFileFormat.ItemIndex := 0;
ApplyOptions(Module.Options);
Config.AfterMainFormCreation(Self);
if Screen.WorkAreaHeight < Height then
Height := Round(Screen.WorkAreaHeight * 0.9);
end;
procedure TFormMain.FormDestroy(Sender: TObject);
begin
GatherOptions(Module.Options);
FRunner.Free;
end;
procedure TFormMain.FormDropFiles(Sender: TObject; const FileNames: array of String);
var
I: Integer;
begin
for I := 0 to High(FileNames) do
MemoFiles.Append(FileNames[I]);
end;
procedure TFormMain.ApplyOptions(AOptions: TOptions);
begin
CheckDefaultOutputFileOptions.Checked := AOptions.DefaultOutputFileOptions;
EdDirOutput.Text := AOptions.OutputFolder;
EdDirOutput.SelStart := Length(EdDirOutput.Text);
ComboFileFormat.ItemIndex := Integer(AOptions.OutputFileFormat);
ColorBtnBackground.ButtonColor := RGBToColor(GetRedValue(AOptions.BackgroundColor), GetGreenValue(AOptions.BackgroundColor), GetBlueValue(AOptions.BackgroundColor));
end;
procedure TFormMain.GatherOptions(AOptions: TOptions);
var
LazColor: TColor;
I: Integer;
S: string;
begin
AOptions.Files.Clear;
for I := 0 to MemoFiles.Lines.Count - 1 do
begin
S := Trim(MemoFiles.Lines[I]);
if S <> '' then
AOptions.Files.Add(S);
end;
AOptions.DefaultOutputFileOptions := CheckDefaultOutputFileOptions.Checked;
AOptions.OutputFolder := EdDirOutput.Text;
AOptions.OutputFileFormat := TFileFormat(PtrUInt(ComboFileFormat.Items.Objects[ComboFileFormat.ItemIndex]));
LazColor := ColorBtnBackground.ButtonColor;
AOptions.BackgroundColor := Color32(255, Red(LazColor), Green(LazColor), Blue(LazColor)).Color;
end;
procedure TFormMain.RunnerFinished(Sender: TObject; Reason: TFinishReason);
begin
LabCurrentFile.Hide;
ActFinish.Enabled := True;
ActFinish.Caption := 'Back to Input';
case Reason of
frFinished: LabDeskewProgressTitle.Caption := 'Deskewing Finished';
frFailure: LabDeskewProgressTitle.Caption := 'Deskewing Finished with Failures';
frStopped: LabDeskewProgressTitle.Caption := 'Deskewing Stopped';
else
Assert(False);
end;
LabProgressTitle.Caption := Format('%d files processed', [FRunner.InputPos]);
if FRunner.Failures > 0 then
LabProgressTitle.Caption := LabProgressTitle.Caption + Format(', %d failed', [FRunner.Failures]);
end;
procedure TFormMain.RunnerProgress(Sender: TObject; Index: Integer);
begin
ProgressBar.Position := Index + 1;
LabCurrentFile.Caption := Format('%s [%d/%d]', [
ExtractFileName(Module.Options.Files[Index]), Index + 1, Module.Options.Files.Count]);
LabCurrentFile.Visible := True;
LabProgressTitle.Visible := True;
end;
procedure TFormMain.ActDeskewUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := (MemoFiles.Lines.Count > 0) and (Trim(MemoFiles.Lines[0]) <> '');
end;
procedure TFormMain.ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean);
var
NoDefault: Boolean;
begin
NoDefault := not CheckDefaultOutputFileOptions.Checked;
ActBrowseOutputDir.Enabled := NoDefault;
EdDirOutput.Enabled := ActBrowseOutputDir.Enabled;
ComboFileFormat.Enabled := NoDefault;
LabOptOutputFolder.Enabled := NoDefault;
LabOptFileFormat.Enabled := NoDefault;
FormAdvOptions.DoIdle;
end;
procedure TFormMain.ActDeskewExecute(Sender: TObject);
begin
GatherOptions(Module.Options);
FormAdvOptions.GatherOptions(Module.Options);
ActFinish.Caption := 'Stop';
MemoOutput.Clear;
ProgressBar.Position := 0;
ProgressBar.Max := Module.Options.Files.Count;
LabCurrentFile.Hide;
LabProgressTitle.Hide;
LabProgressTitle.Caption := 'Current file:';
Notebook.PageIndex := 1;
Application.ProcessMessages;
FRunner.Run(Module.Options);
end;
procedure TFormMain.ActAddFilesExecute(Sender: TObject);
var
I: Integer;
begin
Module.OpenDialogMulti.Title := 'Select Picture Files';
if Module.OpenDialogMulti.Execute then
begin
for I := 0 to Module.OpenDialogMulti.Files.Count - 1 do
MemoFiles.Append(Module.OpenDialogMulti.Files[I]);
end;
end;
procedure TFormMain.ActBrowseOutputDirExecute(Sender: TObject);
begin
if Module.SelectDirectoryDialog.Execute then
begin
EdDirOutput.Text := Module.SelectDirectoryDialog.FileName;
EdDirOutput.SelStart := Length(EdDirOutput.Text);
end;
end;
procedure TFormMain.ActClearFilesExecute(Sender: TObject);
begin
MemoFiles.Clear;
end;
procedure TFormMain.ActFinishExecute(Sender: TObject);
begin
if FRunner.IsRunning then
begin
ActFinish.Enabled := False;
ActFinish.Caption := 'Stopping';
FRunner.Stop;
end
else
begin
Notebook.PageIndex := 0;
end;
end;
procedure TFormMain.ActShowAboutExecute(Sender: TObject);
begin
if not FormAbout.Visible then
FormAbout.ShowModal;
end;
procedure TFormMain.ActShowAdvOptionsExecute(Sender: TObject);
begin
FormAdvOptions.ShowModal;
end;
end.