Subversion Repositories recyclebinunit

Rev

Rev 83 | Rev 87 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit RecyclerListingMain;
  2.  
  3. // TODO: Doubleclick to open file!
  4.  
  5. interface
  6.  
  7. uses
  8.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  9.   Dialogs, StdCtrls, ComCtrls, ExtCtrls, ImgList;
  10.  
  11. type
  12.   TRecyclerListingMainForm = class(TForm)
  13.     TreeView1: TTreeView;
  14.     Panel1: TPanel;
  15.     Button1: TButton;
  16.     CheckBox1: TCheckBox;
  17.     Button2: TButton;
  18.     OpenDialog1: TOpenDialog;
  19.     LabeledEdit1: TLabeledEdit;
  20.     ImageList1: TImageList;
  21.     CheckBox2: TCheckBox;
  22.     procedure Button1Click(Sender: TObject);
  23.     procedure Button2Click(Sender: TObject);
  24.     procedure FormShow(Sender: TObject);
  25.   private
  26.     localRecyclersNode: TTreeNode;
  27.     individualRecyclersNode: TTreeNode;
  28.   end;
  29.  
  30. var
  31.   RecyclerListingMainForm: TRecyclerListingMainForm;
  32.  
  33. implementation
  34.  
  35. {$R *.dfm}
  36.  
  37. uses
  38.   RecBinUnit2, ContNrs, SIDUnit;
  39.  
  40. // TODO: SID Namen auflösen und dementsprechend anzeigen
  41. // TODO: zu jedem element mehr informationen anzeigen, nicht nur den ursprungsnamen
  42. // TODO: Einstellungen usw anzeigen, so wie im alten Demo
  43.  
  44. procedure TRecyclerListingMainForm.Button1Click(Sender: TObject);
  45. var
  46.   drives: TObjectList{TRbDrive};
  47.   iDrive: integer;
  48.   drive: TRbDrive;
  49.   nDrive: TTreeNode;
  50.  
  51.   bins: TObjectList{TRbRecycleBin};
  52.   iBin: integer;
  53.   bin: TRbRecycleBin;
  54.   nBin: TTreeNode;
  55.  
  56.   items: TObjectList{TRbRecycleBinItem};
  57.   iItem: integer;
  58.   item: TRbRecycleBinItem;
  59.   nItem: TTreeNode;
  60.   sCaption: string;
  61. resourcestring
  62.   S_DRIVE = 'Drive %s';
  63. begin
  64.   localRecyclersNode.DeleteChildren;
  65.  
  66.   TreeView1.Items.BeginUpdate;
  67.   drives := TObjectList.Create(true);
  68.   bins := TObjectList.Create(true);
  69.   items := TObjectList.Create(true);
  70.   try
  71.     drives.Clear;
  72.     TRecycleBinManager.ListDrives(drives);
  73.     for iDrive := 0 to drives.Count - 1 do
  74.     begin
  75.       drive := drives.Items[iDrive] as TRbDrive;
  76.  
  77.       if drive.VolumeGUIDAvailable then
  78.         nDrive := TreeView1.Items.AddChildObject(localRecyclersNode, Format(S_DRIVE, [drive.DriveLetter])+': ' + GUIDToString(drive.VolumeGUID), drive)
  79.       else
  80.         nDrive := TreeView1.Items.AddChildObject(localRecyclersNode, Format(S_DRIVE, [drive.DriveLetter])+':', drive);
  81.       nDrive.ImageIndex := 6;
  82.       nDrive.SelectedIndex := nDrive.ImageIndex;
  83.  
  84.       bins.Clear;
  85.       if CheckBox1.Checked then
  86.         drive.ListRecycleBins(bins, GetMySID)
  87.       else
  88.         drive.ListRecycleBins(bins);
  89.       for iBin := 0 to bins.Count - 1 do
  90.       begin
  91.         bin := bins.Items[iBin] as TRbRecycleBin;
  92.  
  93.         nBin := TreeView1.Items.AddChildObject(nDrive, bin.FileOrDirectory, bin);
  94.         nBin.ImageIndex := 4;
  95.         nBin.SelectedIndex := nBin.ImageIndex;
  96.  
  97.         items.Clear;
  98.         bin.ListItems(items);
  99.         for iItem := 0 to items.Count - 1 do
  100.         begin
  101.           item := items.Items[iItem] as TRbRecycleBinItem;
  102.  
  103.           if not FileExists(item.PhysicalFile) and
  104.              not DirectoryExists(item.PhysicalFile) and
  105.              CheckBox2.Checked then continue;
  106.  
  107.           sCaption := item.Source;
  108.           if item.IndexFile <> '' then sCaption := sCaption + ' ('+ExtractFileName(item.IndexFile)+')';
  109.           nItem := TreeView1.Items.AddChildObject(nBin, sCaption, bin);
  110.  
  111.           if FileExists(item.PhysicalFile) then
  112.             nItem.ImageIndex := 0
  113.           else if DirectoryExists(item.PhysicalFile) then
  114.             nItem.ImageIndex := 10 // TODO: Feature: Read folder contents and display them in this graph. (Also change icon to "open folder")
  115.           else
  116.             nItem.ImageIndex := 8;
  117.           nItem.SelectedIndex := nItem.ImageIndex;
  118.         end;
  119.       end;
  120.     end;
  121.   finally
  122.     drives.Free;
  123.     bins.Free;
  124.     items.Free;
  125.     TreeView1.Items.EndUpdate;
  126.   end;
  127.  
  128.   localRecyclersNode.Expand(false);
  129. end;
  130.  
  131. procedure TRecyclerListingMainForm.Button2Click(Sender: TObject);
  132. var
  133.   bin: TRbRecycleBin;
  134.   nBin: TTreeNode;
  135.  
  136.   items: TObjectList{TRbRecycleBinItem};
  137.   iItem: integer;
  138.   item: TRbRecycleBinItem;
  139.   nItem: TTreeNode;
  140.   sCaption: string;
  141. begin
  142.   bin := TRbRecycleBin.Create(LabeledEdit1.Text);
  143.  
  144.   nBin := TreeView1.Items.AddChildObject(individualRecyclersNode, bin.FileOrDirectory, bin);
  145.   individualRecyclersNode.Expand(false);
  146.  
  147.   items := TObjectList.Create(true);
  148.   try
  149.     items.Clear;
  150.     bin.ListItems(items);
  151.     for iItem := 0 to items.Count - 1 do
  152.     begin
  153.       item := items.Items[iItem] as TRbRecycleBinItem;
  154.  
  155.       if not FileExists(item.PhysicalFile) and
  156.          not DirectoryExists(item.PhysicalFile) and
  157.          CheckBox2.Checked then continue;
  158.  
  159.       sCaption := item.Source;
  160.       if item.IndexFile <> '' then sCaption := sCaption + ' ('+ExtractFileName(item.IndexFile)+')';
  161.       nItem := TreeView1.Items.AddChildObject(nBin, sCaption, bin);
  162.  
  163.       if FileExists(item.PhysicalFile) then
  164.         nItem.ImageIndex := 0
  165.       else if DirectoryExists(item.PhysicalFile) then
  166.         nItem.ImageIndex := 10 // TODO: Feature: Read folder contents and display them in this graph. (Also change icon to "open folder")
  167.       else
  168.         nItem.ImageIndex := 8;
  169.       nItem.SelectedIndex := nItem.ImageIndex;
  170.     end;
  171.   finally
  172.     items.Free;
  173.   end;
  174.  
  175.   nBin.Expand(false);
  176. end;
  177.  
  178. procedure TRecyclerListingMainForm.FormShow(Sender: TObject);
  179. resourcestring
  180.   S_LOCAL_RECYCLE_BINS = 'Local recycle bins';
  181.   S_MANUAL_RECYCLE_BINS ='Manually added recycle bins';
  182. begin
  183.   localRecyclersNode := TreeView1.Items.Add(nil, S_LOCAL_RECYCLE_BINS);
  184.   localRecyclersNode.ImageIndex := 2;
  185.   localRecyclersNode.SelectedIndex := localRecyclersNode.ImageIndex;
  186.  
  187.   individualRecyclersNode := TreeView1.Items.Add(nil, S_MANUAL_RECYCLE_BINS);
  188.   individualRecyclersNode.ImageIndex := 2;
  189.   individualRecyclersNode.SelectedIndex := individualRecyclersNode.ImageIndex;
  190. end;
  191.  
  192. end.
  193.