2008-08-27 14:17:04 +00:00
unit uViewDocumentos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
2008-08-27 16:48:20 +00:00
Dialogs, uViewBase, cxControls,
2008-09-01 09:30:59 +00:00
cxContainer, ActnList, TB2Item, TBX, TB2Dock, TB2Toolbar, StdCtrls,
FileCtrl, cxGraphics, cxCustomData, cxStyles, cxTL, cxInplaceContainer,
cxTLData, cxTextEdit, ComCtrls, ImgList, PngImageList;
2008-08-27 14:17:04 +00:00
type
TfrViewDocumentos = class( TfrViewBase)
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;
2008-09-01 09:30:59 +00:00
ListView1: TListView;
LargeImagesBrowser: TPngImageList;
SmallImagesBrowser: TPngImageList;
2008-09-04 17:49:18 +00:00
TBXSeparatorItem1: TTBXSeparatorItem;
2008-08-27 14:17:04 +00:00
procedure actAnadirExecute( Sender: TObject) ;
procedure actModificarExecute( Sender: TObject) ;
procedure actEliminarExecute( Sender: TObject) ;
procedure actEliminarTodoExecute( Sender: TObject) ;
2008-08-27 16:15:43 +00:00
procedure actActualizarServidorExecute( Sender: TObject) ;
2008-08-27 14:17:04 +00:00
procedure CustomViewCreate( Sender: TObject) ;
procedure CustomViewDestroy( Sender: TObject) ;
2008-09-04 17:49:18 +00:00
procedure actModificarUpdate( Sender: TObject) ;
procedure actEliminarUpdate( Sender: TObject) ;
procedure actEliminarTodoUpdate( Sender: TObject) ;
procedure ListView1DblClick( Sender: TObject) ;
2008-08-27 16:15:43 +00:00
2008-08-27 14:17:04 +00:00
private
FDirectorio: Variant ;
function GetDirectorio: Variant ;
function DarFicherosSeleccionados: TStringList;
2008-09-01 09:30:59 +00:00
function AsignarImagen( ANombreFichero: String ) : Integer ;
2008-08-27 16:15:43 +00:00
2008-08-27 14:17:04 +00:00
protected
2008-08-28 15:12:50 +00:00
FHayModificaciones: Boolean ;
2008-08-27 16:15:43 +00:00
FListaFicheros: TStringList;
property Directorio: Variant read GetDirectorio;
2008-08-28 15:12:50 +00:00
property ListaFicheros: TStringList read FListaFicheros write FListaFicheros;
function GetModified: Boolean ; override ;
procedure SetModified( const Value : Boolean ) ; override ;
2008-08-27 16:15:43 +00:00
//Son los metodos que se sobreescribiran en la vista hija
2008-08-27 14:17:04 +00:00
procedure Sincronizar; virtual ; abstract ;
2008-08-27 16:15:43 +00:00
function RecuperarFicheroServidor( const NombreFichero: String ; const DirectorioDestino: String ) : Boolean ; virtual ; abstract ;
procedure RefrescarVisualizador; virtual ;
2008-08-27 14:17:04 +00:00
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;
2008-08-27 16:15:43 +00:00
ANombreFichero : String ;
2008-08-28 15:12:50 +00:00
ANombreSeleccionado : String ;
BCopiar: Boolean ;
i, j : Integer ;
2008-08-27 14:17:04 +00:00
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
2008-08-28 15:12:50 +00:00
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 ;
2008-08-27 14:17:04 +00:00
end ;
end ;
finally
openDialog. Free;
2008-08-27 16:15:43 +00:00
//Now, We compact the process memory:
SetProcessWorkingSetSize( GetCurrentProcess, $FFFFFFFF , $FFFFFFFF ) ;
RefrescarVisualizador;
2008-08-28 15:12:50 +00:00
FHayModificaciones : = True ;
2008-08-27 14:17:04 +00:00
end ;
end ;
procedure TfrViewDocumentos. actEliminarExecute( Sender: TObject) ;
var
i, j: Integer ;
FicherosSeleccionados: TStringList;
2008-08-27 16:15:43 +00:00
ANombreFichero: String ;
2008-08-27 14:17:04 +00:00
begin
FicherosSeleccionados : = DarFicherosSeleccionados;
2008-08-27 16:15:43 +00:00
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) ;
2008-08-27 14:17:04 +00:00
2008-08-27 16:15:43 +00:00
//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;
2008-08-28 15:12:50 +00:00
FHayModificaciones : = True ;
2008-08-27 14:17:04 +00:00
end ;
end ;
procedure TfrViewDocumentos. actEliminarTodoExecute( Sender: TObject) ;
begin
2008-09-04 11:01:22 +00:00
if DirectoryExists( Directorio) then
Deltree( Directorio, True ) ;
2008-08-27 16:15:43 +00:00
FListaFicheros. Clear;
FDirectorio : = Null;
RefrescarVisualizador;
2008-08-28 15:12:50 +00:00
FHayModificaciones : = True ;
2008-08-27 14:17:04 +00:00
end ;
2008-09-04 17:49:18 +00:00
procedure TfrViewDocumentos. actEliminarTodoUpdate( Sender: TObject) ;
begin
inherited ;
( Sender as TAction) . Enabled : = ( ListView1. Items. Count > 0 )
end ;
procedure TfrViewDocumentos. actEliminarUpdate( Sender: TObject) ;
begin
inherited ;
( Sender as TAction) . Enabled : = Assigned( ListView1. ItemFocused) ;
end ;
2008-08-27 14:17:04 +00:00
procedure TfrViewDocumentos. actModificarExecute( Sender: TObject) ;
var
i: Integer ;
FicherosSeleccionados: TStringList;
begin
FicherosSeleccionados : = DarFicherosSeleccionados;
2008-08-27 16:15:43 +00:00
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) < = 3 2 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) < = 3 2 then
Application. MessageBox( 'No se pudo editar el fichero' , 'Error' , MB_ICONEXCLAMATION) ;
end ;
finally
2008-08-28 15:12:50 +00:00
FreeAndNil( FicherosSeleccionados) ;
FHayModificaciones : = True ;
2008-08-27 16:15:43 +00:00
end ;
2008-08-27 14:17:04 +00:00
end ;
2008-09-04 17:49:18 +00:00
procedure TfrViewDocumentos. actModificarUpdate( Sender: TObject) ;
begin
inherited ;
( Sender as TAction) . Enabled : = Assigned( ListView1. ItemFocused) ;
end ;
2008-09-01 09:30:59 +00:00
function TfrViewDocumentos. AsignarImagen( ANombreFichero: String ) : Integer ;
begin
Result : = - 1 ;
if ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.txt' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.ini' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.sql' ) then
Result : = 1
else if ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.pdf' ) then
Result : = 3
else if ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.doc' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.rtf' ) then
Result : = 2
else if ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.ppt' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.pps' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.ppa' ) then
Result : = 7
else if ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.mdb' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.adp' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.mde' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.ade' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.mda' ) then
Result : = 5
else if ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.xls' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.xl' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.xlt' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.xla' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.xlc' ) then
Result : = 4
else if ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.png' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.tif' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.pict' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.pct' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.bmp' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.gif' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.jpg' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.jpeg' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.jpe' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.png' )
or ( LOWERCASE( ExtractFileExt( ANombreFichero) ) = '.tiff' ) then
Result : = 6
else Result : = 0 ;
end ;
2008-08-27 14:17:04 +00:00
procedure TfrViewDocumentos. CustomViewCreate( Sender: TObject) ;
begin
inherited ;
FDirectorio : = Null;
2008-08-27 16:15:43 +00:00
FListaFicheros : = Nil ;
2008-09-01 09:30:59 +00:00
FHayModificaciones: = False ;
2008-08-27 14:17:04 +00:00
end ;
procedure TfrViewDocumentos. CustomViewDestroy( Sender: TObject) ;
begin
FDirectorio : = Null;
2008-08-27 16:15:43 +00:00
FreeAndNil( FListaFicheros) ;
2008-08-27 14:17:04 +00:00
inherited ;
end ;
function TfrViewDocumentos. DarFicherosSeleccionados: TStringList;
var
i: Integer ;
begin
Result : = TStringList. Create;
2008-09-01 09:30:59 +00:00
for i : = 0 to ListView1. Items. Count - 1 do
2008-08-27 14:17:04 +00:00
begin
2008-09-01 09:30:59 +00:00
if ListView1. Items[ i] . Selected then
Result . Add( Directorio + ListView1. Items[ i] . Caption) ;
2008-08-27 14:17:04 +00:00
end ;
end ;
function TfrViewDocumentos. GetDirectorio: Variant ;
begin
if VarIsNull( FDirectorio) then
begin
FDirectorio : = DarDirectorioTemporal;
if not CreateDir( FDirectorio) then
2008-09-04 17:49:18 +00:00
raise Exception. Create( 'ERROR: No se ha podido crear el fichero temporal (GetDirectorio)' ) ;
2008-08-27 14:17:04 +00:00
end ;
Result : = FDirectorio;
end ;
2008-08-28 15:12:50 +00:00
function TfrViewDocumentos. GetModified: Boolean ;
begin
2008-09-04 17:49:18 +00:00
Result : = FHayModificaciones;
end ;
procedure TfrViewDocumentos. ListView1DblClick( Sender: TObject) ;
begin
inherited ;
if Assigned( ListView1. ItemFocused) then
actModificar. Execute;
2008-08-28 15:12:50 +00:00
end ;
2008-08-27 16:15:43 +00:00
procedure TfrViewDocumentos. RefrescarVisualizador;
2008-09-01 09:30:59 +00:00
var
i: Integer ;
AItem: TListItem;
2008-08-27 14:17:04 +00:00
begin
2008-09-01 09:30:59 +00:00
ListView1. Clear;
for i : = 0 to FListaFicheros. Count - 1 do
begin
AItem : = ListView1. Items. Add;
AItem. Caption : = FListaFicheros. Strings[ i] ;
AItem. ImageIndex : = AsignarImagen( FListaFicheros. Strings[ i] ) ;
end ;
2008-08-27 14:17:04 +00:00
end ;
2008-08-28 15:12:50 +00:00
procedure TfrViewDocumentos. SetModified( const Value: Boolean ) ;
begin
inherited ;
FHayModificaciones : = Value;
end ;
2008-08-27 14:17:04 +00:00
end .