git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@545 0c75b7a4-871f-7646-8a2f-f78d34cc349f
248 lines
7.6 KiB
ObjectPascal
248 lines
7.6 KiB
ObjectPascal
unit uViewDocumentos;
|
||
|
||
interface
|
||
|
||
uses
|
||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||
Dialogs, uViewBase, cxControls,
|
||
cxContainer, cxListBox, ActnList, TB2Item, TBX, TB2Dock, TB2Toolbar;
|
||
|
||
type
|
||
TfrViewDocumentos = class(TfrViewBase)
|
||
ListaDocumentos: TcxListBox;
|
||
EditorActionList: TActionList;
|
||
TBXDock: TTBXDock;
|
||
tbxMain: TTBXToolbar;
|
||
TBXItem2: TTBXItem;
|
||
actAnadir: TAction;
|
||
actModificar: TAction;
|
||
actEliminar: TAction;
|
||
TBXItem1: TTBXItem;
|
||
TBXItem3: TTBXItem;
|
||
actEliminarTodo: TAction;
|
||
TBXItem4: TTBXItem;
|
||
actActualizarServidor: TAction;
|
||
TBXItem5: TTBXItem;
|
||
procedure actAnadirExecute(Sender: TObject);
|
||
procedure actModificarExecute(Sender: TObject);
|
||
procedure actEliminarExecute(Sender: TObject);
|
||
procedure actEliminarTodoExecute(Sender: TObject);
|
||
procedure actActualizarServidorExecute(Sender: TObject);
|
||
procedure CustomViewCreate(Sender: TObject);
|
||
procedure CustomViewDestroy(Sender: TObject);
|
||
|
||
private
|
||
FDirectorio: Variant;
|
||
function GetDirectorio: Variant;
|
||
function DarFicherosSeleccionados: TStringList;
|
||
|
||
protected
|
||
FHayModificaciones: Boolean;
|
||
FListaFicheros: TStringList;
|
||
property Directorio: Variant read GetDirectorio;
|
||
property ListaFicheros: TStringList read FListaFicheros write FListaFicheros;
|
||
|
||
function GetModified: Boolean; override;
|
||
procedure SetModified(const Value : Boolean); override;
|
||
|
||
//Son los metodos que se sobreescribiran en la vista hija
|
||
procedure Sincronizar; virtual; abstract;
|
||
function RecuperarFicheroServidor(const NombreFichero: String; const DirectorioDestino: String): Boolean; virtual; abstract;
|
||
procedure RefrescarVisualizador; virtual;
|
||
end;
|
||
|
||
var
|
||
frViewDocumentos: TfrViewDocumentos;
|
||
|
||
implementation
|
||
{$R *.dfm}
|
||
|
||
uses
|
||
uSistemaFunc, ShellAPI, uDialogUtils;
|
||
|
||
procedure TfrViewDocumentos.actActualizarServidorExecute(Sender: TObject);
|
||
begin
|
||
inherited;
|
||
Sincronizar;
|
||
end;
|
||
|
||
procedure TfrViewDocumentos.actAnadirExecute(Sender: TObject);
|
||
var
|
||
openDialog : TOpenDialog;
|
||
ANombreFichero : String;
|
||
ANombreSeleccionado : String;
|
||
BCopiar: Boolean;
|
||
i, j : Integer;
|
||
begin
|
||
openDialog := TOpenDialog.Create(self);
|
||
try
|
||
// Set up the starting directory to be the current one
|
||
// openDialog.InitialDir := GetCurrentDir;
|
||
// Only allow existing files to be selected
|
||
// openDialog.Options := [ofFileMustExist];
|
||
|
||
// Allow multiple files to be selected - of any type
|
||
openDialog.Options := [ofAllowMultiSelect];
|
||
|
||
// Allow only .dpr and .pas files to be selected
|
||
// openDialog.Filter := 'Delphi project files|*.dpr|Delphi pascal files|*.pas';
|
||
// Select pascal files as the starting filter type
|
||
// openDialog.FilterIndex := 2;
|
||
|
||
if openDialog.Execute then
|
||
begin
|
||
for i:=0 to openDialog.Files.Count - 1 do
|
||
begin
|
||
ANombreSeleccionado := openDialog.Files.Strings[i];
|
||
if Length(ANombreSeleccionado) > 0 then
|
||
begin
|
||
BCopiar := True;
|
||
ANombreFichero := ExtractFileName(ANombreSeleccionado);
|
||
if FListaFicheros.Find(ANombreFichero, j) then
|
||
begin
|
||
ANombreFichero := 'Copia de ' + ANombreFichero;
|
||
BCopiar := (Application.MessageBox(PChar('Ya existe un archivo con ese nombre, <20>Desea a<>adirlo con el nombre ' + ANombreFichero + '?'), 'Atenci<63>n', MB_YESNO) = IDYES);
|
||
end;
|
||
|
||
if BCopiar then
|
||
begin
|
||
CopiarFichero(ANombreSeleccionado, (Directorio + ANombreFichero));
|
||
//Lo a<>adimos a la lista de documentos local
|
||
FListaFicheros.Add(ANombreFichero);
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
finally
|
||
openDialog.Free;
|
||
//Now, We compact the process memory:
|
||
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
|
||
RefrescarVisualizador;
|
||
FHayModificaciones := True;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrViewDocumentos.actEliminarExecute(Sender: TObject);
|
||
var
|
||
i, j: Integer;
|
||
FicherosSeleccionados: TStringList;
|
||
ANombreFichero: String;
|
||
|
||
begin
|
||
FicherosSeleccionados := DarFicherosSeleccionados;
|
||
try
|
||
for i := 0 to FicherosSeleccionados.Count - 1 do
|
||
begin
|
||
//Buscamos si existen fisicamente y si es as<61> los eliminamos
|
||
if FileExists(FicherosSeleccionados.Strings[i]) then
|
||
if not DeleteFile(FicherosSeleccionados.Strings[i]) then
|
||
Application.MessageBox('No se pudo borrar el fichero', 'Error', MB_ICONEXCLAMATION);
|
||
|
||
//Lo quitamos de la propiedad donde guardamos lista de documentos
|
||
ANombreFichero := ExtractFileName(FicherosSeleccionados.Strings[i]);
|
||
if FListaFicheros.Find(ANombreFichero, j) then
|
||
FListaFicheros.Delete(j);
|
||
end;
|
||
finally
|
||
FreeAndNil(FicherosSeleccionados);
|
||
RefrescarVisualizador;
|
||
FHayModificaciones := True;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrViewDocumentos.actEliminarTodoExecute(Sender: TObject);
|
||
begin
|
||
Deltree(Directorio, True);
|
||
FListaFicheros.Clear;
|
||
FDirectorio := Null;
|
||
RefrescarVisualizador;
|
||
FHayModificaciones := True;
|
||
end;
|
||
|
||
procedure TfrViewDocumentos.actModificarExecute(Sender: TObject);
|
||
var
|
||
i: Integer;
|
||
FicherosSeleccionados: TStringList;
|
||
begin
|
||
FicherosSeleccionados := DarFicherosSeleccionados;
|
||
try
|
||
for i := 0 to FicherosSeleccionados.Count - 1 do
|
||
if FileExists(FicherosSeleccionados.Strings[i]) then
|
||
begin
|
||
if ShellExecute(Handle, nil, pchar(FicherosSeleccionados.Strings[i]),
|
||
nil, nil, SW_SHOWNORMAL) <= 32 then
|
||
Application.MessageBox('No se pudo editar el fichero', 'Error', MB_ICONEXCLAMATION);
|
||
end
|
||
else
|
||
begin
|
||
if not RecuperarFicheroServidor(ExtractFileName(FicherosSeleccionados.Strings[i]), ExtractFilePath(FicherosSeleccionados.Strings[i])) then
|
||
Application.MessageBox('No se pudo RecuperarFicheroServidor', 'Error', MB_ICONEXCLAMATION);
|
||
|
||
if ShellExecute(Handle, nil, pchar(FicherosSeleccionados.Strings[i]),
|
||
nil, nil, SW_SHOWNORMAL) <= 32 then
|
||
Application.MessageBox('No se pudo editar el fichero', 'Error', MB_ICONEXCLAMATION);
|
||
end;
|
||
finally
|
||
FreeAndNil(FicherosSeleccionados);
|
||
FHayModificaciones := True;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrViewDocumentos.CustomViewCreate(Sender: TObject);
|
||
begin
|
||
inherited;
|
||
FDirectorio := Null;
|
||
FListaFicheros := Nil;
|
||
FHayModificaciones:= False;
|
||
end;
|
||
|
||
procedure TfrViewDocumentos.CustomViewDestroy(Sender: TObject);
|
||
begin
|
||
FDirectorio := Null;
|
||
FreeAndNil(FListaFicheros);
|
||
inherited;
|
||
end;
|
||
|
||
function TfrViewDocumentos.DarFicherosSeleccionados: TStringList;
|
||
var
|
||
i: Integer;
|
||
begin
|
||
Result := TStringList.Create;
|
||
for i := 0 to ListaDocumentos.Count - 1 do
|
||
begin
|
||
if ListaDocumentos.Selected[i] then
|
||
Result.Add(Directorio + ListaDocumentos.Items[i]);
|
||
end;
|
||
end;
|
||
|
||
function TfrViewDocumentos.GetDirectorio: Variant;
|
||
begin
|
||
if VarIsNull(FDirectorio) then
|
||
begin
|
||
FDirectorio := DarDirectorioTemporal;
|
||
if not CreateDir(FDirectorio) then
|
||
raise Exception.Create('ERROR: No se ha podido crear el fichero temporal GetDirectorio');
|
||
end;
|
||
Result := FDirectorio;
|
||
end;
|
||
|
||
function TfrViewDocumentos.GetModified: Boolean;
|
||
begin
|
||
Result := FHayModificaciones;
|
||
end;
|
||
|
||
procedure TfrViewDocumentos.RefrescarVisualizador;
|
||
begin
|
||
ListaDocumentos.Clear;
|
||
ListaDocumentos.Items.AddStrings(FListaFicheros);
|
||
end;
|
||
|
||
procedure TfrViewDocumentos.SetModified(const Value: Boolean);
|
||
begin
|
||
inherited;
|
||
FHayModificaciones := Value;
|
||
end;
|
||
|
||
end.
|