Changeset 917 for trunk/dll/notebook.c


Ignore:
Timestamp:
Jan 11, 2008, 10:41:56 PM (18 years ago)
Author:
Steven Levine
Message:

Correct/enhance settings notebook navigation, ticket #188 (Steven)
Reopen settings notebook to last selected page unless overridden, ticket #188 (Steven)
More Compare Directory overflow tweaks (Steven)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/notebook.c

    r911 r917  
    2222  26 Nov 07 GKY Allow a currently nonvalid path in the ext path field with warning
    2323  06 Jan 08 GKY Use CheckApp_QuoteAddExe to check program strings on entry
     24  10 Jan 08 SHL Remember last settings page
     25  10 Jan 08 SHL Rework page select logic
    2426
    2527***********************************************************************/
     
    4446static PSZ pszSrcFile = __FILE__;
    4547
    46 typedef struct
    47 {
    48   USHORT frameid;
    49   ULONG title;
    50   PFNWP proc;
    51   HWND hwnd;
    52   ULONG helpid;
    53   ULONG pageID;
    54 }
    55 NOTEPAGES;
    56 
    5748static HWND hwndNotebook;
    5849
    5950MRESULT EXPENTRY CfgADlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    6051{
    61   ULONG  ulResult;
     52  ULONG ulResult;
    6253
    6354  switch (msg) {
     
    152143          switch (id) {
    153144          case CFGA_VIRUS:
    154             if (insert_filename(hwnd, filename, 2, FALSE) && *filename){
    155               BldQuotedFileName(szfilename, filename);
    156               strcat(szfilename, " %p");
    157               WinSetDlgItemText(hwnd, id, szfilename);
    158             }
     145            if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
     146              BldQuotedFileName(szfilename, filename);
     147              strcat(szfilename, " %p");
     148              WinSetDlgItemText(hwnd, id, szfilename);
     149            }
    159150            break;
    160151          case CFGA_EXTRACTPATH:
     
    206197      WinQueryDlgItemText(hwnd, CFGA_VIRUS, CCHMAXPATH, szBuf);
    207198      szBuf[CCHMAXPATH - 1] = 0;
    208       if (strcmp(szBuf, virus)){
    209         psz = CheckApp_QuoteAddExe(szBuf);
    210         memcpy(virus, psz, strlen(psz) + 1);
    211         if (!strchr(virus, '%') && strlen(virus) > 3)
    212           strcat(virus, " %p");
     199      if (strcmp(szBuf, virus)) {
     200        psz = CheckApp_QuoteAddExe(szBuf);
     201        memcpy(virus, psz, strlen(psz) + 1);
     202        if (!strchr(virus, '%') && strlen(virus) > 3)
     203          strcat(virus, " %p");
    213204      }
    214205      if (!*virus)
    215         strcpy(virus, "OS2SCAN.EXE %p /SUB /A");
     206        strcpy(virus, "OS2SCAN.EXE %p /SUB /A");
    216207      WinQueryDlgItemText(hwnd, CFGA_EXTRACTPATH, CCHMAXPATH, szBuf);
    217208      szBuf[CCHMAXPATH - 1] = 0;
     
    219210
    220211      if (strcmp(extractpath, szBuf)) {
    221         memcpy(extractpath, szBuf, strlen(szBuf) + 1);
    222         if (*extractpath){
    223           MakeFullName(extractpath);
    224           if (IsFile(extractpath)) {
    225             ulResult = saymsg(MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1, HWND_DESKTOP,
    226                               GetPString(IDS_WARNINGTEXT),
    227                               GetPString(IDS_EXTPATHNOTVALIDTEXT),
    228                               extractpath);
    229             if (ulResult == MBID_YES)
    230               *extractpath = 0;
    231             if (ulResult == MBID_CANCEL){
    232               WinDlgBox(HWND_DESKTOP,
    233                         hwnd, CfgDlgProc,
    234                         FM3ModHandle, CFG_FRAME,
    235                         MPFROMP("Archive"));
    236               break;
    237             }
    238           }
    239         }
     212        memcpy(extractpath, szBuf, strlen(szBuf) + 1);
     213        if (*extractpath) {
     214          MakeFullName(extractpath);
     215          if (IsFile(extractpath)) {
     216            ulResult = saymsg(MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1, HWND_DESKTOP,
     217                              GetPString(IDS_WARNINGTEXT),
     218                              GetPString(IDS_EXTPATHNOTVALIDTEXT),
     219                              extractpath);
     220            if (ulResult == MBID_YES)
     221              *extractpath = 0;
     222            if (ulResult == MBID_CANCEL) {
     223              WinDlgBox(HWND_DESKTOP,
     224                        hwnd,
     225                        CfgDlgProc,
     226                        FM3ModHandle,
     227                        CFG_FRAME,
     228                        MPFROMLONG(IDM_ARCHIVERSETTINGS));
     229              break;
     230            }
     231          }
     232        }
    240233      }
    241234    }
     
    244237    break;
    245238  }
    246   if (fCancelAction){
     239  if (fCancelAction) {
    247240    fCancelAction = FALSE;
    248241    WinDlgBox(HWND_DESKTOP,
    249               hwnd, CfgDlgProc, FM3ModHandle, CFG_FRAME, MPFROMP("Archive"));
     242              hwnd,
     243              CfgDlgProc,
     244              FM3ModHandle,
     245              CFG_FRAME,
     246              MPFROMLONG(IDM_ARCHIVERSETTINGS));
    250247  }
    251248  return WinDefDlgProc(hwnd, msg, mp1, mp2);
     
    440437          case CFGV_BINED:
    441438          case CFGV_VIEWER:
    442           case CFGV_EDITOR:
    443             if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
    444               BldQuotedFileName(szfilename, filename);
     439          case CFGV_EDITOR:
     440            if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
     441              BldQuotedFileName(szfilename, filename);
    445442              strcat(szfilename, " %a");
    446443              WinSetDlgItemText(hwnd, id, szfilename);
     
    463460      WinQueryDlgItemText(hwnd, CFGV_VIEWER, CCHMAXPATH, szBuf);
    464461      szBuf[CCHMAXPATH - 1] = 0;
    465       if (strcmp(szBuf, viewer)){
    466         psz = CheckApp_QuoteAddExe(szBuf);
    467         memcpy(viewer, psz, strlen(psz) + 1);
    468         if (!strchr(viewer, '%') && strlen(viewer) > 3)
    469           strcat(viewer, " %a");
     462      if (strcmp(szBuf, viewer)) {
     463        psz = CheckApp_QuoteAddExe(szBuf);
     464        memcpy(viewer, psz, strlen(psz) + 1);
     465        if (!strchr(viewer, '%') && strlen(viewer) > 3)
     466          strcat(viewer, " %a");
    470467      }
    471468      WinQueryDlgItemText(hwnd, CFGV_EDITOR, CCHMAXPATH, szBuf);
    472469      szBuf[CCHMAXPATH - 1] = 0;
    473       if (strcmp(szBuf, editor)){
    474         psz = CheckApp_QuoteAddExe(szBuf);
    475         memcpy(editor, psz, strlen(psz) + 1);
    476         if (!strchr(editor, '%') && strlen(editor) > 3)
    477           strcat(editor, " %a");
     470      if (strcmp(szBuf, editor)) {
     471        psz = CheckApp_QuoteAddExe(szBuf);
     472        memcpy(editor, psz, strlen(psz) + 1);
     473        if (!strchr(editor, '%') && strlen(editor) > 3)
     474          strcat(editor, " %a");
    478475      }
    479476      WinQueryDlgItemText(hwnd, CFGV_BINVIEW, CCHMAXPATH, szBuf);
    480477      szBuf[CCHMAXPATH - 1] = 0;
    481       if (strcmp(szBuf, binview)){
    482         psz = CheckApp_QuoteAddExe(szBuf);
    483         memcpy(binview, psz, strlen(psz) + 1);
    484         if (!strchr(binview, '%') && strlen(binview) > 3)
    485           strcat(binview, " %a");
     478      if (strcmp(szBuf, binview)) {
     479        psz = CheckApp_QuoteAddExe(szBuf);
     480        memcpy(binview, psz, strlen(psz) + 1);
     481        if (!strchr(binview, '%') && strlen(binview) > 3)
     482          strcat(binview, " %a");
    486483      }
    487484      WinQueryDlgItemText(hwnd, CFGV_BINED, CCHMAXPATH, szBuf);
    488485      szBuf[CCHMAXPATH - 1] = 0;
    489       if (strcmp(szBuf, bined)){
    490         psz = CheckApp_QuoteAddExe(szBuf);
    491         memcpy(bined, psz, strlen(psz) + 1);
    492         if (!strchr(bined, '%') && strlen(bined) > 3)
    493           strcat(bined, " %a");
     486      if (strcmp(szBuf, bined)) {
     487        psz = CheckApp_QuoteAddExe(szBuf);
     488        memcpy(bined, psz, strlen(psz) + 1);
     489        if (!strchr(bined, '%') && strlen(bined) > 3)
     490          strcat(bined, " %a");
    494491      }
    495492      PrfWriteProfileString(fmprof, appname, "Viewer", viewer);
     
    499496      fUseNewViewer = WinQueryButtonCheckstate(hwnd, CFGV_USENEWVIEWER);
    500497      PrfWriteProfileData(fmprof, appname, "UseNewViewer", &fUseNewViewer,
    501                           sizeof(BOOL));
     498                          sizeof(BOOL));
    502499      fGuessType = WinQueryButtonCheckstate(hwnd, CFGV_GUESSTYPE);
    503500      PrfWriteProfileData(fmprof, appname, "GuessType", &fGuessType,
    504                           sizeof(BOOL));
     501                          sizeof(BOOL));
    505502      fViewChild = WinQueryButtonCheckstate(hwnd, CFGV_VIEWCHILD);
    506503      PrfWriteProfileData(fmprof, appname, "ViewChild", &fViewChild,
    507                           sizeof(BOOL));
     504                          sizeof(BOOL));
    508505      fCheckMM = WinQueryButtonCheckstate(hwnd, CFGV_CHECKMM);
    509506      PrfWriteProfileData(fmprof, appname, "CheckMM", &fCheckMM, sizeof(BOOL));
     
    512509    }
    513510  }
    514   if (fCancelAction){
     511  if (fCancelAction) {
    515512    fCancelAction = FALSE;
    516513    WinDlgBox(HWND_DESKTOP,
    517               hwnd, CfgDlgProc, FM3ModHandle, CFG_FRAME, MPFROMP("Viewer1"));
     514              hwnd,
     515              CfgDlgProc,
     516              FM3ModHandle,
     517              CFG_FRAME,
     518              MPFROMLONG(IDM_VIEWERSETTINGS));
    518519  }
    519520  return WinDefDlgProc(hwnd, msg, mp1, mp2);
     
    531532                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
    532533    WinSendDlgItemMsg(hwnd, CFGH_HTTPRUN, EM_SETTEXTLIMIT,
    533                       MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     534                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
    534535    WinSendDlgItemMsg(hwnd, CFGH_MAILRUN, EM_SETTEXTLIMIT,
    535                       MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     536                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
    536537    WinSendDlgItemMsg(hwnd, CFGH_RUNMAILWORKDIR, EM_SETTEXTLIMIT,
    537538                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     
    606607          switch (id) {
    607608          case CFGH_HTTPRUN:
    608           case CFGH_FTPRUN:
    609           case CFGH_MAILRUN:
    610             if (insert_filename(hwnd, filename, 2, FALSE) && *filename){
    611               BldQuotedFileName(szfilename, filename);
    612               WinSetDlgItemText(hwnd, id, szfilename);
    613             }
    614             break;
    615           case CFGH_RUNFTPWORKDIR:
     609          case CFGH_FTPRUN:
     610          case CFGH_MAILRUN:
     611            if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
     612              BldQuotedFileName(szfilename, filename);
     613              WinSetDlgItemText(hwnd, id, szfilename);
     614            }
     615            break;
     616          case CFGH_RUNFTPWORKDIR:
    616617            strcpy(filename, ftprundir);
    617618            if (WinDlgBox(HWND_DESKTOP, hwndNotebook,
     
    619620                          MPFROMP(filename)) && *filename)
    620621              WinSetDlgItemText(hwnd, id, filename);
    621             break;
    622           case CFGH_RUNHTTPWORKDIR:
    623             strcpy(filename, httprundir);
     622            break;
     623          case CFGH_RUNHTTPWORKDIR:
     624            strcpy(filename, httprundir);
    624625            if (WinDlgBox(HWND_DESKTOP, hwndNotebook,
    625626                          WalkExtractDlgProc, FM3ModHandle, WALK_FRAME,
    626627                          MPFROMP(filename)) && *filename)
    627628              WinSetDlgItemText(hwnd, id, filename);
    628             break;
    629           case CFGH_RUNMAILWORKDIR:
    630             strcpy(filename, mailrundir);
     629            break;
     630          case CFGH_RUNMAILWORKDIR:
     631            strcpy(filename, mailrundir);
    631632            if (WinDlgBox(HWND_DESKTOP, hwndNotebook,
    632633                          WalkExtractDlgProc, FM3ModHandle, WALK_FRAME,
    633634                          MPFROMP(filename)) && *filename)
    634635              WinSetDlgItemText(hwnd, id, filename);
    635             break;
     636            break;
    636637          default:
    637638            Runtime_Error(pszSrcFile, __LINE__, "bad case %d", id);
     
    663664      WinQueryDlgItemText(hwnd, CFGH_FTPRUN, CCHMAXPATH, szBuf);
    664665      szBuf[CCHMAXPATH - 1] = 0;
    665       if (strcmp(szBuf, ftprun)){
    666         psz = CheckApp_QuoteAddExe(szBuf);
    667         memcpy(ftprun, psz, strlen(psz) + 1);
     666      if (strcmp(szBuf, ftprun)) {
     667        psz = CheckApp_QuoteAddExe(szBuf);
     668        memcpy(ftprun, psz, strlen(psz) + 1);
    668669      }
    669670      WinQueryDlgItemText(hwnd, CFGH_HTTPRUN, CCHMAXPATH, szBuf);
    670671      szBuf[CCHMAXPATH - 1] = 0;
    671       if (strcmp(szBuf, httprun)){
    672         psz = CheckApp_QuoteAddExe(szBuf);
    673         memcpy(httprun, psz, strlen(psz) + 1);
     672      if (strcmp(szBuf, httprun)) {
     673        psz = CheckApp_QuoteAddExe(szBuf);
     674        memcpy(httprun, psz, strlen(psz) + 1);
    674675      }
    675676      WinQueryDlgItemText(hwnd, CFGH_MAILRUN, CCHMAXPATH, szBuf);
    676677      szBuf[CCHMAXPATH - 1] = 0;
    677       if (strcmp(szBuf, mailrun)){
    678         psz = CheckApp_QuoteAddExe(szBuf);
    679         memcpy(mailrun, psz, strlen(psz) + 1);
     678      if (strcmp(szBuf, mailrun)) {
     679        psz = CheckApp_QuoteAddExe(szBuf);
     680        memcpy(mailrun, psz, strlen(psz) + 1);
    680681      }
    681682      PrfWriteProfileString(fmprof, appname, "HttpRunDir", httprundir);
     
    687688      fHttpRunWPSDefault = WinQueryButtonCheckstate(hwnd, CFGH_HTTPRUNWPSDEFAULT);
    688689      PrfWriteProfileData(fmprof, appname, "HttpRunWPSDefault", &fHttpRunWPSDefault,
    689                           sizeof(BOOL));
     690                          sizeof(BOOL));
    690691      fFtpRunWPSDefault = WinQueryButtonCheckstate(hwnd, CFGH_FTPRUNWPSDEFAULT);
    691692      PrfWriteProfileData(fmprof, appname, "FtpRunWPSDefault", &fFtpRunWPSDefault,
    692                           sizeof(BOOL));
     693                          sizeof(BOOL));
    693694      fLibPathStrictHttpRun = WinQueryButtonCheckstate(hwnd, CFGH_LIBPATHSTRICTHTTPRUN);
    694695      PrfWriteProfileData(fmprof, appname, "LibPathStrictHttpRun",
    695                           &fLibPathStrictHttpRun, sizeof(BOOL));
     696                          &fLibPathStrictHttpRun, sizeof(BOOL));
    696697      fLibPathStrictFtpRun = WinQueryButtonCheckstate(hwnd, CFGH_LIBPATHSTRICTFTPRUN);
    697698      PrfWriteProfileData(fmprof, appname, "LibPathStrictFtpRun",
    698                           &fLibPathStrictFtpRun, sizeof(BOOL));
     699                          &fLibPathStrictFtpRun, sizeof(BOOL));
    699700      fLibPathStrictMailRun = WinQueryButtonCheckstate(hwnd, CFGH_LIBPATHSTRICTMAILRUN);
    700701      PrfWriteProfileData(fmprof, appname, "LibPathStrictMailRun",
    701                           &fLibPathStrictMailRun, sizeof(BOOL));
     702                          &fLibPathStrictMailRun, sizeof(BOOL));
    702703      fNoMailtoMailRun = WinQueryButtonCheckstate(hwnd, CFGH_NOMAILTOMAILRUN);
    703704      PrfWriteProfileData(fmprof, appname, "NoMailtoMailRun",
    704                           &fNoMailtoMailRun, sizeof(BOOL));
     705                          &fNoMailtoMailRun, sizeof(BOOL));
    705706      break;
    706707    }
    707708  }
    708   if (fCancelAction){
     709  if (fCancelAction) {
    709710    fCancelAction = FALSE;
    710711    WinDlgBox(HWND_DESKTOP,
    711               hwnd, CfgDlgProc, FM3ModHandle, CFG_FRAME, MPFROMP("Viewer2"));
     712              hwnd,
     713              CfgDlgProc,
     714              FM3ModHandle,
     715              CFG_FRAME,
     716              MPFROMLONG(IDM_VIEWERSETTINGS));
    712717  }
    713718  return WinDefDlgProc(hwnd, msg, mp1, mp2);
     
    782787  case UM_UNDO:
    783788    {
    784       ULONG flWindowAttr = 0, size = sizeof(ULONG);
     789      ULONG flWindowAttr = 0;
     790      ULONG ulSize = sizeof(ULONG);
    785791
    786792      if (!PrfQueryProfileData(fmprof,
    787793                               appname,
    788794                               "TreeflWindowAttr",
    789                                (PVOID) & flWindowAttr, &size))
     795                               (PVOID) & flWindowAttr, &ulSize))
    790796        flWindowAttr |= (CV_TREE | CA_TREELINE | CV_ICON | CV_MINI | CV_FLOW);
    791797      WinCheckButton(hwnd, CFG5_ICON, ((flWindowAttr & CV_ICON) != FALSE));
     
    796802        FILE_SYSTEM | FILE_NORMAL | FILE_READONLY;
    797803      mask.fIsTree = TRUE;
    798       size = sizeof(MASK);
    799       if (PrfQueryProfileData(fmprof, appname, "TreeFilter", &mask, &size)) {
     804      ulSize = sizeof(MASK);
     805      if (PrfQueryProfileData(fmprof, appname, "TreeFilter", &mask, &ulSize)) {
    800806        SetMask(NULL, &mask);
    801807      }
     
    834840        WinCheckButton(hwnd, CFG6_SORTNAME, TRUE);
    835841      if (TreesortFlags & SORT_REVERSE)
    836         WinCheckButton(hwnd, CFG6_SORTREVERSE, TRUE);
     842        WinCheckButton(hwnd, CFG6_SORTREVERSE, TRUE);
    837843    }
    838844    return 0;
     
    12331239          case CFGC_COMPARE:
    12341240          case CFGC_DIRCOMPARE:
    1235             if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
    1236               BldQuotedFileName(szfilename, filename);
     1241            if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
     1242              BldQuotedFileName(szfilename, filename);
    12371243              strcat(szfilename, " %a");
    12381244              WinSetDlgItemText(hwnd, id, szfilename);
     
    12541260
    12551261      WinQueryDlgItemText(hwnd, CFGC_DIRCOMPARE, CCHMAXPATH, szBuf);
    1256         szBuf[CCHMAXPATH - 1] = 0;
    1257         if (strcmp(szBuf, dircompare)){
    1258           psz = CheckApp_QuoteAddExe(szBuf);
    1259           memcpy(dircompare, psz, strlen(psz) + 1);
    1260           if (!strchr(dircompare, '%') && strlen(dircompare) > 3)
    1261             strcat(dircompare, " %a");
    1262         }
     1262        szBuf[CCHMAXPATH - 1] = 0;
     1263        if (strcmp(szBuf, dircompare)) {
     1264          psz = CheckApp_QuoteAddExe(szBuf);
     1265          memcpy(dircompare, psz, strlen(psz) + 1);
     1266          if (!strchr(dircompare, '%') && strlen(dircompare) > 3)
     1267            strcat(dircompare, " %a");
     1268        }
    12631269      PrfWriteProfileString(fmprof, appname, "DirCompare", dircompare);
    12641270      WinQueryDlgItemText(hwnd, CFGC_COMPARE, CCHMAXPATH, szBuf);
    1265         szBuf[CCHMAXPATH - 1] = 0;
    1266         if (strcmp(szBuf, compare)){
    1267           psz = CheckApp_QuoteAddExe(szBuf);
    1268           memcpy(compare, psz, strlen(psz) + 1);
    1269           if (!strchr(compare, '%') && strlen(compare) > 3)
    1270             strcat(compare, " %a");
    1271         }
     1271        szBuf[CCHMAXPATH - 1] = 0;
     1272        if (strcmp(szBuf, compare)) {
     1273          psz = CheckApp_QuoteAddExe(szBuf);
     1274          memcpy(compare, psz, strlen(psz) + 1);
     1275          if (!strchr(compare, '%') && strlen(compare) > 3)
     1276            strcat(compare, " %a");
     1277        }
    12721278      PrfWriteProfileString(fmprof, appname, "Compare", compare);
    12731279      break;
    12741280    }
    12751281  }
    1276   if (fCancelAction){
     1282  if (fCancelAction) {
    12771283    fCancelAction = FALSE;
    12781284    WinDlgBox(HWND_DESKTOP,
    1279               hwnd, CfgDlgProc, FM3ModHandle, CFG_FRAME, MPFROMP("Compare"));
     1285              hwnd,
     1286              CfgDlgProc,
     1287              FM3ModHandle,
     1288              CFG_FRAME,
     1289              MPFROMLONG(IDM_COMPARESETTINGS));
    12801290  }
    12811291  return WinDefDlgProc(hwnd, msg, mp1, mp2);
     
    16171627  case UM_UNDO:
    16181628    {
    1619       ULONG flWindowAttr = 0, size = sizeof(ULONG);
     1629      ULONG flWindowAttr = 0;
     1630      ULONG ulSize = sizeof(ULONG);
    16201631
    16211632      if (!PrfQueryProfileData(fmprof,
    16221633                               appname,
    1623                                "DirflWindowAttr", &flWindowAttr, &size))
     1634                               "DirflWindowAttr", &flWindowAttr, &ulSize))
    16241635        flWindowAttr = (CV_NAME | CV_MINI | CA_DETAILSVIEWTITLES | CV_FLOW);
    16251636      if (flWindowAttr & CV_ICON)
     
    16501661      mask.attrFile = FILE_DIRECTORY | FILE_ARCHIVED | FILE_HIDDEN |
    16511662        FILE_SYSTEM | FILE_NORMAL | FILE_READONLY;
    1652       size = sizeof(MASK);
    1653       if (PrfQueryProfileData(fmprof, appname, "DirFilter", &mask, &size))
     1663      ulSize = sizeof(MASK);
     1664      if (PrfQueryProfileData(fmprof, appname, "DirFilter", &mask, &ulSize))
    16541665        SetMask(NULL, &mask);
    16551666      if (!mask.attrFile)
     
    17871798                        &detailsattr, sizeof(BOOL));
    17881799    PrfWriteProfileData(fmprof, appname, "DirCnr.DetailsAttr",
    1789                         &detailsattr, sizeof(BOOL));
     1800                        &detailsattr, sizeof(BOOL));
    17901801    fSubjectInLeftPane = WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTINLEFTPANE);
    17911802    PrfWriteProfileData(fmprof, appname, "SubjectInLeftPane",
    17921803                        &fSubjectInLeftPane, sizeof(BOOL));
    17931804    PrfWriteProfileData(fmprof, appname, "DirCnr.SubjectInLeftPane",
    1794                         &fSubjectInLeftPane, sizeof(BOOL));
     1805                        &fSubjectInLeftPane, sizeof(BOOL));
    17951806    fSubjectLengthMax = WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTLENGTHMAX);
    17961807    PrfWriteProfileData(fmprof, appname, "SubjectLengthMax",
     
    18011812    PrfWriteProfileData(fmprof, appname, "DirFilter", &mask, sizeof(MASK));
    18021813    {
    1803         if (!WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTLENGTHMAX)) {
    1804           WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_QUERYVALUE,
    1805                             MPFROMP(&SubjectDisplayWidth), MPFROM2SHORT(0, SPBQ_DONOTUPDATE));
    1806           if (SubjectDisplayWidth < 50)
    1807             SubjectDisplayWidth = 0;
    1808           else if (SubjectDisplayWidth > 1000)
    1809             SubjectDisplayWidth = 1000;
    1810         }
    1811         else
    1812           SubjectDisplayWidth = 0;
    1813         PrfWriteProfileData(fmprof,
    1814                             appname, "SubjectDisplayWidth",
    1815                             &SubjectDisplayWidth, sizeof(ULONG));
    1816         PrfWriteProfileData(fmprof,
    1817                             appname, "DirCnr.SubjectDisplayWidth",
    1818                             &SubjectDisplayWidth, sizeof(ULONG));
     1814        if (!WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTLENGTHMAX)) {
     1815          WinSendDlgItemMsg(hwnd, CFG5_SUBJECTDISPLAYWIDTH, SPBM_QUERYVALUE,
     1816                            MPFROMP(&SubjectDisplayWidth), MPFROM2SHORT(0, SPBQ_DONOTUPDATE));
     1817          if (SubjectDisplayWidth < 50)
     1818            SubjectDisplayWidth = 0;
     1819          else if (SubjectDisplayWidth > 1000)
     1820            SubjectDisplayWidth = 1000;
     1821        }
     1822        else
     1823          SubjectDisplayWidth = 0;
     1824        PrfWriteProfileData(fmprof,
     1825                            appname, "SubjectDisplayWidth",
     1826                            &SubjectDisplayWidth, sizeof(ULONG));
     1827        PrfWriteProfileData(fmprof,
     1828                            appname, "DirCnr.SubjectDisplayWidth",
     1829                            &SubjectDisplayWidth, sizeof(ULONG));
    18191830    }
    18201831    break;
     
    19601971    WinCheckButton(hwnd, CFG5_EXTERNALCOLLECTOR, fExternalCollector);
    19611972    {
    1962       ULONG flWindowAttr = 0, size = sizeof(ULONG);
     1973      ULONG flWindowAttr = 0;
     1974      ULONG ulSize = sizeof(ULONG);
    19631975
    19641976      if (!PrfQueryProfileData(fmprof,
    19651977                               appname,
    1966                                "CollectorflWindowAttr", &flWindowAttr, &size))
     1978                               "CollectorflWindowAttr", &flWindowAttr, &ulSize))
    19671979        flWindowAttr = (CV_NAME | CA_DETAILSVIEWTITLES | CV_MINI | CV_FLOW);
    19681980      if (flWindowAttr & CV_ICON)
     
    19811993      mask.attrFile = FILE_DIRECTORY | FILE_ARCHIVED | FILE_HIDDEN |
    19821994        FILE_SYSTEM | FILE_NORMAL | FILE_READONLY;
    1983       size = sizeof(MASK);
     1995      ulSize = sizeof(MASK);
    19841996      if (PrfQueryProfileData(fmprof,
    1985                               appname, "CollectorFilter", &mask, &size)) {
     1997                              appname, "CollectorFilter", &mask, &ulSize)) {
    19861998        SetMask(NULL, &mask);
    19871999      }
     
    29482960}
    29492961
    2950 NOTEPAGES np[] = { CFGD_FRAME,
    2951   IDS_NOTEDIRCNRS1TEXT,
    2952   CfgDDlgProc,
    2953   0,
    2954   0,
    2955   0,
    2956   CFG5_FRAME,
    2957   IDS_NOTEDIRVIEW1TEXT,
    2958   Cfg5DlgProc,
    2959   0,
    2960   0,
    2961   0,
    2962   CFG6_FRAME,
    2963   IDS_NOTEDIRSORT1TEXT,
    2964   Cfg6DlgProc,
    2965   0,
    2966   0,
    2967   0,
    2968   CFG5_FRAME,
    2969   IDS_NOTECOLVIEW1TEXT,
    2970   Cfg7DlgProc,
    2971   0,
    2972   0,
    2973   0,
    2974   CFG6_FRAME,
    2975   IDS_NOTECOLSORT1TEXT,
    2976   Cfg8DlgProc,
    2977   0,
    2978   0,
    2979   0,
    2980   CFGA_FRAME,
    2981   IDS_NOTEARCHIVER1TEXT,
    2982   CfgADlgProc,
    2983   0,
    2984   0,
    2985   0,
    2986   CFGT_FRAME,
    2987   IDS_NOTETREE1TEXT,
    2988   CfgTDlgProc,
    2989   0,
    2990   0,
    2991   0,
    2992   CFGTS_FRAME,
    2993   IDS_NOTETREESORT1TEXT,
    2994   CfgTSDlgProc,
    2995   0,
    2996   0,
    2997   0,
    2998   CFGV_FRAME,
    2999   IDS_NOTEVIEWERS1TEXT,
    3000   CfgVDlgProc,
    3001   0,
    3002   0,
    3003   0,
    3004   CFGH_FRAME,
    3005   IDS_NOTEVIEWERS3TEXT,
    3006   CfgHDlgProc,
    3007   0,
    3008   0,
    3009   0,
    3010   CFGC_FRAME,
    3011   IDS_NOTECOMPARE1TEXT,
    3012   CfgCDlgProc,
    3013   0,
    3014   0,
    3015   0,
    3016   CFGM_FRAME,
    3017   IDS_NOTEMONOLITHIC1TEXT,
    3018   CfgMDlgProc,
    3019   0,
    3020   0,
    3021   0,
    3022   CFGG_FRAME,
    3023   IDS_NOTEGENERAL1TEXT,
    3024   CfgGDlgProc,
    3025   0,
    3026   0,
    3027   0,
    3028   CFGS_FRAME,
    3029   IDS_NOTESCANNING1TEXT,
    3030   CfgSDlgProc,
    3031   0,
    3032   0,
    3033   0,
    3034   CFGB_FRAME,
    3035   IDS_NOTEBUBBLE1TEXT,
    3036   CfgBDlgProc,
    3037   0,
    3038   0,
    3039   0,
    3040   CFG9_FRAME,
    3041   IDS_NOTEQUICK1TEXT,
    3042   Cfg9DlgProc,
    3043   0,
    3044   0,
    3045   0,
    3046   0,
    3047   0,
    3048   NULL,
    3049   0,
    3050   0,
    3051   0
     2962struct
     2963{
     2964  USHORT usMenuId;
     2965  USHORT usFrameId;
     2966  ULONG ulTitle;
     2967  PFNWP pfnPageProc;
     2968  HWND hwnd;
     2969  ULONG ulHelpId;
     2970  ULONG ulPageId;
     2971} np[] = {
     2972  { IDM_DIRCNRSETTINGS, CFGD_FRAME, IDS_NOTEDIRCNRS1TEXT, CfgDDlgProc, 0, 0, 0 },
     2973  { 0, CFG5_FRAME, IDS_NOTEDIRVIEW1TEXT, Cfg5DlgProc, 0, 0, 0},
     2974  { 0, CFG6_FRAME, IDS_NOTEDIRSORT1TEXT, Cfg6DlgProc, 0, 0, 0 },
     2975  { IDM_COLLECTORSETTINGS, CFG5_FRAME, IDS_NOTECOLVIEW1TEXT, Cfg7DlgProc, 0, 0, 0 },
     2976  { 0, CFG6_FRAME, IDS_NOTECOLSORT1TEXT, Cfg8DlgProc, 0, 0, 0 },
     2977  { IDM_ARCHIVERSETTINGS, CFGA_FRAME, IDS_NOTEARCHIVER1TEXT, CfgADlgProc, 0, 0, 0 },
     2978  { 0, CFGT_FRAME, IDS_NOTETREE1TEXT, CfgTDlgProc, 0, 0, 0 },
     2979  { 0, CFGTS_FRAME, IDS_NOTETREESORT1TEXT, CfgTSDlgProc, 0, 0, 0 },
     2980  { 0, CFGV_FRAME, IDS_NOTEVIEWERS1TEXT, CfgVDlgProc, 0, 0, 0 },
     2981  { IDM_VIEWERSETTINGS, CFGH_FRAME, IDS_NOTEVIEWERS3TEXT, CfgHDlgProc, 0, 0, 0 },
     2982  { IDM_COMPARESETTINGS, CFGC_FRAME, IDS_NOTECOMPARE1TEXT, CfgCDlgProc, 0, 0, 0 },
     2983  { 0, CFGM_FRAME, IDS_NOTEMONOLITHIC1TEXT, CfgMDlgProc, 0, 0, 0 },
     2984  { 0, CFGG_FRAME, IDS_NOTEGENERAL1TEXT, CfgGDlgProc, 0, 0, 0 },
     2985  { 0, CFGS_FRAME, IDS_NOTESCANNING1TEXT, CfgSDlgProc, 0, 0, 0 },
     2986  { 0, CFGB_FRAME, IDS_NOTEBUBBLE1TEXT, CfgBDlgProc, 0, 0, 0 },
     2987  { IDM_QUICKSETTINGS, CFG9_FRAME, IDS_NOTEQUICK1TEXT, Cfg9DlgProc, 0, 0, 0 },
     2988  { 0, 0, 0, NULL, 0, 0, 0 }    // usFrameId 0 is end marker
    30522989};
    30532990
     
    30572994  USHORT attrib = BKA_FIRST;
    30582995  INT x;
    3059   ULONG pageID;
     2996  ULONG ulPageId;
     2997  ULONG ulSize;
     2998
     2999  static PSZ pszIK_LastSettingsPage = "LastSettingsPage";
     3000  static BOOL fInitDone;
     3001
     3002  static UINT uLastPageIndex;
    30603003
    30613004  switch (msg) {
    30623005  case WM_INITDLG:
    30633006    hwndNotebook = hwnd;
     3007    if (!fInitDone) {
     3008      ulSize = sizeof(uLastPageIndex);
     3009      PrfQueryProfileData(fmprof, appname, pszIK_LastSettingsPage, &uLastPageIndex, &ulSize);
     3010      fInitDone = TRUE;
     3011    }
    30643012    if (mp2) {
    3065       if (!strcmp((CHAR *) mp2, "FM/4")) {
     3013      // If fm/2 lite drop quick setting page
     3014      if (mp2 == MPFROMLONG(IDM_LITESETTINGS)) {
    30663015        x = 0;
    3067         while (np[x].frameid && np[x].frameid != CFG9_FRAME)
     3016        while (np[x].usFrameId && np[x].usFrameId != CFG9_FRAME)
    30683017          x++;
    3069         np[x].frameid = 0;
     3018        np[x].usFrameId = 0;
     3019        mp2 = 0;
    30703020      }
    30713021    }
     
    30833033                      BKM_SETDIMENSIONS,
    30843034                      MPFROM2SHORT(0, 0), MPFROMLONG(BKA_MINORTAB));
    3085     for (x = 0; np[x].frameid; x++) {
     3035    for (x = 0; np[x].usFrameId; x++) {
    30863036      hwndTemp = WinLoadDlg(HWND_DESKTOP,
    30873037                            HWND_DESKTOP,
    3088                             np[x].proc, FM3ModHandle, np[x].frameid, MPVOID);
    3089       if (hwndTemp) {
    3090         WinSetWindowULong(hwndTemp, QWL_USER, (ULONG) hwnd);
     3038                            np[x].pfnPageProc, FM3ModHandle, np[x].usFrameId, MPVOID);
     3039      if (!hwndTemp) {
     3040        Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
     3041                  "Can not load settings page %u", x);
     3042      }
     3043      else {
     3044        WinSetWindowULong(hwndTemp, QWL_USER, (ULONG)hwnd);
    30913045        np[x].hwnd = hwndTemp;
    3092         np[x].pageID = (ULONG) WinSendDlgItemMsg(hwnd,
    3093                                                  CFG_NOTEBOOK,
    3094                                                  BKM_INSERTPAGE,
    3095                                                  MPFROMLONG(BKA_FIRST),
    3096                                                  MPFROM2SHORT(BKA_AUTOPAGESIZE
    3097                                                               |
    3098                                                               BKA_STATUSTEXTON
    3099                                                               | BKA_MAJOR,
    3100                                                               attrib));
     3046        np[x].ulPageId = (ULONG)WinSendDlgItemMsg(hwnd,
     3047                                                CFG_NOTEBOOK,
     3048                                                BKM_INSERTPAGE,
     3049                                                MPFROMLONG(BKA_FIRST),
     3050                                                MPFROM2SHORT(BKA_AUTOPAGESIZE |
     3051                                                             BKA_STATUSTEXTON |
     3052                                                             BKA_MAJOR, attrib));
    31013053        attrib = BKA_LAST;
    31023054        WinSendDlgItemMsg(hwnd,
    31033055                          CFG_NOTEBOOK,
    31043056                          BKM_SETPAGEWINDOWHWND,
    3105                           MPFROMLONG(np[x].pageID), MPFROMLONG(np[x].hwnd));
     3057                          MPFROMLONG(np[x].ulPageId), MPFROMLONG(np[x].hwnd));
    31063058        WinSendDlgItemMsg(hwnd,
    31073059                          CFG_NOTEBOOK,
    31083060                          BKM_SETTABTEXT,
    3109                           MPFROMLONG(np[x].pageID),
    3110                           MPFROMP(GetPString(np[x].title)));
     3061                          MPFROMLONG(np[x].ulPageId),
     3062                          MPFROMP(GetPString(np[x].ulTitle)));
    31113063        WinSendDlgItemMsg(hwnd,
    31123064                          CFG_NOTEBOOK,
    31133065                          BKM_SETSTATUSLINETEXT,
    3114                           MPFROMLONG(np[x].pageID),
    3115                           MPFROMP(GetPString(np[x].title + 1)));
    3116       }
    3117     }
    3118     if (mp2 && !strcmp((CHAR *) mp2, "Viewer2"))
     3066                          MPFROMLONG(np[x].ulPageId),
     3067                          MPFROMP(GetPString(np[x].ulTitle + 1)));
     3068        if (LONGFROMMP(mp2) == np[x].usMenuId) {
     3069          uLastPageIndex = x;
     3070        }
     3071      }
     3072    } // for
     3073    // If quick settings page requested, assume request is for first time init
     3074    // Turn to cfg page and show help
     3075    // Page will not be available if running fm/2 lite or if load error
     3076    if (mp2 == MPFROMLONG(IDM_QUICKSETTINGS) &&
     3077        x-- > 0 && np[x].hwnd && np[x].usFrameId == CFG9_FRAME) {
     3078      // 10 Jan 08 SHL fixme to know what UM_SETDIR 1 means
     3079      PostMsg(MainObjectHwnd, UM_SETDIR, MPFROMLONG(1), MPVOID);
    31193080      PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
    3120               BKM_TURNTOPAGE, MPFROMLONG(np[9].pageID), MPVOID);
    3121     else if (mp2 && !strcmp((CHAR *) mp2, "Viewer1"))
    3122            PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
    3123                    BKM_TURNTOPAGE, MPFROMLONG(np[8].pageID), MPVOID);
    3124     else if (mp2 && !strcmp((CHAR *) mp2, "Compare"))
    3125            PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
    3126                    BKM_TURNTOPAGE, MPFROMLONG(np[10].pageID), MPVOID);
    3127     else if (mp2 && !strcmp((CHAR *) mp2, "Archive"))
    3128            PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
    3129                    BKM_TURNTOPAGE, MPFROMLONG(np[5].pageID), MPVOID);
    3130     else if (mp2 && !strcmp((CHAR *) mp2, "Tree"))
    3131            PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
    3132                    BKM_TURNTOPAGE, MPFROMLONG(np[6].pageID), MPVOID);
    3133     else if (mp2 && !strcmp((CHAR *) mp2, "Collector"))
    3134            PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
    3135                    BKM_TURNTOPAGE, MPFROMLONG(np[3].pageID), MPVOID);
    3136     /* see if we've been asked to display quick cfg page */
    3137     else if (!mp2 || strcmp((CHAR *) mp2, "First Time") ||
    3138              !x || !np[x - 1].hwnd || !np[x - 1].pageID)
    3139            PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
    3140                    BKM_TURNTOPAGE, MPFROMLONG(np[0].pageID), MPVOID);
     3081              BKM_TURNTOPAGE, MPFROMLONG(np[x].ulPageId), MPVOID);
     3082      PostMsg(hwnd, UM_FOCUSME, MPFROMLONG(np[x].hwnd), MPVOID);
     3083      PostMsg(np[x].hwnd, WM_COMMAND, MPFROM2SHORT(IDM_HELP, 0), MPVOID);
     3084    }
    31413085    else {
    3142       PostMsg(MainObjectHwnd, UM_SETDIR, MPFROMLONG(1L), MPVOID);
    31433086      PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK),
    3144               BKM_TURNTOPAGE, MPFROMLONG(np[x - 1].pageID), MPVOID);
    3145       PostMsg(hwnd, UM_FOCUSME, MPFROMLONG(np[x - 1].hwnd), MPVOID);
    3146       PostMsg(np[x - 1].hwnd, WM_COMMAND, MPFROM2SHORT(IDM_HELP, 0), MPVOID);
     3087              BKM_TURNTOPAGE, MPFROMLONG(np[uLastPageIndex].ulPageId), MPVOID);
    31473088    }
    31483089
     
    31603101      case BKN_PAGESELECTED:
    31613102        if (mp2) {
    3162 
    31633103          PAGESELECTNOTIFY *psn = mp2;
    3164 
    3165           WinSendDlgItemMsg(hwnd,
    3166                             CFG_NOTEBOOK,
    3167                             BKM_QUERYPAGEWINDOWHWND,
    3168                             MPFROMLONG(psn->ulPageIdNew), MPVOID);
     3104          ULONG id = psn->ulPageIdNew;
     3105          UINT x;
     3106          for (x = 0; np[x].usFrameId; x++) {
     3107            if (np[x].ulPageId == id) {
     3108              uLastPageIndex = x;       // Found it
     3109              break;
     3110            }
     3111          }
    31693112        }
    3170         break;
    3171       }
    3172       break;
    3173     }
     3113      } // switch BKN
     3114      break;
     3115    } // switch page
    31743116    return 0;
    31753117
     
    31873129    case DID_CANCEL:
    31883130      // Tell current page to undo itself in case changed and still alive
    3189       pageID = (ULONG) WinSendDlgItemMsg(hwnd,
     3131      ulPageId = (ULONG) WinSendDlgItemMsg(hwnd,
    31903132                                         CFG_NOTEBOOK,
    31913133                                         BKM_QUERYPAGEID,
     
    31953137                                          CFG_NOTEBOOK,
    31963138                                          BKM_QUERYPAGEWINDOWHWND,
    3197                                           MPFROMLONG(pageID), MPVOID);
     3139                                          MPFROMLONG(ulPageId), MPVOID);
     3140      PrfWriteProfileData(fmprof, FM3Str, pszIK_LastSettingsPage,
     3141                          (PVOID)&uLastPageIndex, sizeof(uLastPageIndex));
    31983142      if (hwndTemp)
    31993143        WinSendMsg(hwndTemp, UM_UNDO, MPVOID, MPVOID);
     
    32033147
    32043148    case IDM_HELP:                      /* relay message to appropriate page's window */
    3205       pageID = (ULONG) WinSendDlgItemMsg(hwnd,
     3149      ulPageId = (ULONG) WinSendDlgItemMsg(hwnd,
    32063150                                         CFG_NOTEBOOK,
    32073151                                         BKM_QUERYPAGEID,
     
    32113155                                          CFG_NOTEBOOK,
    32123156                                          BKM_QUERYPAGEWINDOWHWND,
    3213                                           MPFROMLONG(pageID), MPVOID);
     3157                                          MPFROMLONG(ulPageId), MPVOID);
    32143158      if (hwndTemp)
    32153159        PostMsg(hwndTemp, WM_COMMAND, MPFROM2SHORT(IDM_HELP, 0), MPVOID);
     
    32193163
    32203164  case UM_UNDO:
    3221     for (x = 0; np[x].frameid; x++) {
     3165    for (x = 0; np[x].usFrameId; x++) {
    32223166      if (np[x].hwnd)
    32233167        WinSendMsg(np[x].hwnd, UM_UNDO, MPVOID, MPVOID);
     
    32263170
    32273171  case WM_DESTROY:
    3228     if (np[0].frameid) {
    3229       for (x = 1; np[x].frameid; x++) {
     3172    if (np[0].usFrameId) {
     3173      for (x = 1; np[x].usFrameId; x++) {
    32303174        if (np[x].hwnd) {
    32313175          WinSendMsg(np[x].hwnd, WM_CLOSE, MPVOID, MPVOID);
    32323176          np[x].hwnd = (HWND) 0;
    3233           np[x].pageID = 0;
     3177          np[x].ulPageId = 0;
    32343178        }
    32353179      }
    32363180      WinSendMsg(np[0].hwnd, WM_CLOSE, MPVOID, MPVOID);
    32373181      np[0].hwnd = (HWND) 0;
    3238       np[0].pageID = 0;
     3182      np[0].ulPageId = 0;
    32393183    }
    32403184    hwndNotebook = (HWND) 0;
     3185    break;
     3186  case WM_CLOSE:
     3187    PrfWriteProfileData(fmprof, FM3Str, pszIK_LastSettingsPage,
     3188                        (PVOID)&uLastPageIndex, sizeof(uLastPageIndex));
    32413189    break;
    32423190  }
Note: See TracChangeset for help on using the changeset viewer.