static LRESULT CALLBACK rs_dsn_connect_sheet()

in src/odbc/rsodbc/rsodbc_setup/setup.c [1956:2114]


static LRESULT CALLBACK rs_dsn_connect_sheet(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	rs_dsn_setup_ptr_t rs_dsn_setup_ctxt;
	LPPROPSHEETPAGE sheet = (LPPROPSHEETPAGE)lParam;
	char dsn_name[MAXDSNAME];
	HWND okbtn;
	UINT dsnlen;
	LPPSHNOTIFY psnotify = (LPPSHNOTIFY)lParam;
	LRESULT lr;
	int i;
	int curAuthType;

	switch (message)
	{
		case WM_INITDIALOG:
			rs_dsn_setup_ctxt = (rs_dsn_setup_ptr_t) sheet->lParam;
			rs_dsn_log(__LINE__, "rs_connect_tab(INIT) ctxt %p", rs_dsn_setup_ctxt);
			process_ds_name = FALSE;
			// need to disable WS_COMMAND while we do this, cuz we get an undefined ctxt ptr
			SetDlgItemText(hwndDlg, IDC_DSNAME, rs_dsn_get_attr(rs_dsn_setup_ctxt, "DSN"));
			SetDlgItemText(hwndDlg, IDC_DESC, rs_dsn_get_attr(rs_dsn_setup_ctxt, "Description"));
			SetDlgItemText(hwndDlg, IDC_SERVER, rs_dsn_get_attr(rs_dsn_setup_ctxt, "HostName"));
			SetDlgItemText(hwndDlg, IDC_USER, rs_dsn_get_attr(rs_dsn_setup_ctxt, "LogonID"));
			SetDlgItemText(hwndDlg, IDC_PWD, rs_dsn_get_attr(rs_dsn_setup_ctxt, "Password"));
			SetDlgItemText(hwndDlg, IDC_DATABASE, rs_dsn_get_attr(rs_dsn_setup_ctxt, "Database"));
			SetDlgItemText(hwndDlg, IDC_PORT_EDIT, rs_dsn_get_attr(rs_dsn_setup_ctxt, "PortNumber"));
			SetDlgItemText(hwndDlg, IDC_AUTH_PROFILE, rs_dsn_get_attr(rs_dsn_setup_ctxt, RS_IAM_AUTH_PROFILE));
			if (rs_dsn_setup_ctxt->is_default_dsn)
			{
			/* disable DSN name/description if its for a DriverConnect/BrowseConnect */
				EnableWindow(GetDlgItem(hwndDlg, IDC_DSNAME), FALSE);
				EnableWindow(GetDlgItem(hwndDlg, IDC_DSNAMETEXT), FALSE);
			}
			else
				SendDlgItemMessage(hwndDlg, IDC_DSNAME, EM_LIMITTEXT, (WPARAM) (MAXDSNAME - 1), 0L);
			SendDlgItemMessage(hwndDlg, IDC_DESC, EM_LIMITTEXT, (WPARAM) (MAXVALLEN - 1), 0L);

			for(i =0;;i++)
			{ 
				if (szAuthTypes[i][0] == '\0')
					break;
				lr = ComboBox_AddString(GetDlgItem(hwndDlg, IDC_COMBO_AUTH_TYPE), szAuthTypes[i]);
			}

			curAuthType = get_auth_type_for_control(rs_dsn_setup_ctxt);
			ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_COMBO_AUTH_TYPE), curAuthType);
			set_dlg_items_based_on_auth_type(curAuthType, hwndDlg, rs_dsn_setup_ctxt);

			rs_hide_show_authtype_controls(hwndDlg, szAuthTypes[curAuthType]);


			okbtn = GetDlgItem(hTabMainControl, IDOK);
			dsnlen = GetDlgItemText(hwndDlg, IDC_DSNAME, dsn_name, sizeof(dsn_name));
			EnableWindow(okbtn, dsnlen);
			process_ds_name = TRUE;
			SetWindowLongPtr(hwndDlg, DWLP_USER, sheet->lParam);

			// Set version
//			SetDlgItemText(hwndDlg, IDC_VERSION_STATIC, "v"REDSHIFT_DRIVER_VERSION"(64 bit)");

			rs_dsn_setup_ctxt->connect_inited = TRUE;
	        break;

		case WM_NOTIFY:
			switch (psnotify->hdr.code) {
				case PSN_KILLACTIVE:
					rs_dsn_log(__LINE__, "rs_connect_tab(PSN_KILLACTIVE)");
					SetWindowLong(hwndDlg, DWLP_MSGRESULT, FALSE);
					break;

				case PSN_RESET:
					rs_dsn_log(__LINE__, "rs_connect_tab(PSN_RESET)");
					break;

				case PSN_APPLY:
					rs_dsn_setup_ctxt = (rs_dsn_setup_ptr_t) GetWindowLongPtr(hwndDlg, DWLP_USER);
					rs_dsn_log(__LINE__, "rs_connect_tab(PSN_APPLY)");
					if (!rs_dsn_setup_ctxt->is_default_dsn) {
/*
 *	need to SQLValidDSN on it before accepting it
 */
						GetDlgItemText(hwndDlg, IDC_DSNAME, dsn_name, sizeof(dsn_name));
						if (!SQLValidDSN(dsn_name)) {
//							debugMsg(dsn_name, 0);
							rs_dsn_log(__LINE__, "process_buttons: bad dsn name is %s", dsn_name);
							MessageBox(hwndDlg, "Invalid DSN name", NULL, MB_ICONEXCLAMATION | MB_OK);
							SetWindowLong(hwndDlg, DWLP_MSGRESULT, PSNRET_INVALID);
							return TRUE;
						}
						strncpy(rs_dsn_setup_ctxt->dsn_name, dsn_name,sizeof(rs_dsn_setup_ctxt->dsn_name));
						rs_dsn_read_connect_tab(hwndDlg, rs_dsn_setup_ctxt);
						SetWindowLong(hwndDlg, DWLP_MSGRESULT, PSNRET_NOERROR);
					}
					break;

				case PSN_HELP:
					rs_dsn_log(__LINE__, "rs_connect_tab(PSN_HELP)");
					rs_dsn_setup_ctxt = (rs_dsn_setup_ptr_t) GetWindowLongPtr(hwndDlg, DWLP_USER);
					rs_dsn_test_connect(hwndDlg, rs_dsn_setup_ctxt);
					break;

				case PSN_QUERYCANCEL:
					rs_dsn_log(__LINE__, "rs_connect_tab(PSN_QUERYCANCEL)");
					break;
			}
			break;

		case WM_COMMAND:
			switch (LOWORD(wParam)) {
/*
 * Only enable OK button after data source name defined
 */
				case IDC_DSNAME:
					rs_dsn_setup_ctxt = (rs_dsn_setup_ptr_t) GetWindowLongPtr(hwndDlg, DWLP_USER);
					rs_dsn_log(__LINE__, "rs_connect_tab(COMMAND: DSNAME) hwnddlg %d ctxt %p",
							hwndDlg, rs_dsn_setup_ctxt);

					if (!process_ds_name || (EN_CHANGE != GET_WM_COMMAND_CMD(wParam, lParam)))
						return FALSE;

/* Enable/disable the OK button */
					okbtn = GetDlgItem(hTabMainControl, IDOK);
					dsnlen = GetDlgItemText(hwndDlg, IDC_DSNAME, dsn_name, sizeof(dsn_name));
					EnableWindow(okbtn, dsnlen);
					return FALSE;

				case IDC_COMBO_AUTH_TYPE:
				{
					switch (HIWORD(wParam))
					{
						case LBN_SELCHANGE:
						{
							HWND lb = GetDlgItem(hwndDlg, LOWORD(wParam));
							int n = ComboBox_GetCurSel(lb);
//							char szBuf[256];
							char *auth_type = szAuthTypes[n];

							rs_hide_show_authtype_controls(hwndDlg, auth_type);


//							snprintf(szBuf, 256, "%d", n);
//							MessageBox(NULL, auth_type, szBuf, MB_ICONEXCLAMATION | MB_OK);

							break;
						}
					}
					break;
				}

	            case IDC_CONN_HELP:
	            	if (helpfile_url[0])
	            		rs_open_help_doc("connect");
					break;
			}

			break;
	}
	return FALSE;
}