[PATCH] oledb32: DataLink Dialog - Add page for ODBC Connections.
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Sun Feb 2 22:30:13 CST 2020
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
dlls/oledb32/dslocator.c | 113 ++++++++++++++++++++++++++++++++++++---
dlls/oledb32/resource.h | 20 +++++++
dlls/oledb32/version.rc | 26 +++++++++
3 files changed, 151 insertions(+), 8 deletions(-)
diff --git a/dlls/oledb32/dslocator.c b/dlls/oledb32/dslocator.c
index 26ee12de53..556390fdf8 100644
--- a/dlls/oledb32/dslocator.c
+++ b/dlls/oledb32/dslocator.c
@@ -289,11 +289,102 @@ static LRESULT CALLBACK data_link_properties_dlg_proc(HWND hwnd, UINT msg, WPARA
return 0;
}
+static void connection_fill_odbc_list(HWND parent)
+{
+ LONG res;
+ HKEY key;
+ DWORD index = 0;
+ WCHAR name[MAX_PATH];
+ DWORD nameLen;
+
+ HWND combo = GetDlgItem(parent, IDC_CBO_NAMES);
+ if (!combo)
+ return;
+
+ res = RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\ODBC\\ODBC.INI\\ODBC Data Sources", 0, KEY_READ, &key);
+ if (res == ERROR_FILE_NOT_FOUND)
+ return;
+
+ SendMessageW (combo, CB_RESETCONTENT, 0, 0);
+
+ for(;; index++)
+ {
+ nameLen = MAX_PATH;
+ if (RegEnumValueW(key, index, name, &nameLen, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
+ break;
+
+ SendMessageW(combo, CB_ADDSTRING, 0, (LPARAM)name);
+ }
+
+ RegCloseKey(key);
+}
+
+static void connection_initialize_controls(HWND parent)
+{
+ HWND hwnd = GetDlgItem(parent, IDC_RDO_SRC_NAME);
+ if (hwnd)
+ SendMessageA(hwnd, BM_SETCHECK, BST_CHECKED, 0);
+}
+
+static void connection_toggle_controls(HWND parent)
+{
+ BOOL checked = TRUE;
+ HWND hwnd = GetDlgItem(parent, IDC_RDO_SRC_NAME);
+ if (hwnd)
+ checked = SendMessageA(hwnd, BM_GETCHECK, 0, 0);
+
+ EnableWindow(GetDlgItem(parent, IDC_CBO_NAMES), checked);
+ EnableWindow(GetDlgItem(parent, IDC_BTN_REFRESH), checked);
+
+ EnableWindow(GetDlgItem(parent, IDC_LBL_CONNECTION), !checked);
+ EnableWindow(GetDlgItem(parent, IDC_EDT_CONNECTION), !checked);
+ EnableWindow(GetDlgItem(parent, IDC_BTN_BUILD), !checked);
+}
+
+static LRESULT CALLBACK data_link_connection_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
+{
+ TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
+
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ connection_initialize_controls(hwnd);
+ connection_fill_odbc_list(hwnd);
+ connection_toggle_controls(hwnd);
+ break;
+ }
+ case WM_COMMAND:
+ {
+ switch LOWORD(wp)
+ {
+ case IDC_RDO_SRC_NAME:
+ case IDC_BTN_CONNECTION:
+ connection_toggle_controls(hwnd);
+ break;
+ case IDC_BTN_REFRESH:
+ connection_fill_odbc_list(hwnd);
+ break;
+ case IDC_BTN_BUILD:
+ case IDC_BTN_TEST:
+ /* TODO: Implement dialogs */
+ MessageBoxA(hwnd, "Not implemented yet.", "Error", MB_OK | MB_ICONEXCLAMATION);
+ break;
+ }
+
+ break;
+ }
+ default:
+ break;
+ }
+ return 0;
+}
+
static HRESULT WINAPI dslocator_PromptNew(IDataSourceLocator *iface, IDispatch **connection)
{
DSLocatorImpl *This = impl_from_IDataSourceLocator(iface);
PROPSHEETHEADERW hdr;
- PROPSHEETPAGEW page;
+ PROPSHEETPAGEW pages[2];
INT_PTR ret;
FIXME("(%p, %p) Semi-stub\n", iface, connection);
@@ -303,11 +394,17 @@ static HRESULT WINAPI dslocator_PromptNew(IDataSourceLocator *iface, IDispatch *
*connection = NULL;
- memset(&page, 0, sizeof(PROPSHEETPAGEW));
- page.dwSize = sizeof(page);
- page.hInstance = instance;
- page.u.pszTemplate = MAKEINTRESOURCEW(IDD_PROVIDER);
- page.pfnDlgProc = data_link_properties_dlg_proc;
+ memset(&pages, 0, sizeof(pages));
+
+ pages[0].dwSize = sizeof(PROPSHEETPAGEW);
+ pages[0].hInstance = instance;
+ pages[0].u.pszTemplate = MAKEINTRESOURCEW(IDD_PROVIDER);
+ pages[0].pfnDlgProc = data_link_properties_dlg_proc;
+
+ pages[1].dwSize = sizeof(PROPSHEETPAGEW);
+ pages[1].hInstance = instance;
+ pages[1].u.pszTemplate = MAKEINTRESOURCEW(IDD_CONNECTION);
+ pages[1].pfnDlgProc = data_link_connection_dlg_proc;
memset(&hdr, 0, sizeof(hdr));
hdr.dwSize = sizeof(hdr);
@@ -315,8 +412,8 @@ static HRESULT WINAPI dslocator_PromptNew(IDataSourceLocator *iface, IDispatch *
hdr.dwFlags = PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE;
hdr.hInstance = instance;
hdr.pszCaption = MAKEINTRESOURCEW(IDS_PROPSHEET_TITLE);
- hdr.u3.ppsp = &page;
- hdr.nPages = 1;
+ hdr.u3.ppsp = pages;
+ hdr.nPages = ARRAY_SIZE(pages);
ret = PropertySheetW(&hdr);
return ret ? S_OK : S_FALSE;
diff --git a/dlls/oledb32/resource.h b/dlls/oledb32/resource.h
index df88a10829..7944e42cc4 100644
--- a/dlls/oledb32/resource.h
+++ b/dlls/oledb32/resource.h
@@ -22,3 +22,23 @@
#define IDS_PROPSHEET_TITLE 2000
#define IDS_COL_PROVIDER 2001
+
+#define IDD_CONNECTION 3000
+#define IDC_BTN_EDIT 3001
+#define IDC_RDO_SRC_NAME 3002
+#define IDC_CBO_NAMES 3003
+#define IDC_BTN_REFRESH 3004
+#define IDC_BTN_CONNECTION 3005
+#define IDC_EDT_CONNECTION 3006
+#define IDC_BTN_BUILD 3007
+#define IDC_EDT_NAME 3008
+#define IDC_EDT_PASSWORD 3009
+#define IDC_CHK_BLANK 3010
+#define IDC_CHK_SAVE_PASS 3011
+#define IDC_CBO_INITIAL 3012
+#define IDC_BTN_TEST 3013
+#define IDC_LBL_SOURCE 3014
+#define IDC_LBL_LOGIN 3015
+#define IDC_LBL_INITIAL 3016
+#define IDC_LBL_CONNECTION 3017
+
diff --git a/dlls/oledb32/version.rc b/dlls/oledb32/version.rc
index 3a200d1cd6..63d1d6c002 100644
--- a/dlls/oledb32/version.rc
+++ b/dlls/oledb32/version.rc
@@ -46,3 +46,29 @@ BEGIN
CONTROL "",IDC_LST_CONNECTIONS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,14,20,206,162
PUSHBUTTON "&Next >",IDC_BTN_NEXT,170,194,50,14
END
+
+IDD_CONNECTION DIALOG 0, 0, 227, 225
+STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Connection"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Specify the following to connect to ODBC data:",-1,7,7,213,8
+ LTEXT "1. Specify the source of data:",IDC_LBL_SOURCE,14,18,206,8
+ CONTROL "Use &data source name",IDC_RDO_SRC_NAME,"Button",BS_AUTORADIOBUTTON | WS_GROUP,29,29,192,10
+ COMBOBOX IDC_CBO_NAMES,36,40,150,128,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "&Refresh",IDC_BTN_REFRESH,189,39,31,14
+ CONTROL "Use c&onnection string",IDC_BTN_CONNECTION,"Button",BS_AUTORADIOBUTTON,29,57,192,10
+ LTEXT "&Connection string:",IDC_LBL_CONNECTION,36,68,182,8
+ EDITTEXT IDC_EDT_CONNECTION,36,78,148,12,ES_AUTOHSCROLL
+ PUSHBUTTON "B&uild...",IDC_BTN_BUILD,189,77,31,14
+ LTEXT "2. Enter information to log on to the server",IDC_LBL_LOGIN,14,98,206,8
+ LTEXT "User &name:",-1,29,110,38,8
+ EDITTEXT IDC_EDT_NAME,67,108,153,12,ES_AUTOHSCROLL
+ LTEXT "&Password:",-1,29,126,34,8
+ EDITTEXT IDC_EDT_PASSWORD,67,124,153,12,ES_PASSWORD | ES_AUTOHSCROLL
+ CONTROL "&Blank password",IDC_CHK_BLANK,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,29,140,69,10
+ CONTROL "Allow &saving password",IDC_CHK_SAVE_PASS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,140,103,10
+ LTEXT "3. Enter the &initial catalog to use:",IDC_LBL_INITIAL,14,159,206,8
+ COMBOBOX IDC_CBO_INITIAL,29,170,191,64,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "&Test Connection",IDC_BTN_TEST,140,194,81,14,WS_GROUP
+END
--
2.17.1
More information about the wine-devel
mailing list