Changeset 1455 for trunk/dll/treecnr.c
- Timestamp:
- Sep 15, 2009, 4:43:55 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/treecnr.c
r1447 r1455 69 69 06 Jun 09 GKY Status line to show file sys/label not shown in tree; shortened to fit split status 70 70 07 Jun 09 GKY Fixed double names in tree container when collapsed tree is accessed 71 71 before recursive scan 72 72 12 Jul 09 GKY Add option to show file system type or drive label in tree 73 73 (get NOPRESCAN drives working) 74 74 22 Jul 09 GKY Code changes to use semaphores to serialize drive scanning 75 75 22 Jul 09 GKY Consolidated driveflag setting code in DriveFlagsOne 76 76 22 Jul 09 GKY Streamline scanning code for faster Tree rescans 77 14 Sep 09 SHL Drop experimental code 77 78 78 79 ***********************************************************************/ … … 280 281 if (!stricmp(dirname, pciP->pszFileName)) 281 282 break; // Found it 282 283 283 if (~pciP->rc.flRecordAttr & CRA_EXPANDED) 284 WinSendMsg(hwndCnr, CM_EXPANDTREE, MPFROMP(pciP), MPVOID); 284 285 strcpy(szDir, dirname); 285 286 if (p - szDir >= strlen(szDir)) … … 336 337 MPFROM2SHORT(CMA_PARENT, CMA_ITEMORDER)); 337 338 if (pciP && (INT) pciP != -1) { 338 if (!(pciP->rc.flRecordAttr & CRA_EXPANDED)) 339 339 if (!(pciP->rc.flRecordAttr & CRA_EXPANDED)) 340 WinSendMsg(hwndCnr, CM_EXPANDTREE, MPFROMP(pciP), MPVOID); 340 341 pciToSelect = pciP; 341 342 } … … 352 353 ShowCnrRecord(hwndCnr, (PMINIRECORDCORE) pciToSelect); 353 354 } 354 if (fSwitchTreeExpand && ~pciToSelect->rc.flRecordAttr & CRA_EXPANDED) 355 355 if (fSwitchTreeExpand && ~pciToSelect->rc.flRecordAttr & CRA_EXPANDED) 356 WinSendMsg(hwndCnr, CM_EXPANDTREE, MPFROMP(pciToSelect), MPVOID); 356 357 if (!quickbail) { 357 358 WinSendMsg(hwndCnr, … … 643 644 temptop = fTopDir; 644 645 fTopDir = TRUE; 645 646 647 646 } 647 ShowTreeRec(dcd->hwndCnr, (CHAR *)mp1, fCollapseFirst, TRUE); 648 PostMsg(hwndTree, WM_COMMAND, MPFROM2SHORT(IDM_UPDATE, 0), MPVOID); 648 649 dcd->suspendview = tempsusp; 649 650 fFollowTree = tempfollow; … … 780 781 else 781 782 *szFree = 0; 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 783 driveserial[toupper(*pci->pszFileName) - 'A'] = volser.serial; 784 if (CheckDrive(toupper(*pci->pszFileName), FileSystem, &type) == -1 || 785 fShowFSTypeInTree) 786 strcpy(FileSystem, NullStr); 787 if (fShowDriveLabelInTree) 788 strcpy(szTmpLabel, NullStr); 789 else 790 strcpy(szTmpLabel, volser.volumelabel); 791 if (fSplitStatus) { 792 CHAR temp[CCHMAXPATH] = " ["; 793 794 strcat(temp, s); 795 strcat(temp, "]"); 796 sprintf(s, 797 GetPString(fShowFSTypeInTree ? IDS_TREESTATUSSTART1TEXT : 798 fShowDriveLabelInTree 799 ? IDS_TREESTATUSSTART2TEXT : IDS_TREESTATUSSTARTTEXT), 800 toupper(*pci->pszFileName), FileSystem, 801 szTmpLabel, volser.serial, szFree); 802 strcat(s, temp); 803 } 804 else { 805 strcat(s, " ["); 806 sprintf(&s[strlen(s)], 807 GetPString(fShowFSTypeInTree ? IDS_TREESTATUSSTART1TEXT : 808 fShowDriveLabelInTree 809 ? IDS_TREESTATUSSTART2TEXT : IDS_TREESTATUSSTARTTEXT), 810 toupper(*pci->pszFileName), FileSystem, 811 szTmpLabel, volser.serial, szFree); 812 strcat(s, "]"); 813 } 813 814 if (!fMoreButtons) { 814 815 if (*dcd->mask.szMask || … … 854 855 WinSendMsg(dcd->hwndCnr, 855 856 CM_SCROLLWINDOW, 856 857 MPFROMSHORT(CMA_HORIZONTAL), MPFROMLONG(-1)); 857 858 DosRequestMutexSem(hmtFillingTreeCnr, SEM_INDEFINITE_WAIT); 858 859 FillTreeCnr(dcd->hwndCnr, dcd->hwndParent); … … 1813 1814 if (Flesh(hwnd, pci) && 1814 1815 SHORT2FROMMP(mp1) == CN_EXPANDTREE && 1815 1816 1817 1818 1816 !dcd->suspendview && fTopDir) { 1817 PostMsg(hwnd, UM_TOPDIR, MPFROMP(pci), MPVOID); 1818 //DbgMsg(pszSrcFile, __LINE__, "UM_TOPDIR %p pci %p", hwnd, pci); 1819 } 1819 1820 } 1820 1821 driveserial[toupper(*pci->pszFileName) - 'A'] = volser.serial; … … 1829 1830 } 1830 1831 else if (SHORT2FROMMP(mp1) == CN_EXPANDTREE) { 1831 1832 1833 1834 1835 } 1836 1837 1838 1839 1832 if (Flesh(hwnd, pci) && !dcd->suspendview && fTopDir){ 1833 PostMsg(hwnd, UM_TOPDIR, MPFROMP(pci), MPVOID); 1834 //DbgMsg(pszSrcFile, __LINE__, "UM_TOPDIR %p pci %p", hwnd, pci); 1835 } 1836 } 1837 if (SHORT2FROMMP(mp1) == CN_EXPANDTREE && !dcd->suspendview){ 1838 WinSendMsg(hwnd, UM_FILTER, MPVOID, MPVOID); 1839 //DbgMsg(pszSrcFile, __LINE__, "UM_FILTER %p pci %p", hwnd, pci); 1840 } 1840 1841 } 1841 1842 } … … 1897 1898 (INT) pci != -1 && 1898 1899 !(pci->rc.flRecordAttr & CRA_INUSE) && 1899 1900 1900 !(pci->flags & RECFLAGS_ENV) && IsFullName(pci->pszFileName)) { 1901 x = (INT) (toupper(*pci->pszFileName) - 'A'); 1901 1902 if (driveflags[x] & DRIVE_INVALID) { 1902 1903 if (!fAlertBeepOff) 1903 1904 DosBeep(50, 100); 1904 1905 if (hwndStatus) 1905 1906 1906 WinSetWindowText(hwndStatus, GetPString(IDS_RESCANSUGTEXT)); 1907 DosReleaseMutexSem(hmtFillingTreeCnr); 1907 1908 return 0; 1908 1909 } … … 1923 1924 } 1924 1925 } // for 1925 1926 1926 RemoveCnrItems(hwnd, pciP, 1, CMA_FREE | CMA_INVALIDATE); 1927 DosReleaseMutexSem(hmtFillingTreeCnr); 1927 1928 return 0; 1928 1929 } … … 1936 1937 CHAR volumelabel[CCHMAXPATH]; 1937 1938 } 1938 1939 1940 1939 volser; 1940 CHAR FileSystem[CCHMAXPATH]; 1941 CHAR szBuf[CCHMAXPATH]; 1941 1942 1942 1943 pciL = pciP = pci; … … 1955 1956 if ((driveflags[x] & DRIVE_NOPRESCAN) || (toupper(*pci->pszFileName) > 'B' && 1956 1957 !(driveflags[x] & DRIVE_CDROM))) { 1957 1958 1958 DriveFlagsOne(x, FileSystem, &volser); 1959 SelectDriveIcon(pciP); 1959 1960 if (hwndMain) 1960 1961 PostMsg(hwndMain, UM_BUILDDRIVEBAR, MPVOID, MPVOID); … … 1965 1966 FSIL_VOLSER, &volser, 1966 1967 (ULONG) sizeof(volser)); 1967 1968 if (!status) { 1968 1969 if (!volser.serial || driveserial[x] != volser.serial) { 1969 1970 UnFlesh(hwnd, pciP); … … 1977 1978 if (!pciL) 1978 1979 Flesh(hwnd, pciP); 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1980 if ((fShowFSTypeInTree || fShowDriveLabelInTree) && 1981 strlen(pciP->pszFileName) < 4) { 1982 strcpy(szBuf, pciP->pszFileName); 1983 strcat(szBuf, " ["); 1984 strcat(szBuf, fShowFSTypeInTree ? FileSystem : volser.volumelabel); 1985 strcat(szBuf, "]"); 1986 pciP->pszDisplayName = xstrdup(szBuf, pszSrcFile, __LINE__); 1987 pciP->rc.pszIcon = pciP->pszDisplayName; 1988 } 1989 WinSendMsg(hwnd, 1990 CM_INVALIDATERECORD, 1991 MPFROMP(&pciP), 1992 MPFROM2SHORT(1, CMA_ERASE | CMA_REPOSITION)); 1993 } 1993 1994 else { 1994 1995 driveserial[x] = -1; 1995 1996 UnFlesh(hwnd, pci); 1996 1997 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 1997 1998 1998 PostMsg(hwnd, UM_SETUP2, MPFROMP(pci), MPFROMLONG(status)); 1999 DosReleaseMutexSem(hmtFillingTreeCnr); 1999 2000 return 0; 2000 2001 } … … 2018 2019 if ((shiftstate & (KC_CTRL | KC_ALT)) == (KC_CTRL | KC_ALT)) { 2019 2020 PostMsg(hwnd, 2020 2021 2021 WM_COMMAND, MPFROM2SHORT(IDM_SHOWALLFILES, 0), MPVOID); 2022 DosReleaseMutexSem(hmtFillingTreeCnr); 2022 2023 return 0; 2023 2024 } 2024 2025 if ((shiftstate & (KC_CTRL | KC_SHIFT)) == (KC_CTRL | KC_SHIFT)) { 2025 2026 2026 OpenObject(pci->pszFileName, Settings, dcd->hwndFrame); 2027 DosReleaseMutexSem(hmtFillingTreeCnr); 2027 2028 return 0; 2028 2029 } 2029 2030 if (!(shiftstate & (KC_CTRL | KC_SHIFT))) { 2030 2031 if (!ParentIsDesktop(hwnd, dcd->hwndParent)) { 2031 2032 2033 2034 2032 if (FindDirCnrByName(pci->pszFileName, TRUE)) { 2033 DosReleaseMutexSem(hmtFillingTreeCnr); 2034 return 0; 2035 } 2035 2036 } 2036 2037 } … … 2054 2055 } 2055 2056 OpenObject(pci->pszFileName, s, dcd->hwndFrame); 2056 2057 DosReleaseMutexSem(hmtFillingTreeCnr); 2057 2058 return 0; 2058 2059 } … … 2097 2098 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IDM_MKDIR, 0), MPVOID); 2098 2099 if (fFollowTree) 2099 2100 WinSetFocus(HWND_DESKTOP, hwnd); 2100 2101 DosReleaseMutexSem(hmtFillingTreeCnr); 2101 2102 } … … 2342 2343 *s = info->device; 2343 2344 pci = FindCnrRecord(hwnd, s, NULL, FALSE, FALSE, TRUE); 2344 2345 2346 2345 if (pci && (INT) pci != -1) { 2346 INT x = info->device - 'A'; 2347 CHAR FileSystem[CCHMAXPATH]; 2347 2348 2348 2349 driveserial[x] = -1; … … 2588 2589 runemf2(SEPARATE | WINDOWED | BACKGROUND | MINIMIZED | WAIT, 2589 2590 HWND_DESKTOP, pszSrcFile, __LINE__, NULL, NULL, 2590 2591 "%s %s", PCSZ_LVMEXE, "/RediscoverPRM"); 2591 2592 PostMsg(hwndTree, WM_COMMAND, MPFROM2SHORT(IDM_RESCAN, 0), MPVOID); 2592 2593 break; … … 2748 2749 2749 2750 case IDM_UPDATE: 2750 2751 { 2751 2752 PCNRITEM pci = (PCNRITEM)CurrentRecord(hwnd); 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2753 if (pci && (INT)pci != -1) { 2754 struct 2755 { 2756 ULONG serial; 2757 CHAR volumelength; 2758 CHAR volumelabel[CCHMAXPATH]; 2759 } 2760 volser; 2761 INT x = toupper(*pci->pszFileName) - 'A'; 2762 CHAR FileSystem[CCHMAXPATH], szBuf[CCHMAXPATH]; 2762 2763 2763 2764 UINT driveflag = driveflags[x]; 2764 2765 if (pci->attrFile & FILE_DIRECTORY) { 2765 2766 if (pci->flags & RECFLAGS_UNDERENV) 2766 2767 2767 break; 2768 DosRequestMutexSem(hmtFillingTreeCnr, SEM_INDEFINITE_WAIT); 2768 2769 UnFlesh(hwnd, pci); 2769 2770 // Check if drive type might need update 2770 2771 if ((driveflag & (DRIVE_INVALID | DRIVE_NOPRESCAN)) || 2771 2772 (~driveflag & DRIVE_NOPRESCAN && pci->rc.hptrIcon == hptrDunno)) { 2772 2773 DriveFlagsOne(x, FileSystem, &volser); 2773 2774 driveflag = driveflags[x]; … … 2776 2777 else if (strlen(pci->pszFileName) < 4) { 2777 2778 SelectDriveIcon(pci); 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2779 } 2780 if ((fShowFSTypeInTree || fShowDriveLabelInTree) && 2781 strlen(pci->pszFileName) < 4) { 2782 strcpy(szBuf, pci->pszFileName); 2783 strcat(szBuf, " ["); 2784 strcat(szBuf, fShowFSTypeInTree ? FileSystem : volser.volumelabel); 2785 strcat(szBuf, "]"); 2786 pci->pszDisplayName = xstrdup(szBuf, pszSrcFile, __LINE__); 2787 pci->rc.pszIcon = pci->pszDisplayName; 2788 } 2788 2789 WinSendMsg(hwnd, 2789 2790 CM_INVALIDATERECORD, … … 2794 2795 } 2795 2796 if (~driveflag & DRIVE_INVALID) 2796 2797 2797 Flesh(hwnd, pci); 2798 DosReleaseMutexSem(hmtFillingTreeCnr); 2798 2799 } 2799 2800 } … … 3004 3005 return 0; 3005 3006 3006 case WM_TIMER:3007 return ActionWMTimer(hwnd, mp1, mp2);3008 3009 3007 case WM_SAVEAPPLICATION: 3010 3008 if (dcd && !ParentIsDesktop(hwnd, dcd->hwndParent)) { … … 3238 3236 NULL, 3239 3237 CCS_AUTOPOSITION | CCS_MINIICONS | 3240 CCS_MINIRECORDCORE, 3238 CCS_MINIRECORDCORE, 3241 3239 0, 3242 3240 0, … … 3257 3255 if (ParentIsDesktop(hwndFrame, hwndParent)) { 3258 3256 WinSetWindowText(WinWindowFromID(hwndFrame, FID_TITLEBAR), "VTree"); 3259 3260 3261 3262 3257 FixSwitchList(hwndFrame, "VTree"); 3258 DosPostEventSem(hevInitialCnrScanComplete); 3259 DosCloseEventSem(hevInitialCnrScanComplete); 3260 fInitialDriveScan = FALSE; 3263 3261 } 3264 3262 else {
Note:
See TracChangeset
for help on using the changeset viewer.