Changeset 953 for trunk/dll/notebook.c
- Timestamp:
- Feb 16, 2008, 3:15:16 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/notebook.c
r940 r953 26 26 13 Jan 08 GKY Get Subjectwidth/Subjectleft working in the collector. 27 27 xx Jan 08 JBS Ticket 150: fix/improve save and restore of dir cnr state at FM/2 close/reopen 28 15 Feb 08 SHL Rework to support settings menu conditional cascade. Make more generic 28 29 29 30 ***********************************************************************/ … … 42 43 #include "errutil.h" // Dos_Error... 43 44 #include "strutil.h" // GetPString 45 #include "notebook.h" 44 46 #include "fm3dll.h" 45 47 … … 49 51 50 52 static HWND hwndNotebook; 53 54 static VOID SaveLastPageIndex(HWND hwnd); 51 55 52 56 MRESULT EXPENTRY CfgADlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) … … 656 660 // they contain args. 657 661 CHAR szCLBuf[MAXCOMLINESTRG], szPathBuf[CCHMAXPATH]; 658 PSZ 662 PSZ pszWorkBuf; 659 663 660 664 pszWorkBuf = xmalloc(MAXCOMLINESTRG, pszSrcFile, __LINE__); … … 2125 2129 dcd.fSubjectInLeftPane = WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTINLEFTPANE); 2126 2130 PrfWriteProfileData(fmprof, appname, "Collector.SubjectInLeftPane", 2127 2131 &dcd.fSubjectInLeftPane, sizeof(BOOL)); 2128 2132 dcd.fSubjectLengthMax = WinQueryButtonCheckstate(hwnd, CFG5_SUBJECTLENGTHMAX); 2129 2133 PrfWriteProfileData(fmprof, appname, "Collector.SubjectLengthMax", … … 2961 2965 } np[] = { 2962 2966 { IDM_DIRCNRSETTINGS, CFGD_FRAME, IDS_NOTEDIRCNRS1TEXT, CfgDDlgProc, 0, 0, 0 }, 2963 { 0, CFG5_FRAME, IDS_NOTEDIRVIEW1TEXT, Cfg5DlgProc, 0, 0, 0},2964 { 0, CFG6_FRAME, IDS_NOTEDIRSORT1TEXT, Cfg6DlgProc, 0, 0, 0 },2965 { IDM_COLLECTOR SETTINGS, CFG5_FRAME, IDS_NOTECOLVIEW1TEXT, Cfg7DlgProc, 0, 0, 0 },2966 { 0, CFG6_FRAME, IDS_NOTECOLSORT1TEXT, Cfg8DlgProc, 0, 0, 0 },2967 { IDM_DIRVIEWSETTINGS, CFG5_FRAME, IDS_NOTEDIRVIEW1TEXT, Cfg5DlgProc, 0, 0, 0}, 2968 { IDM_DIRSORTSETTINGS, CFG6_FRAME, IDS_NOTEDIRSORT1TEXT, Cfg6DlgProc, 0, 0, 0 }, 2969 { IDM_COLLECTORVIEWSETTINGS, CFG5_FRAME, IDS_NOTECOLVIEW1TEXT, Cfg7DlgProc, 0, 0, 0 }, 2970 { IDM_COLLECTORSORTSETTINGS, CFG6_FRAME, IDS_NOTECOLSORT1TEXT, Cfg8DlgProc, 0, 0, 0 }, 2967 2971 { IDM_ARCHIVERSETTINGS, CFGA_FRAME, IDS_NOTEARCHIVER1TEXT, CfgADlgProc, 0, 0, 0 }, 2968 { 0, CFGT_FRAME, IDS_NOTETREE1TEXT, CfgTDlgProc, 0, 0, 0 },2969 { 0, CFGTS_FRAME, IDS_NOTETREESORT1TEXT, CfgTSDlgProc, 0, 0, 0 },2970 { 0, CFGV_FRAME, IDS_NOTEVIEWERS1TEXT, CfgVDlgProc, 0, 0, 0 },2971 { IDM_VIEWERSETTINGS , CFGH_FRAME, IDS_NOTEVIEWERS3TEXT, CfgHDlgProc, 0, 0, 0 },2972 { IDM_TREECNRVIEWSETTINGS, CFGT_FRAME, IDS_NOTETREE1TEXT, CfgTDlgProc, 0, 0, 0 }, 2973 { IDM_TREECNRSORTSETTINGS, CFGTS_FRAME, IDS_NOTETREESORT1TEXT, CfgTSDlgProc, 0, 0, 0 }, 2974 { IDM_VIEWERSETTINGS, CFGV_FRAME, IDS_NOTEVIEWERS1TEXT, CfgVDlgProc, 0, 0, 0 }, 2975 { IDM_VIEWERSETTINGS2, CFGH_FRAME, IDS_NOTEVIEWERS3TEXT, CfgHDlgProc, 0, 0, 0 }, 2972 2976 { IDM_COMPARESETTINGS, CFGC_FRAME, IDS_NOTECOMPARE1TEXT, CfgCDlgProc, 0, 0, 0 }, 2973 { 0, CFGM_FRAME, IDS_NOTEMONOLITHIC1TEXT, CfgMDlgProc, 0, 0, 0 },2974 { 0, CFGG_FRAME, IDS_NOTEGENERAL1TEXT, CfgGDlgProc, 0, 0, 0 },2975 { 0, CFGS_FRAME, IDS_NOTESCANNING1TEXT, CfgSDlgProc, 0, 0, 0 },2976 { 0, CFGB_FRAME, IDS_NOTEBUBBLE1TEXT, CfgBDlgProc, 0, 0, 0 },2977 { IDM_MONOLITHICSETTINGS, CFGM_FRAME, IDS_NOTEMONOLITHIC1TEXT, CfgMDlgProc, 0, 0, 0 }, 2978 { IDM_GENERALSETTINGS, CFGG_FRAME, IDS_NOTEGENERAL1TEXT, CfgGDlgProc, 0, 0, 0 }, 2979 { IDM_SCANSETTINGS, CFGS_FRAME, IDS_NOTESCANNING1TEXT, CfgSDlgProc, 0, 0, 0 }, 2980 { IDM_BUBBLESSETTINGS, CFGB_FRAME, IDS_NOTEBUBBLE1TEXT, CfgBDlgProc, 0, 0, 0 }, 2977 2981 { IDM_QUICKSETTINGS, CFG9_FRAME, IDS_NOTEQUICK1TEXT, Cfg9DlgProc, 0, 0, 0 }, 2978 2982 { 0, 0, 0, NULL, 0, 0, 0 } // usFrameId 0 is end marker 2979 2983 }; 2984 2985 static PSZ pszIK_LastSettingsPage = "LastSettingsPage"; 2980 2986 2981 2987 MRESULT EXPENTRY CfgDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) … … 2985 2991 INT x; 2986 2992 ULONG ulPageId; 2987 ULONG ulSize; 2988 2989 static PSZ pszIK_LastSettingsPage = "LastSettingsPage"; 2990 static BOOL fInitDone; 2991 2992 static UINT uLastPageIndex; 2993 UINT uPageIndex; 2993 2994 2994 2995 switch (msg) { 2995 2996 case WM_INITDLG: 2996 2997 hwndNotebook = hwnd; 2997 if (!fInitDone) { 2998 ulSize = sizeof(uLastPageIndex); 2999 PrfQueryProfileData(fmprof, appname, pszIK_LastSettingsPage, &uLastPageIndex, &ulSize); 3000 fInitDone = TRUE; 3001 } 3002 if (mp2) { 3003 // If fm/2 lite drop quick setting page 3004 if (mp2 == MPFROMLONG(IDM_LITESETTINGS)) { 3005 x = 0; 3006 while (np[x].usFrameId && np[x].usFrameId != CFG9_FRAME) 3007 x++; 3008 np[x].usFrameId = 0; 3009 mp2 = 0; 3010 } 3011 } 2998 uPageIndex = 0; 2999 3000 // If generic call, try to find conditional cascade default 3001 // 15 Feb 08 SHL fixme to be gone when/if IDM_NOTEBOOK gone? 3002 if (mp2 == MPFROMLONG(IDM_NOTEBOOK)) { 3003 DbgMsg(pszSrcFile, __LINE__, "Trying to translate IDM_NOTEBOOK"); 3004 hwndTemp = WinQueryWindow(hwnd, QW_OWNER); 3005 if (hwndTemp != HWND_DESKTOP) { 3006 HWND hwndMenu; 3007 // Owner is frame if not applet 3008 hwndMenu = WinWindowFromID(hwndTemp, FID_MENU); 3009 if (hwndMenu == NULLHANDLE) 3010 Runtime_Error(pszSrcFile, __LINE__, "FID_MENU"); 3011 else { 3012 MENUITEM mi; 3013 BOOL ok; 3014 memset(&mi, 0, sizeof(mi)); 3015 ok = (BOOL)WinSendMsg(hwndMenu, 3016 MM_QUERYITEM, 3017 MPFROM2SHORT(IDM_NOTEBOOKSUBMENU, TRUE), 3018 MPFROMP(&mi)); 3019 if (!ok) 3020 Runtime_Error(pszSrcFile, __LINE__, "IDM_NOTEBOOKSUBMENU"); 3021 else { 3022 mp2 = WinSendMsg(mi.hwndSubMenu, MM_QUERYDEFAULTITEMID, MPVOID, MPVOID); 3023 if (!mp2) 3024 Runtime_Error(pszSrcFile, __LINE__, "MM_QUERYDEFAULTITEMID"); 3025 } 3026 } 3027 } 3028 } 3029 3012 3030 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID); 3013 3031 WinSendDlgItemMsg(hwnd, … … 3023 3041 BKM_SETDIMENSIONS, 3024 3042 MPFROM2SHORT(0, 0), MPFROMLONG(BKA_MINORTAB)); 3043 3044 // Build and insert notebook pages 3025 3045 for (x = 0; np[x].usFrameId; x++) { 3026 3046 hwndTemp = WinLoadDlg(HWND_DESKTOP, … … 3056 3076 MPFROMLONG(np[x].ulPageId), 3057 3077 MPFROMP(GetPString(np[x].ulTitle + 1))); 3058 if (LONGFROMMP(mp2) == np[x].usMenuId) {3059 u LastPageIndex = x;3060 3061 }3062 } // for 3078 if (LONGFROMMP(mp2) == np[x].usMenuId) 3079 uPageIndex = x; // Remember selected page 3080 } 3081 } // for pages 3082 3063 3083 // If quick settings page requested, assume request is for first time init 3064 3084 // Turn to cfg page and show help 3065 3085 // Page will not be available if running fm/2 lite or if load error 3086 // 15 Feb 08 SHL fixme to do just once? 3066 3087 if (mp2 == MPFROMLONG(IDM_QUICKSETTINGS) && 3067 x-- > 0 && np[x].hwnd && np[x].usFrameId == CFG9_FRAME) { 3088 x-- > 0 && 3089 np[x].hwnd && 3090 np[x].usFrameId == CFG9_FRAME) 3091 { 3068 3092 // 10 Jan 08 SHL fixme to document what UM_SETDIR 1 means 3069 3093 PostMsg(MainObjectHwnd, UM_SETDIR, MPFROMLONG(1), MPVOID); … … 3073 3097 PostMsg(np[x].hwnd, WM_COMMAND, MPFROM2SHORT(IDM_HELP, 0), MPVOID); 3074 3098 } 3075 else { 3076 if (uLastPageIndex >= x) { 3077 Runtime_Error(pszSrcFile, __LINE__, "uLastPageIndex corrupted (%u)", 3078 uLastPageIndex); 3079 uLastPageIndex = 0; 3080 } 3081 PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK), 3082 BKM_TURNTOPAGE, MPFROMLONG(np[uLastPageIndex].ulPageId), MPVOID); 3083 } 3099 else if (uPageIndex >= x) { 3100 Runtime_Error(pszSrcFile, __LINE__, "uPageIndex corrupted (%u)", 3101 uPageIndex); 3102 uPageIndex = 0; 3103 } 3104 PostMsg(WinWindowFromID(hwnd, CFG_NOTEBOOK), 3105 BKM_TURNTOPAGE, MPFROMLONG(np[uPageIndex].ulPageId), MPVOID); 3106 // 15 Feb 08 SHL fixme to put focus on first field of page 3084 3107 3085 3108 break; … … 3089 3112 WinSetActiveWindow(HWND_DESKTOP, (HWND) mp1); 3090 3113 break; 3091 3092 case WM_CONTROL:3093 switch (SHORT1FROMMP(mp1)) {3094 case CFG_NOTEBOOK:3095 switch (SHORT2FROMMP(mp1)) {3096 case BKN_PAGESELECTED:3097 if (mp2) {3098 PAGESELECTNOTIFY *psn = mp2;3099 ULONG id = psn->ulPageIdNew;3100 UINT x;3101 for (x = 0; np[x].usFrameId; x++) {3102 if (np[x].ulPageId == id) {3103 uLastPageIndex = x; // Found it3104 break;3105 }3106 }3107 }3108 } // switch BKN3109 break;3110 } // switch page3111 return 0;3112 3114 3113 3115 case UM_SETUP: … … 3124 3126 case DID_CANCEL: 3125 3127 // Tell current page to undo itself in case changed and still alive 3128 SaveLastPageIndex(hwnd); 3126 3129 ulPageId = (ULONG) WinSendDlgItemMsg(hwnd, 3127 3130 CFG_NOTEBOOK, … … 3133 3136 BKM_QUERYPAGEWINDOWHWND, 3134 3137 MPFROMLONG(ulPageId), MPVOID); 3135 PrfWriteProfileData(fmprof, FM3Str, pszIK_LastSettingsPage,3136 (PVOID)&uLastPageIndex, sizeof(uLastPageIndex));3137 3138 if (hwndTemp) 3138 3139 WinSendMsg(hwndTemp, UM_UNDO, MPVOID, MPVOID); … … 3180 3181 break; 3181 3182 case WM_CLOSE: 3182 PrfWriteProfileData(fmprof, FM3Str, pszIK_LastSettingsPage, 3183 (PVOID)&uLastPageIndex, sizeof(uLastPageIndex)); 3183 SaveLastPageIndex(hwnd); 3184 3184 break; 3185 3185 } 3186 3186 return WinDefDlgProc(hwnd, msg, mp1, mp2); 3187 } 3188 /** 3189 * Initialize config submenu 3190 * @param hwndMenu is window handle 3191 * @param fIsLite is true if called for fm/2 lite 3192 */ 3193 3194 VOID CfgMenuInit(HWND hwndMenu, BOOL fIsLite) 3195 { 3196 UINT uPageIndex; 3197 ULONG ulSize = sizeof(uPageIndex); 3198 UINT x; 3199 PrfQueryProfileData(fmprof, appname, pszIK_LastSettingsPage, &uPageIndex, &ulSize); 3200 for (x = 0; x < uPageIndex && np[x].usFrameId; x++) 3201 ; // Search 3202 if (np[x].usMenuId) 3203 SetConditionalCascade(hwndMenu, IDM_NOTEBOOKSUBMENU, np[uPageIndex].usMenuId); 3204 // If lite, delete excess items from menus and tables 3205 if (fIsLite) { 3206 WinSendMsg(hwndMenu, 3207 MM_DELETEITEM, 3208 MPFROM2SHORT(IDM_QUICKSETTINGS, FALSE), MPVOID); 3209 // If fm/2 lite drop quick setting page 3210 for (x = 0; np[x].usFrameId && np[x].usFrameId != CFG9_FRAME; x++) 3211 ; // Scan 3212 np[x].usFrameId = 0; 3213 } 3214 } 3215 3216 static VOID SaveLastPageIndex(HWND hwnd) 3217 { 3218 HWND hwndOwner; 3219 HWND hwndMenu; 3220 UINT x; 3221 ULONG ulPageId; 3222 3223 // Owner is frame if not applet 3224 hwndOwner = WinQueryWindow(hwnd, QW_OWNER); 3225 if (hwndOwner != HWND_DESKTOP) { 3226 ulPageId = (ULONG)WinSendDlgItemMsg(hwnd, 3227 CFG_NOTEBOOK, 3228 BKM_QUERYPAGEID, 3229 MPFROMLONG(0), 3230 MPFROM2SHORT(BKA_TOP, 0)); 3231 if (!ulPageId) 3232 Runtime_Error(pszSrcFile, __LINE__, "BKM_QUERYPAGEID"); 3233 else { 3234 for (x = 0; np[x].usMenuId && np[x].ulPageId != ulPageId; x++) 3235 ; // Scan 3236 if (!np[x].usMenuId) 3237 Runtime_Error(pszSrcFile, __LINE__, "bad menu id %lu", ulPageId); 3238 else { 3239 PrfWriteProfileData(fmprof, FM3Str, pszIK_LastSettingsPage, 3240 (PVOID)&x, sizeof(x)); 3241 hwndMenu = WinWindowFromID(hwndOwner, FID_MENU); 3242 SetConditionalCascade(hwndMenu, IDM_NOTEBOOKSUBMENU, np[x].usMenuId); 3243 } 3244 } 3245 } 3187 3246 } 3188 3247 … … 3192 3251 #pragma alloc_text(NOTEBOOK4,Cfg7DlgProc,Cfg8DlgProc,CfgCDlgProc) 3193 3252 #pragma alloc_text(NOTEBOOK5,CfgGDlgProc,CfgDlgProc,CfgBDlgProc) 3194 3253 #pragma alloc_text(NOTEBOOK5,CfgMenuInit,SaveLastPageIndex)
Note:
See TracChangeset
for help on using the changeset viewer.