Add a new dialog page to the setup program and allow the setting
authorHiroshi Inoue <inoue@tpf.co.jp>
Wed, 1 Oct 2014 04:01:54 +0000 (13:01 +0900)
committerHiroshi Inoue <inoue@tpf.co.jp>
Tue, 7 Oct 2014 13:33:47 +0000 (22:33 +0900)
of PREFERLIBPQ and XAOPT option.

dlg_specific.h
dlg_wingui.c
psqlodbc.rc
resource.h

index 50ad8468e1707c07b9875af44a0d8853c1b673ec..06d02391f27305f850556e856f7d8edcff766b33 100644 (file)
@@ -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,
index b2acc2aa1ba9af9359d97e356bfd6b4a0e834b00..8ae1d4e0c117d3d9d3cbe1dc26dc5f2f7c4ce40d 100644 (file)
@@ -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;
            }
    }
 
index ba0948dfb56048e70bb217d160714447ddac759b..92ca9e2eb553176d5f1cff8566e70e3daddc116d 100644 (file)
@@ -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 "\8d\82\93x\82È\90Ý\92è (\83f\81[\83^\83\\81[\83X\82R)"
+FONT 9, "\82l\82\83S\83V\83b\83N"
+BEGIN
+    PUSHBUTTON      "\90Ý\92è3",IDNEXTPAGE,49,5,40,15
+    PUSHBUTTON      "\90Ý\92è2",IDPREVPAGE,5,5,40,15
+
+    GROUPBOX        "LIBPQ\83\89\83C\83u\83\89\83\8a\8eg\97p",IDC_STATIC,LIBPQ_USE_X,LIBPQ_USE_Y-10,150,25
+    CONTROL         "\96³\8ew\92è",DS_DEFAULT_LIBPQ_USE,"Button",BS_AUTORADIOBUTTON | 
+                    WS_GROUP,15,LIBPQ_USE_Y,40,10
+    CONTROL         "\97\98\97p\82·\82é",DS_LIBPQ_USE,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,55,LIBPQ_USE_Y,50,10
+    CONTROL         "\97\98\97p\82µ\82È\82¢",DS_NO_LIBPQ_USE,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,105,LIBPQ_USE_Y,50,10
+
+    GROUPBOX        "\95ª\8eU\83g\83\89\83\93\83U\83N\83V\83\87\83\93\8aÖ\98A\90Ý\92è",IDC_STATIC,DTC_GRP_X,DTC_GRP_Y,DTC_GRP_WIDTH,DTC_GRP_HEIGHT
+    GROUPBOX        "MSDTC\83\8a\83J\83o\83\8a\81[\95s\89Â\90Ú\91±\82ð\8b\96\89Â?",IDC_STATIC,DTC_OPT_X,DTC_OPT_Y,DTC_OPT_WIDTH,DTC_OPT_HEIGHT
+    CONTROL         "\82·\82é",DS_DTC_LINK_ONLY,"Button",BS_AUTORADIOBUTTON | 
+                    WS_GROUP,DTC_OPT_X+5,DTC_OPT_Y+10,140,10
+    CONTROL         "sslmode verify-[ca|full]\82ð\8b\91\90â",DS_DTC_SIMPLE_PRECHECK,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,DTC_OPT_X+5,DTC_OPT_Y+20,140,10
+    CONTROL         "\82µ\82È\82¢(\8dÅ\8f\89\82ÉMSDTC\82©\82ç\82Ì\90Ú\91±\90«\82ð\8am\94F)",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      "\83L\83\83\83\93\83Z\83\8b",IDCANCEL,66,224,50,14
+    PUSHBUTTON      "\93K\97p",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 "\8d\82\93x\82È\90Ý\92è\81i\83R\83l\83N\83V\83\87\83\93\90Ý\92è\82P\81j"
     IDS_ADVANCE_OPTION_DSN2 "\8d\82\93x\82È\90Ý\92è (%s \90Ý\92è2)"
     IDS_ADVANCE_OPTION_CON2 "\8d\82\93x\82È\90Ý\92è (\83R\83l\83N\83V\83\87\83\93\90Ý\92è2)"
+    IDS_ADVANCE_OPTION_DSN3 "\8d\82\93x\82È\90Ý\92è (%s \90Ý\92è3)"
+    IDS_ADVANCE_OPTION_CON3 "\8d\82\93x\82È\90Ý\92è (\83R\83l\83N\83V\83\87\83\93\90Ý\92è3)"
     IDS_ADVANCE_CONNECTION  "\83R\83l\83N\83V\83\87\83\93"
 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
index 0a0c248127f62c279a21ea8d9e2bd1f38889d33b..93fddf1416edb78eefd0f54194407b5c8483d4bc 100644 (file)
@@ -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
 #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
 //
 #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