Subversion Repositories recyclebinunit

Compare Revisions

Regard whitespace Rev 11 → Rev 12

/trunk/Recycle Bin Unit/Main.pas
0,0 → 1,350
unit Main;
 
// TODO: Also include BC++ Versions
{$IFNDEF BCB}
{$DEFINE DEL1UP}
{$IFNDEF VER80}
{$DEFINE DEL2UP}
{$IFNDEF VER90}
{$DEFINE DEL3UP}
{$IFNDEF VER100}
{$DEFINE DEL4UP}
{$IFNDEF VER120}
{$DEFINE DEL5UP}
{$IFNDEF VER130}
{$DEFINE DEL6UP}
{...}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
 
{$IFDEF DEL6UP}
{$WARN UNIT_PLATFORM OFF}
{$ENDIF}
 
interface
 
uses
Windows, SysUtils, Forms, Controls, StdCtrls,
ExtCtrls, Classes, Dialogs;
 
type
TMainForm = class(TForm)
openDialog: TOpenDialog;
outputMemo: TMemo;
topPanel: TPanel;
rightPanel: TPanel;
btnReadOwnRecyclers: TButton;
leftPanel: TPanel;
btnReadRecyclerFile: TButton;
outputPanel: TPanel;
saveDialog: TSaveDialog;
btnShowConfig: TButton;
btnSaveTextDump: TButton;
procedure btn_read_click(Sender: TObject);
procedure btn_readown_click(Sender: TObject);
procedure btnSaveTextDumpClick(Sender: TObject);
procedure btnShowConfigClick(Sender: TObject);
public
procedure ReadRecycler(filename: string);
end;
 
var
MainForm: TMainForm;
 
implementation
 
uses
RecyclerFunctions;
 
{$R *.dfm}
 
function _BoolToEnabledDisabled(b: boolean): string;
begin
if b then
result := 'Enabled'
else
result := 'Disabled';
end;
 
function _BoolToYesNo(b: boolean): string;
begin
if b then
result := 'Yes'
else
result := 'No';
end;
 
{$IFNDEF DEL6UP}
// Only available since Delphi 6
function DirectoryExists(const directory: string): boolean;
var
attr: integer;
begin
attr := getfileattributes(pchar(directory));
result := (attr <> -1) and (file_attribute_directory and attr <> 0);
end;
{$ENDIF}
 
procedure TMainForm.ReadRecycler(filename: string);
var
x: TStringList;
i: integer;
tmp, fn: string;
begin
outputMemo.Visible := false;
application.ProcessMessages;
 
if (uppercase(copy(extractfilename(filename), 0, 2)) = '$I') or
(uppercase(copy(extractfilename(filename), 0, 2)) = '$R') then
begin
outputMemo.Lines.Add('Reading directory:');
tmp := extractfilepath(filename);
end
else
begin
tmp := filename;
if directoryexists(tmp) then
outputMemo.Lines.Add('Reading directory:')
else
outputMemo.Lines.Add('Reading file:');
end;
 
outputMemo.Lines.Add(tmp);
outputMemo.lines.add('');
 
if not RecyclerIsValid(filename) then
begin
outputMemo.lines.add('Recycler is not valid.');
outputMemo.lines.add('');
end
else
begin
x := TStringList.Create;
try
RecyclerListIndexes(filename, x);
if x.Count = 0 then
begin
outputMemo.lines.add('No items available.');
outputMemo.lines.add('');
end;
for i := 0 to x.Count - 1 do
begin
fn := RecyclerCurrentFilenameAndPath(tmp, x[i]);
outputMemo.lines.add(inttostr(i+1)+'. Entry');
outputMemo.lines.add('# Unique ID: ' + changefileext(x[i], ''));
outputMemo.lines.add('# Recycler filename: '+fn);
 
if fileexists(fn) then
outputMemo.lines.add(' -> Found')
else
outputMemo.lines.add(' -> Not found');
 
{$IFDEF DEL6UP}
outputMemo.lines.add('# Deleted: '+
datetimetostr(RecyclerGetDateTime(tmp, x[i])));
{$ELSE}
outputMemo.lines.add('# Deleted: You have to compile this demo with Delphi 6 or higher.');
{$ENDIF}
outputMemo.lines.add('# Original filename: '+
RecyclerGetSource(tmp, x[i]));
outputMemo.lines.add('# Unicode filename: '+
RecyclerGetSourceUnicode(tmp, x[i]));
outputMemo.lines.add('# Source device: '+
RecyclerGetSourceDrive(tmp, x[i]));
outputMemo.lines.add('# Original size on disk: '+
inttostr(RecyclerOriginalSize(tmp, x[i]))+' Byte');
outputMemo.lines.add('');
end;
finally
x.Free;
end;
end;
 
outputMemo.Visible := true;
end;
 
procedure TMainForm.btn_read_click(Sender: TObject);
begin
if openDialog.Execute() then
begin
outputMemo.Clear;
ReadRecycler(openDialog.filename);
end;
end;
 
procedure TMainForm.btn_readown_click(Sender: TObject);
var
x, sl: TStringList;
i, j: integer;
somethingfound: boolean;
begin
outputMemo.Visible := false;
try
application.ProcessMessages;
 
outputMemo.Clear;
x := TStringList.Create;
try
RecyclerGetAllRecyclerDrives(x);
somethingfound := false;
if x.Count > 0 then
begin
for i := 0 to x.Count - 1 do
begin
// ReadRecycler(RecyclerGetPath(x[i][1]), true);
 
sl := TStringList.Create;
try
RecyclerGetInfofiles(x[i][1], true, sl);
if sl.Count > 0 then
begin
for j := 0 to sl.Count - 1 do
begin
ReadRecycler(sl.Strings[j]);
somethingfound := true;
end;
end;
finally
sl.Free;
end;
end;
end;
if not somethingfound then
begin
outputMemo.lines.add('No recyclers found.');
outputMemo.lines.add('');
end;
finally
x.Free;
end;
finally
outputMemo.Visible := true;
end;
end;
 
procedure TMainForm.btnSaveTextDumpClick(Sender: TObject);
begin
if saveDialog.Execute then
begin
outputMemo.Lines.SaveToFile(saveDialog.FileName);
end;
end;
 
procedure TMainForm.btnShowConfigClick(Sender: TObject);
var
d: char;
sl: TStringList;
i: integer;
begin
outputMemo.Visible := false;
try
application.ProcessMessages;
 
outputMemo.Clear;
 
outputMemo.Lines.Add(RecyclerLibraryVersion);
 
outputMemo.Lines.Add('');
outputMemo.Lines.Add('= Current status =');
outputMemo.Lines.Add('');
 
if RecyclerQueryFunctionAvailable then
begin
outputMemo.Lines.Add('GLOBAL Empty = ' + _BoolToYesNo(RecyclerIsEmpty));
outputMemo.Lines.Add('GLOBAL Number of items = ' + IntToStr(RecyclerGetNumItems));
outputMemo.Lines.Add('GLOBAL Size = ' + IntToStr(RecyclerGetSize) + ' Bytes');
for d := 'A' to 'Z' do
begin
outputMemo.Lines.Add('Drive '+d+' Empty = ' + _BoolToYesNo(RecyclerIsEmpty(d)));
outputMemo.Lines.Add('Drive '+d+' Number of items = ' + IntToStr(RecyclerGetNumItems(d)));
outputMemo.Lines.Add('Drive '+d+' Size = ' + IntToStr(RecyclerGetSize(d)) + ' Bytes');
end;
end
else
begin
outputMemo.Lines.Add('Empty, Number of items, Size:');
outputMemo.Lines.Add(' Functionality not working with your operating system.');
end;
 
outputMemo.Lines.Add('');
outputMemo.Lines.Add('= Name and Infotips =');
outputMemo.Lines.Add('');
 
outputMemo.Lines.Add('Name: '+RecyclerGetName());
outputMemo.Lines.Add('Info Tip: '+RecyclerGetInfoTip());
outputMemo.Lines.Add('Intro Text: '+RecyclerGetIntroText());
outputMemo.Lines.Add('Class-ID: '+RecyclerGetCLSID());
 
outputMemo.Lines.Add('');
outputMemo.Lines.Add('= Icons =');
outputMemo.Lines.Add('');
 
outputMemo.Lines.Add('Default Icon: '+RecyclerGetDefaultIconString());
if RecyclerQueryFunctionAvailable then
begin
outputMemo.Lines.Add('Current Icon (Empty / Full): '+RecyclerGetCurrentIconString());
end
else
begin
outputMemo.Lines.Add('Current Icon (Empty / Full):');
outputMemo.Lines.Add(' Functionality not working with your operating system.');
end;
outputMemo.Lines.Add('Full Icon: '+RecyclerGetFullIconString());
outputMemo.Lines.Add('Empty Icon: '+RecyclerGetEmptyIconString());
 
outputMemo.Lines.Add('');
outputMemo.Lines.Add('= Events =');
outputMemo.Lines.Add('');
 
outputMemo.Lines.Add('Empty Event Name: '+RecyclerEmptyEventGetName());
outputMemo.Lines.Add('Empty Event Current Sound: '+RecyclerEmptyEventGetCurrentSound());
outputMemo.Lines.Add('Empty Event Default Sound: '+RecyclerEmptyEventGetDefaultSound());
 
sl := TStringList.Create;
try
RecyclerEmptyEventGetSoundCategories(sl);
for i := 0 to sl.Count - 1 do
begin
outputMemo.Lines.Add(Format('Event "%s" = %s', [sl.Strings[i], RecyclerEmptyEventGetSound(sl.Strings[i])]));
end;
finally
sl.Free;
end;
 
outputMemo.Lines.Add('');
outputMemo.Lines.Add('= Nuke on Delete =');
outputMemo.Lines.Add('');
 
outputMemo.Lines.Add('Global settings selected: ' + _BoolToEnabledDisabled(RecyclerHasGlobalSettings));
outputMemo.Lines.Add('Global setting: ' + _BoolToEnabledDisabled(RecyclerGlobalIsNukeOnDelete()));
for d := 'A' to 'Z' do
begin
outputMemo.Lines.Add('Setting for drive '+d+': ' + _BoolToEnabledDisabled(RecyclerSpecificIsNukeOnDelete(d)));
end;
 
outputMemo.Lines.Add('');
outputMemo.Lines.Add('= Usage Percent =');
outputMemo.Lines.Add('');
 
outputMemo.Lines.Add('Global settings selected: ' + _BoolToEnabledDisabled(RecyclerHasGlobalSettings));
outputMemo.Lines.Add('Global setting: ' + IntToStr(RecyclerGlobalGetPercentUsage()));
for d := 'A' to 'Z' do
begin
outputMemo.Lines.Add('Setting for drive '+d+': ' + IntToStr(RecyclerSpecificGetPercentUsage(d)));
end;
 
outputMemo.Lines.Add('');
outputMemo.Lines.Add('= Confirmation Dialog =');
outputMemo.Lines.Add('');
 
outputMemo.Lines.Add('Setting: ' + _BoolToEnabledDisabled(RecyclerConfirmationDialogEnabled()));
finally
outputMemo.Visible := true;
end;
end;
 
end.