|
|
1.1 ! root 1: // chartdlg.cpp : Defines the behaviors for the Entry and print abort ! 2: // dialogs. The Entry dialog layout is defined in ! 3: // entry.dlg; print abort is defined in chart.rc ! 4: // ! 5: // This is a part of the Microsoft Foundation Classes C++ library. ! 6: // Copyright (C) 1992 Microsoft Corporation ! 7: // All rights reserved. ! 8: // ! 9: // This source code is only intended as a supplement to the ! 10: // Microsoft Foundation Classes Reference and Microsoft ! 11: // QuickHelp documentation provided with the library. ! 12: // See these sources for detailed information regarding the ! 13: // Microsoft Foundation Classes product. ! 14: // ! 15: ! 16: #include "chart.h" ! 17: ! 18: #include <ctype.h> ! 19: ! 20: ! 21: static char szFormat[] = "%5d %s"; ! 22: static int nFormatSplit = 5; ! 23: static BOOL bChange; ! 24: ! 25: #define MAXSTRINGLEN 200 ! 26: ! 27: ///////////////////////////////////////////////////////////////////////////// ! 28: // CEntryDialog ! 29: ! 30: BEGIN_MESSAGE_MAP(CEntryDialog, CModalDialog) ! 31: ON_BN_CLICKED(BTN_ADD, OnBtnAdd) ! 32: ON_BN_CLICKED(BTN_DEL, OnBtnDel) ! 33: ON_LBN_SELCHANGE(LIST_BOX, OnListSelChange) ! 34: END_MESSAGE_MAP() ! 35: ! 36: // OnInitDialog: ! 37: // Initialize the data entry dialog. If there's already chart data, ! 38: // stuff it into the dialog. ! 39: // Note: This member function should not be put into the dialog ! 40: // class message map -- it is called automatically by the CModalDialog ! 41: // class code. This is a special case. ! 42: // ! 43: BOOL CEntryDialog::OnInitDialog() ! 44: { ! 45: // Call base class' for proper initialization. ! 46: // ! 47: if (!CModalDialog::OnInitDialog()) ! 48: { ! 49: return FALSE; ! 50: } ! 51: ! 52: bChange = FALSE; ! 53: ! 54: // Initial conditions -- add items but don't delete them ! 55: // ! 56: GetDlgItem(BTN_ADD)->SetWindowText("Add"); ! 57: GetDlgItem(BTN_DEL)->EnableWindow(FALSE); ! 58: ! 59: // If there's pre-existing data, stuff it into the dialog ! 60: // ! 61: if (m_pData != NULL) ! 62: { ! 63: ASSERT(m_pData->m_pChartData != NULL); ! 64: CObList* pData = m_pData->m_pChartData; ! 65: ! 66: // Insert the title here. ! 67: // ! 68: CEdit* pTitle = (CEdit*) GetDlgItem(EDIT_TITLE); ! 69: pTitle->SetSel(0, -1); ! 70: pTitle->ReplaceSel(m_pData->m_Title); ! 71: ! 72: int nItems = pData->GetCount(); ! 73: if (nItems > 0) ! 74: { ! 75: // Now fill in the list box control. ! 76: // ! 77: CListBox* pListBox = (CListBox*) GetDlgItem(LIST_BOX); ! 78: pListBox->ResetContent(); ! 79: ! 80: POSITION pos = pData->GetHeadPosition(); ! 81: ! 82: for (int i = 0; i < nItems; i++) ! 83: { ! 84: CChartData* ptr; ! 85: char szValue[MAXSTRINGLEN]; ! 86: ! 87: ptr = (CChartData*)pData->GetNext(pos); ! 88: sprintf(szValue, szFormat, ptr->height, ptr->szName); ! 89: ! 90: pListBox->AddString(szValue); ! 91: } ! 92: } ! 93: } ! 94: ! 95: return TRUE; ! 96: } ! 97: ! 98: // DoModal: ! 99: // While we're running this dialog, the member variable m_pData should ! 100: // point to the user's data. ! 101: // ! 102: void CEntryDialog::DoModal(CChartObject* pData) ! 103: { ! 104: m_pData = pData; ! 105: CModalDialog::DoModal(); ! 106: m_pData = NULL; ! 107: } ! 108: ! 109: // OnListSelChange: ! 110: // The selection has changed; update edit fields with the new selection's ! 111: // height and label. ! 112: // ! 113: void CEntryDialog::OnListSelChange() ! 114: { ! 115: int nLength; ! 116: char szLabel[MAXSTRINGLEN]; ! 117: ! 118: CListBox* pListBox = (CListBox*) GetDlgItem(LIST_BOX); ! 119: ! 120: m_nIndex = pListBox->GetCurSel(); ! 121: ! 122: if (m_nIndex == LB_ERR) ! 123: { ! 124: m_nIndex = -1; ! 125: return; ! 126: } ! 127: ! 128: nLength = pListBox->GetText(m_nIndex, szLabel); ! 129: szLabel[nLength] = '\0'; ! 130: ! 131: szLabel[nFormatSplit] = '\0'; ! 132: GetDlgItem(EDIT_VALUE)->SetWindowText(szLabel); ! 133: GetDlgItem(EDIT_LABEL)->SetWindowText(&szLabel[nFormatSplit+1]); ! 134: ! 135: bChange = TRUE; ! 136: GetDlgItem(BTN_ADD)->SetWindowText("Change"); ! 137: GetDlgItem(BTN_DEL)->EnableWindow(); ! 138: } ! 139: ! 140: // OnBtnAdd: ! 141: // Transfer a new (height, label) from the edit fields to the listbox. ! 142: // Validate height before transfer ! 143: // ! 144: void CEntryDialog::OnBtnAdd() ! 145: { ! 146: int nLabLength, nLength; ! 147: char szValue[MAXSTRINGLEN]; ! 148: char szLabel[MAXSTRINGLEN]; ! 149: char szTitle[MAXSTRINGLEN]; ! 150: ! 151: // valid #'s are ints >= 0 ! 152: ! 153: BOOL bValid = FALSE; ! 154: ! 155: int iValue = GetDlgItemInt(EDIT_VALUE, &bValid, TRUE); ! 156: ! 157: if (bValid && (iValue >= 0)) ! 158: { ! 159: SetDlgItemInt(EDIT_VALUE, iValue, FALSE); ! 160: } ! 161: else ! 162: { ! 163: MessageBox("An invalid value has been entered.", "Chart", ! 164: MB_ICONEXCLAMATION | MB_OK); ! 165: return; ! 166: } ! 167: ! 168: CWnd* pItem; ! 169: pItem = GetDlgItem(EDIT_LABEL); ! 170: ! 171: nLabLength = pItem->GetWindowTextLength(); ! 172: ! 173: if (nLabLength >= MAXSTRINGLEN) ! 174: { ! 175: nLabLength = MAXSTRINGLEN-1; ! 176: } ! 177: ! 178: pItem->GetWindowText(szLabel, nLabLength+1); ! 179: ! 180: szLabel[nLabLength] = '\0'; ! 181: ! 182: pItem = GetDlgItem(EDIT_TITLE); ! 183: nLength = pItem->GetWindowTextLength(); ! 184: ! 185: if (nLength >= MAXSTRINGLEN) ! 186: { ! 187: nLength = MAXSTRINGLEN-1; ! 188: } ! 189: ! 190: pItem->GetWindowText(szTitle, nLength+1); ! 191: ! 192: szTitle[nLength] = '\0'; ! 193: ! 194: m_pData->m_Title = szTitle; ! 195: sprintf(szValue, szFormat, iValue, szLabel); ! 196: ! 197: CListBox* pListBox = (CListBox*) GetDlgItem(LIST_BOX); ! 198: ! 199: if (!bChange) ! 200: { ! 201: pListBox->AddString(szValue); ! 202: } ! 203: else ! 204: { ! 205: pListBox->DeleteString(m_nIndex); ! 206: pListBox->InsertString(m_nIndex, szValue); ! 207: ! 208: bChange = FALSE; ! 209: GetDlgItem(BTN_ADD)->SetWindowText("Add"); ! 210: GetDlgItem(BTN_DEL)->EnableWindow(FALSE); ! 211: ! 212: // Now no item is selected ! 213: m_nIndex = -1; ! 214: pListBox->SetCurSel(m_nIndex); ! 215: } ! 216: ! 217: m_pData->m_bDirty = TRUE; ! 218: ! 219: ClearEditBoxes(); ! 220: } ! 221: ! 222: // OnBtnDel: ! 223: // Delete the currently selected entry ! 224: // ! 225: void CEntryDialog::OnBtnDel() ! 226: { ! 227: if (bChange) ! 228: { ! 229: CListBox* pListBox = (CListBox*) GetDlgItem(LIST_BOX); ! 230: pListBox->DeleteString(m_nIndex); ! 231: ! 232: // Now no item is selected ! 233: m_nIndex = -1; ! 234: pListBox->SetCurSel(m_nIndex); ! 235: ! 236: bChange = FALSE; ! 237: GetDlgItem(BTN_ADD)->SetWindowText("Add"); ! 238: GetDlgItem(BTN_DEL)->EnableWindow(FALSE); ! 239: } ! 240: ! 241: m_pData->m_bDirty = TRUE; ! 242: ! 243: ClearEditBoxes(); ! 244: } ! 245: ! 246: // OnOK: ! 247: // Transfer array data from the dialog to the app chart object ! 248: // ! 249: void CEntryDialog::OnOK() ! 250: { ! 251: if (!SetupArrayStructure()) ! 252: return; ! 253: ! 254: CModalDialog::OnOK(); ! 255: } ! 256: ! 257: // SetupArrayStructure: ! 258: // ! 259: BOOL CEntryDialog::SetupArrayStructure() ! 260: { ! 261: short nCount, nLength, i; ! 262: char szBuffer[MAXSTRINGLEN]; ! 263: CWnd* pItem; ! 264: ! 265: m_pData->RemoveAll(); ! 266: ! 267: pItem = GetDlgItem(EDIT_TITLE); ! 268: nLength = pItem->GetWindowTextLength(); ! 269: ! 270: if (nLength >= MAXSTRINGLEN) ! 271: { ! 272: nLength = MAXSTRINGLEN-1; ! 273: } ! 274: ! 275: pItem->GetWindowText(szBuffer, nLength+1); ! 276: szBuffer[nLength] = '\0'; ! 277: ! 278: if (m_pData->m_Title != szBuffer) ! 279: { ! 280: m_pData->m_Title = szBuffer; ! 281: m_pData->m_bDirty = TRUE; ! 282: } ! 283: ! 284: ! 285: CListBox* pListBox = (CListBox*) GetDlgItem(LIST_BOX); ! 286: nCount = pListBox->GetCount(); ! 287: ! 288: if (nCount == 0) ! 289: { ! 290: MessageBox("Warning: no values in chart.","Chart"); ! 291: } ! 292: else ! 293: { ! 294: for (i = 0; i < nCount; i++) ! 295: { ! 296: CChartData* ptr; ! 297: ! 298: ptr = new CChartData; ! 299: pListBox->GetText(i, szBuffer); ! 300: ! 301: szBuffer[nFormatSplit] = '\0'; ! 302: ! 303: ptr->height = atoi(szBuffer); ! 304: strcpy(ptr->szName, &szBuffer[nFormatSplit+1]); ! 305: ! 306: m_pData->m_pChartData->AddTail(ptr); ! 307: } ! 308: } ! 309: ! 310: return TRUE; ! 311: } ! 312: ! 313: // ClearEditBoxes: ! 314: // ! 315: void CEntryDialog::ClearEditBoxes() ! 316: { ! 317: CEdit* pEditValue = (CEdit*) GetDlgItem(EDIT_VALUE); ! 318: ! 319: // Select entire field contents ! 320: pEditValue->SetSel(0, -1); ! 321: pEditValue->Clear(); ! 322: ! 323: CEdit* pEditLabel = (CEdit*) GetDlgItem(EDIT_LABEL); ! 324: pEditLabel->SetSel(0, -1); ! 325: pEditLabel->Clear(); ! 326: ! 327: pEditValue->SetFocus(); ! 328: } ! 329: ! 330: //////////////////////////////////////////////////////////////// ! 331: // CPrintDlgBox ! 332: // Modeless print abort dialog box ! 333: // ! 334: ! 335: BEGIN_MESSAGE_MAP(CPrintDlgBox, CDialog) ! 336: ON_COMMAND(IDCANCEL, OnCancel) ! 337: END_MESSAGE_MAP() ! 338: ! 339: CPrintDlgBox::CPrintDlgBox() ! 340: { ! 341: // Dialog defined in chart.rc ! 342: // ! 343: Create("PrintDlgBox"); ! 344: } ! 345: ! 346: // OnInitDialog: ! 347: // Disable this dialog box's system menu 'Close' item so user can't ! 348: // dismiss this dialog ! 349: // ! 350: BOOL CPrintDlgBox::OnInitDialog() ! 351: { ! 352: GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE, MF_GRAYED); ! 353: return TRUE; ! 354: } ! 355: ! 356: // OnCancel: ! 357: // User hit the cancel button; re-enable the main frame window ! 358: // (disabled elsewhere) ! 359: // ! 360: void CPrintDlgBox::OnCancel() ! 361: { ! 362: extern BOOL bUserAbort; ! 363: ! 364: bUserAbort = TRUE; ! 365: GetParent()->EnableWindow(TRUE); ! 366: EndDialog(0); ! 367: } ! 368:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.