doublecmd/src/flinker.pas
2011-11-06 04:33:41 +00:00

157 lines
3.7 KiB
ObjectPascal

{
Seksi Commander
----------------------------
Licence : GNU GPL v 2.0
Author : Pavel Letko (letcuv@centrum.cz)
File combiner
contributors:
Radek Cervinka
}
unit fLinker;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Classes, Forms, Dialogs, StdCtrls,
uFileSource,
uFile;
type
{ TfrmLinker }
TfrmLinker = class(TForm)
lblFileName: TLabel;
lstFile: TListBox;
gbSaveTo: TGroupBox;
edSave: TEdit;
btnSave: TButton;
grbxControl: TGroupBox;
btnOK: TButton;
btnExit: TButton;
spbtnUp: TButton;
spbtnDown: TButton;
spbtnDel: TButton;
dlgSaveAll: TSaveDialog;
procedure spbtnUpClick(Sender: TObject);
procedure spbtnDownClick(Sender: TObject);
procedure spbtnDelClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function ShowLinkerFilesForm(aFileSource: IFileSource; aFiles: TFiles; TargetPath: UTF8String): Boolean;
implementation
{$R *.lfm}
uses
LCLProc, Controls, uFileProcs, uOperationsManager,
uFileSourceCombineOperation, fFileOpDlg;
function ShowLinkerFilesForm(aFileSource: IFileSource; aFiles: TFiles; TargetPath: UTF8String): Boolean;
var
I: Integer;
xFiles: TFiles = nil;
Operation: TFileSourceCombineOperation = nil;
ProgressDialog: TfrmFileOp;
OperationHandle: TOperationHandle;
begin
with TfrmLinker.Create(Application) do
begin
try
// Fill file list box
for I:= 0 to aFiles.Count - 1 do
with lstFile.Items do
begin
AddObject(aFiles[I].Name, aFiles[I]);
end;
// Use first file name without extension as target file name
edSave.Text:= TargetPath + aFiles[0].NameNoExt;
// Show form
Result:= (ShowModal = mrOk);
if Result then
begin
if mbForceDirectory(ExtractFileDir(edSave.Text)) then
try
// Fill file list with new file order
xFiles:= TFiles.Create(aFiles.Path);
for I:= 0 to lstFile.Count - 1 do
with lstFile.Items do
begin
xFiles.Add(TFile(Objects[I]).Clone);
end;
Operation:= aFileSource.CreateCombineOperation(xFiles, edSave.Text) as TFileSourceCombineOperation;
if Assigned(Operation) then
begin
OperationHandle:= OperationsManager.AddOperation(Operation, ossAutoStart);
ProgressDialog:= TfrmFileOp.Create(OperationHandle);
ProgressDialog.Show;
end;
finally
FreeThenNil(xFiles);
end;
end;
finally
Free;
end;
end;
end;
procedure TfrmLinker.spbtnDownClick(Sender: TObject);
var
iSelected: Integer;
begin
with lstFile do
begin
if ItemIndex < 0 then Exit;
if ItemIndex = Items.Count - 1 then Exit;
iSelected:= ItemIndex;
Items.Move(iSelected, iSelected + 1);
ItemIndex:= iSelected + 1;
end;
end;
procedure TfrmLinker.spbtnUpClick(Sender: TObject);
var
iSelected: Integer;
begin
with lstFile do
begin
if ItemIndex < 1 then Exit;
iSelected:= ItemIndex;
Items.Move(iSelected, iSelected - 1);
ItemIndex:= iSelected - 1;
end;
end;
procedure TfrmLinker.spbtnDelClick(Sender: TObject);
begin
with lstFile do
begin
if ItemIndex > -1 then
Items.Delete(ItemIndex);
end;
end;
procedure TfrmLinker.btnSaveClick(Sender: TObject);
begin
dlgSaveAll.InitialDir:= ExtractFileDir(edSave.Text);
dlgSaveAll.FileName:= ExtractFileName(edSave.Text);
if dlgSaveAll.Execute then
edSave.Text:= dlgSaveAll.FileName;
end;
end.