Changeset 558


Ignore:
Timestamp:
Mar 9, 2007, 8:31:35 PM (14 years ago)
Author:
Steven Levine
Message:

Add rest of SaveDirCnrState? RestoreDirCnrState? mode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/mainwnd.c

    r557 r558  
    2626  18 Feb 07 GKY More drive type and icon support
    2727  08 Mar 07 SHL SaveDirCnrState: do not save state of NOPRESCAN volumes
     28  09 Mar 07 SHL RestoreDirCnrState/SaveDirCnrState: optimize and avoid overflows
    2829
    2930***********************************************************************/
     
    10681069      break;
    10691070
    1070     case IDM_SHOWTOOLS:         /* show all tools */
     1071    case IDM_SHOWTOOLS:                 /* show all tools */
    10711072      tool = toolhead;
    10721073      while (tool) {
     
    11621163  case DM_DRAGOVER:
    11631164    {
    1164       PDRAGINFO pDInfo;         /* Pointer to DRAGINFO */
     1165      PDRAGINFO pDInfo;                 /* Pointer to DRAGINFO */
    11651166
    11661167      pDInfo = (PDRAGINFO) mp1;         /* Get DRAGINFO pointer */
     
    11771178      }
    11781179      {
    1179         PDRAGITEM pDItem;       /* Pointer to DRAGITEM */
     1180        PDRAGITEM pDItem;               /* Pointer to DRAGITEM */
    11801181
    11811182        pDItem = DrgQueryDragitemPtr(pDInfo,    /* Access DRAGITEM */
     
    19571958            iconid = (driveflags[x] & DRIVE_REMOVABLE) ?
    19581959              REMOVABLE_ICON :
    1959                      (driveflags[x] & DRIVE_VIRTUAL) ?
    1960                       VIRTUAL_ICON :
     1960                     (driveflags[x] & DRIVE_VIRTUAL) ?
     1961                      VIRTUAL_ICON :
    19611962              (driveflags[x] & DRIVE_REMOTE) ?
    19621963              REMOTE_ICON :
    1963                      (driveflags[x] & DRIVE_RAMDISK) ?
    1964                       RAMDISK_ICON :
    1965                      (driveflags[x] & DRIVE_ZIPSTREAM) ?
    1966                       ZIPSTREAM_ICON :DRIVE_ICON;
     1964                     (driveflags[x] & DRIVE_RAMDISK) ?
     1965                      RAMDISK_ICON :
     1966                     (driveflags[x] & DRIVE_ZIPSTREAM) ?
     1967                      ZIPSTREAM_ICON :DRIVE_ICON;
    19671968        }
    19681969        else
     
    26392640  HWND hwndChild, hwndDir, hwndC;
    26402641  ULONG numsaves = 0, flWindowAttr;
    2641   CHAR s[120], directory[CCHMAXPATH];
     2642  CHAR szPrefix[20];
     2643  CHAR s[80];
     2644  CHAR szDir[CCHMAXPATH];
    26422645  SWP swp;
    2643   BOOL ret = FALSE;
     2646  BOOL fSaved = FALSE;
    26442647  DIRCNRDATA *dcd;
     2648
     2649  if (!pszStateName)
     2650    strcpy(szPrefix, NullStr);
     2651  else {
     2652    if (strlen(pszStateName) > sizeof(szPrefix) - 2) {
     2653      Runtime_Error(pszSrcFile, __LINE__, "SaveDirCnrState");
     2654      return fSaved;;
     2655    }
     2656    sprintf(szPrefix, "%s.", pszStateName);
     2657  }
    26452658
    26462659  henum = WinBeginEnumWindows(hwndClient);
     
    26522665        if (hwndDir) {
    26532666          WinQueryWindowPos(hwndChild, &swp);
    2654           *directory = 0;
    2655           WinSendMsg(hwndC, UM_CONTAINERDIR, MPFROMP(directory), MPVOID);
    2656           if (*directory) {
    2657            if (driveflags[toupper(*directory) - 'A'] & DRIVE_NOPRESCAN)
     2667          *szDir = 0;
     2668          WinSendMsg(hwndC, UM_CONTAINERDIR, MPFROMP(szDir), MPVOID);
     2669          if (*szDir) {
     2670           if (driveflags[toupper(*szDir) - 'A'] & DRIVE_NOPRESCAN)
    26582671             continue;
    2659             sprintf(s, "%s%sDirCnrPos.%lu", pszStateName ? pszStateName : NullStr,
    2660                     pszStateName ? "." : NullStr, numsaves);
     2672            sprintf(s, "%sDirCnrPos.%lu", szPrefix, numsaves);
    26612673            PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & swp,
    26622674                                sizeof(SWP));
     
    26642676              WinQueryWindowPtr(WinWindowFromID(hwndC, DIR_CNR), QWL_USER);
    26652677            if (dcd) {
    2666               sprintf(s, "%s%sDirCnrSort.%lu", pszStateName ? pszStateName : NullStr,
    2667                       pszStateName ? "." : NullStr, numsaves);
     2678              sprintf(s, "%sDirCnrSort.%lu", szPrefix, numsaves);
    26682679              PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & dcd->sortFlags,
    26692680                                  sizeof(INT));
    2670               sprintf(s, "%s%sDirCnrFilter.%lu", pszStateName ? pszStateName : NullStr,
    2671                       pszStateName ? "." : NullStr, numsaves);
     2681              sprintf(s, "%sDirCnrFilter.%lu", szPrefix, numsaves);
    26722682              PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & dcd->mask,
    26732683                                  sizeof(MASK));
    2674               sprintf(s, "%s%sDirCnrView.%lu", pszStateName ? pszStateName : NullStr,
    2675                       pszStateName ? "." : NullStr, numsaves);
     2684              sprintf(s, "%sDirCnrView.%lu", szPrefix, numsaves);
    26762685              flWindowAttr = dcd->flWindowAttr;
    26772686              if (!fLeaveTree && (flWindowAttr & CV_TREE)) {
     
    26932702                                  sizeof(ULONG));
    26942703            }
    2695             sprintf(s, "%s%sDirCnrDir.%lu", pszStateName ? pszStateName : NullStr,
    2696                     pszStateName ? "." : NullStr, numsaves++);
    2697             PrfWriteProfileString(fmprof, FM3Str, s, directory);
    2698             ret = TRUE;
     2704            sprintf(s, "%sDirCnrDir.%lu", szPrefix, numsaves++);
     2705            PrfWriteProfileString(fmprof, FM3Str, s, szDir);
     2706            fSaved = TRUE;
    26992707          }
    27002708        }
     
    27032711  } // while
    27042712  WinEndEnumWindows(henum);
    2705   if (ret) {
     2713
     2714  if (fSaved) {
    27062715    if (WinQueryWindowPos(hwndTree, &swp)) {
    2707       sprintf(s, "%s%sLastTreePos", pszStateName ? pszStateName : NullStr,
    2708               pszStateName ? "." : NullStr);
     2716      sprintf(s, "%sLastTreePos", szPrefix);
    27092717      PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & swp, sizeof(SWP));
    27102718    }
    2711     sprintf(s, "%s%sNumDirsLastTime", pszStateName ? pszStateName : NullStr,
    2712             pszStateName ? "." : NullStr);
     2719    sprintf(s, "%sNumDirsLastTime", szPrefix);
    27132720    PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & numsaves, sizeof(ULONG));
    27142721    WinQueryWindowPos(WinQueryWindow(hwndClient, QW_PARENT), &swp);
    2715     sprintf(s, "%s%sMySizeLastTime", pszStateName ? pszStateName : NullStr,
    2716             pszStateName ? "." : NullStr);
     2722    sprintf(s, "%sMySizeLastTime", szPrefix);
    27172723    PrfWriteProfileData(fmprof, FM3Str, s, (PVOID) & swp, sizeof(SWP));
    27182724  }
    2719   return ret;
     2725
     2726  return fSaved;
    27202727}
    27212728
     
    27632770static BOOL RestoreDirCnrState(HWND hwndClient, PSZ pszStateName, BOOL noview)
    27642771{
    2765   CHAR s[120], tdir[CCHMAXPATH];
     2772  CHAR s[80];
     2773  CHAR szDir[CCHMAXPATH];
     2774  CHAR szPrefix[20];
    27662775  HWND hwndDir, hwndC;
    27672776  SWP swp, swpO, swpN;
    27682777  ULONG size, numsaves = 0L, x;
    27692778  double xtrans, ytrans;
    2770   BOOL ret = FALSE;
     2779  BOOL fRestored = FALSE;
    27712780  DIRCNRDATA *dcd;
    27722781
     2782  if (!pszStateName)
     2783    strcpy(szPrefix, NullStr);
     2784  else {
     2785    if (strlen(pszStateName) > sizeof(szPrefix) - 2) {
     2786      Runtime_Error(pszSrcFile, __LINE__, "RestoreDirCnrState");
     2787      return fRestored;
     2788    }
     2789    sprintf(szPrefix, "%s.", pszStateName);
     2790  }
     2791
    27732792  size = sizeof(SWP);
    2774   sprintf(s,
    2775           "%s%sMySizeLastTime",
    2776           pszStateName ? pszStateName : NullStr, pszStateName ? "." : NullStr);
     2793  sprintf(s, "%sMySizeLastTime", szPrefix);
    27772794  if (!PrfQueryProfileData(fmprof,
    27782795                           FM3Str,
     
    27812798                           &size) ||
    27822799      size != sizeof(SWP) || !swp.cx || !swp.cy)
     2800  {
    27832801    WinQueryWindowPos(WinQueryWindow(hwndClient, QW_PARENT), &swpO);
     2802  }
    27842803  if (!pszStateName || !strcmp(pszStateName, GetPString(IDS_FM2TEMPTEXT)))
    27852804    PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
     
    27902809  ytrans = ((double)swpO.cy * 100.0) / (double)swpN.cy;
    27912810  size = sizeof(SWP);
    2792   sprintf(s,
    2793           "%s%sLastTreePos",
    2794           pszStateName ? pszStateName : NullStr, pszStateName ? "." : NullStr);
     2811  sprintf(s, "%sLastTreePos", szPrefix);
    27952812  if (PrfQueryProfileData(fmprof, FM3Str, s, (PVOID) & swp, &size)) {
    27962813    if (!pszStateName || !strcmp(pszStateName, GetPString(IDS_FM2TEMPTEXT)))
     
    28232840  }
    28242841  size = sizeof(ULONG);
    2825   sprintf(s,
    2826           "%s%sNumDirsLastTime",
    2827           pszStateName ? pszStateName : NullStr, pszStateName ? "." : NullStr);
     2842  sprintf(s, "%sNumDirsLastTime", szPrefix);
    28282843  if (PrfQueryProfileData(fmprof,
    28292844                          FM3Str, s, (PVOID) & numsaves, &size) && numsaves) {
     
    28312846      PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
    28322847    for (x = 0; x < numsaves; x++) {
    2833       sprintf(s,
    2834               "%s%sDirCnrPos.%lu",
    2835               pszStateName ? pszStateName : NullStr, pszStateName ? "." : NullStr, x);
     2848      sprintf(s, "%sDirCnrPos.%lu", szPrefix, x);
    28362849      size = sizeof(SWP);
    28372850      if (PrfQueryProfileData(fmprof, FM3Str, s, (PVOID) & swp, &size)) {
    28382851        if (!pszStateName || !strcmp(pszStateName, GetPString(IDS_FM2TEMPTEXT)))
    28392852          PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
    2840         sprintf(s,
    2841                 "%s%sDirCnrDir.%lu",
    2842                 pszStateName ? pszStateName : NullStr, pszStateName ? "." : NullStr, x);
    2843         size = sizeof(tdir);
    2844         if (PrfQueryProfileData(fmprof, FM3Str, s, (PVOID) tdir, &size)) {
     2853        sprintf(s, "%sDirCnrDir.%lu", szPrefix, x);
     2854        size = sizeof(szDir);
     2855        if (PrfQueryProfileData(fmprof, FM3Str, s, (PVOID) szDir, &size)) {
    28452856          if (!pszStateName || !strcmp(pszStateName, GetPString(IDS_FM2TEMPTEXT)))
    28462857            PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
     2858          if (driveflags[toupper(*szDir) - 'A'] & DRIVE_NOPRESCAN) {
     2859            PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
     2860            continue;
     2861          }
    28472862          hwndDir = (HWND) WinSendMsg(hwndClient,
    28482863                                      UM_SETDIR,
    2849                                       MPFROMP(tdir), MPFROMLONG(1L));
     2864                                      MPFROMP(szDir), MPFROMLONG(1L));
    28502865          if (hwndDir) {
    28512866            hwndC = WinWindowFromID(hwndDir, FID_CLIENT);
     
    28552870              if (dcd) {
    28562871                size = sizeof(INT);
    2857                 sprintf(s,
    2858                         "%s%sDirCnrSort.%lu",
    2859                         pszStateName ? pszStateName : NullStr, pszStateName ? "." : NullStr, x);
     2872                sprintf(s, "%sDirCnrSort.%lu", szPrefix, x);
    28602873                if (PrfQueryProfileData(fmprof,
    28612874                                        FM3Str,
     
    28692882                  PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
    28702883                size = sizeof(MASK);
    2871                 sprintf(s,
    2872                         "%s%sDirCnrFilter.%lu",
    2873                         pszStateName ? pszStateName : NullStr, pszStateName ? "." : NullStr, x);
     2884                sprintf(s, "%sDirCnrFilter.%lu", szPrefix, x);
    28742885                if (PrfQueryProfileData(fmprof,
    28752886                                        FM3Str,
     
    28842895                  PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
    28852896                size = sizeof(ULONG);
    2886                 sprintf(s,
    2887                         "%s%sDirCnrView.%lu",
    2888                         pszStateName ? pszStateName : NullStr, pszStateName ? "." : NullStr, x);
     2897                sprintf(s, "%sDirCnrView.%lu", szPrefix, x);
    28892898                if (!noview) {
    28902899                  if (PrfQueryProfileData(fmprof,
     
    29142923              }
    29152924            }
    2916             ret = TRUE;
     2925            fRestored = TRUE;
    29172926            swp.hwnd = hwndDir;
    29182927            TransformSwp(&swp, xtrans, ytrans);
     
    29442953    } // for
    29452954  }
    2946   return ret;
     2955  return fRestored;
    29472956}
    29482957
     
    41504159  case IDM_DELETEDIRCNRSTATE:
    41514160    {
    4152       CHAR name[14];
    4153 
    4154       *name = 0;
    4155       WinQueryWindowText(hwndStatelist, 13, name);
    4156       bstrip(name);
    4157       if (*name) {
     4161      CHAR szStateName[14];
     4162
     4163      *szStateName = 0;
     4164      WinQueryWindowText(hwndStatelist, 13, szStateName);
     4165      bstrip(szStateName);
     4166      if (*szStateName) {
    41584167        if (SHORT1FROMMP(mp1) == IDM_SAVEDIRCNRSTATE) {
    41594168          // Save
    4160           if (SaveDirCnrState(hwnd, name)) {
    4161             if (add_setup(name)) {
     4169          if (SaveDirCnrState(hwnd, szStateName)) {
     4170            if (add_setup(szStateName)) {
    41624171              WinSendMsg(hwndStatelist, LM_INSERTITEM,
    4163                          MPFROM2SHORT(LIT_SORTASCENDING, 0), MPFROMP(name));
     4172                         MPFROM2SHORT(LIT_SORTASCENDING, 0), MPFROMP(szStateName));
    41644173              save_setups();
    41654174            }
     
    41704179          // Delete
    41714180          ULONG numsaves = 0, size, x;
    4172           CHAR s[120];
    4173 
    4174           if (remove_setup(name))
     4181          CHAR s[80];
     4182
     4183          if (remove_setup(szStateName))
    41754184            save_setups();
    4176           sprintf(s, "%s.NumDirsLastTime", name);
     4185          sprintf(s, "%s.NumDirsLastTime", szStateName);
    41774186          size = sizeof(ULONG);
    41784187          if (!PrfQueryProfileData
     
    41804189            saymsg(MB_ENTER | MB_ICONASTERISK, hwnd,
    41814190                   GetPString(IDS_WARNINGTEXT),
    4182                    GetPString(IDS_DOESNTEXISTTEXT), name);
     4191                   GetPString(IDS_DOESNTEXISTTEXT), szStateName);
    41834192          }
    41844193          else if (!size)
     
    41874196            PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0L);
    41884197            for (x = 0; x < numsaves; x++) {
    4189               sprintf(s, "%s.DirCnrPos.%lu", name, x);
     4198              sprintf(s, "%s.DirCnrPos.%lu", szStateName, x);
    41904199              PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
    4191               sprintf(s, "%s.DirCnrDir.%lu", name, x);
     4200              sprintf(s, "%s.DirCnrDir.%lu", szStateName, x);
    41924201              PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
    4193               sprintf(s, "%s.DirCnrSort.%lu", name, x);
     4202              sprintf(s, "%s.DirCnrSort.%lu", szStateName, x);
    41944203              PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
    4195               sprintf(s, "%s.DirCnrFilter.%lu", name, x);
     4204              sprintf(s, "%s.DirCnrFilter.%lu", szStateName, x);
    41964205              PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
    4197               sprintf(s, "%s.DirCnrView.%lu", name, x);
     4206              sprintf(s, "%s.DirCnrView.%lu", szStateName, x);
    41984207              PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
    41994208            }
    4200             sprintf(s, "%s.LastTreePos", name);
     4209            sprintf(s, "%s.LastTreePos", szStateName);
    42014210            PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
    4202             sprintf(s, "%s.MySizeLastTime", name);
     4211            sprintf(s, "%s.MySizeLastTime", szStateName);
    42034212            PrfWriteProfileData(fmprof, FM3Str, s, NULL, 0);
    42044213          }
     
    56745683            else if (SHORT1FROMMP(mp1) == MAIN_SETUPLIST) {
    56755684
    5676               CHAR s[120];
     5685              CHAR s[80];
    56775686              ULONG size, numsaves = 0;
    56785687
Note: See TracChangeset for help on using the changeset viewer.