Subversion Repositories recyclebinunit

Rev

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

Rev Author Line No. Line
75 daniel-mar 1
unit RecyclerListingMain;
2
 
86 daniel-mar 3
// TODO: Doubleclick to open file!
4
 
75 daniel-mar 5
interface
6
 
7
uses
8
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
77 daniel-mar 9
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, ImgList;
75 daniel-mar 10
 
11
type
12
  TRecyclerListingMainForm = class(TForm)
13
    TreeView1: TTreeView;
14
    Panel1: TPanel;
15
    Button1: TButton;
16
    CheckBox1: TCheckBox;
77 daniel-mar 17
    Button2: TButton;
18
    OpenDialog1: TOpenDialog;
19
    LabeledEdit1: TLabeledEdit;
20
    ImageList1: TImageList;
83 daniel-mar 21
    CheckBox2: TCheckBox;
75 daniel-mar 22
    procedure Button1Click(Sender: TObject);
77 daniel-mar 23
    procedure Button2Click(Sender: TObject);
24
    procedure FormShow(Sender: TObject);
75 daniel-mar 25
  private
77 daniel-mar 26
    localRecyclersNode: TTreeNode;
27
    individualRecyclersNode: TTreeNode;
75 daniel-mar 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
77 daniel-mar 42
// TODO: Einstellungen usw anzeigen, so wie im alten Demo
75 daniel-mar 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;
86 daniel-mar 60
  sCaption: string;
61
resourcestring
62
  S_DRIVE = 'Drive %s';
75 daniel-mar 63
begin
77 daniel-mar 64
  localRecyclersNode.DeleteChildren;
65
 
75 daniel-mar 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 daniel-mar 77
      if drive.VolumeGUIDAvailable then
86 daniel-mar 78
        nDrive := TreeView1.Items.AddChildObject(localRecyclersNode, Format(S_DRIVE, [drive.DriveLetter])+': ' + GUIDToString(drive.VolumeGUID), drive)
77 daniel-mar 79
      else
86 daniel-mar 80
        nDrive := TreeView1.Items.AddChildObject(localRecyclersNode, Format(S_DRIVE, [drive.DriveLetter])+':', drive);
77 daniel-mar 81
      nDrive.ImageIndex := 6;
83 daniel-mar 82
      nDrive.SelectedIndex := nDrive.ImageIndex;
75 daniel-mar 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);
77 daniel-mar 94
        nBin.ImageIndex := 4;
83 daniel-mar 95
        nBin.SelectedIndex := nBin.ImageIndex;
75 daniel-mar 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;
83 daniel-mar 102
 
86 daniel-mar 103
          if not FileExists(item.PhysicalFile) and
104
             not DirectoryExists(item.PhysicalFile) and
105
             CheckBox2.Checked then continue;
83 daniel-mar 106
 
86 daniel-mar 107
          sCaption := item.Source;
108
          if item.IndexFile <> '' then sCaption := sCaption + ' ('+ExtractFileName(item.IndexFile)+')';
109
          nItem := TreeView1.Items.AddChildObject(nBin, sCaption, bin);
83 daniel-mar 110
 
111
          if FileExists(item.PhysicalFile) then
112
            nItem.ImageIndex := 0
86 daniel-mar 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")
83 daniel-mar 115
          else
116
            nItem.ImageIndex := 8;
117
          nItem.SelectedIndex := nItem.ImageIndex;
75 daniel-mar 118
        end;
119
      end;
120
    end;
121
  finally
122
    drives.Free;
123
    bins.Free;
124
    items.Free;
125
    TreeView1.Items.EndUpdate;
126
  end;
77 daniel-mar 127
 
128
  localRecyclersNode.Expand(false);
75 daniel-mar 129
end;
130
 
77 daniel-mar 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;
86 daniel-mar 140
  sCaption: string;
77 daniel-mar 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;
83 daniel-mar 154
 
86 daniel-mar 155
      if not FileExists(item.PhysicalFile) and
156
         not DirectoryExists(item.PhysicalFile) and
157
         CheckBox2.Checked then continue;
83 daniel-mar 158
 
86 daniel-mar 159
      sCaption := item.Source;
160
      if item.IndexFile <> '' then sCaption := sCaption + ' ('+ExtractFileName(item.IndexFile)+')';
161
      nItem := TreeView1.Items.AddChildObject(nBin, sCaption, bin);
83 daniel-mar 162
 
163
      if FileExists(item.PhysicalFile) then
164
        nItem.ImageIndex := 0
86 daniel-mar 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")
83 daniel-mar 167
      else
168
        nItem.ImageIndex := 8;
169
      nItem.SelectedIndex := nItem.ImageIndex;
77 daniel-mar 170
    end;
171
  finally
172
    items.Free;
173
  end;
174
 
175
  nBin.Expand(false);
176
end;
177
 
178
procedure TRecyclerListingMainForm.FormShow(Sender: TObject);
86 daniel-mar 179
resourcestring
180
  S_LOCAL_RECYCLE_BINS = 'Local recycle bins';
181
  S_MANUAL_RECYCLE_BINS ='Manually added recycle bins';
77 daniel-mar 182
begin
86 daniel-mar 183
  localRecyclersNode := TreeView1.Items.Add(nil, S_LOCAL_RECYCLE_BINS);
77 daniel-mar 184
  localRecyclersNode.ImageIndex := 2;
83 daniel-mar 185
  localRecyclersNode.SelectedIndex := localRecyclersNode.ImageIndex;
77 daniel-mar 186
 
86 daniel-mar 187
  individualRecyclersNode := TreeView1.Items.Add(nil, S_MANUAL_RECYCLE_BINS);
77 daniel-mar 188
  individualRecyclersNode.ImageIndex := 2;
83 daniel-mar 189
  individualRecyclersNode.SelectedIndex := individualRecyclersNode.ImageIndex;
77 daniel-mar 190
end;
191
 
75 daniel-mar 192
end.