// // GetTitle.C // // Copyright (C) Microsoft, 1994,1995 All Rights Reserved. // // History: // ral 5/23/94 - First pass // 3/20/95 [stevecat] - NT port & real clean up, unicode, etc. // // #include "priv.h" #include "appwiz.h" // // Enables the appropriate buttons depending upon the state of the // description edit control and what type of shortcut we're trying to // make. // void EnableNextFinish(LPWIZDATA lpwd) { DWORD dwEnable = PSWIZB_BACK; if (GetWindowTextLength(GetDlgItem(lpwd->hwnd, IDC_TITLE)) > 0) { // // If this is a "known" application then enalble finish, else next. // dwEnable |= (lpwd->dwFlags & (WDFLAG_APPKNOWN | WDFLAG_COPYLINK)) ? PSWIZB_FINISH : PSWIZB_NEXT; } PropSheet_SetWizButtons(GetParent(lpwd->hwnd), dwEnable); } // // Called from PSN_SETACTIVE. Assumes lpwd->hwnd already initialized. // void GetTitleSetActive(LPWIZDATA lpwd) { // // Most of the code to process this was moved into the Next button // processing of the previous page as there were some failure cases // that we could not get a title that we should detect before we // allow the user to change to this page... HOWEVER, there are some // cases where we can't determine the name until we get to this page. // If we don't have a name for the sortcut, try to figure one out here. // if (lpwd->szProgDesc[0] == 0) { DetermineDefaultTitle(lpwd); } SetDlgItemText(lpwd->hwnd, IDC_TITLE, lpwd->szProgDesc); EnableNextFinish(lpwd); PostMessage(lpwd->hwnd, WMPRIV_POKEFOCUS, 0, 0); } // // Check to see if link name is a duplicate. If it is then ask the user // if they want to replace the old link. If they say "no" then this function // returns FALSE. // BOOL GetTitleNextPushed(LPWIZDATA lpwd) { TCHAR szLinkName[MAX_PATH]; GetDlgItemText(lpwd->hwnd, IDC_TITLE, lpwd->szProgDesc, ARRAYSIZE(lpwd->szProgDesc)); if (lpwd->szProgDesc[0] == 0) { return(FALSE); } if( ( PathCleanupSpec( lpwd->lpszFolder, lpwd->szProgDesc ) != 0 ) || !GetLinkName( szLinkName, lpwd ) ) { ShellMessageBox(g_hinst, lpwd->hwnd, MAKEINTRESOURCE(IDS_MODNAME), 0, MB_OK | MB_ICONEXCLAMATION); return(FALSE); } if (PathFileExists(szLinkName)) { // // Obscure boundary case. If we're creating a new link and the user // happens to want to name it exactly it's current name then we'll let // them do it without a warning. // if (lpwd->lpszOriginalName && lstrcmpi(lpwd->lpszOriginalName, szLinkName) == 0) { TraceMsg(TF_ERROR, "%s", "Unbelieveable! User selected exactly the same name"); return(TRUE); } return(IDYES == ShellMessageBox(g_hinst, lpwd->hwnd, MAKEINTRESOURCE(IDS_DUPLINK), 0, MB_YESNO | MB_DEFBUTTON1 | MB_ICONHAND, lpwd->szProgDesc)); } return(TRUE); } // // Dialog procedure for title dialog // BOOL_PTR CALLBACK GetTitleDlgProc(HWND hDlg, UINT message , WPARAM wParam, LPARAM lParam) { NMHDR FAR *lpnm = NULL; LPPROPSHEETPAGE lpPropSheet = (LPPROPSHEETPAGE)(GetWindowLongPtr(hDlg, DWLP_USER)); LPWIZDATA lpwd = NULL; if (lpPropSheet) { lpwd = (LPWIZDATA)lpPropSheet->lParam; } switch(message) { case WM_NOTIFY: lpnm = (NMHDR FAR *)lParam; if(lpnm) { switch(lpnm->code) { case PSN_SETACTIVE: if(lpwd) { lpwd->hwnd = hDlg; GetTitleSetActive(lpwd); } break; case PSN_WIZNEXT: if(lpwd) { if (!GetTitleNextPushed(lpwd)) { GetTitleSetActive(lpwd); SetDlgMsgResult(hDlg, WM_NOTIFY, -1); } } break; case PSN_WIZFINISH: if(lpwd) { int iResult = -1; if (GetTitleNextPushed(lpwd)) { if (lpwd->dwFlags & WDFLAG_SINGLEAPP) { PIFWIZERR err = ConfigRealModeOptions(lpwd, NULL, CRMOACTION_DEFAULT); if (err == PIFWIZERR_SUCCESS || err == PIFWIZERR_UNSUPPORTEDOPT) { iResult = 0; } } else { if (CreateLink(lpwd)) { iResult = 0; } } } if (iResult != 0) { GetTitleSetActive(lpwd); } SetDlgMsgResult(hDlg, WM_NOTIFY, iResult); } break; case PSN_RESET: if(lpwd) { CleanUpWizData(lpwd); } break; default: return FALSE; } } break; case WM_INITDIALOG: lpwd = InitWizSheet(hDlg, lParam, 0); if(lpwd) { Edit_LimitText(GetDlgItem(hDlg, IDC_TITLE), ARRAYSIZE(lpwd->szProgDesc)-1); } break; case WMPRIV_POKEFOCUS: { HWND hTitle = GetDlgItem(hDlg, IDC_TITLE); SetFocus(hTitle); Edit_SetSel(hTitle, 0, -1); break; } case WM_DESTROY: case WM_HELP: case WM_CONTEXTMENU: break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDHELP: break; case IDC_TITLE: switch (GET_WM_COMMAND_CMD(wParam, lParam)) { case EN_CHANGE: if(lpwd) { EnableNextFinish(lpwd); } break; } break; } // end of switch on WM_COMMAND break; default: return FALSE; } // end of switch on message return TRUE; } // GetTitleDlgProc