|
|
1.1 ! root 1: ! 2: /******************************************************************************\ ! 3: * This is a part of the Microsoft Source Code Samples. ! 4: * Copyright (C) 1993 Microsoft Corporation. ! 5: * All rights reserved. ! 6: * This source code is only intended as a supplement to ! 7: * Microsoft Development Tools and/or WinHelp documentation. ! 8: * See these sources for detailed information regarding the ! 9: * Microsoft samples programs. ! 10: \******************************************************************************/ ! 11: ! 12: /****************************** Module Header ******************************* ! 13: * Module Name: viewinc.c ! 14: * ! 15: * Manages the Symbols dialog box (view include file). ! 16: * ! 17: * Functions: ! 18: * ViewInclude() ! 19: * ViewIncludeDlgProc() ! 20: * ViewIncInit() ! 21: * FillIncludeLB() ! 22: * AddItemToIncLB() ! 23: * SelectDefItem() ! 24: * FillEditsFromLB() ! 25: * SetIncButtonEnable() ! 26: * ViewIncAdd() ! 27: * ViewIncDelete() ! 28: * ViewIncChange() ! 29: * CopyLabels() ! 30: * ViewIncCancel() ! 31: * ! 32: * Comments: ! 33: * ! 34: ****************************************************************************/ ! 35: ! 36: #include "dlgedit.h" ! 37: #include "dlgfuncs.h" ! 38: #include "dlgextrn.h" ! 39: #include "dialogs.h" ! 40: #include "dlghelp.h" ! 41: ! 42: #include <string.h> ! 43: ! 44: ! 45: /* ! 46: * Tabstop in the list box. ! 47: */ ! 48: #define DEFSYMBOLTABSTOP 146 ! 49: ! 50: static NPLABEL plNewInclude = NULL; /* Pointer to new include data. */ ! 51: static NPLABEL plNewDelInclude = NULL; /* Pointer to new deleted incs. */ ! 52: static BOOL fNewIncChanged; /* TRUE if new incs are changed.*/ ! 53: ! 54: STATICFN BOOL ViewIncInit(HWND hwnd); ! 55: STATICFN VOID FillIncludeLB(HWND hwnd, BOOL fUnusedOnly, ! 56: BOOL fSelectAnchor); ! 57: STATICFN INT AddItemToIncLB(NPLABEL npLabel, HWND hwndLB); ! 58: STATICFN VOID SelectDefItem(HWND hwnd, INT lastItem); ! 59: STATICFN VOID FillEditsFromLB(HWND hwnd); ! 60: STATICFN VOID SetIncButtonEnable(HWND hwnd); ! 61: STATICFN BOOL ViewIncAdd(HWND hwnd); ! 62: STATICFN BOOL ViewIncDelete(HWND hwnd); ! 63: STATICFN BOOL ViewIncChange(HWND hwnd); ! 64: STATICFN BOOL CopyLabels(NPLABEL plSrc, NPLABEL *pplDest); ! 65: STATICFN VOID ViewIncCancel(HWND hwnd); ! 66: ! 67: ! 68: ! 69: /************************************************************************ ! 70: * ViewInclude ! 71: * ! 72: * This function sets up for the View include dialog box, and invokes ! 73: * it. ! 74: * ! 75: ************************************************************************/ ! 76: ! 77: VOID ViewInclude(VOID) ! 78: { ! 79: if (CopyLabels(plInclude, &plNewInclude) && ! 80: CopyLabels(plDelInclude, &plNewDelInclude)) { ! 81: fNewIncChanged = FALSE; ! 82: if (DlgBox(DID_SYMBOLS, (WNDPROC)ViewIncludeDlgProc) == IDOK) ! 83: /* ! 84: * Update the status window in case the currently selected ! 85: * controls id was one of the labels changed. ! 86: */ ! 87: StatusUpdate(); ! 88: } ! 89: } ! 90: ! 91: ! 92: ! 93: /************************************************************************ ! 94: * ViewIncludeDlgProc ! 95: * ! 96: * This is the View Include dialog procedure. ! 97: * ! 98: * Comments: ! 99: * May change the list of LABELs in plNewInclude, including their ! 100: * strings and including more or less memory. ! 101: * May put up a message box. ! 102: * ! 103: ************************************************************************/ ! 104: ! 105: DIALOGPROC ViewIncludeDlgProc( ! 106: HWND hwnd, ! 107: UINT msg, ! 108: WPARAM wParam, ! 109: LPARAM lParam) ! 110: { ! 111: switch (msg) { ! 112: case WM_INITDIALOG: ! 113: return ViewIncInit(hwnd); ! 114: ! 115: case WM_COMMAND: ! 116: switch (LOWORD(wParam)) { ! 117: case DID_SYMBOLSADD: ! 118: ViewIncAdd(hwnd); ! 119: break; ! 120: ! 121: case DID_SYMBOLSDELETE: ! 122: ViewIncDelete(hwnd); ! 123: break; ! 124: ! 125: case DID_SYMBOLSCHANGE: ! 126: ViewIncChange(hwnd); ! 127: break; ! 128: ! 129: case DID_SYMBOLSLIST: ! 130: /* ! 131: * Make edit controls reflect the listbox selection. ! 132: */ ! 133: if (HIWORD(wParam) == LBN_SELCHANGE) ! 134: FillEditsFromLB(hwnd); ! 135: ! 136: break; ! 137: ! 138: case DID_SYMBOLSUNUSED: ! 139: if (HIWORD(wParam) == BN_CLICKED) { ! 140: if (IsDlgButtonChecked(hwnd, DID_SYMBOLSUNUSED)) ! 141: FillIncludeLB(hwnd, TRUE, FALSE); ! 142: else ! 143: FillIncludeLB(hwnd, FALSE, FALSE); ! 144: } ! 145: ! 146: break; ! 147: ! 148: case IDOK: ! 149: FreeLabels(&plInclude); ! 150: FreeLabels(&plDelInclude); ! 151: plInclude = plNewInclude; ! 152: plDelInclude = plNewDelInclude; ! 153: ! 154: if (fNewIncChanged) { ! 155: gfIncChged = TRUE; ! 156: ShowFileStatus(FALSE); ! 157: ! 158: /* ! 159: * Update the status windows symbol and name ! 160: * combo boxes. ! 161: */ ! 162: StatusFillSymbolList(plInclude); ! 163: } ! 164: ! 165: EndDialog(hwnd, IDOK); ! 166: break; ! 167: ! 168: case IDCANCEL: ! 169: ViewIncCancel(hwnd); ! 170: break; ! 171: ! 172: case IDHELP: ! 173: WinHelp(ghwndMain, gszHelpFile, HELP_CONTEXT, ! 174: HELPID_SYMBOLS); ! 175: break; ! 176: } ! 177: ! 178: return TRUE; ! 179: ! 180: default: ! 181: return FALSE; ! 182: } ! 183: } ! 184: ! 185: ! 186: ! 187: /************************************************************************ ! 188: * ViewIncInit ! 189: * ! 190: * Processes the WM_INITDIALOG message for the View Include dialog procedure. ! 191: * ! 192: * Argements: ! 193: * HWND hwnd - handle to the dialog ! 194: * ! 195: * Returns: ! 196: * FALSE ! 197: * ! 198: ************************************************************************/ ! 199: ! 200: STATICFN BOOL ViewIncInit( ! 201: HWND hwnd) ! 202: { ! 203: INT nTabStops = DEFSYMBOLTABSTOP; ! 204: ! 205: SendDlgItemMessage(hwnd, DID_SYMBOLSEDITID, EM_LIMITTEXT, CCHIDMAX, 0L); ! 206: ! 207: SendDlgItemMessage(hwnd, DID_SYMBOLSLIST, LB_SETTABSTOPS, 1, ! 208: (DWORD)&nTabStops); ! 209: ! 210: FillIncludeLB(hwnd, FALSE, TRUE); ! 211: ! 212: /* ! 213: * Disable some controls if Translating. ! 214: */ ! 215: if (gfTranslateMode) { ! 216: EnableWindow(GetDlgItem(hwnd, DID_SYMBOLSEDITSYM), FALSE); ! 217: EnableWindow(GetDlgItem(hwnd, DID_SYMBOLSEDITID), FALSE); ! 218: EnableWindow(GetDlgItem(hwnd, DID_SYMBOLSADD), FALSE); ! 219: } ! 220: ! 221: CenterWindow(hwnd); ! 222: ! 223: /* ! 224: * Yes, we changed the focus... ! 225: */ ! 226: return FALSE; ! 227: } ! 228: ! 229: ! 230: ! 231: /************************************************************************ ! 232: * FillIncludeLB ! 233: * ! 234: * Fills the include listbox with the include items. ! 235: * ! 236: * Arguments: ! 237: * HWND hwnd - handle to the include dialog. ! 238: * BOOL fUnusedOnly - unused items? ! 239: * BOOL fSelectAnchor - anchor control? ! 240: * ! 241: ************************************************************************/ ! 242: ! 243: STATICFN VOID FillIncludeLB( ! 244: HWND hwnd, ! 245: BOOL fUnusedOnly, ! 246: BOOL fSelectAnchor) ! 247: { ! 248: NPLABEL npLabel; ! 249: HWND hwndLB; ! 250: INT iSelect; ! 251: INT cIncs = 0; ! 252: ! 253: hwndLB = GetDlgItem(hwnd, DID_SYMBOLSLIST); ! 254: ! 255: SendMessage(hwndLB, WM_SETREDRAW, FALSE, 0L); ! 256: ! 257: /* ! 258: * Delete any existing items from the listbox. ! 259: */ ! 260: SendMessage(hwndLB, LB_RESETCONTENT, 0, 0L); ! 261: ! 262: /* ! 263: * Fill the list box with the items. ! 264: */ ! 265: for (npLabel = plNewInclude; npLabel; npLabel = npLabel->npNext) { ! 266: if (!fUnusedOnly || !FindIDInRes(npLabel->id)) { ! 267: AddItemToIncLB(npLabel, hwndLB); ! 268: cIncs++; ! 269: } ! 270: } ! 271: ! 272: /* ! 273: * Are there any items in the listbox? ! 274: */ ! 275: if (cIncs) { ! 276: /* ! 277: * If there is a currently selected control, search for the ! 278: * symbol that corresponds to it. This will be the default ! 279: * selected control. If there is not a currently selected ! 280: * control, select the first symbol in the listbox. ! 281: * ! 282: * Only select the anchor control if fSelectAnchor is TRUE, ! 283: * however. Also, if the dialog is selected, it does not ! 284: * have an id so we skip this case as well. ! 285: */ ! 286: iSelect = 0; ! 287: if (fSelectAnchor && gnpcSel && !gfDlgSelected) { ! 288: if (npLabel = FindID(gnpcSel->id, plNewInclude)) { ! 289: /* ! 290: * Search the list box for the symbol. ! 291: */ ! 292: iSelect = (INT)SendMessage(hwndLB, LB_FINDSTRING, ! 293: (WPARAM)-1, (DWORD)npLabel->pszLabel); ! 294: ! 295: if (iSelect == LB_ERR) ! 296: iSelect = 0; ! 297: } ! 298: } ! 299: ! 300: SendMessage(hwndLB, LB_SETCURSEL, iSelect, 0L); ! 301: ! 302: /* ! 303: * Set the focus to the listbox initially (so arrow keys work). ! 304: */ ! 305: SetFocus(hwndLB); ! 306: } ! 307: else { ! 308: SetFocus(GetDlgItem(hwnd, DID_SYMBOLSEDITSYM)); ! 309: } ! 310: ! 311: SendMessage(hwndLB, WM_SETREDRAW, TRUE, 0L); ! 312: InvalidateRect(hwndLB, NULL, FALSE); ! 313: ! 314: FillEditsFromLB(hwnd); ! 315: SetIncButtonEnable(hwnd); ! 316: } ! 317: ! 318: ! 319: ! 320: /**************************************************************************** ! 321: * AddItemToIncLB ! 322: * ! 323: * Adds a symbol and id to the View Include listbox and associates it's ! 324: * label pointer with the added item. ! 325: * ! 326: * Arguments: ! 327: * NPLABEL npLabel - list of label pointers. ! 328: * HWND hwnd LB - handle to the listbox ! 329: * ! 330: * Returns: ! 331: * ! 332: * List box id of the newly added item. ! 333: * ! 334: ****************************************************************************/ ! 335: ! 336: STATICFN INT AddItemToIncLB( ! 337: NPLABEL npLabel, ! 338: HWND hwndLB) ! 339: { ! 340: INT idTemp; ! 341: TCHAR szBuf[CCHTEXTMAX]; ! 342: LPTSTR psz; ! 343: ! 344: /* ! 345: * Start building the string to add. Take the label and tack on ! 346: * a tab character. ! 347: */ ! 348: lstrcpy(szBuf, npLabel->pszLabel); ! 349: psz = szBuf + lstrlen(szBuf); ! 350: *psz++ = CHAR_TAB; ! 351: ! 352: /* ! 353: * Now add the id to the end, using the current hex mode. ! 354: */ ! 355: Myitoa(npLabel->id, psz); ! 356: idTemp = (INT)SendMessage(hwndLB, LB_ADDSTRING, 0, (DWORD)szBuf); ! 357: SendMessage(hwndLB, LB_SETITEMDATA, idTemp, (DWORD)npLabel); ! 358: ! 359: return idTemp; ! 360: } ! 361: ! 362: ! 363: ! 364: /**************************************************************************** ! 365: * SelectDefItem ! 366: * ! 367: * Select an item in the listbox near lastItem. ! 368: * ! 369: * Arguments: ! 370: * HWND hwnd - handle to the dialog ! 371: * INT lastItem - lastitem to select. ! 372: * ! 373: ****************************************************************************/ ! 374: ! 375: STATICFN VOID SelectDefItem( ! 376: HWND hwnd, ! 377: INT lastItem) ! 378: { ! 379: INT cItems; ! 380: HWND hwndLB; ! 381: ! 382: hwndLB = GetDlgItem(hwnd, DID_SYMBOLSLIST); ! 383: ! 384: if ((cItems = (INT)SendMessage(hwndLB, LB_GETCOUNT, 0, 0L)) ! 385: != LB_ERR && cItems > 0) ! 386: SendMessage(hwndLB, LB_SETCURSEL, lastItem >= cItems ? ! 387: (cItems - 1) : lastItem, 0L); ! 388: ! 389: FillEditsFromLB(hwnd); ! 390: } ! 391: ! 392: ! 393: ! 394: /**************************************************************************** ! 395: * FillEditsFromLB ! 396: * ! 397: * Fill the edit controls from the selected item in the listbox. ! 398: * ! 399: * Arguments: ! 400: * HWND hwnd - handle to the dialog. ! 401: * ! 402: ****************************************************************************/ ! 403: ! 404: STATICFN VOID FillEditsFromLB( ! 405: HWND hwnd) ! 406: { ! 407: TCHAR szID[CCHIDMAX + 1]; ! 408: INT iItem; ! 409: NPLABEL npLabel; ! 410: HWND hwndLB; ! 411: HWND hwndID; ! 412: HWND hwndSym; ! 413: ! 414: hwndLB = GetDlgItem(hwnd, DID_SYMBOLSLIST); ! 415: hwndSym = GetDlgItem(hwnd, DID_SYMBOLSEDITSYM); ! 416: hwndID = GetDlgItem(hwnd, DID_SYMBOLSEDITID); ! 417: ! 418: /* ! 419: * Is there a selected item? ! 420: */ ! 421: if ((iItem = (INT)SendMessage(hwndLB, LB_GETCURSEL, 0, 0L)) ! 422: != LB_ERR) { ! 423: npLabel = (NPLABEL)SendMessage(hwndLB, LB_GETITEMDATA, ! 424: iItem, 0L); ! 425: SetWindowText(hwndSym, npLabel->pszLabel); ! 426: ! 427: Myitoa(npLabel->id, szID); ! 428: SetWindowText(hwndID, szID); ! 429: } ! 430: else { ! 431: /* ! 432: * No, clear the fields. ! 433: */ ! 434: SetWindowText(hwndSym, szEmpty); ! 435: SetWindowText(hwndID, szEmpty); ! 436: } ! 437: } ! 438: ! 439: ! 440: ! 441: /**************************************************************************** ! 442: * SetIncButtonEnable ! 443: * ! 444: * Enable/disable the Symbols change and delete buttons. ! 445: * ! 446: * Arguments: ! 447: * HWND hwnd - handle to the dialog. ! 448: * ! 449: ****************************************************************************/ ! 450: ! 451: STATICFN VOID SetIncButtonEnable( ! 452: HWND hwnd) ! 453: { ! 454: BOOL fEnable = TRUE; ! 455: ! 456: /* ! 457: * If the list box doesn't have items, or we are in translate mode, ! 458: * disable the Delete and Change buttons. ! 459: */ ! 460: if (gfTranslateMode || SendDlgItemMessage(hwnd, DID_SYMBOLSLIST, ! 461: LB_GETCOUNT, 0, 0L) == 0) ! 462: fEnable = FALSE; ! 463: ! 464: EnableWindow(GetDlgItem(hwnd, DID_SYMBOLSDELETE), fEnable); ! 465: EnableWindow(GetDlgItem(hwnd, DID_SYMBOLSCHANGE), fEnable); ! 466: } ! 467: ! 468: ! 469: ! 470: /************************************************************************ ! 471: * ViewIncAdd ! 472: * ! 473: * Processes the "Add" command for the View Include dialog procedure. ! 474: * ! 475: * Arguments: ! 476: * HWND hwnd - handle to the dialog. ! 477: * ! 478: ************************************************************************/ ! 479: ! 480: STATICFN BOOL ViewIncAdd( ! 481: HWND hwnd) ! 482: { ! 483: TCHAR szSym[CCHTEXTMAX]; ! 484: TCHAR szID[CCHIDMAX + 1]; ! 485: HWND hwndLB; ! 486: INT idNew; ! 487: NPLABEL npLabel; ! 488: ! 489: /* ! 490: * Get current symbol & ID. ! 491: */ ! 492: GetDlgItemText(hwnd, DID_SYMBOLSEDITID, szID, CCHIDMAX + 1); ! 493: GetDlgItemText(hwnd, DID_SYMBOLSEDITSYM, szSym, CCHTEXTMAX); ! 494: ! 495: /* ! 496: * If they didn't specify a new id as well as a new symbol, ! 497: * pick a default number. ! 498: */ ! 499: if (*szID == CHAR_NULL) ! 500: Myitoa(NextID(NEXTID_LABEL, plNewInclude, 0), szID); ! 501: ! 502: /* ! 503: * Validate them. ! 504: */ ! 505: if (!IsSymbol(szSym) || !IsValue(szID)) { ! 506: Message(MSG_BADSYMBOLID); ! 507: return FALSE; ! 508: } ! 509: ! 510: idNew = valtoi(szID); ! 511: ! 512: if (!(npLabel = AddLabel(szSym, idNew, FPOS_MAX, 0, ! 513: &plNewInclude, &plNewDelInclude, NULL, NULL))) ! 514: return FALSE; ! 515: ! 516: fNewIncChanged = TRUE; ! 517: ! 518: /* ! 519: * Add the new symbol to the listbox, but not if they only want to ! 520: * show unused id's and this id is in use. ! 521: */ ! 522: if (!IsDlgButtonChecked(hwnd, DID_SYMBOLSUNUSED) || ! 523: !FindIDInRes(idNew)) { ! 524: hwndLB = GetDlgItem(hwnd, DID_SYMBOLSLIST); ! 525: SendMessage(hwndLB, LB_SETCURSEL, ! 526: AddItemToIncLB(npLabel, hwndLB), 0L); ! 527: } ! 528: ! 529: SetIncButtonEnable(hwnd); ! 530: FillEditsFromLB(hwnd); ! 531: ! 532: return TRUE; ! 533: } ! 534: ! 535: ! 536: ! 537: /************************************************************************ ! 538: * ViewIncDelete ! 539: * ! 540: * Processes the "Delete" command for the View Include dialog procedure. ! 541: * ! 542: * Arguments: ! 543: * HWND hwnd - handle to the dialog. ! 544: * ! 545: ************************************************************************/ ! 546: ! 547: STATICFN BOOL ViewIncDelete( ! 548: HWND hwnd) ! 549: { ! 550: TCHAR szSym[CCHTEXTMAX]; ! 551: HWND hwndLB; ! 552: INT iItem; ! 553: ! 554: /* ! 555: * Get current symbol and listbox hwnd. ! 556: */ ! 557: GetDlgItemText(hwnd, DID_SYMBOLSEDITSYM, szSym, CCHTEXTMAX); ! 558: hwndLB = GetDlgItem(hwnd, DID_SYMBOLSLIST); ! 559: ! 560: /* ! 561: * Search the list box for the symbol. This will probably be ! 562: * the same as the selection, but if they type in a symbol ! 563: * then it will not be. ! 564: */ ! 565: iItem = (INT)SendMessage(hwndLB, LB_FINDSTRING, (WPARAM)-1, (DWORD)szSym); ! 566: ! 567: /* ! 568: * Fail if the symbol was not found. ! 569: */ ! 570: if (iItem == LB_ERR) { ! 571: Message(MSG_SYMNOTFOUND); ! 572: return FALSE; ! 573: } ! 574: ! 575: DeleteLabel(szSym, &plNewInclude, &plNewDelInclude); ! 576: fNewIncChanged = TRUE; ! 577: ! 578: SendMessage(hwndLB, LB_DELETESTRING, iItem, 0L); ! 579: SelectDefItem(hwnd, iItem); ! 580: SetIncButtonEnable(hwnd); ! 581: ! 582: return TRUE; ! 583: } ! 584: ! 585: ! 586: ! 587: /************************************************************************ ! 588: * ViewIncChange ! 589: * ! 590: * Processes the "Change" command for the View Include dialog procedure. ! 591: * ! 592: * Arguments: ! 593: * HWND hwnd - handle to the dialog. ! 594: * ! 595: ************************************************************************/ ! 596: ! 597: STATICFN BOOL ViewIncChange( ! 598: HWND hwnd) ! 599: { ! 600: TCHAR szSym[CCHTEXTMAX]; ! 601: TCHAR szID[CCHIDMAX + 1]; ! 602: HWND hwndLB; ! 603: NPLABEL npLabel; ! 604: NPLABEL npLabelNew; ! 605: INT idNew; ! 606: INT iItem; ! 607: ! 608: /* ! 609: * Get current symbol & ID. ! 610: */ ! 611: GetDlgItemText(hwnd, DID_SYMBOLSEDITID, szID, CCHIDMAX + 1); ! 612: GetDlgItemText(hwnd, DID_SYMBOLSEDITSYM, szSym, CCHTEXTMAX); ! 613: ! 614: /* ! 615: * Validate them. ! 616: */ ! 617: if (!IsSymbol(szSym) || !IsValue(szID)) { ! 618: Message(MSG_BADSYMBOLID); ! 619: return FALSE; ! 620: } ! 621: ! 622: hwndLB = GetDlgItem(hwnd, DID_SYMBOLSLIST); ! 623: ! 624: /* ! 625: * Make sure a selection is made. ! 626: */ ! 627: if ((iItem = (INT)SendMessage(hwndLB, LB_GETCURSEL, 0, 0L)) ! 628: == LB_ERR) { ! 629: Message(MSG_SELECTFIRST); ! 630: return FALSE; ! 631: } ! 632: ! 633: /* ! 634: * Get the item handle. ! 635: */ ! 636: npLabel = (NPLABEL)SendMessage(hwndLB, LB_GETITEMDATA, iItem, 0L); ! 637: ! 638: /* ! 639: * Check if the symbol is changing. ! 640: */ ! 641: idNew = valtoi(szID); ! 642: if (lstrcmp(npLabel->pszLabel, szSym) != 0) { ! 643: if (!(npLabelNew = AddLabel(szSym, idNew, FPOS_MAX, 0, ! 644: &plNewInclude, &plNewDelInclude, npLabel, NULL))) ! 645: return FALSE; ! 646: ! 647: DeleteLabel(npLabel->pszLabel, &plNewInclude, &plNewDelInclude); ! 648: npLabel = npLabelNew; ! 649: } ! 650: /* ! 651: * The symbol didn't change. Did the id change? ! 652: */ ! 653: else if (idNew != npLabel->id) { ! 654: /* ! 655: * First check for a duplicate id. ! 656: */ ! 657: if (FindID(idNew, plNewInclude)) { ! 658: Message(MSG_LABELDUPID); ! 659: return FALSE; ! 660: } ! 661: ! 662: npLabel->id = idNew; ! 663: } ! 664: else { ! 665: /* ! 666: * Nothing changed. ! 667: */ ! 668: Message(MSG_SYMNOCHANGE); ! 669: return FALSE; ! 670: } ! 671: ! 672: fNewIncChanged = TRUE; ! 673: SendMessage(hwndLB, WM_SETREDRAW, FALSE, 0L); ! 674: SendMessage(hwndLB, LB_DELETESTRING, iItem, 0L); ! 675: ! 676: /* ! 677: * Add the changed symbol to the listbox, but not if they only want to ! 678: * show unused id's and this id is in use. ! 679: */ ! 680: if (!IsDlgButtonChecked(hwnd, DID_SYMBOLSUNUSED) || !FindIDInRes(idNew)) ! 681: SendMessage(hwndLB, LB_SETCURSEL, ! 682: AddItemToIncLB(npLabel, hwndLB), 0L); ! 683: ! 684: SendMessage(hwndLB, WM_SETREDRAW, TRUE, 0L); ! 685: InvalidateRect(hwndLB, NULL, FALSE); ! 686: FillEditsFromLB(hwnd); ! 687: SetIncButtonEnable(hwnd); ! 688: ! 689: return TRUE; ! 690: } ! 691: ! 692: ! 693: ! 694: /**************************************************************************** ! 695: * CopyLabels ! 696: * ! 697: * This function creates a copy of the LABEL structure list in plSrc, ! 698: * including copying all strings. This is put in local memory and ! 699: * the head pointer is returned in *pplDest. ! 700: * ! 701: * Arguments: ! 702: * NPLABEL plSrc - label list source. ! 703: * NPLABEL pplDest - label list destination. ! 704: * ! 705: * Returns: ! 706: * ! 707: * TRUE if all went well, FALSE if there was a problem. ! 708: * ! 709: * Comments: ! 710: * ! 711: * Locally allocates a copy of plSrc and its strings. ! 712: * ! 713: * Caution: If pplDest points to a valid list it must be freed before ! 714: * calling this function. ! 715: * ! 716: ****************************************************************************/ ! 717: ! 718: STATICFN BOOL CopyLabels( ! 719: NPLABEL plSrc, ! 720: NPLABEL *pplDest) ! 721: { ! 722: NPLABEL plNew; ! 723: NPLABEL plPrev; ! 724: ! 725: plPrev = NULL; ! 726: *pplDest = NULL; ! 727: while (plSrc) { ! 728: if (!(plNew = (NPLABEL)MyAlloc(sizeof(LABEL)))) { ! 729: FreeLabels(pplDest); ! 730: return FALSE; ! 731: } ! 732: ! 733: /* ! 734: * Are we on the first one? ! 735: */ ! 736: if (*pplDest == NULL) ! 737: *pplDest = plNew; ! 738: else ! 739: plPrev->npNext = plNew; ! 740: ! 741: /* ! 742: * Start by copying the whole label structure. ! 743: */ ! 744: memcpy((PBYTE)plNew, (PBYTE)plSrc, sizeof(LABEL)); ! 745: ! 746: /* ! 747: * Make a private copy of the pszLabel string. ! 748: */ ! 749: if (!(plNew->pszLabel = ! 750: MyAlloc((lstrlen(plSrc->pszLabel) + 1) * sizeof(TCHAR)))) { ! 751: MyFree(plNew); ! 752: FreeLabels(pplDest); ! 753: return FALSE; ! 754: } ! 755: ! 756: lstrcpy(plNew->pszLabel, plSrc->pszLabel); ! 757: ! 758: plNew->npNext = NULL; /* In case this is the last one.*/ ! 759: plPrev = plNew; /* Save so we can update npNext.*/ ! 760: plSrc = plSrc->npNext; /* Get next one to copy. */ ! 761: } ! 762: ! 763: return TRUE; ! 764: } ! 765: ! 766: ! 767: ! 768: /************************************************************************ ! 769: * ViewIncCancel ! 770: * ! 771: * Called when cancelling the Symbols dialog box. ! 772: * ! 773: * Argements: ! 774: * HWND hwnd - handle to the dialog ! 775: * ! 776: ************************************************************************/ ! 777: ! 778: STATICFN VOID ViewIncCancel( ! 779: HWND hwnd) ! 780: { ! 781: /* ! 782: * If they changed anything, confirm that they ! 783: * want to throw away the changes. ! 784: */ ! 785: if (fNewIncChanged && ! 786: Message(MSG_CONFIRMDISCARD) != IDYES) ! 787: return; ! 788: ! 789: /* ! 790: * Free up the temporary label lists and get out. ! 791: */ ! 792: FreeLabels(&plNewInclude); ! 793: FreeLabels(&plNewDelInclude); ! 794: ! 795: /* ! 796: * Flag the dialog to be dismissed. ! 797: */ ! 798: EndDialog(hwnd, IDCANCEL); ! 799: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.