Changeset 751 for trunk/dll/comp.c


Ignore:
Timestamp:
Aug 2, 2007, 11:05:48 PM (13 years ago)
Author:
Steven Levine
Message:

Sync rest of code with CNRITEM mods
Sync code with ARCITEM mods
Get compare dialog working
Still some issues with status display
Still some issues with directory sizes tree display
Heap check diagnostic code mostly enabled

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/comp.c

    r748 r751  
    431431
    432432              if (!*pciD->pszFileName) {
    433                 // Other side is blank
    434                 WinSendMsg(hwndCnrS, CM_REMOVERECORD, MPFROMP(&pci),
    435                            MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     433                // Other side is blank - remove from both sides
     434                RemoveCnrItems(hwndCnrS, pci, 1, CMA_FREE | CMA_INVALIDATE);
    436435                if (pciD->rc.flRecordAttr & CRA_SELECTED)
    437436                  WinSendMsg(hwndCnrD, CM_SETRECORDEMPHASIS, MPFROMP(pciD),
    438437                             MPFROM2SHORT(FALSE, CRA_SELECTED));
    439                 WinSendMsg(hwndCnrD, CM_REMOVERECORD, MPFROMP(&pciD),
    440                            MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     438                RemoveCnrItems(hwndCnrD, pciD, 1, CMA_FREE | CMA_INVALIDATE);
    441439              }
    442440              else {
    443                 // Other side is not blank
     441                // Other side is not blank - update just this side
    444442                FreeCnrItemData(pci);
     443                pci->pszFileName = NullStr;
     444                pci->pszDisplayName = pci->pszFileName;
     445                pci->rc.pszIcon = pci->pszFileName;
     446                pci->pszLongname = NullStr;
     447                pci->pszSubject = NullStr;
    445448                pci->flags = 0;
    446449                WinSendMsg(hwndCnrS, CM_INVALIDATERECORD, MPFROMP(&pci),
     
    457460          case IDM_MOVE:
    458461            if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR))
    459               sprintf(newname, "%s%s%s", cmp->leftdir,
    460                       cmp->leftdir[strlen(cmp->leftdir) - 1] ==
    461                       '\\' ? NullStr : "\\", pci->pszFileName);
     462              // 02 Aug 07 SHL fixme to replace this kind of stuff with _makepath or equivalent
     463              sprintf(newname, "%s%s%s",
     464                      cmp->leftdir,
     465                      cmp->leftdir[strlen(cmp->leftdir) - 1] == '\\' ?
     466                        NullStr : "\\",
     467                        pci->pszDisplayName);
    462468            else
    463               sprintf(newname, "%s%s%s", cmp->rightdir,
    464                       cmp->rightdir[strlen(cmp->rightdir) - 1] ==
    465                       '\\' ? NullStr : "\\", pci->pszFileName);
     469              sprintf(newname, "%s%s%s",
     470                      cmp->rightdir,
     471                      cmp->rightdir[strlen(cmp->rightdir) - 1] == '\\' ?
     472                        NullStr : "\\",
     473                      pci->pszDisplayName);
    466474            // Make directory if required
    467475            strcpy(dirname, newname);
     
    486494                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->leftdir);
    487495                if (cmp->leftdir[strlen(cmp->leftdir) - 1] != '\\')
    488                   pciD->pszFileName++;
     496                  pciD->pszDisplayName++;
    489497              }
    490498              else {
    491499                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->rightdir);
    492500                if (cmp->rightdir[strlen(cmp->rightdir) - 1] != '\\')
    493                   pciD->pszFileName++;
    494               }
    495               strcpy(pciD->szDispAttr, pci->szDispAttr);
     501                  pciD->pszDisplayName++;
     502              }
     503              // 02 Aug 07 SHL fixme to know Longname transfer is correct?
     504              pciD->pszLongname = pci->pszLongname;
     505              if (pciD->pszSubject != NullStr) {
     506                xfree(pciD->pszSubject);
     507                pciD->pszSubject = NullStr;
     508              }
    496509              pciD->attrFile = pci->attrFile;
     510              pciD->pszDispAttr = pci->pszDispAttr;
    497511              pciD->flags = 0;
    498512              pciD->date = pci->date;
     
    504518              pciD->cbFile = pci->cbFile;
    505519              pciD->easize = pci->easize;
    506               pciD->pszSubject = NullStr;
    507               pci->pszFileName = NullStr;
     520
     521              if (pci->pszFileName != NullStr) {
     522                xfree(pci->pszFileName);
     523                pci->pszFileName = NullStr;
     524                pci->pszDisplayName = pci->pszFileName;
     525                pci->rc.pszIcon = pci->pszFileName;
     526              }
     527              if (pci->pszSubject != NullStr) {
     528                xfree(pci->pszSubject);
     529                pci->pszSubject = NullStr;
     530              }
    508531              pci->flags = 0;
     532
    509533              WinSendMsg(hwndCnrS, CM_INVALIDATERECORD, MPFROMP(&pci),
    510534                         MPFROM2SHORT(1, CMA_ERASE | CMA_TEXTCHANGED));
     
    527551          case IDM_COPY:
    528552            if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR))
    529               sprintf(newname, "%s%s%s", cmp->leftdir,
    530                       cmp->leftdir[strlen(cmp->leftdir) - 1] ==
    531                       '\\' ? NullStr : "\\", pci->pszFileName);
     553              sprintf(newname, "%s%s%s",
     554                      cmp->leftdir,
     555                      cmp->leftdir[strlen(cmp->leftdir) - 1] == '\\' ?
     556                        NullStr : "\\",
     557                      pci->pszDisplayName);
    532558            else
    533               sprintf(newname, "%s%s%s", cmp->rightdir,
    534                       cmp->rightdir[strlen(cmp->rightdir) - 1] ==
    535                       '\\' ? NullStr : "\\", pci->pszFileName);
     559              sprintf(newname, "%s%s%s",
     560                      cmp->rightdir,
     561                      cmp->rightdir[strlen(cmp->rightdir) - 1] == '\\' ?
     562                        NullStr : "\\",
     563                      pci->pszDisplayName);
    536564            // Make directory if required
    537565            strcpy(dirname, newname);
     
    564592              FreeCnrItemData(pciD);
    565593              pciD->pszFileName = xstrdup(newname, pszSrcFile, __LINE__);
     594              pciD->pszLongname = NullStr;
     595              pciD->pszSubject = NullStr;
    566596              if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR)) {
    567597                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->leftdir);
    568598                if (cmp->leftdir[strlen(cmp->leftdir) - 1] != '\\')
    569                   pciD->pszFileName++;
     599                  pciD->pszDisplayName++;
    570600              }
    571601              else {
    572602                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->rightdir);
    573603                if (cmp->rightdir[strlen(cmp->rightdir) - 1] != '\\')
    574                   pciD->pszFileName++;
    575               }
    576               strcpy(pciD->szDispAttr, pci->szDispAttr);
     604                  pciD->pszDisplayName++;
     605              }
    577606              pciD->attrFile = pci->attrFile;
     607              pciD->pszDispAttr = pci->pszDispAttr;
    578608              pciD->flags = CNRITEM_EXISTS;
    579609              pciD->date = pci->date;
     
    585615              pciD->cbFile = pci->cbFile;
    586616              pciD->easize = pci->easize;
    587               pci->pszSubject = NullStr;
    588               pci->pszLongname = NullStr;
     617
     618              // 02 Aug 07 SHL fixme to know why subject cleared?
     619              if (pci->pszSubject != NullStr) {
     620                xfree(pci->pszSubject);
     621                pci->pszSubject = NullStr;
     622              }
     623              // 02 Aug 07 SHL fixme to know why - should already be set?
    589624              pci->flags = CNRITEM_EXISTS;
     625
    590626              WinSendMsg(hwndCnrS, CM_INVALIDATERECORD, MPFROMP(&pci),
    591627                         MPFROM2SHORT(1, CMA_ERASE | CMA_TEXTCHANGED));
     
    771807//=== FillCnrsThread() Fill left and right containers ===
    772808
    773 static VOID FillCnrsThread(VOID * args)
     809static VOID FillCnrsThread(VOID *args)
    774810{
    775811  COMPARE *cmp = (COMPARE *) args;
     
    777813  HMQ hmq;
    778814  BOOL notified = FALSE;
    779   const PSZ attrstring = "RHS\0DA";
     815
    780816  HWND hwndLeft, hwndRight;
    781817  CHAR szBuf[CCHMAXPATH];
     
    801837      INT l;
    802838      INT r;
    803       INT y;
    804       UINT i;
    805839      ULONG cntr;
    806840      FILELIST **filesl = NULL;
     
    817851      PCNRITEM pcil;
    818852      PCNRITEM pcir;
    819       PCNRITEM pcit;
    820853      RECORDINSERT ri;
    821854      CHAR *pch;
     
    833866      priority_normal();
    834867      // Clear containers
    835       WinSendMsg(hwndRight, CM_REMOVERECORD,
    836                  MPVOID, MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE));
    837       WinSendMsg(hwndLeft, CM_REMOVERECORD,
    838                  MPVOID, MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE));
     868      RemoveCnrItems(hwndRight, NULL, 0, CMA_FREE | CMA_INVALIDATE);
     869      RemoveCnrItems(hwndLeft, NULL, 0, CMA_FREE | CMA_INVALIDATE);
    839870      cmp->cmp->totalleft = cmp->cmp->totalright = 0;
    840871
     
    10261057        pcilFirst = WinSendMsg(hwndLeft,
    10271058                               CM_ALLOCRECORD,
    1028                                MPFROMLONG(EXTRA_RECORD_BYTES2),
     1059                               MPFROMLONG(EXTRA_RECORD_BYTES),
    10291060                               MPFROMLONG(recsNeeded));
    10301061        if (!pcilFirst) {
     
    10361067      if (recsNeeded) {
    10371068        pcirFirst = WinSendMsg(hwndRight, CM_ALLOCRECORD,
    1038                                MPFROMLONG(EXTRA_RECORD_BYTES2),
     1069                               MPFROMLONG(EXTRA_RECORD_BYTES),
    10391070                               MPFROMLONG(recsNeeded));
    10401071        if (!pcirFirst) {
     
    10421073                    recsNeeded);
    10431074          recsNeeded = 0;
    1044           pcil = pcilFirst;
    1045           while (pcil) {
    1046             pcit = (PCNRITEM) pcil->rc.preccNextRecord;
    1047             WinSendMsg(hwndLeft, CM_FREERECORD,
    1048                        MPFROMP(&pcil), MPFROMSHORT(1));
    1049             pcil = pcit;
    1050           }
     1075          FreeCnrItemList(hwndLeft, pcilFirst);
    10511076        }
    10521077      }
     
    10591084          pcir->hwndCnr = hwndRight;
    10601085          pcir->rc.hptrIcon = (HPOINTER) 0;
    1061           pcir->pszDispAttr = pcir->szDispAttr;
    1062 
    10631086          pcil->hwndCnr = hwndLeft;
    10641087          pcil->rc.hptrIcon = (HPOINTER) 0;
    1065           pcil->pszDispAttr = pcil->szDispAttr;
    10661088
    10671089          if (filesl && filesl[l]) {
     
    10821104            pcil->pszDisplayName = pcil->pszFileName + lenl;
    10831105            pcil->attrFile = filesl[l]->attrFile;
    1084             y = 0;
    1085             for (i = 0; i < 6; i++) {
    1086               if (attrstring[i]) {
    1087                 pcil->szDispAttr[y++] = (CHAR)(pcil->attrFile & (1 << i) ?
    1088                                            attrstring[i] : '-');
    1089               }
    1090             }
    1091             pcil->szDispAttr[5] = 0;
     1106            pcil->pszDispAttr = FileAttrToString(pcil->attrFile);
    10921107            pcil->cbFile = filesl[l]->cbFile;
    10931108            pcil->easize = filesl[l]->easize;
     
    11281143            pcir->attrFile = filesr[r]->attrFile;
    11291144            // pcir->rc.hptrIcon = hptrFile;
    1130             y = 0;
    1131             for (i = 0; i < 6; i++) {
    1132               if (attrstring[i]) {
    1133                 pcir->szDispAttr[y++] = (CHAR)(pcir->attrFile & (1 << i) ?
    1134                                           attrstring[i] : '-');
    1135               }
    1136             }
    1137             pcir->szDispAttr[5] = 0;
     1145            pcir->pszDispAttr = FileAttrToString(pcir->attrFile);
    11381146            pcir->cbFile = filesr[r]->cbFile;
    11391147            pcir->easize = filesr[r]->easize;
     
    12271235              pch += 5;
    12281236            }
    1229             *pch = 0;           // fixme to be gone?
    1230             // fixme to known why not displayed - defect?
    1231             pcil->pszSubject = *szBuf ? strdup(szBuf) : NullStr;
     1237            // fixme to know why not displayed - defect?
     1238            pcil->pszSubject = *szBuf ?
     1239                                 xstrdup(szBuf, pszSrcFile, __LINE__) :
     1240                                 NullStr;
    12321241
    12331242          } // if on both sides
     
    15961605          }
    15971606
    1598           pcil->rc.pszIcon = pcil->pszFileName;         // fixme to be pszDisplayName?
    1599           pcir->rc.pszIcon = pcir->pszFileName;
    1600           pcil->pszLongname = pcil->pszFileName;
    1601           pcir->pszLongname = pcir->pszFileName;
     1607          pcil->rc.pszIcon = pcil->pszDisplayName;
     1608          pcir->rc.pszIcon = pcir->pszDisplayName;
     1609
     1610          pcil->pszLongname = NullStr;
     1611          pcir->pszLongname = NullStr;
    16021612
    16031613          if (!pcil->pszSubject)
     
    16051615          if (!pcir->pszSubject)
    16061616            pcil->pszSubject = NullStr;
     1617
     1618          if (!pcil->pszDispAttr)
     1619            pcil->pszDispAttr = NullStr;
     1620          if (!pcir->pszDispAttr)
     1621            pcil->pszDispAttr = NullStr;
    16071622
    16081623          // fixme to be time based - every 2 sec should be OK
     
    16381653                        MPFROMP(pcilFirst), MPFROMP(&ri))) {
    16391654          Win_Error(hwndLeft, cmp->hwnd, pszSrcFile, __LINE__, "CM_INSERTRECORD");
    1640           pcil = pcilFirst;
    1641           while (pcil) {
    1642             pcit = (PCNRITEM) pcil->rc.preccNextRecord;
    1643             WinSendMsg(hwndLeft, CM_FREERECORD,
    1644                        MPFROMP(&pcil), MPFROMSHORT(1));
    1645             pcil = pcit;
    1646           }
     1655          FreeCnrItemList(hwndLeft, pcilFirst);
    16471656          numfilesl = 0;
    16481657        }
     
    16551664        ri.cRecordsInsert = recsNeeded;
    16561665        ri.fInvalidateRecord = FALSE;
     1666
    16571667        if (!WinSendMsg(hwndRight, CM_INSERTRECORD,
    16581668                        MPFROMP(pcirFirst), MPFROMP(&ri))) {
    1659           Win_Error(hwndLeft, cmp->hwnd, pszSrcFile, __LINE__, "CM_INSERTRECORD");
    1660           WinSendMsg(hwndLeft, CM_REMOVERECORD,
    1661                      MPVOID, MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE));
    1662           pcir = pcirFirst;
    1663           while (pcir) {
    1664             pcit = (PCNRITEM) pcir->rc.preccNextRecord;
    1665             WinSendMsg(hwndRight, CM_FREERECORD,
    1666                        MPFROMP(&pcir), MPFROMSHORT(1));
    1667             pcir = pcit;
    1668           }
     1669          Win_Error(hwndRight, cmp->hwnd, pszSrcFile, __LINE__, "CM_INSERTRECORD");
     1670          RemoveCnrItems(hwndLeft, NULL, 0, CMA_FREE | CMA_INVALIDATE);
     1671          FreeCnrItemList(hwndRight, pcirFirst);
    16691672          numfilesr = 0;
    16701673        }
     
    17291732      {
    17301733        USHORT ids[] = { COMP_LEFTDIR, COMP_RIGHTDIR, COMP_TOTALLEFT,
    1731           COMP_TOTALRIGHT, COMP_SELLEFT, COMP_SELRIGHT,
    1732           0
    1733         };
    1734         register INT x;
     1734                        COMP_TOTALRIGHT, COMP_SELLEFT, COMP_SELRIGHT,
     1735                        0
     1736                       };
     1737        INT x;
    17351738
    17361739        for (x = 0; ids[x]; x++)
     
    21892192      cnri.pszCnrTitle = cmp->leftdir;
    21902193      cnri.flWindowAttr = CV_DETAIL | CV_MINI |
    2191         CA_CONTAINERTITLE | CA_TITLESEPARATOR |
    2192         CA_DETAILSVIEWTITLES | CA_OWNERDRAW;
     2194                          CA_CONTAINERTITLE | CA_TITLESEPARATOR |
     2195                          CA_DETAILSVIEWTITLES | CA_OWNERDRAW;
    21932196      WinSendDlgItemMsg(hwnd, COMP_LEFTDIR, CM_SETCNRINFO, MPFROMP(&cnri),
    21942197                        MPFROMLONG(CMA_CNRTITLE | CMA_FLWINDOWATTR));
     
    23512354          if (ofile[strlen(ofile) - 1] != '\\')
    23522355            strcat(ofile, "\\");
    2353           strcat(ofile, pci->pszFileName);
     2356          strcat(ofile, pci->pszDisplayName);
    23542357          if (*compare) {
    23552358            CHAR *fakelist[3];
Note: See TracChangeset for help on using the changeset viewer.