Changeset 10 for trunk/UFormMain.pas
- Timestamp:
- Apr 2, 2016, 12:02:59 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/UFormMain.pas
r9 r10 15 15 TFormMain = class(TForm) 16 16 ABrowseDisk: TAction; 17 AOperationOptions: TAction; 18 AFileClose: TAction; 19 AFileNew: TAction; 20 AScanContinue: TAction; 17 21 AFileSave: TAction; 18 22 AFileOpen: TAction; 19 23 AFileSaveAs: TAction; 20 24 AExit: TAction; 21 A ScanOptions: TAction;25 AProjectOptions: TAction; 22 26 AScanStart: TAction; 23 27 AScanStop: TAction; 24 28 ActionList1: TActionList; 25 29 Button1: TButton; 30 Button2: TButton; 31 Button3: TButton; 26 32 ButtonScan: TButton; 27 33 ButtonScan1: TButton; 28 34 ButtonScan2: TButton; 29 ComboBoxRunMode: TComboBox;30 EditPattern: TEdit;31 35 EditDrive: TEdit; 32 36 Image1: TImage; 33 37 Label1: TLabel; 34 38 Label10: TLabel; 39 Label11: TLabel; 35 40 Label2: TLabel; 36 41 Label3: TLabel; … … 40 45 Label7: TLabel; 41 46 Label8: TLabel; 42 Label9: TLabel;43 47 LabelElapsedTime: TLabel; 44 48 LabelBlockSize: TLabel; … … 53 57 MainMenu1: TMainMenu; 54 58 MenuItem1: TMenuItem; 59 MenuItem10: TMenuItem; 60 MenuItem11: TMenuItem; 61 MenuItem12: TMenuItem; 62 MenuItem13: TMenuItem; 63 MenuItem14: TMenuItem; 64 MenuItem15: TMenuItem; 55 65 MenuItem2: TMenuItem; 56 66 MenuItem3: TMenuItem; … … 67 77 procedure ABrowseDiskExecute(Sender: TObject); 68 78 procedure AExitExecute(Sender: TObject); 79 procedure AFileCloseExecute(Sender: TObject); 80 procedure AFileNewExecute(Sender: TObject); 69 81 procedure AFileOpenExecute(Sender: TObject); 70 82 procedure AFileSaveAsExecute(Sender: TObject); 71 83 procedure AFileSaveExecute(Sender: TObject); 72 procedure AScanOptionsExecute(Sender: TObject); 84 procedure AOperationOptionsExecute(Sender: TObject); 85 procedure AProjectOptionsExecute(Sender: TObject); 86 procedure AScanContinueExecute(Sender: TObject); 73 87 procedure AScanStartExecute(Sender: TObject); 74 88 procedure AScanStopExecute(Sender: TObject); … … 78 92 procedure FormShow(Sender: TObject); 79 93 procedure Image1Resize(Sender: TObject); 94 procedure ListView1Data(Sender: TObject; Item: TListItem); 80 95 procedure Timer1Timer(Sender: TObject); 81 96 private … … 84 99 RedrawPending: Boolean; 85 100 LastProjectFileName: string; 101 procedure ReloadOperationList; 102 procedure CheckDrive; 86 103 procedure ProjectOpen(FileName: string); 87 104 procedure DriveScanChange(Sender: TObject); … … 107 124 108 125 uses 109 UFormProject ;126 UFormProject, UFormOperation; 110 127 111 128 resourcestring 112 129 SProjectModified = '(modified)'; 130 SNewProject = 'New project'; 131 SSelectDriveForScan = 'Select drive for scan'; 132 SOpenStoredProject = 'Open stored scan project'; 133 SSaveProject = 'Save scan project'; 134 SBytes = 'bytes'; 135 136 const 137 DefaultDriveName = '/dev/sda'; 113 138 114 139 { TFormMain } … … 120 145 ProjectOpen(LastProjectFileName) 121 146 else begin 147 AFileNew.Execute; 122 148 Redraw; 123 149 UpdateInterface; … … 130 156 end; 131 157 158 procedure TFormMain.ListView1Data(Sender: TObject; Item: TListItem); 159 begin 160 if (Item.Index >= 0) and (Item.Index < Project.Scans.Count) then 161 with TDriveScan(Project.Scans[Item.Index]) do begin 162 Item.Caption := IntToStr(Item.Index); 163 Item.SubItems.Add(DateTimeToStr(TimeStart)); 164 Item.SubItems.Add(DateTimeToStr(TimeEnd)); 165 Item.SubItems.Add(IntToStr(SectorStart)); 166 Item.SubItems.Add(IntToStr(SectorEnd)); 167 end; 168 end; 169 132 170 procedure TFormMain.FormCreate(Sender: TObject); 133 171 begin 134 172 PrefixMultiplier := TPrefixMultiplier.Create; 135 Project := TProject.Create; 136 Project.Scans.Add(TDriveScan.Create); 137 DriveScan := TDriveScan(Project.Scans[0]); 173 EditDrive.Text := DefaultDriveName; 174 XMLConfig1.Filename := 'config.xml'; 175 Project := nil; 176 end; 177 178 procedure TFormMain.AScanStopExecute(Sender: TObject); 179 begin 180 DriveScan.Stop; 181 UpdateInterface; 182 end; 183 184 procedure TFormMain.AScanStartExecute(Sender: TObject); 185 begin 186 LastBlockPos := 0; 187 DriveScan.DriveName := EditDrive.Text; 188 DriveScan.Reset; 189 DriveScan.SectorSize := Project.SectorSize; 138 190 DriveScan.OnChange := DriveScanChange; 139 191 DriveScan.OnTerminate := DriveScanTerminate; 140 EditDrive.Text := '/dev/sdb';141 XMLConfig1.Filename := 'config.xml';142 end;143 144 procedure TFormMain.AScanStopExecute(Sender: TObject);145 begin146 DriveScan.Stop;147 UpdateInterface;148 end;149 150 procedure TFormMain.AScanStartExecute(Sender: TObject);151 begin152 LastBlockPos := 0;153 DriveScan.Drive := EditDrive.Text;154 DriveScan.SectorSize := Project.SectorSize;155 DriveScan.Mode := TRunMode(ComboBoxRunMode.ItemIndex);156 DriveScan.WritePattern := StrToInt(EditPattern.Text);157 192 DriveScan.Start; 158 193 Project.Modified := True; … … 160 195 end; 161 196 162 procedure TFormMain.AScanOptionsExecute(Sender: TObject); 163 begin 197 procedure TFormMain.AProjectOptionsExecute(Sender: TObject); 198 begin 199 CheckDrive; 164 200 FormProject.Load(Project); 165 201 if FormProject.ShowModal = mrOk then begin 166 202 FormProject.Save(Project); 167 end; 203 Project.Modified := True; 204 UpdateInterface; 205 end; 206 end; 207 208 procedure TFormMain.AScanContinueExecute(Sender: TObject); 209 begin 210 DriveScan.Start; 211 Project.Modified := True; 212 UpdateInterface; 168 213 end; 169 214 170 215 procedure TFormMain.ABrowseDiskExecute(Sender: TObject); 171 216 begin 172 OpenDialog1.Title := 'Select drive for scan';217 OpenDialog1.Title := SSelectDriveForScan; 173 218 OpenDialog1.DefaultExt := ''; 174 219 OpenDialog1.FileName := EditDrive.Text; … … 182 227 end; 183 228 229 procedure TFormMain.AFileCloseExecute(Sender: TObject); 230 begin 231 DriveScan := nil; 232 FreeAndNil(Project); 233 UpdateInterface; 234 end; 235 236 procedure TFormMain.AFileNewExecute(Sender: TObject); 237 begin 238 AFileClose.Execute; 239 Project := TProject.Create; 240 Project.FileName := SNewProject; 241 Project.Modified := False; 242 Project.Scans.Add(TDriveScan.Create); 243 DriveScan := TDriveScan(Project.Scans[0]); 244 245 CheckDrive; 246 DriveScan.SectorStart := 0; 247 DriveScan.SectorEnd := DriveScan.SectorCount - 1; 248 DriveScan.Reset; 249 Redraw; 250 UpdateInterface; 251 end; 252 184 253 procedure TFormMain.AFileOpenExecute(Sender: TObject); 185 254 begin 186 OpenDialog1.Title := 'Open stored scan project';255 OpenDialog1.Title := SOpenStoredProject; 187 256 OpenDialog1.DefaultExt := '.cdp'; 257 if Assigned(Project) then 258 OpenDialog1.FileName := Project.FileName; 188 259 if OpenDialog1.Execute then begin 189 260 ProjectOpen(OpenDialog1.FileName); … … 193 264 procedure TFormMain.AFileSaveAsExecute(Sender: TObject); 194 265 begin 195 SaveDialog1.Title := 'Save scan project';266 SaveDialog1.Title := SSaveProject; 196 267 SaveDialog1.DefaultExt := '.cdp'; 268 SaveDialog1.FileName := Project.FileName; 197 269 if SaveDialog1.Execute then begin 198 270 Project.SaveToFile(SaveDialog1.FileName); 271 UpdateInterface; 199 272 end; 200 273 end; … … 204 277 if not FileExists(Project.FileName) then 205 278 AFileSaveAs.Execute 206 else Project.SaveToFile(Project.FileName); 279 else begin 280 Project.SaveToFile(Project.FileName); 281 UpdateInterface; 282 end; 283 end; 284 285 procedure TFormMain.AOperationOptionsExecute(Sender: TObject); 286 begin 287 FormOperation.Load(DriveScan); 288 if FormOperation.ShowModal = mrOk then begin 289 FormOperation.Save(DriveScan); 290 Project.Modified := True; 291 UpdateInterface; 292 end; 207 293 end; 208 294 209 295 procedure TFormMain.FormClose(Sender: TObject; var CloseAction: TCloseAction); 210 296 begin 297 AFileClose.Execute; 211 298 SaveConfig; 212 299 end; … … 215 302 begin 216 303 Timer1.Enabled := False; 217 FreeAndNil(Project);304 if Assigned(Project) then FreeAndNil(Project); 218 305 FreeAndNil(PrefixMultiplier); 219 306 end; … … 227 314 procedure TFormMain.DoDraw; 228 315 begin 316 if Assigned(Project) then begin 229 317 if RedrawPending then 230 318 with Image1 do begin … … 240 328 end; 241 329 LabelSize.Caption := PrefixMultiplier.Add(DriveScan.BlockMap.SectorCount * DriveScan.SectorSize, 242 BasePrefixMultipliers, 'bytes');330 BasePrefixMultipliers, SBytes); 243 331 LabelSectorPerBlock.Caption := IntToStr(DriveScan.BlockMap.SectorPerBlock); 244 LabelBlockSize.Caption := IntToStr(DriveScan.SectorSize) + ' bytes';332 LabelBlockSize.Caption := IntToStr(DriveScan.SectorSize) + ' ' + SBytes; 245 333 LabelBlockCount.Caption := IntToStr(DriveScan.BlockMap.SectorCount); 246 334 LabelBlockCurrent.Caption := IntToStr(DriveScan.SectorCurrent); … … 268 356 DriveScan.Lock.Release; 269 357 end; 358 end else 359 with Image1 do begin 360 if (Width <> Picture.Bitmap.Width) or (Height <> Picture.Bitmap.Height) then 361 Picture.Bitmap.SetSize(Width, Height); 362 with Picture.Bitmap.Canvas do begin 363 Brush.Style := bsSolid; 364 Brush.Color := clSilver; 365 FillRect(0, 0, Width, Height); 366 end; 367 end; 270 368 end; 271 369 … … 277 375 AScanStart.Enabled := DriveScan.Terminated = True; 278 376 AScanStop.Enabled := DriveScan.Terminated = False; 377 AScanContinue.Enabled := (DriveScan.Terminated = True) and (DriveScan.SectorCurrent > DriveScan.SectorStart) and 378 (DriveScan.SectorCurrent < DriveScan.SectorEnd); 279 379 end; 280 380 AFileSave.Enabled := Assigned(Project) and Project.Modified; 281 381 AFileSaveAs.Enabled := Assigned(Project); 382 AFileClose.Enabled := Assigned(Project); 383 ReloadOperationList; 282 384 283 385 Title := ''; … … 298 400 procedure TFormMain.LoadConfig; 299 401 begin 300 EditDrive.Text := XMLConfig1.GetValue('DriveName', '/dev/sda');402 EditDrive.Text := XMLConfig1.GetValue('DriveName', DefaultDriveName); 301 403 LastProjectFileName := XMLConfig1.GetValue('LastProjectFileName', ''); 302 404 end; … … 307 409 end; 308 410 411 procedure TFormMain.ReloadOperationList; 412 begin 413 if Assigned(Project) then begin 414 ListView1.Items.Count := Project.Scans.Count; 415 end else begin 416 ListView1.Items.Count := 0; 417 end; 418 ListView1.Refresh; 419 end; 420 421 procedure TFormMain.CheckDrive; 422 begin 423 DriveScan.CheckDrive; 424 Project.SectorCount := DriveScan.SectorCount; 425 end; 426 309 427 procedure TFormMain.ProjectOpen(FileName: string); 310 428 begin 429 AFileNew.Execute; 311 430 Project.LoadFromFile(FileName); 312 431 LastProjectFileName := FileName;
Note:
See TracChangeset
for help on using the changeset viewer.