Clone
ixen <ixen@copyhandler.com>
committed
on 05 May 14
Added serialization of file filters to sqlite database (CH-97).
LoggerImprovements + 5 more
src/ch/CustomCopyDlg.cpp (+11 -22)
261 261         lvc.iSubItem=2;
262 262         lvc.pszText=(PTSTR)GetResManager().LoadString(IDS_HDRDATE_STRING);
263 263         lvc.cchTextMax=lstrlen(lvc.pszText);
264 264         lvc.cx=static_cast<int>(0.3*rc.Width());
265 265         m_ctlFilters.InsertColumn(4, &lvc);
266 266
267 267         // attributes
268 268         lvc.iSubItem=3;
269 269         lvc.pszText=(PTSTR)GetResManager().LoadString(IDS_HDRATTRIB_STRING);
270 270         lvc.cchTextMax=lstrlen(lvc.pszText);
271 271         lvc.cx=static_cast<int>(0.1*rc.Width());
272 272         m_ctlFilters.InsertColumn(5, &lvc);
273 273
274 274         // -attributes
275 275         lvc.iSubItem=4;
276 276         lvc.pszText=(PTSTR)GetResManager().LoadString(IDS_HDREXCLUDEATTRIB_STRING);
277 277         lvc.cchTextMax=lstrlen(lvc.pszText);
278 278         lvc.cx=static_cast<int>(0.1*rc.Width());
279 279         m_ctlFilters.InsertColumn(6, &lvc);
280 280
281           chcore::TFileFiltersArray afFilters;
282           chcore::GetTaskPropValue<chcore::eTO_Filters>(m_tTaskDefinition.GetConfiguration(), afFilters);
  281         m_bFilters = !m_tTaskDefinition.GetFilters().IsEmpty();
283 282
284           m_bFilters = !afFilters.IsEmpty();
285  
286 283         // other custom flags
287 284         m_bIgnoreFolders = chcore::GetTaskPropValue<chcore::eTO_IgnoreDirectories>(m_tTaskDefinition.GetConfiguration());
288 285         m_bForceDirectories = chcore::GetTaskPropValue<chcore::eTO_CreateDirectoriesRelativeToRoot>(m_tTaskDefinition.GetConfiguration());
289 286         m_bOnlyCreate = chcore::GetTaskPropValue<chcore::eTO_CreateEmptyFiles>(m_tTaskDefinition.GetConfiguration());
290 287         m_bAdvanced = (m_bIgnoreFolders | m_bForceDirectories | m_bOnlyCreate);
291 288
292 289         UpdateData(FALSE);
293 290
294 291         EnableControls();
295 292
296 293         return TRUE;
297 294 }
298 295
299 296 void CCustomCopyDlg::OnLanguageChanged()
300 297 {
301 298         UpdateData(TRUE);
302 299
303 300         // count the width of a list
304 301         CRect rc;
305 302         m_ctlFiles.GetWindowRect(&rc);
 
362 359         lvc.pszText=(PTSTR)GetResManager().LoadString(IDS_HDRDATE_STRING);
363 360         lvc.cchTextMax=lstrlen(lvc.pszText);
364 361         lvc.cx=static_cast<int>(0.3*rc.Width());
365 362         m_ctlFilters.InsertColumn(4, &lvc);
366 363
367 364         // attributes
368 365         lvc.iSubItem=3;
369 366         lvc.pszText=(PTSTR)GetResManager().LoadString(IDS_HDRATTRIB_STRING);
370 367         lvc.cchTextMax=lstrlen(lvc.pszText);
371 368         lvc.cx=static_cast<int>(0.1*rc.Width());
372 369         m_ctlFilters.InsertColumn(5, &lvc);
373 370
374 371         // -attributes
375 372         lvc.iSubItem=4;
376 373         lvc.pszText=(PTSTR)GetResManager().LoadString(IDS_HDREXCLUDEATTRIB_STRING);
377 374         lvc.cchTextMax=lstrlen(lvc.pszText);
378 375         lvc.cx=static_cast<int>(0.1*rc.Width());
379 376         m_ctlFilters.InsertColumn(6, &lvc);
380 377
381 378         // refresh the entries in filters' list
382           chcore::TFileFiltersArray afFilters = chcore::GetTaskPropValue<chcore::eTO_Filters>(m_tTaskDefinition.GetConfiguration());
  379         const chcore::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
383 380         m_ctlFilters.DeleteAllItems();
384 381         for(size_t stIndex = 0; stIndex < afFilters.GetSize(); ++stIndex)
385 382         {
386 383                 const chcore::TFileFilter* pFilter = afFilters.GetAt(stIndex);
387 384                 if(pFilter)
388 385                         AddFilter(*pFilter, boost::numeric_cast<int>(stIndex));
389 386         }
390 387 }
391 388
392 389 void CCustomCopyDlg::OnAddDirectoryButton()
393 390 {
394 391         CString strPath;
395 392         if (BrowseForFolder(GetResManager().LoadString(IDS_BROWSE_STRING), &strPath))
396 393                 AddPath(strPath);
397 394 }
398 395
399 396 void CCustomCopyDlg::OnAddFilesButton()
400 397 {
401 398         CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_NODEREFERENCELINKS | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, GetResManager().LoadString(IDS_FILEDLGALLFILTER_STRING), this);
402 399         
 
574 571         lvi.mask=LVIF_TEXT | LVIF_IMAGE;
575 572         lvi.iItem=m_ctlFiles.GetItemCount();
576 573         lvi.iSubItem=0;
577 574         
578 575         // there's no need for a high speed so get the images
579 576         SHFILEINFO sfi;
580 577         SHGetFileInfo(strPath, FILE_ATTRIBUTE_NORMAL, &sfisizeof(SHFILEINFO),
581 578                 SHGFI_SYSICONINDEX | SHGFI_SMALLICON/* | SHGFI_USEFILEATTRIBUTES*/);
582 579         
583 580         // fill the list
584 581         lvi.pszText=strPath.GetBuffer(0);
585 582         strPath.ReleaseBuffer();
586 583         lvi.cchTextMax=lstrlen(lvi.pszText);
587 584         lvi.iImage=sfi.iIcon;
588 585         m_ctlFiles.InsertItem(&lvi);
589 586 }
590 587
591 588 void CCustomCopyDlg::OnAddfilterButton()
592 589 {
593 590         CFilterDlg dlg;
594           chcore::TString strData;
595 591
596           chcore::TFileFiltersArray afFilters = chcore::GetTaskPropValue<chcore::eTO_Filters>(m_tTaskDefinition.GetConfiguration());
  592         chcore::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
597 593         for (size_t i = 0; i < afFilters.GetSize(); i++)
598 594         {
599 595                 const chcore::TFileFilter* pFilter = afFilters.GetAt(i);
600 596                 BOOST_ASSERT(pFilter);
601 597                 if(pFilter)
602 598                 {
603 599                         if(pFilter->GetUseMask())
604                                   dlg.m_astrAddMask.Add(pFilter->GetCombinedMask(strData));
  600                                 dlg.m_astrAddMask.Add(pFilter->GetCombinedMask());
605 601                         if(pFilter->GetUseExcludeMask())
606                                   dlg.m_astrAddExcludeMask.Add(pFilter->GetCombinedExcludeMask(strData));
  602                                 dlg.m_astrAddExcludeMask.Add(pFilter->GetCombinedExcludeMask());
607 603                 }
608 604         }
609 605         
610 606         if(dlg.DoModal() == IDOK)
611 607         {
612 608                 if(dlg.m_ffFilter.GetUseMask() || dlg.m_ffFilter.GetUseExcludeMask() || dlg.m_ffFilter.GetUseSize1() || dlg.m_ffFilter.GetUseDateTime1() || dlg.m_ffFilter.GetUseAttributes())
613 609                 {
614 610                         afFilters.Add(dlg.m_ffFilter);
615                           chcore::SetTaskPropValue<chcore::eTO_Filters>(m_tTaskDefinition.GetConfiguration(), afFilters);
616 611                         AddFilter(dlg.m_ffFilter);
617 612                 }
618 613                 else
619 614                         MsgBox(IDS_EMPTYFILTER_STRING, MB_OK | MB_ICONINFORMATION);
620 615         }
621 616 }
622 617
623 618 void CCustomCopyDlg::AddFilter(const chcore::TFileFilter &rFilter, int iPos)
624 619 {
625 620         LVITEM lvi;
626 621         TCHAR szLoaded[1024];
627 622         TCHAR szData[64];
628 623
629 624         lvi.mask=LVIF_TEXT;
630 625         lvi.iItem=(iPos == -1) ? m_ctlFilters.GetItemCount() : iPos;
631 626
632 627         /////////////////////
633 628         lvi.iSubItem=0;
634 629         
635 630         if (rFilter.GetUseMask())
636 631         {
637                   chcore::TString strData;
638                   rFilter.GetCombinedMask(strData);
  632                 chcore::TString strData = rFilter.GetCombinedMask();
639 633                 _tcscpy(szLoaded, strData);
640 634         }
641 635         else
642 636                 _tcscpy(szLoaded, GetResManager().LoadString(IDS_FILTERMASKEMPTY_STRING));
643 637         
644 638         lvi.pszText=szLoaded;
645 639         lvi.cchTextMax=lstrlen(lvi.pszText);
646 640         m_ctlFilters.InsertItem(&lvi);
647 641
648 642         /////////////////////
649 643         lvi.iSubItem=1;
650 644         
651 645         if (rFilter.GetUseExcludeMask())
652 646         {
653                   chcore::TString strData;
654                   rFilter.GetCombinedExcludeMask(strData);
  647                 chcore::TString strData = rFilter.GetCombinedExcludeMask();
655 648                 _tcscpy(szLoaded, strData);
656 649         }
657 650         else
658 651                 _tcscpy(szLoaded, GetResManager().LoadString(IDS_FILTERMASKEMPTY_STRING));
659 652         
660 653         lvi.pszText=szLoaded;
661 654         lvi.cchTextMax=lstrlen(lvi.pszText);
662 655         m_ctlFilters.SetItem(&lvi);
663 656
664 657         /////////////////
665 658         lvi.iSubItem=2;
666 659         
667 660         if (rFilter.GetUseSize1())
668 661         {
669 662                 _sntprintf(szLoaded, 1024, _T("%s %s"), GetResManager().LoadString(IDS_LT_STRING+rFilter.GetSizeType1()), GetSizeString(rFilter.GetSize1(), szData, 64, true));
670 663                 szLoaded[1023] = _T('\0');
671 664                 if (rFilter.GetUseSize2())
672 665                 {
673 666                         _tcscat(szLoaded, GetResManager().LoadString(IDS_AND_STRING));
674 667                         CString strLoaded2;
 
743 736                 if(rFilter.GetReadOnly() == 0)
744 737                         _tcscat(szLoaded, _T("R"));
745 738                 if(rFilter.GetHidden() == 0)
746 739                         _tcscat(szLoaded, _T("H"));
747 740                 if(rFilter.GetSystem() == 0)
748 741                         _tcscat(szLoaded, _T("S"));
749 742                 if(rFilter.GetDirectory() == 0)
750 743                         _tcscat(szLoaded, _T("D"));
751 744         }
752 745
753 746         if(!rFilter.GetUseAttributes() || szLoaded[0] == _T('0'))
754 747                 _tcscpy(szLoaded, GetResManager().LoadString(IDS_FILTERATTRIB_STRING));
755 748
756 749         lvi.pszText=szLoaded;
757 750         lvi.cchTextMax=lstrlen(lvi.pszText);
758 751         m_ctlFilters.SetItem(&lvi);
759 752 }
760 753
761 754 void CCustomCopyDlg::OnRemovefilterButton()
762 755 {
763           chcore::TFileFiltersArray afFilters = chcore::GetTaskPropValue<chcore::eTO_Filters>(m_tTaskDefinition.GetConfiguration());
  756         chcore::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
764 757
765 758         POSITION pos;
766 759         int iItem;
767 760         while(true)
768 761         {
769 762                 pos=m_ctlFilters.GetFirstSelectedItemPosition();
770 763                 if (pos == NULL)
771 764                         break;
772 765                 else
773 766                 {
774 767                         iItem=m_ctlFilters.GetNextSelectedItem(pos);
775 768                         m_ctlFilters.DeleteItem(iItem);
776 769                         afFilters.RemoveAt(iItem);
777  
778                           chcore::SetTaskPropValue<chcore::eTO_Filters>(m_tTaskDefinition.GetConfiguration(), afFilters);
779 770                 }
780 771         }
781 772 }
782 773
783 774 void CCustomCopyDlg::OnDestroy()
784 775 {
785 776         m_ctlFiles.SetImageList(NULL, LVSIL_SMALL);
786 777         m_ilImages.Detach();
787 778
788 779         CLanguageDialog::OnDestroy();
789 780 }
790 781
791 782 void CCustomCopyDlg::EnableControls()
792 783 {
793 784         UpdateData(TRUE);
794 785
795 786         m_ctlFilters.EnableWindow(m_bFilters);
796 787         GetDlgItem(IDC_ADDFILTER_BUTTON)->EnableWindow(m_bFilters);
797 788         GetDlgItem(IDC_REMOVEFILTER_BUTTON)->EnableWindow(m_bFilters);
798 789         
 
804 795 void CCustomCopyDlg::OnFiltersCheck()
805 796 {
806 797         EnableControls();
807 798 }
808 799
809 800 void CCustomCopyDlg::OnStandardCheck()
810 801 {
811 802         EnableControls();
812 803 }
813 804
814 805 void CCustomCopyDlg::OnAdvancedCheck()
815 806 {
816 807         EnableControls();
817 808 }
818 809
819 810 void CCustomCopyDlg::OnDblclkFiltersList(NMHDR* /*pNMHDR*/, LRESULT* pResult)
820 811 {
821 812         POSITION pos = m_ctlFilters.GetFirstSelectedItemPosition();
822 813         if(pos != NULL)
823 814         {
824                   chcore::TFileFiltersArray afFilters = chcore::GetTaskPropValue<chcore::eTO_Filters>(m_tTaskDefinition.GetConfiguration());
  815                 chcore::TFileFiltersArray& afFilters = m_tTaskDefinition.GetFilters();
825 816
826 817                 int iItem = m_ctlFilters.GetNextSelectedItem(pos);
827 818                 CFilterDlg dlg;
828 819                 const chcore::TFileFilter* pFilter = afFilters.GetAt(iItem);
829 820                 BOOST_ASSERT(pFilter);
830 821                 if(pFilter)
831 822                         dlg.m_ffFilter = *pFilter;
832 823                 
833                   chcore::TString strData;
834 824                 for(size_t stIndex = 0; stIndex < afFilters.GetSize(); ++stIndex)
835 825                 {
836 826                         pFilter = afFilters.GetAt(stIndex);
837 827                         BOOST_ASSERT(pFilter);
838 828                         if(pFilter)
839 829                         {
840 830                                 if(pFilter->GetUseMask() && boost::numeric_cast<int>(stIndex) != iItem)
841                                           dlg.m_astrAddMask.Add(pFilter->GetCombinedMask(strData));
  831                                         dlg.m_astrAddMask.Add(pFilter->GetCombinedMask());
842 832                                 if (pFilter->GetUseExcludeMask() && boost::numeric_cast<int>(stIndex) != iItem)
843                                           dlg.m_astrAddExcludeMask.Add(pFilter->GetCombinedExcludeMask(strData));
  833                                         dlg.m_astrAddExcludeMask.Add(pFilter->GetCombinedExcludeMask());
844 834                         }
845 835                 }
846 836
847 837                 if (dlg.DoModal() == IDOK)
848 838                 {
849 839                         // delete old element
850 840                         m_ctlFilters.DeleteItem(iItem);
851 841                         //m_ccData.m_afFilters.RemoveAt(iItem);
852 842
853 843                         // insert new if needed
854 844                         if (dlg.m_ffFilter.GetUseMask() || dlg.m_ffFilter.GetUseExcludeMask() || dlg.m_ffFilter.GetUseSize1()
855 845                                 || dlg.m_ffFilter.GetUseDateTime1() || dlg.m_ffFilter.GetUseAttributes())
856 846                         {
857 847                                 afFilters.SetAt(iItem, dlg.m_ffFilter);
858                                   chcore::SetTaskPropValue<chcore::eTO_Filters>(m_tTaskDefinition.GetConfiguration(), afFilters);
859 848                                 AddFilter(dlg.m_ffFilter, iItem);
860 849                         }
861 850                 }
862 851         }
863 852
864 853         *pResult = 0;
865 854 }
866 855
867 856 void CCustomCopyDlg::OnDblclkBuffersizesList()
868 857 {
869 858         int iItem = m_ctlBufferSizes.GetCurSel();
870 859         if(iItem != LB_ERR)
871 860         {
872 861                 CBufferSizeDlg dlg;
873 862
874 863                 dlg.m_bsSizes.SetOnlyDefault(chcore::GetTaskPropValue<chcore::eTO_UseOnlyDefaultBuffer>(m_tTaskDefinition.GetConfiguration()));
875 864                 dlg.m_bsSizes.SetDefaultSize(chcore::GetTaskPropValue<chcore::eTO_DefaultBufferSize>(m_tTaskDefinition.GetConfiguration()));
876 865                 dlg.m_bsSizes.SetOneDiskSize(chcore::GetTaskPropValue<chcore::eTO_OneDiskBufferSize>(m_tTaskDefinition.GetConfiguration()));
877 866                 dlg.m_bsSizes.SetTwoDisksSize(chcore::GetTaskPropValue<chcore::eTO_TwoDisksBufferSize>(m_tTaskDefinition.GetConfiguration()));
878 867                 dlg.m_bsSizes.SetCDSize(chcore::GetTaskPropValue<chcore::eTO_CDBufferSize>(m_tTaskDefinition.GetConfiguration()));