Changeset 551 for trunk/dll/objcnr.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/objcnr.c
r531 r551 30 30 #include "fm3str.h" 31 31 32 typedef struct { 32 typedef struct 33 { 33 34 CHAR *filename; 34 HWND 35 HWND hwndCnr; 35 36 CHAR *stopflag; 36 } DIRSIZE; 37 38 typedef struct { 37 } 38 DIRSIZE; 39 40 typedef struct 41 { 39 42 CHAR *dirname; 40 CHAR stopflag; 41 BOOL dying; 42 BOOL working; 43 } TEMP; 43 CHAR stopflag; 44 BOOL dying; 45 BOOL working; 46 } 47 TEMP; 44 48 45 49 #pragma data_seg(DATA1) … … 51 55 #pragma alloc_text(OBJCNR,ProcessDir,FillCnrsThread,ObjCnrDlgProc) 52 56 53 static VOID ProcessDir(HWND hwndCnr, CHAR *filename,PCNRITEM pciParent,54 CHAR *stopflag)57 static VOID ProcessDir(HWND hwndCnr, CHAR * filename, PCNRITEM pciParent, 58 CHAR * stopflag) 55 59 { 56 CHAR maskstr[CCHMAXPATH],*endpath,*p;57 ULONG nm,ulM;58 HDIR 59 FILEFINDBUF3 *ffb, *fft;60 APIRET 61 RECORDINSERT 62 PCNRITEM 63 64 ffb = xmalloc(sizeof(FILEFINDBUF3), pszSrcFile,__LINE__);65 if (!ffb)60 CHAR maskstr[CCHMAXPATH], *endpath, *p; 61 ULONG nm, ulM; 62 HDIR hdir; 63 FILEFINDBUF3 *ffb, *fft; 64 APIRET rc; 65 RECORDINSERT ri; 66 PCNRITEM pciP; 67 68 ffb = xmalloc(sizeof(FILEFINDBUF3), pszSrcFile, __LINE__); 69 if (!ffb) 66 70 return; 67 strcpy(maskstr, filename);68 if (maskstr[strlen(maskstr) - 1] != '\\')69 strcat(maskstr, "\\");71 strcpy(maskstr, filename); 72 if (maskstr[strlen(maskstr) - 1] != '\\') 73 strcat(maskstr, "\\"); 70 74 endpath = &maskstr[strlen(maskstr)]; 71 strcat(maskstr, "*");75 strcat(maskstr, "*"); 72 76 hdir = HDIR_CREATE; 73 77 nm = 1L; 74 78 rc = DosFindFirst(filename, &hdir, 75 76 77 ffb,sizeof(FILEFINDBUF3),&nm,FIL_STANDARD);78 if (!rc)79 FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED | 80 FILE_SYSTEM | FILE_HIDDEN | MUST_HAVE_DIRECTORY, 81 ffb, sizeof(FILEFINDBUF3), &nm, FIL_STANDARD); 82 if (!rc) 79 83 DosFindClose(hdir); 80 84 81 if (rc) {/* work around furshluginer FAT bug... */82 if (IsRoot(filename))85 if (rc) { /* work around furshluginer FAT bug... */ 86 if (IsRoot(filename)) 83 87 rc = 0; 84 88 } 85 89 86 if((!rc && (ffb->attrFile & FILE_DIRECTORY))) { 87 pciP = WinSendMsg(hwndCnr,CM_ALLOCRECORD,MPFROMLONG(EXTRA_RECORD_BYTES2), 88 MPFROMLONG(1L)); 89 if(!pciP) { 90 if ((!rc && (ffb->attrFile & FILE_DIRECTORY))) { 91 pciP = 92 WinSendMsg(hwndCnr, CM_ALLOCRECORD, MPFROMLONG(EXTRA_RECORD_BYTES2), 93 MPFROMLONG(1L)); 94 if (!pciP) { 90 95 free(ffb); 91 96 return; 92 97 } 93 strcpy(pciP->szFileName, filename);98 strcpy(pciP->szFileName, filename); 94 99 pciP->pszDispAttr = pciP->szDispAttr; 95 100 pciP->pszSubject = pciP->szSubject; … … 97 102 pciP->pszDispAttr = pciP->szDispAttr; 98 103 *pciP->szDispAttr = *pciP->szLongname = *pciP->szSubject = 0; 99 if (strlen(filename) < 4)104 if (strlen(filename) < 4) 100 105 pciP->pszFileName = pciP->szFileName; 101 106 else { 102 p = strrchr(pciP->szFileName, '\\');103 if (!p)104 105 else if (*(p + 1))106 107 p = strrchr(pciP->szFileName, '\\'); 108 if (!p) 109 pciP->pszFileName = pciP->szFileName; 110 else if (*(p + 1)) 111 p++; 107 112 pciP->pszFileName = p; 108 113 } 109 114 pciP->rc.pszIcon = pciP->pszFileName; 110 if (fForceUpper)115 if (fForceUpper) 111 116 strupr(pciP->szFileName); 112 else if (fForceLower)117 else if (fForceLower) 113 118 strlwr(pciP->szFileName); 114 119 pciP->rc.flRecordAttr |= CRA_RECORDREADONLY; … … 117 122 free(ffb); 118 123 Dos_Error(MB_ENTER, 119 rc, 120 HWND_DESKTOP, 121 pszSrcFile, 122 __LINE__, 123 GetPString(IDS_CANTFINDDIRTEXT), 124 filename); 124 rc, 125 HWND_DESKTOP, 126 pszSrcFile, 127 __LINE__, GetPString(IDS_CANTFINDDIRTEXT), filename); 125 128 return; 126 129 } … … 129 132 130 133 hptr = WinLoadFileIcon(pciP->szFileName, FALSE); 131 if (hptr)134 if (hptr) 132 135 pciP->rc.hptrIcon = hptr; 133 136 } 134 if (!pciP->rc.hptrIcon || pciP->rc.hptrIcon == hptrFile)/* OS/2 bug bug bug bug */137 if (!pciP->rc.hptrIcon || pciP->rc.hptrIcon == hptrFile) /* OS/2 bug bug bug bug */ 135 138 pciP->rc.hptrIcon = hptrDir; 136 memset(&ri, 0,sizeof(RECORDINSERT));137 ri.cb 138 ri.pRecordOrder = (PRECORDCORE)CMA_END;139 ri.pRecordParent = (PRECORDCORE)pciParent;140 ri.zOrder = (USHORT)CMA_TOP;141 ri.cRecordsInsert 142 ri.fInvalidateRecord 143 if (!WinSendMsg(hwndCnr,CM_INSERTRECORD,MPFROMP(pciP),MPFROMP(&ri))) {139 memset(&ri, 0, sizeof(RECORDINSERT)); 140 ri.cb = sizeof(RECORDINSERT); 141 ri.pRecordOrder = (PRECORDCORE) CMA_END; 142 ri.pRecordParent = (PRECORDCORE) pciParent; 143 ri.zOrder = (USHORT) CMA_TOP; 144 ri.cRecordsInsert = 1L; 145 ri.fInvalidateRecord = TRUE; 146 if (!WinSendMsg(hwndCnr, CM_INSERTRECORD, MPFROMP(pciP), MPFROMP(&ri))) { 144 147 free(ffb); 145 148 return; 146 149 } 147 150 hdir = HDIR_CREATE; 148 if (!isalpha(*maskstr) || maskstr[1] != ':' || maskstr[2] != '\\' ||149 ((driveflags[toupper(*maskstr) - 'A'] & DRIVE_REMOTE) && fRemoteBug))151 if (!isalpha(*maskstr) || maskstr[1] != ':' || maskstr[2] != '\\' || 152 ((driveflags[toupper(*maskstr) - 'A'] & DRIVE_REMOTE) && fRemoteBug)) 150 153 ulM = 1L; 151 154 else 152 ulM = min(FilesToGet, 225);153 if (ulM > 1L) {154 fft = xrealloc(ffb, sizeof(FILEFINDBUF3) * ulM, pszSrcFile,__LINE__);155 if (!fft)155 ulM = min(FilesToGet, 225); 156 if (ulM > 1L) { 157 fft = xrealloc(ffb, sizeof(FILEFINDBUF3) * ulM, pszSrcFile, __LINE__); 158 if (!fft) 156 159 ulM = 1L; 157 160 else … … 160 163 nm = ulM; 161 164 rc = DosFindFirst(maskstr, &hdir, 162 163 FILE_SYSTEM | FILE_HIDDEN | MUST_HAVE_DIRECTORY,ffb,164 sizeof(FILEFINDBUF3) * ulM,&nm,FIL_STANDARD);165 if (!rc) {166 167 register PBYTE fb = (PBYTE) ffb;168 FILEFINDBUF3 169 ULONG 170 171 while (!rc) {172 for (x = 0L;x < nm;x++) {173 pffbFile = (FILEFINDBUF3 *)fb;174 if(*stopflag)175 176 165 FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED | 166 FILE_SYSTEM | FILE_HIDDEN | MUST_HAVE_DIRECTORY, ffb, 167 sizeof(FILEFINDBUF3) * ulM, &nm, FIL_STANDARD); 168 if (!rc) { 169 170 register PBYTE fb = (PBYTE) ffb; 171 FILEFINDBUF3 *pffbFile; 172 ULONG x; 173 174 while (!rc) { 175 for (x = 0L; x < nm; x++) { 176 pffbFile = (FILEFINDBUF3 *) fb; 177 if (*stopflag) 178 break; 179 if ((pffbFile->attrFile & FILE_DIRECTORY) && 177 180 // Skip . and .. 178 181 (pffbFile->achName[0] != '.' || 179 182 (pffbFile->achName[1] && 180 181 strcpy(endpath,pffbFile->achName);182 ProcessDir(hwndCnr,maskstr,pciP,stopflag);183 184 if(!pffbFile->oNextEntryOffset)185 186 183 (pffbFile->achName[1] != '.' || pffbFile->achName[2])))) { 184 strcpy(endpath, pffbFile->achName); 185 ProcessDir(hwndCnr, maskstr, pciP, stopflag); 186 } 187 if (!pffbFile->oNextEntryOffset) 188 break; 189 fb += pffbFile->oNextEntryOffset; 187 190 } 188 191 DosSleep(0L); 189 if (*stopflag)190 192 if (*stopflag) 193 break; 191 194 nm = ulM; 192 rc = DosFindNext(hdir, ffb,sizeof(FILEFINDBUF3) * ulM,&nm);195 rc = DosFindNext(hdir, ffb, sizeof(FILEFINDBUF3) * ulM, &nm); 193 196 } 194 197 DosFindClose(hdir); 195 198 } 196 199 free(ffb); 197 WinSendMsg(hwndCnr, CM_INVALIDATERECORD,MPFROMP(&pciP),198 MPFROM2SHORT(1,0));200 WinSendMsg(hwndCnr, CM_INVALIDATERECORD, MPFROMP(&pciP), 201 MPFROM2SHORT(1, 0)); 199 202 } 200 203 201 202 static VOID FillCnrsThread(VOID *args) 204 static VOID FillCnrsThread(VOID * args) 203 205 { 204 HAB 205 HMQ 206 DIRSIZE *dirsize = (DIRSIZE *)args;207 208 if (!dirsize)206 HAB hab; 207 HMQ hmq; 208 DIRSIZE *dirsize = (DIRSIZE *) args; 209 210 if (!dirsize) 209 211 return; 210 212 … … 212 214 213 215 hab = WinInitialize(0); 214 if (hab) {215 hmq = WinCreateMsgQueue(hab, 0);216 if (hmq) {217 WinCancelShutdown(hmq, TRUE);218 ProcessDir(dirsize->hwndCnr, dirsize->filename,(PCNRITEM)NULL,219 216 if (hab) { 217 hmq = WinCreateMsgQueue(hab, 0); 218 if (hmq) { 219 WinCancelShutdown(hmq, TRUE); 220 ProcessDir(dirsize->hwndCnr, dirsize->filename, (PCNRITEM) NULL, 221 dirsize->stopflag); 220 222 DosPostEventSem(CompactSem); 221 223 WinDestroyMsgQueue(hmq); … … 223 225 WinTerminate(hab); 224 226 } 225 PostMsg(WinQueryWindow(dirsize->hwndCnr, QW_PARENT),UM_CONTAINER_FILLED,226 MPVOID,MPVOID);227 PostMsg(WinQueryWindow(dirsize->hwndCnr, QW_PARENT), UM_CONTAINER_FILLED, 228 MPVOID, MPVOID); 227 229 free(dirsize); 228 230 } 229 231 230 231 MRESULT EXPENTRY ObjCnrDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 232 MRESULT EXPENTRY ObjCnrDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 232 233 { 233 234 TEMP *data; 234 235 235 switch(msg) { 236 case WM_INITDLG: 237 if(objcnrwnd) { 238 Runtime_Error(pszSrcFile, __LINE__, "objcnrwnd set"); 239 WinSetWindowPos(objcnrwnd,HWND_TOP,0,0,0,0, 240 SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER); 241 WinDismissDlg(hwnd,0); 242 break; 243 } 244 if(!mp2) { 245 Runtime_Error(pszSrcFile, __LINE__, "mp2 NULL"); 246 WinDismissDlg(hwnd,0); 247 break; 248 } 249 objcnrwnd = hwnd; 250 data = xmallocz(sizeof(TEMP),pszSrcFile,__LINE__); 251 if(!data) { 252 WinDismissDlg(hwnd,0); 253 break; 254 } 255 data->dirname = (CHAR *)mp2; 256 WinSetWindowPtr(hwnd,0,(PVOID)data); 257 if(*data->dirname) 258 WinSetDlgItemText(hwnd,OBJCNR_DIR,data->dirname); 236 switch (msg) { 237 case WM_INITDLG: 238 if (objcnrwnd) { 239 Runtime_Error(pszSrcFile, __LINE__, "objcnrwnd set"); 240 WinSetWindowPos(objcnrwnd, HWND_TOP, 0, 0, 0, 0, 241 SWP_RESTORE | SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER); 242 WinDismissDlg(hwnd, 0); 243 break; 244 } 245 if (!mp2) { 246 Runtime_Error(pszSrcFile, __LINE__, "mp2 NULL"); 247 WinDismissDlg(hwnd, 0); 248 break; 249 } 250 objcnrwnd = hwnd; 251 data = xmallocz(sizeof(TEMP), pszSrcFile, __LINE__); 252 if (!data) { 253 WinDismissDlg(hwnd, 0); 254 break; 255 } 256 data->dirname = (CHAR *) mp2; 257 WinSetWindowPtr(hwnd, 0, (PVOID) data); 258 if (*data->dirname) 259 WinSetDlgItemText(hwnd, OBJCNR_DIR, data->dirname); 260 { 261 DIRSIZE *dirsize; 262 263 dirsize = xmalloc(sizeof(DIRSIZE), pszSrcFile, __LINE__); 264 if (!dirsize) { 265 WinDismissDlg(hwnd, 0); 266 break; 267 } 268 dirsize->stopflag = (CHAR *) & data->stopflag; 269 dirsize->filename = data->dirname; 270 dirsize->hwndCnr = WinWindowFromID(hwnd, OBJCNR_CNR); 271 if (_beginthread(FillCnrsThread, NULL, 65536 * 8, (PVOID) dirsize) == 272 -1) { 273 Runtime_Error(pszSrcFile, __LINE__, 274 GetPString(IDS_COULDNTSTARTTHREADTEXT)); 275 free(dirsize); 276 WinDismissDlg(hwnd, 0); 277 break; 278 } 279 else 280 data->working = TRUE; 281 } 282 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID); 283 break; 284 285 case UM_SETUP: 286 // WinEnableWindowUpdate(WinWindowFromID(hwnd,OBJCNR_CNR),FALSE); 287 { 288 CNRINFO cnri; 289 290 memset(&cnri, 0, sizeof(CNRINFO)); 291 cnri.cb = sizeof(CNRINFO); 292 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_QUERYCNRINFO, 293 MPFROMP(&cnri), MPFROMLONG(sizeof(CNRINFO))); 294 cnri.cyLineSpacing = 0; 295 cnri.cxTreeIndent = 12L; 296 cnri.pszCnrTitle = GetPString(IDS_WORKINGTEXT); 297 cnri.flWindowAttr = CV_TREE | CV_FLOW | 298 CA_CONTAINERTITLE | CA_TITLESEPARATOR | CA_TREELINE; 299 if (WinQueryWindowUShort(hwnd, QWS_ID) == QTREE_FRAME) 300 cnri.flWindowAttr |= CV_MINI; 301 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_SETCNRINFO, MPFROMP(&cnri), 302 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING | 303 CMA_CXTREEINDENT)); 304 } 305 return 0; 306 307 case UM_CONTAINER_FILLED: 308 WinSetDlgItemText(hwnd, OBJCNR_NOTE, NullStr); 309 // WinEnableWindowUpdate(WinWindowFromID(hwnd,OBJCNR_CNR),TRUE); 310 WinSendDlgItemMsg(hwnd, OBJCNR_CNR, CM_INVALIDATERECORD, MPVOID, 311 MPFROM2SHORT(0, CMA_ERASE | CMA_INVALIDATE)); 312 data = INSTDATA(hwnd); 313 if (data) { 314 data->working = FALSE; 315 if (data->dying) 316 WinDismissDlg(hwnd, 0); 259 317 { 260 DIRSIZE *dirsize; 261 262 dirsize = xmalloc(sizeof(DIRSIZE),pszSrcFile,__LINE__); 263 if(!dirsize) { 264 WinDismissDlg(hwnd,0); 265 break; 266 } 267 dirsize->stopflag = (CHAR *)&data->stopflag; 268 dirsize->filename = data->dirname; 269 dirsize->hwndCnr = WinWindowFromID(hwnd,OBJCNR_CNR); 270 if (_beginthread(FillCnrsThread,NULL,65536 * 8,(PVOID)dirsize) == -1) { 271 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT)); 272 free(dirsize); 273 WinDismissDlg(hwnd,0); 274 break; 275 } 276 else 277 data->working = TRUE; 278 } 279 PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID); 280 break; 281 282 case UM_SETUP: 283 // WinEnableWindowUpdate(WinWindowFromID(hwnd,OBJCNR_CNR),FALSE); 284 { 285 CNRINFO cnri; 286 287 memset(&cnri,0,sizeof(CNRINFO)); 288 cnri.cb = sizeof(CNRINFO); 289 WinSendDlgItemMsg(hwnd,OBJCNR_CNR,CM_QUERYCNRINFO, 290 MPFROMP(&cnri),MPFROMLONG(sizeof(CNRINFO))); 291 cnri.cyLineSpacing = 0; 292 cnri.cxTreeIndent = 12L; 293 cnri.pszCnrTitle = GetPString(IDS_WORKINGTEXT); 294 cnri.flWindowAttr = CV_TREE | CV_FLOW | 295 CA_CONTAINERTITLE | CA_TITLESEPARATOR | 296 CA_TREELINE; 297 if(WinQueryWindowUShort(hwnd,QWS_ID) == QTREE_FRAME) 298 cnri.flWindowAttr |= CV_MINI; 299 WinSendDlgItemMsg(hwnd,OBJCNR_CNR,CM_SETCNRINFO,MPFROMP(&cnri), 300 MPFROMLONG(CMA_FLWINDOWATTR | CMA_LINESPACING | 301 CMA_CXTREEINDENT)); 302 } 303 return 0; 304 305 case UM_CONTAINER_FILLED: 306 WinSetDlgItemText(hwnd, 307 OBJCNR_NOTE, 308 NullStr); 309 // WinEnableWindowUpdate(WinWindowFromID(hwnd,OBJCNR_CNR),TRUE); 310 WinSendDlgItemMsg(hwnd,OBJCNR_CNR,CM_INVALIDATERECORD,MPVOID, 311 MPFROM2SHORT(0,CMA_ERASE | CMA_INVALIDATE)); 318 PCNRITEM pci; 319 USHORT id; 320 321 id = WinQueryWindowUShort(hwnd, QWS_ID); 322 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 323 CM_QUERYRECORD, 324 MPVOID, 325 MPFROM2SHORT(CMA_FIRST, 326 CMA_ITEMORDER)); 327 if (pci && (INT) pci != -1) { 328 ExpandAll(WinWindowFromID(hwnd, OBJCNR_CNR), TRUE, pci); 329 if (id == QTREE_FRAME) 330 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 331 CM_QUERYRECORD, 332 MPFROMP(pci), 333 MPFROM2SHORT(CMA_FIRSTCHILD, 334 CMA_ITEMORDER)); 335 } 336 if ((!pci || (INT) pci == -1) && id == QTREE_FRAME) { 337 Notify(GetPString(IDS_NODIRSUNDERTEXT)); 338 WinDismissDlg(hwnd, 0); 339 break; 340 } 341 } 342 } 343 return 0; 344 345 case WM_CONTROL: 346 switch (SHORT1FROMMP(mp1)) { 347 case OBJCNR_CNR: 348 if (SHORT2FROMMP(mp1) == CN_ENTER) { 349 350 PCNRITEM pci = (PCNRITEM) ((PNOTIFYRECORDENTER) mp2)->pRecord; 351 352 if (pci && (INT) pci != -1) 353 WinSendDlgItemMsg(hwnd, DID_OK, BM_CLICK, MPVOID, MPVOID); 354 } 355 break; 356 } 357 return 0; 358 359 case WM_COMMAND: 360 switch (SHORT1FROMMP(mp1)) { 361 case IDM_HELP: 362 if (hwndHelp) { 363 364 USHORT id; 365 366 id = WinQueryWindowUShort(hwnd, QWS_ID); 367 368 if (id == QTREE_FRAME) 369 WinSendMsg(hwndHelp, HM_DISPLAY_HELP, 370 MPFROM2SHORT(HELP_QUICKTREE, 0), 371 MPFROMSHORT(HM_RESOURCEID)); 372 else 373 WinSendMsg(hwndHelp, HM_DISPLAY_HELP, 374 MPFROM2SHORT(HELP_OBJECTPATH, 0), 375 MPFROMSHORT(HM_RESOURCEID)); 376 } 377 break; 378 379 case OBJCNR_DESKTOP: 380 case DID_OK: 312 381 data = INSTDATA(hwnd); 313 if(data) { 314 data->working = FALSE; 315 if(data->dying) 316 WinDismissDlg(hwnd,0); 317 { 318 PCNRITEM pci; 319 USHORT id; 320 321 id = WinQueryWindowUShort(hwnd,QWS_ID); 322 pci = (PCNRITEM)WinSendDlgItemMsg(hwnd,OBJCNR_CNR, 323 CM_QUERYRECORD, 324 MPVOID, 325 MPFROM2SHORT(CMA_FIRST, 326 CMA_ITEMORDER)); 327 if(pci && (INT)pci != -1) { 328 ExpandAll(WinWindowFromID(hwnd,OBJCNR_CNR),TRUE,pci); 329 if(id == QTREE_FRAME) 330 pci = (PCNRITEM)WinSendDlgItemMsg(hwnd,OBJCNR_CNR, 331 CM_QUERYRECORD, 332 MPFROMP(pci), 333 MPFROM2SHORT(CMA_FIRSTCHILD, 334 CMA_ITEMORDER)); 335 } 336 if((!pci || (INT)pci == -1) && id == QTREE_FRAME) { 337 Notify(GetPString(IDS_NODIRSUNDERTEXT)); 338 WinDismissDlg(hwnd,0); 339 break; 340 } 341 } 342 } 343 return 0; 344 345 case WM_CONTROL: 346 switch(SHORT1FROMMP(mp1)) { 347 case OBJCNR_CNR: 348 if(SHORT2FROMMP(mp1) == CN_ENTER) { 349 350 PCNRITEM pci = (PCNRITEM)((PNOTIFYRECORDENTER)mp2)->pRecord; 351 352 if(pci && (INT)pci != -1) 353 WinSendDlgItemMsg(hwnd,DID_OK,BM_CLICK,MPVOID,MPVOID); 354 } 355 break; 356 } 357 return 0; 358 359 case WM_COMMAND: 360 switch(SHORT1FROMMP(mp1)) { 361 case IDM_HELP: 362 if(hwndHelp) { 363 364 USHORT id; 365 366 id = WinQueryWindowUShort(hwnd,QWS_ID); 367 368 if(id == QTREE_FRAME) 369 WinSendMsg(hwndHelp,HM_DISPLAY_HELP, 370 MPFROM2SHORT(HELP_QUICKTREE,0), 371 MPFROMSHORT(HM_RESOURCEID)); 372 else 373 WinSendMsg(hwndHelp,HM_DISPLAY_HELP, 374 MPFROM2SHORT(HELP_OBJECTPATH,0), 375 MPFROMSHORT(HM_RESOURCEID)); 376 } 377 break; 378 379 case OBJCNR_DESKTOP: 380 case DID_OK: 381 data = INSTDATA(hwnd); 382 if(data) { 383 384 PCNRITEM pci; 385 386 if(data->working) { 387 Runtime_Error(pszSrcFile, __LINE__, "working unexpected"); 388 break; 389 } 390 if(SHORT1FROMMP(mp1) == OBJCNR_DESKTOP) { 391 WinDismissDlg(hwnd,2); 392 break; 393 } 394 pci = (PCNRITEM)WinSendDlgItemMsg(hwnd,OBJCNR_CNR, 395 CM_QUERYRECORDEMPHASIS, 396 MPFROMLONG(CMA_FIRST), 397 MPFROMSHORT(CRA_CURSORED)); 398 if(pci && (INT)pci != -1) 399 strcpy(data->dirname,pci->szFileName); 400 WinDismissDlg(hwnd,1); 401 } 402 break; 403 404 case DID_CANCEL: 405 data = INSTDATA(hwnd); 406 if(data) { 407 if(data->working) { 408 data->dying = TRUE; 409 data->stopflag = 0xff; 410 break; 411 } 412 WinDismissDlg(hwnd,0); 413 } 414 break; 415 } 416 return 0; 417 418 case WM_DESTROY: 419 objcnrwnd = (HWND)0; 382 if (data) { 383 384 PCNRITEM pci; 385 386 if (data->working) { 387 Runtime_Error(pszSrcFile, __LINE__, "working unexpected"); 388 break; 389 } 390 if (SHORT1FROMMP(mp1) == OBJCNR_DESKTOP) { 391 WinDismissDlg(hwnd, 2); 392 break; 393 } 394 pci = (PCNRITEM) WinSendDlgItemMsg(hwnd, OBJCNR_CNR, 395 CM_QUERYRECORDEMPHASIS, 396 MPFROMLONG(CMA_FIRST), 397 MPFROMSHORT(CRA_CURSORED)); 398 if (pci && (INT) pci != -1) 399 strcpy(data->dirname, pci->szFileName); 400 WinDismissDlg(hwnd, 1); 401 } 402 break; 403 404 case DID_CANCEL: 420 405 data = INSTDATA(hwnd); 421 if(data) 422 free(data); 423 break; 424 } 425 return WinDefDlgProc(hwnd,msg,mp1,mp2); 406 if (data) { 407 if (data->working) { 408 data->dying = TRUE; 409 data->stopflag = 0xff; 410 break; 411 } 412 WinDismissDlg(hwnd, 0); 413 } 414 break; 415 } 416 return 0; 417 418 case WM_DESTROY: 419 objcnrwnd = (HWND) 0; 420 data = INSTDATA(hwnd); 421 if (data) 422 free(data); 423 break; 424 } 425 return WinDefDlgProc(hwnd, msg, mp1, mp2); 426 426 } 427
Note:
See TracChangeset
for help on using the changeset viewer.