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. |