From eec0abbbc83011a12d353bfab42e60bc81573865 Mon Sep 17 00:00:00 2001 From: Hiroshi Inoue Date: Wed, 1 Oct 2014 13:01:54 +0900 Subject: [PATCH] Add a new dialog page to the setup program and allow the setting of PREFERLIBPQ and XAOPT option. --- dlg_specific.h | 4 ++ dlg_wingui.c | 167 +++++++++++++++++++++++++++++++++++++++++++++++++ psqlodbc.rc | 114 +++++++++++++++++++++++++++++++-- resource.h | 11 +++- 4 files changed, 290 insertions(+), 6 deletions(-) diff --git a/dlg_specific.h b/dlg_specific.h index 50ad846..06d0239 100644 --- a/dlg_specific.h +++ b/dlg_specific.h @@ -283,6 +283,10 @@ LRESULT CALLBACK ds_options2Proc(HWND hdlg, UINT wMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK ds_options3Proc(HWND hdlg, + UINT wMsg, + WPARAM wParam, + LPARAM lParam); LRESULT CALLBACK manage_dsnProc(HWND hdlg, UINT wMsg, WPARAM wParam, diff --git a/dlg_wingui.c b/dlg_wingui.c index b2acc2a..8ae1d4e 100644 --- a/dlg_wingui.c +++ b/dlg_wingui.c @@ -27,6 +27,9 @@ #include "multibyte.h" #include "pgapifunc.h" +#ifdef _HANDLE_ENLIST_IN_DTC_ +#include "connexp.h" +#endif /* _HANDLE_ENLIST_IN_DTC_ */ extern GLOBAL_VALUES globals; @@ -36,6 +39,9 @@ static int driver_options_update(HWND hdlg, ConnInfo *ci, const char *); static int ds_options_update(HWND hdlg, ConnInfo *ci); +static int ds_options3Draw(HWND, const ConnInfo *); +static int ds_options3_update(HWND hdlg, ConnInfo *ci); + static struct { int ids; const char * const modestr; @@ -754,6 +760,167 @@ ds_options2Proc(HWND hdlg, MAKEINTRESOURCE(DLG_OPTIONS_DRV), hdlg, ds_options1Proc, (LPARAM) ci); break; + case IDNEXTPAGE: + ds_options_update(hdlg, ci); + EndDialog(hdlg, cmd == IDOK); + DialogBoxParam(s_hModule, + MAKEINTRESOURCE(DLG_OPTIONS_DS3), + hdlg, ds_options3Proc, (LPARAM) ci); + break; + } + } + + return FALSE; +} + +static int +ds_options3Draw(HWND hdlg, const ConnInfo *ci) +{ + BOOL enable = TRUE; + static BOOL defset = FALSE; + + /* The use of LIBPQ library */ +#ifdef USE_LIBPQ + if (ci->prefer_libpq < 0) + CheckDlgButton(hdlg, DS_DEFAULT_LIBPQ_USE, 1); + else if (0 == ci->prefer_libpq) + CheckDlgButton(hdlg, DS_NO_LIBPQ_USE, 1); + else + CheckDlgButton(hdlg, DS_LIBPQ_USE, 1); +#else + enable = FALSE; + EnableWindow(GetDlgItem(hdlg, DS_DEFAULT_LIBPQ_USE), enable); + EnableWindow(GetDlgItem(hdlg, DS_LIBPQ_USE), enable); + EnableWindow(GetDlgItem(hdlg, DS_NO_LIBPQ_USE), enable); +#endif /* USE_LIBPQ */ + +#ifdef _HANDLE_ENLIST_IN_DTC_ + switch (ci->xa_opt) + { + case 0: + enable = FALSE; + break; + case DTC_CHECK_LINK_ONLY: + CheckDlgButton(hdlg, DS_DTC_LINK_ONLY, 1); + break; + case DTC_CHECK_BEFORE_LINK: + CheckDlgButton(hdlg, DS_DTC_SIMPLE_PRECHECK, 1); + break; + case DTC_CHECK_RM_CONNECTION: + CheckDlgButton(hdlg, DS_DTC_CONFIRM_RM_CONNECTION, 1); + break; + } +#else + enable = FALSE; +#endif /* _HANDLE_ENLIST_IN_DTC_ */ + if (!enable) + { + EnableWindow(GetDlgItem(hdlg, DS_DTC_LINK_ONLY), enable); + EnableWindow(GetDlgItem(hdlg, DS_DTC_SIMPLE_PRECHECK), enable); + EnableWindow(GetDlgItem(hdlg, DS_DTC_CONFIRM_RM_CONNECTION), enable); + } + + return 0; +} + +static int +ds_options3_update(HWND hdlg, ConnInfo *ci) +{ + mylog("%s: got ci = %p\n", __FUNCTION__, ci); + +#ifdef USE_LIBPQ + /* Libpq use */ + if (IsDlgButtonChecked(hdlg, DS_DEFAULT_LIBPQ_USE)) + ci->prefer_libpq = -1; + else if (IsDlgButtonChecked(hdlg, DS_NO_LIBPQ_USE)) + ci->prefer_libpq = 0; + else + ci->prefer_libpq = 1; +#endif /* USE_LIBPQ */ + +#ifdef _HANDLE_ENLIST_IN_DTC_ + if (IsDlgButtonChecked(hdlg, DS_DTC_LINK_ONLY)) + ci->xa_opt = DTC_CHECK_LINK_ONLY; + else if (IsDlgButtonChecked(hdlg, DS_DTC_SIMPLE_PRECHECK)) + ci->xa_opt = DTC_CHECK_BEFORE_LINK; + else if (IsDlgButtonChecked(hdlg, DS_DTC_CONFIRM_RM_CONNECTION)) + ci->xa_opt = DTC_CHECK_RM_CONNECTION; + else + ci->xa_opt = 0; +#endif /* _HANDLE_ENLIST_IN_DTC_ */ + + return 0; +} + +LRESULT CALLBACK +ds_options3Proc(HWND hdlg, + UINT wMsg, + WPARAM wParam, + LPARAM lParam) +{ + ConnInfo *ci; + char buf[128]; + DWORD cmd; + + switch (wMsg) + { + case WM_INITDIALOG: + ci = (ConnInfo *) lParam; + SetWindowLongPtr(hdlg, DWLP_USER, lParam); /* save for OK */ + + /* Change window caption */ + if (ci && ci->dsn && ci->dsn[0]) + { + char fbuf[64]; + + cmd = LoadString(s_hModule, + IDS_ADVANCE_OPTION_DSN3, + fbuf, + sizeof(fbuf)); + if (cmd <= 0) + strcpy(fbuf, "Advanced Options (%s) 3/3"); + sprintf(buf, fbuf, ci->dsn); + SetWindowText(hdlg, buf); + } + else + { + LoadString(s_hModule, IDS_ADVANCE_OPTION_CON3, buf, sizeof(buf)); + SetWindowText(hdlg, buf); + ShowWindow(GetDlgItem(hdlg, IDAPPLY), SW_HIDE); } + + ds_options3Draw(hdlg, ci); + break; + + case WM_COMMAND: + ci = (ConnInfo *) GetWindowLongPtr(hdlg, DWLP_USER); + switch (cmd = GET_WM_COMMAND_ID(wParam, lParam)) + { + case DS_SHOWOIDCOLUMN: + mylog("WM_COMMAND: DS_SHOWOIDCOLUMN\n"); + EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN)); + return TRUE; + case DS_DISABLE_KEEPALIVE: + mylog("WM_COMMAND: DS_SHOWOIDCOLUMN\n"); + EnableWindow(GetDlgItem(hdlg, DS_KEEPALIVETIME), !IsDlgButtonChecked(hdlg, cmd)); + EnableWindow(GetDlgItem(hdlg, DS_KEEPALIVEINTERVAL), !IsDlgButtonChecked(hdlg, cmd)); + return TRUE; + + case IDOK: + ds_options3_update(hdlg, ci); + case IDCANCEL: + EndDialog(hdlg, IDOK == cmd); + return TRUE; + case IDAPPLY: + ds_options3_update(hdlg, ci); + SendMessage(GetWindow(hdlg, GW_OWNER), WM_COMMAND, wParam, lParam); + break; + case IDPREVPAGE: + ds_options3_update(hdlg, ci); + EndDialog(hdlg, cmd == IDOK); + DialogBoxParam(s_hModule, + MAKEINTRESOURCE(DLG_OPTIONS_DS), + hdlg, ds_options2Proc, (LPARAM) ci); + break; } } diff --git a/psqlodbc.rc b/psqlodbc.rc index ba0948d..92ca9e2 100644 --- a/psqlodbc.rc +++ b/psqlodbc.rc @@ -222,6 +222,50 @@ BEGIN BS_AUTOCHECKBOX | WS_TABSTOP,139,85,110,10 END +#define LIBPQ_USE_X 10 +#define LIBPQ_USE_Y 40 +#define DTC_GRP_X 10 +#define DTC_GRP_Y 60 +#define DTC_GRP_WIDTH 200 +#define DTC_GRP_HEIGHT 100 +#define DTC_OPT_X (DTC_GRP_X) +#define DTC_OPT_Y (DTC_GRP_Y+10) +#define DTC_OPT_WIDTH 180 +#define DTC_OPT_HEIGHT 45 +#define DTC_LOG_X (DTC_GRP_X) +#define DTC_LOG_Y (DTC_OPT_Y+60) + +DLG_OPTIONS_DS3 DIALOG DISCARDABLE 0, 0, 306, 243 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | + WS_SYSMENU +CAPTION "‚“x‚Ȑݒè (ƒf[ƒ^ƒ\[ƒX‚R)" +FONT 9, "‚l‚r ƒSƒVƒbƒN" +BEGIN + PUSHBUTTON "Ý’è3",IDNEXTPAGE,49,5,40,15 + PUSHBUTTON "Ý’è2",IDPREVPAGE,5,5,40,15 + + GROUPBOX "LIBPQƒ‰ƒCƒuƒ‰ƒŠŽg—p",IDC_STATIC,LIBPQ_USE_X,LIBPQ_USE_Y-10,150,25 + CONTROL "–³Žw’è",DS_DEFAULT_LIBPQ_USE,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,15,LIBPQ_USE_Y,40,10 + CONTROL "—˜—p‚·‚é",DS_LIBPQ_USE,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,55,LIBPQ_USE_Y,50,10 + CONTROL "—˜—p‚µ‚È‚¢",DS_NO_LIBPQ_USE,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,105,LIBPQ_USE_Y,50,10 + + GROUPBOX "•ªŽUƒgƒ‰ƒ“ƒUƒNƒVƒ‡ƒ“ŠÖ˜AÝ’è",IDC_STATIC,DTC_GRP_X,DTC_GRP_Y,DTC_GRP_WIDTH,DTC_GRP_HEIGHT + GROUPBOX "MSDTCƒŠƒJƒoƒŠ[•s‰ÂÚ‘±‚ð‹–‰Â?",IDC_STATIC,DTC_OPT_X,DTC_OPT_Y,DTC_OPT_WIDTH,DTC_OPT_HEIGHT + CONTROL "‚·‚é",DS_DTC_LINK_ONLY,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,DTC_OPT_X+5,DTC_OPT_Y+10,140,10 + CONTROL "sslmode verify-[ca|full]‚ð‹‘â",DS_DTC_SIMPLE_PRECHECK,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,DTC_OPT_X+5,DTC_OPT_Y+20,140,10 + CONTROL "‚µ‚È‚¢(Å‰‚ÉMSDTC‚©‚ç‚̐ڑ±«‚ðŠm”F)",DS_DTC_CONFIRM_RM_CONNECTION,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,DTC_OPT_X+5,DTC_OPT_Y+30,170,10 + + DEFPUSHBUTTON "OK",IDOK,5,224,50,14,WS_GROUP + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹",IDCANCEL,66,224,50,14 + PUSHBUTTON "“K—p",IDAPPLY,128,224,50,14 +END + DLG_OPTIONS_GLOBAL DIALOG DISCARDABLE 0, 0, 306, 115 STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | @@ -412,6 +456,8 @@ BEGIN IDS_ADVANCE_OPTION_CON1 "‚“x‚ȐݒèiƒRƒlƒNƒVƒ‡ƒ“Ý’è‚Pj" IDS_ADVANCE_OPTION_DSN2 "‚“x‚Ȑݒè (%s Ý’è2)" IDS_ADVANCE_OPTION_CON2 "‚“x‚Ȑݒè (ƒRƒlƒNƒVƒ‡ƒ“Ý’è2)" + IDS_ADVANCE_OPTION_DSN3 "‚“x‚Ȑݒè (%s Ý’è3)" + IDS_ADVANCE_OPTION_CON3 "‚“x‚Ȑݒè (ƒRƒlƒNƒVƒ‡ƒ“Ý’è3)" IDS_ADVANCE_CONNECTION "ƒRƒlƒNƒVƒ‡ƒ“" END @@ -637,6 +683,62 @@ BEGIN BS_AUTORADIOBUTTON | WS_TABSTOP,247,138,47,9 END +#undef LIBPQ_USE_X +#undef LIBPQ_USE_Y +#undef DTC_GRP_X +#undef DTC_GRP_Y +#undef DTC_GRP_WIDTH +#undef DTC_GRP_HEIGHT +#undef DTC_OPT_X +#undef DTC_OPT_Y +#undef DTC_OPT_WIDTH +#undef DTC_OPT_HEIGHT +#undef DTC_LOG_X +#undef DTC_LOG_Y +#define LIBPQ_USE_X 10 +#define LIBPQ_USE_Y 40 +#define DTC_GRP_X 10 +#define DTC_GRP_Y 60 +#define DTC_GRP_WIDTH 200 +#define DTC_GRP_HEIGHT 100 +#define DTC_OPT_X (DTC_GRP_X) +#define DTC_OPT_Y (DTC_GRP_Y+10) +#define DTC_OPT_WIDTH 180 +#define DTC_OPT_HEIGHT 45 +#define DTC_LOG_X (DTC_GRP_X) +#define DTC_LOG_Y (DTC_OPT_Y+60) + +DLG_OPTIONS_DS3 DIALOG DISCARDABLE 0, 0, 306, 243 +STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | + WS_SYSMENU +CAPTION "Adavanced Options(Datasource 3)" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Page 3",IDNEXTPAGE,49,5,40,15 + PUSHBUTTON "Page 2",IDPREVPAGE,5,5,40,15 + + GROUPBOX "The use of LIBPQ library",IDC_STATIC,LIBPQ_USE_X,LIBPQ_USE_Y-12,150,25 + CONTROL "unspecified",DS_DEFAULT_LIBPQ_USE,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,LIBPQ_USE_X+5,LIBPQ_USE_Y,50,10 + CONTROL "yes",DS_LIBPQ_USE,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,LIBPQ_USE_X+55,LIBPQ_USE_Y,30,10 + CONTROL "no",DS_NO_LIBPQ_USE,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,LIBPQ_USE_X+85,LIBPQ_USE_Y,50,10 + + GROUPBOX "Distributed Transaction related settings",IDC_STATIC,DTC_GRP_X,DTC_GRP_Y,DTC_GRP_WIDTH,DTC_GRP_HEIGHT + GROUPBOX "Allow connections unrecoverable by MSDTC?",IDC_STATIC,DTC_OPT_X,DTC_OPT_Y,DTC_OPT_WIDTH,DTC_OPT_HEIGHT + CONTROL "yes",DS_DTC_LINK_ONLY,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,DTC_OPT_X+5,DTC_OPT_Y+10,40,10 + CONTROL "rejects sslmode verify-[ca|full]",DS_DTC_SIMPLE_PRECHECK,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,DTC_OPT_X+5,DTC_OPT_Y+20,120,10 + CONTROL "no (confirm the connectivity from MSDTC first)",DS_DTC_CONFIRM_RM_CONNECTION,"Button", + BS_AUTORADIOBUTTON | WS_TABSTOP,DTC_OPT_X+5,DTC_OPT_Y+30,170,10 + + DEFPUSHBUTTON "OK",IDOK,5,224,50,14,WS_GROUP + PUSHBUTTON "Cancel",IDCANCEL,66,224,50,14 + PUSHBUTTON "Apply",IDAPPLY,128,224,50,14 +END + DLG_OPTIONS_GLOBAL DIALOG DISCARDABLE 0, 0, 306, 110 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU @@ -793,10 +895,12 @@ BEGIN IDS_MSGTITLE "Invalid DSN" IDS_ADVANCE_OPTION_DEF "Advanced Options (Default)" IDS_ADVANCE_SAVE "Save" - IDS_ADVANCE_OPTION_DSN1 "Advanced Options (%s) 1/2" - IDS_ADVANCE_OPTION_CON1 "Advanced Options (Connection 2/2)" - IDS_ADVANCE_OPTION_DSN2 "Advanced Options (%s) 2/2" - IDS_ADVANCE_OPTION_CON2 "Advanced Options (Connection 2/2)" + IDS_ADVANCE_OPTION_DSN1 "Advanced Options (%s) 1/3" + IDS_ADVANCE_OPTION_CON1 "Advanced Options (Connection 1/3)" + IDS_ADVANCE_OPTION_DSN2 "Advanced Options (%s) 2/3" + IDS_ADVANCE_OPTION_DSN3 "Advanced Options (%s) 3/3" + IDS_ADVANCE_OPTION_CON2 "Advanced Options (Connection 2/3)" + IDS_ADVANCE_OPTION_CON3 "Advanced Options (Connection 3/3)" IDS_ADVANCE_CONNECTION "Connection" END @@ -824,4 +928,4 @@ END ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED - +P diff --git a/resource.h b/resource.h index 0a0c248..93fddf1 100644 --- a/resource.h +++ b/resource.h @@ -13,6 +13,8 @@ #define IDS_ADVANCE_OPTION_DSN2 7 #define IDS_ADVANCE_OPTION_CON2 8 #define IDS_ADVANCE_CONNECTION 9 +#define IDS_ADVANCE_OPTION_DSN3 10 +#define IDS_ADVANCE_OPTION_CON3 11 #define DLG_OPTIONS_DRV 102 #define DLG_OPTIONS_DS 103 #define DLG_OPTIONS_GLOBAL 104 @@ -105,6 +107,13 @@ #define DS_DEFAULT_DTCLOG 1091 #define DS_DTCLOG 1092 #define DS_NO_DTCLOG 1093 +#define DS_DEFAULT_LIBPQ_USE 1094 +#define DS_LIBPQ_USE 1095 +#define DS_NO_LIBPQ_USE 1096 +#define DS_DTC_NO_USE 1097 +#define DS_DTC_LINK_ONLY 1098 +#define DS_DTC_SIMPLE_PRECHECK 1099 +#define DS_DTC_CONFIRM_RM_CONNECTION 1100 // Next default values for new objects // @@ -112,7 +121,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1094 +#define _APS_NEXT_CONTROL_VALUE 1101 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif -- 2.39.5