root/trunk/Forms/frm_add_nonfb2.pas
| 342 | 465 | ||
|---|---|---|---|
1 | (* ***************************************************************************** | ||
2 | * | ||
3 | * MyHomeLib | ||
4 | * | ||
5 | * Copyright (C) 2008-2010 Aleksey Penkov | ||
6 | * | ||
7 | * Created 22.02.2010 | ||
8 | * Description | ||
9 | * Author(s) Aleksey Penkov alex.penkov@gmail.com | ||
10 | * | ||
11 | * History | ||
12 | * NickR 02.03.2010 Код переформатирован * | ||
13 | ****************************************************************************** *) | ||
1 | 14 | ||
2 | {******************************************************************************} | ||
3 | { } | ||
4 | { MyHomeLib } | ||
5 | { } | ||
6 | { Version 0.9 } | ||
7 | { 20.08.2008 } | ||
8 | { Copyright (c) Aleksey Penkov alex.penkov@gmail.com } | ||
9 | { } | ||
10 | {******************************************************************************} | ||
11 | |||
12 | unit frm_add_nonfb2; | 15 | unit frm_add_nonfb2; |
13 | 16 | ||
14 | interface | 17 | interface |
... | ... | ||
46 | RzLabel, | 50 | RzLabel, |
47 | RzRadChk, | 51 | RzRadChk, |
48 | FBDDocument, | 52 | FBDDocument, |
49 | FBDAuthorTable, XPMan; | 53 | FBDAuthorTable; |
50 | 54 | ||
51 | type | 55 | type |
52 | TfrmAddnonfb2 = class(TForm) | 56 | TfrmAddnonfb2 = class(TForm) |
... | ... | ||
115 | btnOpenBook: TRzBitBtn; | 119 | btnOpenBook: TRzBitBtn; |
116 | FBD: TFBDDocument; | 120 | FBD: TFBDDocument; |
117 | alBookAuthors: TFBDAuthorTable; | 121 | alBookAuthors: TFBDAuthorTable; |
118 | XPManifest1: TXPManifest; | ||
119 | alFBDAuthors: TFBDAuthorTable; | 122 | alFBDAuthors: TFBDAuthorTable; |
120 | btnAddAuthorFromList: TRzBitBtn; | 123 | btnAddAuthorFromList: TRzBitBtn; |
121 | procedure RzButton3Click(Sender: TObject); | 124 | procedure RzButton3Click(Sender: TObject); |
122 | procedure TreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; | 125 | procedure TreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: String); |
123 | Column: TColumnIndex; TextType: TVSTTextType; var CellText: String); | ||
124 | procedure TreeDblClick(Sender: TObject); | 126 | procedure TreeDblClick(Sender: TObject); |
125 | procedure TreeChange(Sender: TBaseVirtualTree; Node: PVirtualNode); | 127 | procedure TreeChange(Sender: TBaseVirtualTree; Node: PVirtualNode); |
126 | procedure btnAddClick(Sender: TObject); | 128 | procedure btnAddClick(Sender: TObject); |
127 | procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); | 129 | procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); |
128 | procedure TreePaintText(Sender: TBaseVirtualTree; | 130 | procedure TreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); |
129 | const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; | ||
130 | TextType: TVSTTextType); | ||
131 | procedure btnShowGenresClick(Sender: TObject); | 131 | procedure btnShowGenresClick(Sender: TObject); |
132 | procedure FormShow(Sender: TObject); | 132 | procedure FormShow(Sender: TObject); |
133 | procedure btnCopyToTitleClick(Sender: TObject); | 133 | procedure btnCopyToTitleClick(Sender: TObject); |
... | ... | ||
139 | procedure miOpenExplorerClick(Sender: TObject); | 139 | procedure miOpenExplorerClick(Sender: TObject); |
140 | procedure miRenameFileClick(Sender: TObject); | 140 | procedure miRenameFileClick(Sender: TObject); |
141 | procedure flFilesDirectory(Sender: TObject; const Dir: string); | 141 | procedure flFilesDirectory(Sender: TObject; const Dir: string); |
142 | procedure TreeCompareNodes(Sender: TBaseVirtualTree; Node1, | 142 | procedure TreeCompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); |
143 | Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); | ||
144 | procedure TreeClick(Sender: TObject); | 143 | procedure TreeClick(Sender: TObject); |
145 | procedure btnLoadClick(Sender: TObject); | 144 | procedure btnLoadClick(Sender: TObject); |
146 | procedure btnPasteCoverClick(Sender: TObject); | 145 | procedure btnPasteCoverClick(Sender: TObject); |
... | ... | ||
152 | private | 151 | private |
153 | FBookRecord: TBookRecord; | 152 | FBookRecord: TBookRecord; |
154 | FFolder: string; | 153 | FFolder: string; |
155 | | 154 | |
156 | procedure PrepareBookRecord; | 155 | procedure PrepareBookRecord; |
157 | procedure CommitData; | 156 | procedure CommitData; |
158 | 157 | ||
159 | procedure ScanFolder; | 158 | procedure ScanFolder; |
160 | procedure FillLists; | 159 | procedure FillLists; |
161 | procedure SortTree; | 160 | procedure SortTree; |
162 | function FillFBDData: boolean; | 161 | function FillFBDData: Boolean; |
163 | public | 162 | public |
164 | 163 | ||
165 | private | 164 | private |
166 | FLibrary: TMHLLibrary; | 165 | FLibrary: TMHLLibrary; |
167 | FRootPath: string; | 166 | FRootPath: string; |
168 | function CheckEmptyFields(Data: PFileData): boolean; | 167 | function CheckEmptyFields(Data: PFileData): Boolean; |
169 | end; | 168 | end; |
170 | 169 | ||
171 | var | 170 | var |
... | ... | ||
180 | unit_TreeUtils, | 179 | unit_TreeUtils, |
181 | unit_Consts, | 180 | unit_Consts, |
182 | unit_Settings, | 181 | unit_Settings, |
182 | unit_MHLHelpers, | ||
183 | unit_Helpers, | 183 | unit_Helpers, |
184 | frm_author_list; | 184 | frm_author_list; |
185 | |||
186 | {$R *.dfm} | 185 | {$R *.dfm} |
187 | 186 | ||
188 | procedure TfrmAddnonfb2.FillLists; | 187 | procedure TfrmAddnonfb2.FillLists; |
... | ... | ||
212 | 211 | ||
213 | procedure TfrmAddnonfb2.btnCopyToFamilyClick(Sender: TObject); | 212 | procedure TfrmAddnonfb2.btnCopyToFamilyClick(Sender: TObject); |
214 | var | 213 | var |
215 | Author : TAuthorRecord; | 214 | Author: TAuthorRecord; |
216 | begin | 215 | begin |
217 | Author.Last := trim(edFileName.SelText); | 216 | Author.Last := trim(edFileName.SelText); |
218 | alBookAuthors.AddRow(Author); | 217 | alBookAuthors.AddRow(Author); |
... | ... | ||
220 | 219 | ||
221 | procedure TfrmAddnonfb2.btnCopyToNameClick(Sender: TObject); | 220 | procedure TfrmAddnonfb2.btnCopyToNameClick(Sender: TObject); |
222 | var | 221 | var |
223 | Author : TAuthorRecord; | 222 | Author: TAuthorRecord; |
224 | begin | 223 | begin |
225 | if alBookAuthors.Count > 0 then | 224 | if alBookAuthors.Count > 0 then |
226 | begin | 225 | begin |
227 | Author :=alBookAuthors.ActiveRecord; | 226 | Author := alBookAuthors.ActiveRecord; |
228 | Author.First := (trim(edFileName.SelText)); | 227 | Author.First := (trim(edFileName.SelText)); |
229 | alBookAuthors.ActiveRecord:= Author; | 228 | alBookAuthors.ActiveRecord := Author; |
230 | end; | 229 | end; |
231 | end; | 230 | end; |
232 | 231 | ||
... | ... | ||
246 | FreeAndNil(FLibrary); | 245 | FreeAndNil(FLibrary); |
247 | frmMain.DisableControls(True); | 246 | frmMain.DisableControls(True); |
248 | Settings.ForceConvertToFBD := cbForceConvertToFBD.Checked; | 247 | Settings.ForceConvertToFBD := cbForceConvertToFBD.Checked; |
249 | CanClose := true; | 248 | CanClose := True; |
250 | end; | 249 | end; |
251 | 250 | ||
252 | procedure TfrmAddnonfb2.FormShow(Sender: TObject); | 251 | procedure TfrmAddnonfb2.FormShow(Sender: TObject); |
... | ... | ||
269 | FBD.CoverSizeCode := 4; | 268 | FBD.CoverSizeCode := 4; |
270 | end; | 269 | end; |
271 | 270 | ||
272 | function TfrmAddnonfb2.FillFBDData:boolean; | 271 | function TfrmAddnonfb2.FillFBDData: Boolean; |
273 | var | 272 | var |
274 | I: Integer; | 273 | I: Integer; |
275 | begin | 274 | begin |
... | ... | ||
284 | FBD.AddSeries(sltBook, cbSeries.Text, Round(edSN.Value)); | 283 | FBD.AddSeries(sltBook, cbSeries.Text, Round(edSN.Value)); |
285 | Genre.Clear; | 284 | Genre.Clear; |
286 | for I := 0 to High(FBookRecord.Genres) do | 285 | for I := 0 to High(FBookRecord.Genres) do |
287 | Genre.Add(FBookRecord.Genres[i].GenreFb2Code); | 286 | Genre.Add(FBookRecord.Genres[I].GenreFb2Code); |
288 | end; | 287 | end; |
289 | 288 | ||
290 | FBD.SetAuthors(alFBDAuthors.Items, atlFBD); | 289 | FBD.SetAuthors(alFBDAuthors.Items, atlFBD); |
... | ... | ||
311 | edSN.Value := 0; | 310 | edSN.Value := 0; |
312 | edKeyWords.Text := ''; | 311 | edKeyWords.Text := ''; |
313 | 312 | ||
314 | |||
315 | edPublisher.Clear; | 313 | edPublisher.Clear; |
316 | edCity.Clear; | 314 | edCity.Clear; |
317 | edISBN.Clear; | 315 | edISBN.Clear; |
... | ... | ||
325 | var | 323 | var |
326 | Data: PFileData; | 324 | Data: PFileData; |
327 | begin | 325 | begin |
328 | Data := Tree.GetNodedata(Tree.GetFirstSelected); | 326 | Data := Tree.GetNodeData(Tree.GetFirstSelected); |
329 | if (Data = nil) or (Data.DataType = dtFolder) then | 327 | if (Data = nil) or (Data.DataType = dtFolder) then |
330 | Exit; | 328 | Exit; |
331 | ShellExecute(Handle, 'explore', PChar(AnsiLowercase(ExtractFilePath(Data.FullPath))), '', nil, SW_SHOWNORMAL); | 329 | ShellExecute(Handle, 'explore', PChar(AnsiLowercase(ExtractFilePath(Data.FullPath))), '', nil, SW_SHOWNORMAL); |
332 | end; | 330 | end; |
333 | 331 | ||
334 | function TfrmAddnonfb2.CheckEmptyFields(Data: PFileData):boolean; | 332 | function TfrmAddnonfb2.CheckEmptyFields(Data: PFileData): Boolean; |
335 | begin | 333 | begin |
336 | Result := False; | 334 | Result := False; |
337 | try | 335 | try |
... | ... | ||
351 | 349 | ||
352 | procedure TfrmAddnonfb2.CommitData; | 350 | procedure TfrmAddnonfb2.CommitData; |
353 | var | 351 | var |
354 | Next: PvirtualNode; | 352 | Next: PVirtualNode; |
355 | Data: PFileData; | 353 | Data: PFileData; |
356 | begin | 354 | begin |
357 | FLibrary.InsertBook(FBookRecord, True, True); | 355 | FLibrary.InsertBook(FBookRecord, True, True); |
... | ... | ||
363 | if Next <> nil then | 361 | if Next <> nil then |
364 | Tree.Selected[Next] := True; | 362 | Tree.Selected[Next] := True; |
365 | case cbClearOptions.ItemIndex of | 363 | case cbClearOptions.ItemIndex of |
366 | 0: miClearAllClick(nil); | 364 | 0: |
367 | 1: alBookAuthors.Clear; | 365 | miClearAllClick(nil); |
366 | 1: | ||
367 | alBookAuthors.Clear; | ||
368 | 2: | 368 | 2: |
369 | begin | 369 | begin |
370 | edT.Text := ''; | 370 | edT.Text := ''; |
... | ... | ||
376 | TreeChange(Tree, Next); | 376 | TreeChange(Tree, Next); |
377 | 377 | ||
378 | Data := Tree.GetNodeData(Next); | 378 | Data := Tree.GetNodeData(Next); |
379 | if (Data <> nil) and (Data.DataType = dtFile) then | 379 | if (Data <> nil) and (Data.DataType = dtFile) then |
380 | pcPages.ActivePage := tsBookInfo | 380 | pcPages.ActivePage := tsBookInfo |
381 | else | 381 | else |
382 | pcPages.ActivePage := tsFiles; | 382 | pcPages.ActivePage := tsFiles; |
... | ... | ||
388 | 388 | ||
389 | begin | 389 | begin |
390 | Screen.Cursor := crHourGlass; | 390 | Screen.Cursor := crHourGlass; |
391 | frmAddNonFB2.Enabled := False; | 391 | frmAddnonfb2.Enabled := False; |
392 | try | 392 | try |
393 | PrepareBookRecord; | 393 | PrepareBookRecord; |
394 | if cbForceConvertToFBD.Checked then | 394 | if cbForceConvertToFBD.Checked then |
395 | begin | 395 | begin |
396 | FBD.New(FRootPath + FBookrecord.Folder, FBookrecord.FileName, FBookrecord.FileExt); | 396 | FBD.New(FRootPath + FBookRecord.Folder, FBookRecord.FileName, FBookRecord.FileExt); |
397 | if FillFBDData then | 397 | if FillFBDData then |
398 | begin | 398 | begin |
399 | FBD.Save(False); | 399 | FBD.Save(False); |
400 | FBookrecord.FileName := FBookrecord.FileName + ZIP_EXTENSION; | 400 | FBookRecord.FileName := FBookRecord.FileName + ZIP_EXTENSION; |
401 | CommitData; | 401 | CommitData; |
402 | end; | 402 | end; |
403 | end | 403 | end |
404 | else CommitData; | 404 | else |
405 | CommitData; | ||
405 | finally | 406 | finally |
406 | frmAddNonFB2.Enabled := True; | 407 | frmAddnonfb2.Enabled := True; |
407 | Screen.Cursor := crDefault; | 408 | Screen.Cursor := crDefault; |
408 | end; | 409 | end; |
409 | end; | 410 | end; |
410 | 411 | ||
411 | procedure TfrmAddnonfb2.miRenameFileClick(Sender: TObject); | 412 | procedure TfrmAddnonfb2.miRenameFileClick(Sender: TObject); |
412 | var | 413 | var |
413 | NewName: string; | 414 | NewName: string; |
414 | Data: PFileData; | 415 | Data: PFileData; |
415 | begin | 416 | begin |
416 | btnRenameFile.Enabled := False; | 417 | btnRenameFile.Enabled := False; |
417 | try | 418 | try |
418 | Data := Tree.GetNodeData(Tree.GetFirstSelected); | 419 | Data := Tree.GetNodeData(Tree.GetFirstSelected); |
419 | if CheckEmptyFields(Data) then | 420 | if CheckEmptyFields(Data) then |
420 | begin | 421 | begin |
421 | NewName := CheckSymbols(alBookAuthors.ActiveRecord.Last + ' ' + alBookAuthors.ActiveRecord.First + | 422 | NewName := CheckSymbols(alBookAuthors.ActiveRecord.Last + ' ' + alBookAuthors.ActiveRecord.First + ' ' + edT.Text); |
422 | ' ' + edT.Text); | ||
423 | if RenameFile(Data.FullPath + Data.FileName + Data.Ext, Data.FullPath + NewName + Data.Ext) then | 423 | if RenameFile(Data.FullPath + Data.FileName + Data.Ext, Data.FullPath + NewName + Data.Ext) then |
424 | begin | 424 | begin |
425 | Data.FileName := NewName; | 425 | Data.FileName := NewName; |
426 | edFileName.Text := NewName; | 426 | edFileName.Text := NewName; |
427 | Tree.RepaintNode(Tree.GetFirstSelected); | 427 | Tree.RepaintNode(Tree.GetFirstSelected); |
428 | end | 428 | end |
429 | else MessageDlg('Переименование не удалось!' + #13 + | 429 | else |
430 | 'Возможно, файл заблокирован другой программой.', | 430 | MessageDlg('Переименование не удалось!' + #13 + 'Возможно, файл заблокирован другой программой.', mtError, [mbOk], 0); |
431 | mtError,[mbOk],0); | ||
432 | end; | 431 | end; |
433 | finally | 432 | finally |
434 | btnRenameFile.Enabled := True; | 433 | btnRenameFile.Enabled := True; |
... | ... | ||
446 | Author: TAuthorRecord; | 445 | Author: TAuthorRecord; |
447 | begin | 446 | begin |
448 | Data := Tree.GetNodeData(Tree.GetFirstSelected); | 447 | Data := Tree.GetNodeData(Tree.GetFirstSelected); |
449 | if not CheckEmptyFields(Data) then Exit; | 448 | if not CheckEmptyFields(Data) then |
449 | Exit; | ||
450 | 450 | ||
451 | if alBookAuthors.Count > 0 then | 451 | if alBookAuthors.Count > 0 then |
452 | for Author in alBookAuthors.Items do | 452 | for Author in alBookAuthors.Items do |
453 | FBookRecord.AddAuthor(Author.Last, Author.First, Author.Middle) | 453 | FBookRecord.AddAuthor(Author.Last, Author.First, Author.Middle) |
454 | else | 454 | else |
455 | FBookRecord.AddAuthor('Неизвестный','автор', ''); | 455 | FBookRecord.AddAuthor('Неизвестный', 'автор', ''); |
456 | 456 | ||
457 | frmGenreTree.GetSelectedGenres(FBookRecord); | 457 | frmGenreTree.GetSelectedGenres(FBookRecord); |
458 | FBookRecord.Title := edT.Text; | 458 | FBookRecord.Title := edT.Text; |
... | ... | ||
465 | FBookRecord.FileExt := Data.Ext; | 465 | FBookRecord.FileExt := Data.Ext; |
466 | FBookRecord.Code := 0; | 466 | FBookRecord.Code := 0; |
467 | FBookRecord.InsideNo := 0; | 467 | FBookRecord.InsideNo := 0; |
468 | FBookRecord.SeqNumber := round(edSN.Value); | 468 | FBookRecord.SeqNumber := Round(edSN.Value); |
469 | FBookRecord.LibID := DMUser.ActiveCollection.ID; | 469 | FBookRecord.LibID := DMUser.ActiveCollection.ID; |
470 | FBookRecord.Deleted := False; | 470 | FBookRecord.Deleted := False; |
471 | FBookRecord.Size := Data.Size; | 471 | FBookRecord.Size := Data.Size; |
472 | FBookRecord.Date := Now; | 472 | FBookRecord.Date := Now; |
473 | FBookRecord.KeyWords := edKeyWords.Text; | 473 | FBookRecord.Keywords := edKeyWords.Text; |
474 | FBookRecord.Lang := cbLang.Text; | 474 | FBookRecord.Lang := cbLang.Text; |
475 | end; | 475 | end; |
476 | 476 | ||
477 | procedure TfrmAddnonfb2.btnAddAuthorFromListClick(Sender: TObject); | 477 | procedure TfrmAddnonfb2.btnAddAuthorFromListClick(Sender: TObject); |
478 | var | 478 | var |
479 | Row : TAuthorRecord; | 479 | Row: TAuthorRecord; |
480 | Data : PAuthorData; | 480 | Data: PAuthorData; |
481 | Node: PVirtualNode; | 481 | Node: PVirtualNode; |
482 | begin | 482 | begin |
483 | frmMain.FillAuthorTree(frmAuthorList.tvAuthorList, True); | 483 | frmMain.FillAuthorTree(frmAuthorList.tvAuthorList, True); |
484 | if frmAuthorList.ShowModal = mrOK then | 484 | if frmAuthorList.ShowModal = mrOk then |
485 | begin | 485 | begin |
486 | Node := frmAuthorList.tvAuthorList.GetFirstSelected; | 486 | Node := frmAuthorList.tvAuthorList.GetFirstSelected; |
487 | while node <> nil do | 487 | while Node <> nil do |
488 | begin | 488 | begin |
489 | Data := frmAuthorList.tvAuthorList.GetNodeData(Node); | 489 | Data := frmAuthorList.tvAuthorList.GetNodeData(Node); |
490 | 490 | ||
491 | |||
492 | Row.Last := Data.Last; | 491 | Row.Last := Data.Last; |
493 | Row.First := Data.First; | 492 | Row.First := Data.First; |
494 | Row.Middle := Data.Middle; | 493 | Row.Middle := Data.Middle; |
... | ... | ||
510 | var | 509 | var |
511 | FileName: string; | 510 | FileName: string; |
512 | begin | 511 | begin |
513 | if GetFileName(fnOpenCoverImage,FileName) then FBD.LoadCoverFromFile(FileName); | 512 | if GetFileName(fnOpenCoverImage, FileName) then |
513 | FBD.LoadCoverFromFile(FileName); | ||
514 | end; | 514 | end; |
515 | 515 | ||
516 | procedure TfrmAddnonfb2.btnNextClick(Sender: TObject); | 516 | procedure TfrmAddnonfb2.btnNextClick(Sender: TObject); |
... | ... | ||
531 | ParentName: string; | 531 | ParentName: string; |
532 | Path: string; | 532 | Path: string; |
533 | 533 | ||
534 | procedure InsertNodeData(Node:PVirtualNode); | 534 | procedure InsertNodeData(Node: PVirtualNode); |
535 | begin | 535 | begin |
536 | Data := Tree.GetNodeData(Node); | 536 | Data := Tree.GetNodeData(Node); |
537 | Data.Title := ExtractFileName(ExcludeTrailingPathdelimiter(Path)); | 537 | Data.Title := ExtractFileName(ExcludeTrailingPathdelimiter(Path)); |
538 | Data.Folder := Path; | 538 | Data.Folder := Path; |
539 | Data.DataType := dtFolder; | 539 | Data.DataType := dtFolder; |
540 | end; | 540 | end; |
541 | 541 | ||
542 | begin | 542 | begin |
543 | Path := ExtractRelativePath(FRootPath, Dir); | 543 | Path := ExtractRelativePath(FRootPath, Dir); |
544 | if Path = '' then Exit; | 544 | if Path = '' then |
545 | Exit; | ||
545 | 546 | ||
546 | ParentName := ExtractFilePath(ExcludeTrailingPathdelimiter(Path)); | 547 | ParentName := ExtractFilePath(ExcludeTrailingPathdelimiter(Path)); |
547 | ParentNode := FindParentInTree(Tree,ParentName); | 548 | ParentNode := FindParentInTree(Tree, ParentName); |
548 | if ParentNode <> nil then | 549 | if ParentNode <> nil then |
549 | begin | 550 | begin |
550 | CurrentNode := Tree.AddChild(ParentNode); | 551 | CurrentNode := Tree.AddChild(ParentNode); |
551 | InsertNodeData(CurrentNode); | 552 | InsertNodeData(CurrentNode); |
552 | end | 553 | end |
553 | else | 554 | else if (FindParentInTree(Tree, Path) = nil) then |
554 | if (FindParentInTree(Tree,Path) = nil) then | 555 | begin |
555 | begin | 556 | CurrentNode := Tree.AddChild(Nil); |
556 | CurrentNode := Tree.AddChild(Nil); | 557 | InsertNodeData(CurrentNode); |
557 | InsertNodeData(CurrentNode); | 558 | end; |
558 | end; | ||
559 | end; | 559 | end; |
560 | 560 | ||
561 | procedure TfrmAddnonfb2.flFilesFile(Sender: TObject; const F: TSearchRec); | 561 | procedure TfrmAddnonfb2.flFilesFile(Sender: TObject; const F: TSearchRec); |
... | ... | ||
568 | CurrentNode: PVirtualNode; | 568 | CurrentNode: PVirtualNode; |
569 | Ext: string; | 569 | Ext: string; |
570 | begin | 570 | begin |
571 | if (F.Name = '.') or (F.Name = '..') then Exit; | 571 | if (F.Name = '.') or (F.Name = '..') then |
572 | Exit; | ||
572 | 573 | ||
573 | Ext := ExtractFileExt(F.Name); | 574 | Ext := ExtractFileExt(F.Name); |
574 | if Ext = '' then Exit; | 575 | if Ext = '' then |
576 | Exit; | ||
575 | 577 | ||
576 | // | 578 | // |
577 | // Пропустим fb2-документы и зипы
// | 579 | // Пропустим fb2-документы и зипы
// |
578 | if (CompareText(Ext, FB2_EXTENSION) = 0) or (CompareText(Ext, ZIP_EXTENSION) = 0) then | 580 | if (CompareText(Ext, FB2_EXTENSION) = 0) or (CompareText(Ext, ZIP_EXTENSION) = 0) then |
579 | Exit; | 581 | Exit; |
580 | 582 | ||
581 | // | 583 | // |
582 | // Проверим, есть ли у нас ридер для этого документа | 584 | // Проверим, есть ли у нас ридер для этого документа |
... | ... | ||
593 | FileName := ExtractShortFileName(F.Name); | 595 | FileName := ExtractShortFileName(F.Name); |
594 | Path := ExtractRelativePath(FRootPath, flFiles.LastDir); | 596 | Path := ExtractRelativePath(FRootPath, flFiles.LastDir); |
595 | 597 | ||
596 | ParentNode := FindParentInTree(Tree,Path); | 598 | ParentNode := FindParentInTree(Tree, Path); |
597 | 599 | ||
598 | CurrentNode := Tree.AddChild(ParentNode); | 600 | CurrentNode := Tree.AddChild(ParentNode); |
599 | 601 | ||
... | ... | ||
621 | 623 | ||
622 | procedure TfrmAddnonfb2.SortTree; | 624 | procedure TfrmAddnonfb2.SortTree; |
623 | var | 625 | var |
624 | A,B: PVirtualNode; | 626 | A, B: PVirtualNode; |
625 | Data,DataA,DataB: PFileData; | 627 | Data, DataA, DataB: PFileData; |
626 | Parent: PVirtualNode; | 628 | Parent: PVirtualNode; |
627 | begin | 629 | begin |
628 | Parent := Tree.GetFirst; | 630 | Parent := Tree.GetFirst; |
629 | Data := Tree.GetNodeData(Parent); | 631 | Data := Tree.GetNodeData(Parent); |
630 | while Parent <> nil do | 632 | while Parent <> nil do |
631 | begin | 633 | begin |
632 | if (Data.DataType = dtFolder) and | 634 | if (Data.DataType = dtFolder) and (Tree.HasChildren[Parent]) then |
633 | (Tree.HasChildren[Parent]) then | ||
634 | begin | 635 | begin |
635 | A := Tree.GetFirstChild(Parent); | 636 | A := Tree.GetFirstChild(Parent); |
636 | while (A <> Parent.LastChild) do | 637 | while (A <> Parent.LastChild) do |
... | ... | ||
638 | DataA := Tree.GetNodeData(A); | 639 | DataA := Tree.GetNodeData(A); |
639 | B := Tree.GetNext(A); | 640 | B := Tree.GetNext(A); |
640 | DataB := Tree.GetNodeData(B); | 641 | DataB := Tree.GetNodeData(B); |
641 | if (A.Parent = B.Parent) and | 642 | if (A.Parent = B.Parent) and (DataA.DataType = dtFile) and (DataB.DataType = dtFolder) then |
642 | (DataA.DataType = dtFile) and | ||
643 | (DataB.DataType = dtFolder) then | ||
644 | begin | 643 | begin |
645 | Tree.MoveTo(B, A, amInsertBefore, false); | 644 | Tree.MoveTo(B, A, amInsertBefore, False); |
646 | A := Parent.FirstChild; | 645 | A := Parent.FirstChild; |
647 | end | 646 | end |
648 | else | 647 | else |
... | ... | ||
652 | end; | 651 | end; |
653 | 652 | ||
654 | if (Data.DataType = dtFolder) and (Parent.ChildCount = 0) then | 653 | if (Data.DataType = dtFolder) and (Parent.ChildCount = 0) then |
655 | Tree.DeleteNode(Parent, True); | 654 | Tree.DeleteNode(Parent, True); |
656 | 655 | ||
657 | Parent := Tree.GetNext(Parent); | 656 | Parent := Tree.GetNext(Parent); |
658 | Data := Tree.GetNodeData(Parent); | 657 | Data := Tree.GetNodeData(Parent); |
... | ... | ||
664 | Data: PFileData; | 663 | Data: PFileData; |
665 | S: string; | 664 | S: string; |
666 | begin | 665 | begin |
667 | Data := Tree.GetNodedata(Tree.GetFirstSelected); | 666 | Data := Tree.GetNodeData(Tree.GetFirstSelected); |
668 | if Data <> nil then | 667 | if Data <> nil then |
669 | begin | 668 | begin |
670 | S := AnsiLowercase(Data.FullPath + Data.FileName + Data.Ext); | 669 | S := AnsiLowercase(Data.FullPath + Data.FileName + Data.Ext); |
671 | ShellExecute(Handle, 'open', PChar(s), '', nil, SW_SHOWNORMAL); | 670 | ShellExecute(Handle, 'open', PChar(S), '', nil, SW_SHOWNORMAL); |
672 | end; | 671 | end; |
673 | end; | 672 | end; |
674 | 673 | ||
... | ... | ||
677 | Close; | 676 | Close; |
678 | end; | 677 | end; |
679 | 678 | ||
680 | procedure TfrmAddnonfb2.TreeChange(Sender: TBaseVirtualTree; | 679 | procedure TfrmAddnonfb2.TreeChange(Sender: TBaseVirtualTree; Node: PVirtualNode); |
681 | Node: PVirtualNode); | ||
682 | 680 | ||
683 | begin | 681 | begin |
684 | TreeClick(Sender); | 682 | TreeClick(Sender); |
... | ... | ||
686 | 684 | ||
687 | procedure TfrmAddnonfb2.TreeClick(Sender: TObject); | 685 | procedure TfrmAddnonfb2.TreeClick(Sender: TObject); |
688 | var | 686 | var |
689 | Data: PFiledata; | 687 | Data: PFileData; |
690 | begin | 688 | begin |
691 | Data := Tree.GetNodeData(Tree.GetFirstSelected); | 689 | Data := Tree.GetNodeData(Tree.GetFirstSelected); |
692 | if (Data = nil) or (Data.DataType = dtFolder) then | 690 | if (Data = nil) or (Data.DataType = dtFolder) then |
... | ... | ||
697 | 695 | ||
698 | end; | 696 | end; |
699 | 697 | ||
700 | procedure TfrmAddnonfb2.TreeCompareNodes(Sender: TBaseVirtualTree; Node1, | 698 | procedure TfrmAddnonfb2.TreeCompareNodes(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); |
701 | Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer); | ||
702 | var | 699 | var |
703 | Data1, Data2: PFileData; | 700 | Data1, Data2: PFileData; |
704 | begin | 701 | begin |
705 | Data1 := Sender.GetNodeData(Node1); | 702 | Data1 := Sender.GetNodeData(Node1); |
706 | Data2 := Sender.GetNodeData(Node2); | 703 | Data2 := Sender.GetNodeData(Node2); |
707 | // Result := CompareInt(Data1.DataType, Data1.DataType); | 704 | // Result := CompareInt(Data1.DataType, Data1.DataType); |
708 | end; | 705 | end; |
709 | 706 | ||
710 | procedure TfrmAddnonfb2.TreeDblClick(Sender: TObject); | 707 | procedure TfrmAddnonfb2.TreeDblClick(Sender: TObject); |
711 | //var | 708 | // var |
712 | // Data: PFileData; | 709 | // Data: PFileData; |
713 | // S: string; | 710 | // S: string; |
714 | begin | 711 | begin |
715 | // Data := Tree.GetNodedata(Tree.GetFirstSelected); | 712 | // Data := Tree.GetNodedata(Tree.GetFirstSelected); |
716 | // if Data <> nil then | 713 | // if Data <> nil then |
717 | // begin | 714 | // begin |
718 | // S := AnsiLowercase(Data.FullPath + Data.FileName + Data.Ext); | 715 | // S := AnsiLowercase(Data.FullPath + Data.FileName + Data.Ext); |
719 | // ShellExecute(Handle, 'open', PChar(s), '', nil, SW_SHOWNORMAL); | 716 | // ShellExecute(Handle, 'open', PChar(s), '', nil, SW_SHOWNORMAL); |
720 | // end; | 717 | // end; |
721 | pcPages.ActivePageIndex := 1; | 718 | pcPages.ActivePageIndex := 1; |
722 | end; | 719 | end; |
723 | 720 | ||
724 | procedure TfrmAddnonfb2.TreeGetText(Sender: TBaseVirtualTree; | 721 | procedure TfrmAddnonfb2.TreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: String); |
725 | Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; | ||
726 | var CellText: String); | ||
727 | var | 722 | var |
728 | Data: PFileData; | 723 | Data: PFileData; |
729 | begin | 724 | begin |
730 | Data := Sender.GetNodeData(Node); | 725 | Data := Sender.GetNodeData(Node); |
731 | case Data.DataType of | 726 | case Data.DataType of |
732 | dtFolder: if Column = 0 then CellText := Data.Title | 727 | dtFolder: |
733 | else CellText := ''; | 728 | if Column = 0 then |
734 | dtFile: case Column of | 729 | CellText := Data.Title |
735 | 0: CellText := Data.FileName; | 730 | else |
736 | 1: CellText := CleanExtension(Data.Ext); | 731 | CellText := ''; |
737 | 2: CellText := IntToStr(Data.Size); | 732 | dtFile: |
738 | 3: CellText := ''; | 733 | case Column of |
739 | end; | 734 | 0: CellText := Data.FileName; |
735 | 1: CellText := CleanExtension(Data.Ext); | ||
736 | 2: CellText := GetFormattedSize(Data.Size); | ||
737 | 3: CellText := ''; | ||
738 | end; | ||
740 | end; | 739 | end; |
741 | end; | 740 | end; |
742 | 741 | ||
743 | procedure TfrmAddnonfb2.TreePaintText(Sender: TBaseVirtualTree; | 742 | procedure TfrmAddnonfb2.TreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType); |
744 | const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; | ||
745 | TextType: TVSTTextType); | ||
746 | var | 743 | var |
747 | Data: PFileData; | 744 | Data: PFileData; |
748 | begin | 745 | begin |
... | ... | ||
752 | end; | 749 | end; |
753 | 750 | ||
754 | end. | 751 | end. |
755 |
Download diff