dsnchooser.c 82 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625
  1. /*
  2. * dsnchooser.c
  3. *
  4. * $Id$
  5. *
  6. * The iODBC driver manager.
  7. *
  8. * Copyright (C) 1996-2021 OpenLink Software <[email protected]>
  9. * All Rights Reserved.
  10. *
  11. * This software is released under the terms of either of the following
  12. * licenses:
  13. *
  14. * - GNU Library General Public License (see LICENSE.LGPL)
  15. * - The BSD License (see LICENSE.BSD).
  16. *
  17. * Note that the only valid version of the LGPL license as far as this
  18. * project is concerned is the original GNU Library General Public License
  19. * Version 2, dated June 1991.
  20. *
  21. * While not mandated by the BSD license, any patches you make to the
  22. * iODBC source code may be contributed back into the iODBC project
  23. * at your discretion. Contributions will benefit the Open Source and
  24. * Data Access community as a whole. Submissions may be made at:
  25. *
  26. * http://www.iodbc.org
  27. *
  28. *
  29. * GNU Library Generic Public License Version 2
  30. * ============================================
  31. * This library is free software; you can redistribute it and/or
  32. * modify it under the terms of the GNU Library General Public
  33. * License as published by the Free Software Foundation; only
  34. * Version 2 of the License dated June 1991.
  35. *
  36. * This library is distributed in the hope that it will be useful,
  37. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  38. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  39. * Library General Public License for more details.
  40. *
  41. * You should have received a copy of the GNU Library General Public
  42. * License along with this library; if not, write to the Free
  43. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  44. *
  45. *
  46. * The BSD License
  47. * ===============
  48. * Redistribution and use in source and binary forms, with or without
  49. * modification, are permitted provided that the following conditions
  50. * are met:
  51. *
  52. * 1. Redistributions of source code must retain the above copyright
  53. * notice, this list of conditions and the following disclaimer.
  54. * 2. Redistributions in binary form must reproduce the above copyright
  55. * notice, this list of conditions and the following disclaimer in
  56. * the documentation and/or other materials provided with the
  57. * distribution.
  58. * 3. Neither the name of OpenLink Software Inc. nor the names of its
  59. * contributors may be used to endorse or promote products derived
  60. * from this software without specific prior written permission.
  61. *
  62. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  63. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  64. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  65. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OPENLINK OR
  66. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  67. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  68. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  69. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  70. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  71. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  72. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  73. */
  74. #include <iodbc.h>
  75. #include <iodbcext.h>
  76. #include <stdio.h>
  77. #include <sys/types.h>
  78. #include <sys/stat.h>
  79. #include <sys/param.h>
  80. #include <dirent.h>
  81. #include <errno.h>
  82. #include <sqltypes.h>
  83. #include <dlproc.h>
  84. #include "../gui.h"
  85. #include "odbc4.xpm"
  86. #ifndef MAXPATHLEN
  87. #define MAXPATHLEN 1024
  88. #endif
  89. /*
  90. * Linux glibc has the function, but does not have the prototype
  91. * with the default header files.
  92. */
  93. #if defined(HAVE_ASPRINTF) && defined(__GLIBC__)
  94. extern int asprintf (char **ret, const char *format, ...);
  95. #endif
  96. char *szDSNColumnNames[] = {
  97. "Name",
  98. "Description",
  99. "Driver"
  100. };
  101. char *szTabNames[] = {
  102. "User DSN",
  103. "System DSN",
  104. "File DSN",
  105. "ODBC Drivers",
  106. "Connection Pooling",
  107. "Tracing",
  108. "About"
  109. };
  110. char *szDSNButtons[] = {
  111. "_Add",
  112. "_Remove",
  113. "Confi_gure",
  114. "_Test",
  115. "_Set Dir",
  116. };
  117. void
  118. addlistofdir_to_optionmenu (GtkWidget *widget, LPCSTR path,
  119. TDSNCHOOSER *choose_t)
  120. {
  121. GtkWidget *menu, *menu_item;
  122. char *curr_dir, *prov, *dir;
  123. void **array;
  124. if (!path || !GTK_IS_OPTION_MENU (widget) || !(prov = strdup (path)))
  125. return;
  126. if (prov[STRLEN (prov) - 1] == '/' && STRLEN (prov) > 1)
  127. prov[STRLEN (prov) - 1] = 0;
  128. /* Add the root directory */
  129. menu = gtk_menu_new ();
  130. menu_item = gtk_menu_item_new_with_label ("/");
  131. gtk_widget_show (menu_item);
  132. gtk_menu_prepend (GTK_MENU (menu), menu_item);
  133. if (!(array = (void **) malloc (sizeof (void *) * 2)))
  134. return;
  135. array[0] = g_strdup ("/");
  136. array[1] = choose_t;
  137. gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
  138. GTK_SIGNAL_FUNC (filedsn_lookin_clicked), array);
  139. for (curr_dir = prov, dir = NULL; curr_dir;
  140. curr_dir = strchr (curr_dir + 1, '/'))
  141. {
  142. if (strchr (curr_dir + 1, '/'))
  143. {
  144. dir = strchr (curr_dir + 1, '/');
  145. *dir = 0;
  146. }
  147. menu_item = gtk_menu_item_new_with_label (prov);
  148. gtk_widget_show (menu_item);
  149. gtk_menu_prepend (GTK_MENU (menu), menu_item);
  150. if (!(array = (void **) malloc (sizeof (void *) * 2)))
  151. return;
  152. array[0] = g_strdup (prov);
  153. array[1] = choose_t;
  154. gtk_signal_connect (GTK_OBJECT (menu_item), "activate",
  155. GTK_SIGNAL_FUNC (filedsn_lookin_clicked), array);
  156. if (dir)
  157. *dir = '/';
  158. }
  159. gtk_option_menu_remove_menu (GTK_OPTION_MENU (widget));
  160. gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), menu);
  161. free (prov);
  162. }
  163. void
  164. adddirectories_to_list (HWND hwnd, GtkWidget *widget, LPCSTR path)
  165. {
  166. DIR *dir;
  167. #if defined (HAVE_ASPRINTF)
  168. char *path_buf;
  169. #else
  170. char path_buf[MAXPATHLEN];
  171. #endif
  172. struct dirent *dir_entry;
  173. struct stat fstat;
  174. char *data[1];
  175. if (!path || !GTK_IS_CLIST (widget))
  176. return;
  177. if ((dir = opendir (path)))
  178. {
  179. /* Remove all the entries */
  180. gtk_clist_clear (GTK_CLIST (widget));
  181. while ((dir_entry = readdir (dir)))
  182. {
  183. #if defined (HAVE_ASPRINTF)
  184. asprintf (&path_buf, "%s/%s", path, dir_entry->d_name);
  185. #elif defined (HAVE_SNPRINTF)
  186. snprintf (path_buf, sizeof (path_buf), "%s/%s",
  187. path, dir_entry->d_name);
  188. #else
  189. STRCPY (path_buf, path);
  190. if (path[STRLEN (path) - 1] != '/')
  191. STRCAT (path_buf, "/");
  192. STRCAT (path_buf, dir_entry->d_name);
  193. #endif
  194. if (stat ((LPCSTR) path_buf, &fstat) >= 0
  195. && S_ISDIR (fstat.st_mode))
  196. if (strcmp (path, "/") || strcmp (dir_entry->d_name, ".."))
  197. {
  198. data[0] = dir_entry->d_name;
  199. gtk_clist_append (GTK_CLIST (widget), data);
  200. }
  201. #if defined (HAVE_ASPRINTF)
  202. free (path_buf);
  203. #endif
  204. }
  205. /* Close the directory entry */
  206. closedir (dir);
  207. if (GTK_CLIST (widget)->rows > 0)
  208. gtk_clist_sort (GTK_CLIST (widget));
  209. }
  210. else
  211. create_error (hwnd, NULL, "Error during accessing directory information:",
  212. strerror (errno));
  213. }
  214. void
  215. addfiles_to_list (HWND hwnd, GtkWidget *widget, LPCSTR path)
  216. {
  217. DIR *dir;
  218. #if defined (HAVE_ASPRINTF)
  219. char *path_buf;
  220. #else
  221. char path_buf[MAXPATHLEN];
  222. #endif
  223. struct dirent *dir_entry;
  224. struct stat fstat;
  225. char *data[1];
  226. if (!path || !GTK_IS_CLIST (widget))
  227. return;
  228. if ((dir = opendir (path)))
  229. {
  230. /* Remove all the entries */
  231. gtk_clist_clear (GTK_CLIST (widget));
  232. while ((dir_entry = readdir (dir)))
  233. {
  234. #if defined (HAVE_ASPRINTF)
  235. asprintf (&path_buf, "%s/%s", path, dir_entry->d_name);
  236. #elif defined (HAVE_SNPRINTF)
  237. snprintf (path_buf, sizeof (path_buf), "%s/%s",
  238. path, dir_entry->d_name);
  239. #else
  240. STRCPY (path_buf, path);
  241. if (path[STRLEN (path) - 1] != '/')
  242. STRCAT (path_buf, "/");
  243. STRCAT (path_buf, dir_entry->d_name);
  244. #endif
  245. if (stat ((LPCSTR) path_buf, &fstat) >= 0
  246. && !S_ISDIR (fstat.st_mode)
  247. && strstr (dir_entry->d_name, ".dsn"))
  248. {
  249. data[0] = dir_entry->d_name;
  250. gtk_clist_append (GTK_CLIST (widget), data);
  251. }
  252. #if defined (HAVE_ASPRINTF)
  253. free (path_buf);
  254. #endif
  255. }
  256. /* Close the directory entry */
  257. closedir (dir);
  258. if (GTK_CLIST (widget)->rows > 0)
  259. gtk_clist_sort (GTK_CLIST (widget));
  260. }
  261. }
  262. void
  263. adddsns_to_list (GtkWidget *widget, BOOL systemDSN)
  264. {
  265. char *curr, *buffer = (char *) malloc (sizeof (char) * 65536);
  266. char diz[1024], driver[1024];
  267. char *data[3];
  268. int len, _case = 0;
  269. if (!buffer || !GTK_IS_CLIST (widget))
  270. return;
  271. gtk_clist_clear (GTK_CLIST (widget));
  272. /* Get the list of DSN in the user context */
  273. SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN);
  274. len =
  275. SQLGetPrivateProfileString ("ODBC Data Sources", NULL, "", buffer,
  276. 65536, NULL);
  277. if (len)
  278. goto process;
  279. _case = 1;
  280. SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN);
  281. len =
  282. SQLGetPrivateProfileString ("ODBC 32 bit Data Sources", NULL, "",
  283. buffer, 65536, NULL);
  284. if (len)
  285. goto process;
  286. goto end;
  287. process:
  288. for (curr = buffer; *curr; curr += (STRLEN (curr) + 1))
  289. {
  290. SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN);
  291. SQLGetPrivateProfileString (curr, "Description", "", diz, sizeof (diz),
  292. NULL);
  293. SQLSetConfigMode (systemDSN ? ODBC_SYSTEM_DSN : ODBC_USER_DSN);
  294. switch (_case)
  295. {
  296. case 0:
  297. SQLGetPrivateProfileString ("ODBC Data Sources", curr, "", driver,
  298. sizeof (driver), NULL);
  299. break;
  300. case 1:
  301. SQLGetPrivateProfileString ("ODBC 32 bit Data Sources", curr, "",
  302. driver, sizeof (driver), NULL);
  303. break;
  304. };
  305. if (STRLEN (curr) && STRLEN (driver))
  306. {
  307. data[0] = curr;
  308. data[1] = diz;
  309. data[2] = driver;
  310. gtk_clist_append (GTK_CLIST (widget), data);
  311. }
  312. }
  313. end:
  314. SQLSetConfigMode (ODBC_BOTH_DSN);
  315. if (GTK_CLIST (widget)->rows > 0)
  316. {
  317. gtk_clist_columns_autosize (GTK_CLIST (widget));
  318. gtk_clist_sort (GTK_CLIST (widget));
  319. }
  320. /* Make the clean up */
  321. free (buffer);
  322. }
  323. static void
  324. dsnchooser_switch_page (GtkNotebook *notebook, GtkNotebookPage *page,
  325. gint page_num, TDSNCHOOSER *choose_t)
  326. {
  327. switch (page_num)
  328. {
  329. case 0:
  330. if (choose_t)
  331. {
  332. choose_t->type_dsn = USER_DSN;
  333. adddsns_to_list (choose_t->udsnlist, FALSE);
  334. }
  335. break;
  336. case 1:
  337. if (choose_t)
  338. {
  339. choose_t->type_dsn = SYSTEM_DSN;
  340. adddsns_to_list (choose_t->sdsnlist, TRUE);
  341. }
  342. break;
  343. case 2:
  344. if (choose_t)
  345. {
  346. choose_t->type_dsn = FILE_DSN;
  347. addlistofdir_to_optionmenu(choose_t->dir_combo,
  348. choose_t->curr_dir, choose_t);
  349. adddirectories_to_list(choose_t->mainwnd,
  350. choose_t->dir_list, choose_t->curr_dir);
  351. addfiles_to_list(choose_t->mainwnd,
  352. choose_t->file_list, choose_t->curr_dir);
  353. }
  354. break;
  355. };
  356. if (choose_t)
  357. {
  358. if (choose_t->uremove)
  359. gtk_widget_set_sensitive (choose_t->uremove, FALSE);
  360. if (choose_t->uconfigure)
  361. gtk_widget_set_sensitive (choose_t->uconfigure, FALSE);
  362. if (choose_t->utest)
  363. gtk_widget_set_sensitive (choose_t->utest, FALSE);
  364. if (choose_t->sremove)
  365. gtk_widget_set_sensitive (choose_t->sremove, FALSE);
  366. if (choose_t->sconfigure)
  367. gtk_widget_set_sensitive (choose_t->sconfigure, FALSE);
  368. if (choose_t->stest)
  369. gtk_widget_set_sensitive (choose_t->stest, FALSE);
  370. if (choose_t->fremove)
  371. gtk_widget_set_sensitive(choose_t->fremove, FALSE);
  372. if (choose_t->fconfigure)
  373. gtk_widget_set_sensitive(choose_t->fconfigure, FALSE);
  374. if (choose_t->ftest)
  375. gtk_widget_set_sensitive(choose_t->ftest, FALSE);
  376. }
  377. }
  378. static BOOL
  379. test_driver_connect (TDSNCHOOSER *choose_t, char *connstr)
  380. {
  381. HENV henv;
  382. HDBC hdbc;
  383. #if (ODBCVER < 0x300)
  384. if (SQLAllocEnv (&henv) != SQL_SUCCESS)
  385. #else
  386. if (SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv) != SQL_SUCCESS)
  387. #endif
  388. {
  389. _iodbcdm_nativeerrorbox (choose_t->mainwnd,
  390. henv, SQL_NULL_HDBC, SQL_NULL_HSTMT);
  391. return FALSE;
  392. }
  393. SQLSetEnvAttr (henv, SQL_ATTR_APP_UNICODE_TYPE,
  394. (SQLPOINTER) SQL_DM_CP_DEF, SQL_IS_UINTEGER);
  395. #if (ODBCVER < 0x300)
  396. if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS)
  397. #else
  398. SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION,
  399. (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER);
  400. if (SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc) != SQL_SUCCESS)
  401. #endif
  402. {
  403. _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT);
  404. SQLFreeEnv (henv);
  405. return FALSE;
  406. }
  407. switch (choose_t->type_dsn)
  408. {
  409. case USER_DSN:
  410. SQLSetConfigMode (ODBC_USER_DSN);
  411. break;
  412. case SYSTEM_DSN:
  413. SQLSetConfigMode (ODBC_SYSTEM_DSN);
  414. break;
  415. case FILE_DSN:
  416. SQLSetConfigMode (ODBC_BOTH_DSN);
  417. break;
  418. }
  419. if (SQLDriverConnect (hdbc, choose_t->mainwnd, connstr, SQL_NTS,
  420. NULL, 0, NULL, SQL_DRIVER_PROMPT) != SQL_SUCCESS)
  421. {
  422. _iodbcdm_nativeerrorbox (choose_t->mainwnd, henv, hdbc, SQL_NULL_HSTMT);
  423. SQLFreeEnv (henv);
  424. return FALSE;
  425. }
  426. else
  427. SQLDisconnect (hdbc);
  428. #if (ODBCVER < 0x300)
  429. SQLFreeConnect (hdbc);
  430. SQLFreeEnv (henv);
  431. #else
  432. SQLFreeHandle (SQL_HANDLE_DBC, hdbc);
  433. SQLFreeHandle (SQL_HANDLE_ENV, henv);
  434. #endif
  435. return TRUE;
  436. }
  437. void
  438. userdsn_add_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  439. {
  440. char connstr[4096] = { "" };
  441. char drv[1024] = { ""};
  442. int sqlstat;
  443. DWORD error;
  444. if (choose_t)
  445. {
  446. /* Try first to get the driver name */
  447. SQLSetConfigMode (ODBC_USER_DSN);
  448. if (_iodbcdm_drvchoose_dialbox (choose_t->mainwnd, drv,
  449. sizeof (drv), &sqlstat) == SQL_SUCCESS)
  450. {
  451. SQLSetConfigMode (ODBC_USER_DSN);
  452. if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_ADD_DSN,
  453. drv + STRLEN ("DRIVER="), connstr))
  454. {
  455. if (SQLInstallerError (1, &error, connstr,
  456. sizeof (connstr), NULL) != SQL_NO_DATA)
  457. _iodbcdm_errorbox (choose_t->mainwnd, NULL,
  458. "An error occurred when trying to add the DSN : ");
  459. goto done;
  460. }
  461. adddsns_to_list (choose_t->udsnlist, FALSE);
  462. }
  463. done:
  464. if (GTK_CLIST (choose_t->udsnlist)->selection == NULL)
  465. {
  466. if (choose_t->uremove)
  467. gtk_widget_set_sensitive (choose_t->uremove, FALSE);
  468. if (choose_t->uconfigure)
  469. gtk_widget_set_sensitive (choose_t->uconfigure, FALSE);
  470. if (choose_t->utest)
  471. gtk_widget_set_sensitive (choose_t->utest, FALSE);
  472. }
  473. }
  474. return;
  475. }
  476. void
  477. userdsn_remove_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  478. {
  479. char dsn[1024] = { "\0" };
  480. char *szDSN = NULL, *szDriver = NULL;
  481. if (choose_t)
  482. {
  483. /* Retrieve the DSN name */
  484. if (GTK_CLIST (choose_t->udsnlist)->selection != NULL)
  485. {
  486. gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),
  487. GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->
  488. data), 0, &szDSN);
  489. gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),
  490. GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->
  491. data), 2, &szDriver);
  492. }
  493. /* Call the right function */
  494. if (szDSN
  495. && create_confirm (choose_t->mainwnd, szDSN,
  496. "Are you sure you want to remove this DSN ?"))
  497. {
  498. sprintf (dsn, "DSN=%s", szDSN);
  499. if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_REMOVE_DSN,
  500. szDriver, dsn))
  501. _iodbcdm_errorbox (choose_t->mainwnd, szDSN,
  502. "An error occurred when trying to remove the DSN : ");
  503. adddsns_to_list (choose_t->udsnlist, FALSE);
  504. }
  505. if (GTK_CLIST (choose_t->udsnlist)->selection == NULL)
  506. {
  507. if (choose_t->uremove)
  508. gtk_widget_set_sensitive (choose_t->uremove, FALSE);
  509. if (choose_t->uconfigure)
  510. gtk_widget_set_sensitive (choose_t->uconfigure, FALSE);
  511. if (choose_t->utest)
  512. gtk_widget_set_sensitive (choose_t->utest, FALSE);
  513. }
  514. }
  515. }
  516. void
  517. userdsn_configure_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  518. {
  519. char connstr[4096] = { 0 };
  520. char tokenstr[4096] = { 0 };
  521. char *szDSN = NULL, *szDriver = NULL, *curr, *cour;
  522. int size = sizeof (connstr);
  523. DWORD error;
  524. if (choose_t)
  525. {
  526. /* Retrieve the DSN name */
  527. if (GTK_CLIST (choose_t->udsnlist)->selection != NULL)
  528. {
  529. gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),
  530. GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->
  531. data), 0, &szDSN);
  532. gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),
  533. GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->
  534. data), 2, &szDriver);
  535. }
  536. /* Call the right function */
  537. if (szDSN)
  538. {
  539. sprintf (connstr, "DSN=%s", szDSN);
  540. size -= (STRLEN (connstr) + 1);
  541. SQLSetConfigMode (ODBC_USER_DSN);
  542. if (!SQLGetPrivateProfileString (szDSN, NULL, "", tokenstr,
  543. sizeof (tokenstr), NULL))
  544. {
  545. _iodbcdm_errorbox (choose_t->mainwnd, szDSN,
  546. "An error occurred when trying to configure the DSN : ");
  547. goto done;
  548. }
  549. for (curr = tokenstr, cour = connstr + STRLEN (connstr) + 1; *curr;
  550. curr += (STRLEN (curr) + 1), cour += (STRLEN (cour) + 1))
  551. {
  552. STRCPY (cour, curr);
  553. cour[STRLEN (curr)] = '=';
  554. SQLSetConfigMode (ODBC_USER_DSN);
  555. SQLGetPrivateProfileString (szDSN, curr, "",
  556. cour + STRLEN (curr) + 1, size - STRLEN (curr) - 1, NULL);
  557. size -= (STRLEN (cour) + 1);
  558. }
  559. *cour = 0;
  560. SQLSetConfigMode (ODBC_USER_DSN);
  561. if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_CONFIG_DSN,
  562. szDriver, connstr))
  563. {
  564. if (SQLInstallerError (1, &error, connstr, sizeof (connstr),
  565. NULL) != SQL_NO_DATA
  566. && error != ODBC_ERROR_REQUEST_FAILED)
  567. _iodbcdm_errorbox (choose_t->mainwnd, szDSN,
  568. "An error occurred when trying to configure the DSN : ");
  569. goto done;
  570. }
  571. adddsns_to_list (choose_t->udsnlist, FALSE);
  572. }
  573. done:
  574. if (GTK_CLIST (choose_t->udsnlist)->selection == NULL)
  575. {
  576. if (choose_t->uremove)
  577. gtk_widget_set_sensitive (choose_t->uremove, FALSE);
  578. if (choose_t->uconfigure)
  579. gtk_widget_set_sensitive (choose_t->uconfigure, FALSE);
  580. if (choose_t->utest)
  581. gtk_widget_set_sensitive (choose_t->utest, FALSE);
  582. }
  583. }
  584. return;
  585. }
  586. void
  587. userdsn_test_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  588. {
  589. HENV henv;
  590. HDBC hdbc;
  591. SWORD buflen;
  592. char connstr[4096] = { 0 };
  593. char outconnstr[4096] = { 0 };
  594. char *szDSN;
  595. if (choose_t)
  596. {
  597. /* Retrieve the DSN name */
  598. if (GTK_CLIST (choose_t->udsnlist)->selection != NULL)
  599. gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),
  600. GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->data),
  601. 0, &szDSN);
  602. if (szDSN && STRLEN (szDSN))
  603. {
  604. snprintf (connstr, sizeof (connstr), "DSN=%s", szDSN);
  605. if (test_driver_connect (choose_t, connstr))
  606. {
  607. _iodbcdm_messagebox (choose_t->mainwnd, szDSN,
  608. "The connection DSN was tested successfully, and can be used at this time.");
  609. }
  610. }
  611. if (GTK_CLIST (choose_t->udsnlist)->selection == NULL)
  612. {
  613. if (choose_t->uremove)
  614. gtk_widget_set_sensitive (choose_t->uremove, FALSE);
  615. if (choose_t->uconfigure)
  616. gtk_widget_set_sensitive (choose_t->uconfigure, FALSE);
  617. if (choose_t->utest)
  618. gtk_widget_set_sensitive (choose_t->utest, FALSE);
  619. }
  620. }
  621. }
  622. void
  623. systemdsn_add_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  624. {
  625. char connstr[4096] = { 0 };
  626. char drv[1024] = { 0 };
  627. int sqlstat;
  628. DWORD error;
  629. if (choose_t)
  630. {
  631. /* Try first to get the driver name */
  632. SQLSetConfigMode (ODBC_SYSTEM_DSN);
  633. if (_iodbcdm_drvchoose_dialbox (choose_t->mainwnd, drv, sizeof (drv),
  634. &sqlstat) == SQL_SUCCESS)
  635. {
  636. if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_ADD_SYS_DSN,
  637. drv + STRLEN ("DRIVER="), connstr))
  638. {
  639. if (SQLInstallerError (1, &error, connstr, sizeof (connstr),
  640. NULL) != SQL_NO_DATA)
  641. _iodbcdm_errorbox (choose_t->mainwnd, NULL,
  642. "An error occurred when trying to add the DSN : ");
  643. goto done;
  644. }
  645. adddsns_to_list (choose_t->sdsnlist, TRUE);
  646. }
  647. done:
  648. if (GTK_CLIST (choose_t->sdsnlist)->selection == NULL)
  649. {
  650. if (choose_t->sremove)
  651. gtk_widget_set_sensitive (choose_t->sremove, FALSE);
  652. if (choose_t->sconfigure)
  653. gtk_widget_set_sensitive (choose_t->sconfigure, FALSE);
  654. if (choose_t->stest)
  655. gtk_widget_set_sensitive (choose_t->stest, FALSE);
  656. }
  657. }
  658. return;
  659. }
  660. void
  661. systemdsn_remove_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  662. {
  663. char dsn[1024] = { 0 };
  664. char *szDSN = NULL, *szDriver = NULL;
  665. if (choose_t)
  666. {
  667. /* Retrieve the DSN name */
  668. if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL)
  669. {
  670. gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),
  671. GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->
  672. data), 0, &szDSN);
  673. gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),
  674. GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->
  675. data), 2, &szDriver);
  676. }
  677. /* Call the right function */
  678. if (szDSN
  679. && create_confirm (choose_t->mainwnd, szDSN,
  680. "Are you sure you want to remove this DSN ?"))
  681. {
  682. sprintf (dsn, "DSN=%s", szDSN);
  683. if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_REMOVE_SYS_DSN,
  684. szDriver, dsn))
  685. _iodbcdm_errorbox (choose_t->mainwnd, szDSN,
  686. "An error occurred when trying to remove the DSN : ");
  687. adddsns_to_list (choose_t->sdsnlist, TRUE);
  688. }
  689. if (GTK_CLIST (choose_t->sdsnlist)->selection == NULL)
  690. {
  691. if (choose_t->sremove)
  692. gtk_widget_set_sensitive (choose_t->sremove, FALSE);
  693. if (choose_t->sconfigure)
  694. gtk_widget_set_sensitive (choose_t->sconfigure, FALSE);
  695. if (choose_t->stest)
  696. gtk_widget_set_sensitive (choose_t->stest, FALSE);
  697. }
  698. }
  699. }
  700. void
  701. systemdsn_configure_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  702. {
  703. char connstr[4096] = { 0 };
  704. char tokenstr[4096] = { 0 };
  705. char *szDSN = NULL, *szDriver = NULL, *curr, *cour;
  706. int size = sizeof (connstr);
  707. DWORD error;
  708. if (choose_t)
  709. {
  710. /* Retrieve the DSN name */
  711. if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL)
  712. {
  713. gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),
  714. GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->
  715. data), 0, &szDSN);
  716. gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),
  717. GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->
  718. data), 2, &szDriver);
  719. }
  720. /* Call the right function */
  721. if (szDSN)
  722. {
  723. sprintf (connstr, "DSN=%s", szDSN);
  724. size -= (STRLEN (connstr) + 1);
  725. SQLSetConfigMode (ODBC_SYSTEM_DSN);
  726. if (!SQLGetPrivateProfileString (szDSN, NULL, "", tokenstr,
  727. sizeof (tokenstr), NULL))
  728. {
  729. _iodbcdm_errorbox (choose_t->mainwnd, szDSN,
  730. "An error occurred when trying to configure the DSN : ");
  731. goto done;
  732. }
  733. for (curr = tokenstr, cour = connstr + STRLEN (connstr) + 1; *curr;
  734. curr += (STRLEN (curr) + 1), cour += (STRLEN (cour) + 1))
  735. {
  736. STRCPY (cour, curr);
  737. cour[STRLEN (curr)] = '=';
  738. SQLSetConfigMode (ODBC_SYSTEM_DSN);
  739. SQLGetPrivateProfileString (szDSN, curr, "",
  740. cour + STRLEN (curr) + 1, size - STRLEN (curr) - 1, NULL);
  741. size -= (STRLEN (cour) + 1);
  742. }
  743. *cour = 0;
  744. if (!SQLConfigDataSource (choose_t->mainwnd, ODBC_CONFIG_SYS_DSN,
  745. szDriver, connstr))
  746. {
  747. if (SQLInstallerError (1, &error, connstr, sizeof (connstr),
  748. NULL) != SQL_NO_DATA
  749. && error != ODBC_ERROR_REQUEST_FAILED)
  750. _iodbcdm_errorbox (choose_t->mainwnd, szDSN,
  751. "An error occurred when trying to configure the DSN : ");
  752. goto done;
  753. }
  754. adddsns_to_list (choose_t->sdsnlist, TRUE);
  755. }
  756. done:
  757. if (GTK_CLIST (choose_t->sdsnlist)->selection == NULL)
  758. {
  759. if (choose_t->sremove)
  760. gtk_widget_set_sensitive (choose_t->sremove, FALSE);
  761. if (choose_t->sconfigure)
  762. gtk_widget_set_sensitive (choose_t->sconfigure, FALSE);
  763. if (choose_t->stest)
  764. gtk_widget_set_sensitive (choose_t->stest, FALSE);
  765. }
  766. }
  767. return;
  768. }
  769. void
  770. systemdsn_test_clicked (GtkWidget * widget, TDSNCHOOSER * choose_t)
  771. {
  772. HENV henv;
  773. HDBC hdbc;
  774. SWORD buflen;
  775. SQLCHAR connstr[4096] = { 0 };
  776. SQLCHAR outconnstr[4096] = { 0 };
  777. char *szDSN = NULL;
  778. if (choose_t)
  779. {
  780. /* Retrieve the DSN name */
  781. if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL)
  782. gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),
  783. GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->data),
  784. 0, &szDSN);
  785. if (szDSN && STRLEN (szDSN))
  786. {
  787. snprintf (connstr, sizeof (connstr), "DSN=%s", szDSN);
  788. if (test_driver_connect (choose_t, connstr))
  789. {
  790. _iodbcdm_messagebox (choose_t->mainwnd, szDSN,
  791. "The connection DSN was tested successfully, and can be used at this time.");
  792. }
  793. }
  794. if (GTK_CLIST (choose_t->sdsnlist)->selection == NULL)
  795. {
  796. if (choose_t->sremove)
  797. gtk_widget_set_sensitive (choose_t->sremove, FALSE);
  798. if (choose_t->sconfigure)
  799. gtk_widget_set_sensitive (choose_t->sconfigure, FALSE);
  800. if (choose_t->stest)
  801. gtk_widget_set_sensitive (choose_t->stest, FALSE);
  802. }
  803. }
  804. }
  805. static void
  806. filedsn_get_dsn (char *filename, char *dsn, size_t dsn_sz)
  807. {
  808. char *p;
  809. /* Cut everything up to the last slash */
  810. p = strrchr (filename, '/');
  811. if (p != NULL)
  812. p++;
  813. else
  814. p = filename;
  815. snprintf (dsn, dsn_sz, "%s", p);
  816. /* Cut .dsn extension */
  817. p = strrchr (dsn, '.');
  818. if (p != NULL && !strcasecmp (p, ".dsn"))
  819. *p = '\0';
  820. }
  821. static BOOL _CheckDriverLoginDlg (char *drv);
  822. static void
  823. filedsn_configure (TDSNCHOOSER *choose_t, char *drv, char *dsn, char *in_attrs,
  824. BOOL b_add, BOOL verify_conn)
  825. {
  826. char *connstr = NULL;
  827. size_t len; /* current connstr len */
  828. size_t add_len; /* len of appended string */
  829. LPSTR attrs = NULL, curr, tmp, attr_lst = NULL;
  830. BOOL b_Save = TRUE;
  831. attrs = in_attrs;
  832. if (!b_add && !_CheckDriverLoginDlg(drv + STRLEN("DRIVER=")))
  833. {
  834. /* Get DSN name and additional attributes */
  835. attr_lst = create_fgensetup (choose_t->mainwnd, dsn, in_attrs,
  836. b_add, &verify_conn);
  837. attrs = attr_lst;
  838. }
  839. if (!attrs)
  840. {
  841. create_error (choose_t->mainwnd, NULL, "Error adding File DSN:",
  842. strerror (ENOMEM));
  843. return;
  844. }
  845. if (attrs == (LPSTR) - 1L)
  846. return;
  847. /* Build the connection string */
  848. connstr = strdup (drv);
  849. len = strlen (connstr);
  850. for (curr = attrs; *curr; curr += (STRLEN (curr) + 1))
  851. {
  852. if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")))
  853. {
  854. if (dsn == NULL)
  855. {
  856. /* got dsn name */
  857. dsn = curr + STRLEN ("DSN=");
  858. }
  859. continue;
  860. }
  861. /* append attr */
  862. add_len = 1 + strlen (curr); /* +1 for ';' */
  863. tmp = realloc (connstr, len + add_len + 1); /* +1 for NUL */
  864. if (tmp == NULL)
  865. {
  866. create_error (choose_t->mainwnd, NULL, "Error adding File DSN:",
  867. strerror (errno));
  868. goto done;
  869. }
  870. connstr = tmp;
  871. snprintf (connstr + len, add_len + 1, ";%s", curr);
  872. len += add_len;
  873. }
  874. /* Nothing to do if no DSN */
  875. if (!dsn || STRLEN (dsn) == 0)
  876. goto done;
  877. if (verify_conn)
  878. {
  879. BOOL ret;
  880. /* Append SAVEFILE */
  881. add_len = strlen (";SAVEFILE=") + strlen (dsn);
  882. tmp = realloc (connstr, len + add_len + 1); /* +1 for NUL */
  883. if (tmp == NULL)
  884. {
  885. create_error (choose_t->mainwnd, NULL, "Error adding file DSN:",
  886. strerror (errno));
  887. goto done;
  888. }
  889. connstr = tmp;
  890. snprintf (connstr + len, add_len + 1, ";SAVEFILE=%s", dsn);
  891. len += add_len;
  892. /* Connect to data source */
  893. ret = test_driver_connect (choose_t, connstr);
  894. if (!ret && b_add)
  895. {
  896. if (create_confirm (choose_t->mainwnd, dsn,
  897. "Can't check the connection. Do you want to store the FileDSN without verification ?"))
  898. b_Save = TRUE;
  899. else
  900. b_Save = FALSE;
  901. }
  902. else
  903. b_Save = FALSE;
  904. }
  905. if (b_Save)
  906. {
  907. char key[512];
  908. char *p;
  909. size_t sz;
  910. if (drv)
  911. {
  912. p = strchr(drv, '=');
  913. if (!SQLWriteFileDSN (dsn, "ODBC", "DRIVER", p + 1))
  914. {
  915. create_error (choose_t->mainwnd, NULL, "Error writing File DSN:",
  916. strerror (errno));
  917. goto done;
  918. }
  919. }
  920. for (curr = attrs; *curr; curr += (STRLEN (curr) + 1))
  921. {
  922. if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")))
  923. continue;
  924. else if (!strncasecmp (curr, "PWD=", STRLEN ("PWD=")))
  925. continue;
  926. else if (!strncasecmp (curr, "SAVEFILE=", STRLEN ("SAVEFILE=")))
  927. continue;
  928. else if (!strncasecmp (curr, "FILEDSN=", STRLEN ("FILEDSN=")))
  929. continue;
  930. p = strchr(curr, '=');
  931. sz = p - curr < sizeof(key) ? p - curr : sizeof(key);
  932. memset(key, 0, sizeof(key));
  933. strncpy(key, curr, sz);
  934. if (!SQLWriteFileDSN (dsn, "ODBC", key, p + 1))
  935. {
  936. create_error (choose_t->mainwnd, NULL, "Error writing File DSN:",
  937. strerror (errno));
  938. goto done;
  939. }
  940. }
  941. }
  942. done:
  943. if (attr_lst != NULL)
  944. free (attr_lst);
  945. if (connstr != NULL)
  946. free (connstr);
  947. }
  948. static void
  949. filedsn_update_file_list (TDSNCHOOSER *choose_t)
  950. {
  951. /* Reset current file */
  952. gtk_entry_set_text (GTK_ENTRY (choose_t->file_entry), "");
  953. if (choose_t->fremove)
  954. gtk_widget_set_sensitive(choose_t->fremove, FALSE);
  955. if (choose_t->fconfigure)
  956. gtk_widget_set_sensitive(choose_t->fconfigure, FALSE);
  957. if (choose_t->ftest)
  958. gtk_widget_set_sensitive(choose_t->ftest, FALSE);
  959. /* Update file list */
  960. addfiles_to_list (choose_t->mainwnd, choose_t->file_list,
  961. choose_t->curr_dir);
  962. }
  963. void
  964. filedsn_add_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  965. {
  966. SQLCHAR drv[1024] = { 0 };
  967. int sqlstat;
  968. LPSTR s, attrs;
  969. TFDRIVERCHOOSER drvchoose_t;
  970. if (!choose_t)
  971. return;
  972. /* Try first to get the driver name */
  973. SQLSetConfigMode (ODBC_USER_DSN);
  974. drvchoose_t.attrs = NULL;
  975. drvchoose_t.dsn = NULL;
  976. drvchoose_t.driver = NULL;
  977. drvchoose_t.curr_dir = choose_t->curr_dir;
  978. create_fdriverchooser (choose_t->mainwnd, &drvchoose_t);
  979. /* Check output parameters */
  980. if (drvchoose_t.ok)
  981. {
  982. if (sizeof(drv) > WCSLEN(drvchoose_t.driver) + strlen("DRIVER="))
  983. {
  984. s = strcpy(drv, "DRIVER=");
  985. s += strlen("DRIVER=");
  986. dm_strcpy_W2A(s, drvchoose_t.driver);
  987. attrs = drvchoose_t.attrs;
  988. filedsn_configure(choose_t, drv, drvchoose_t.dsn,
  989. attrs ? attrs :"\0\0", TRUE, drvchoose_t.verify_conn);
  990. filedsn_update_file_list(choose_t);
  991. }
  992. }
  993. if (drvchoose_t.driver)
  994. free (drvchoose_t.driver);
  995. if (drvchoose_t.attrs)
  996. free (drvchoose_t.attrs);
  997. if (drvchoose_t.dsn)
  998. free (drvchoose_t.dsn);
  999. }
  1000. void
  1001. filedsn_remove_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  1002. {
  1003. char msg[4096];
  1004. char *filedsn;
  1005. if (!choose_t)
  1006. return;
  1007. /* Retrieve filedsn file name */
  1008. filedsn = (char*)gtk_entry_get_text (GTK_ENTRY (choose_t->file_entry));
  1009. /* Confirm removing a file dsn */
  1010. snprintf (msg, sizeof (msg),
  1011. "Are you sure you want to remove the '%s' data source?",
  1012. filedsn);
  1013. if (!create_confirm (choose_t->mainwnd, NULL, msg))
  1014. return;
  1015. /* Remove file */
  1016. if (unlink (filedsn) < 0)
  1017. {
  1018. create_error (choose_t->mainwnd, NULL, "Error removing file DSN:",
  1019. strerror (errno));
  1020. return;
  1021. }
  1022. /* Update file list */
  1023. filedsn_update_file_list(choose_t);
  1024. }
  1025. void
  1026. filedsn_configure_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  1027. {
  1028. char dsn[1024];
  1029. char *filedsn;
  1030. char *drv = NULL;
  1031. char *attrs = NULL;
  1032. char *_attrs = NULL; /* attr list */
  1033. size_t len = 0; /* current attr list length (w/o list-terminating NUL) */
  1034. char *p, *p_next;
  1035. WORD read_len;
  1036. char entries[1024];
  1037. if (!choose_t)
  1038. return;
  1039. /* Retrieve filedsn file name */
  1040. filedsn = (char*)gtk_entry_get_text (GTK_ENTRY (choose_t->file_entry));
  1041. filedsn_get_dsn (filedsn, dsn, sizeof (dsn));
  1042. /* Get list of entries in .dsn file */
  1043. if (!SQLReadFileDSN (filedsn, "ODBC", NULL,
  1044. entries, sizeof (entries), &read_len))
  1045. {
  1046. create_error (choose_t->mainwnd, NULL, "SQLReadFileDSN failed", NULL);
  1047. goto done;
  1048. }
  1049. /* add params from the .dsn file */
  1050. for (p = entries; *p != '\0'; p = p_next)
  1051. {
  1052. char *tmp;
  1053. size_t add_len; /* length of added attribute */
  1054. char value[1024];
  1055. /* get next entry */
  1056. p_next = strchr (p, ';');
  1057. if (p_next)
  1058. *p_next++ = '\0';
  1059. if (!SQLReadFileDSN (filedsn, "ODBC", p, value, sizeof(value), &read_len))
  1060. {
  1061. create_error (choose_t->mainwnd, NULL, "SQLReadFileDSN failed", NULL);
  1062. goto done;
  1063. }
  1064. if (!strcasecmp (p, "DRIVER"))
  1065. {
  1066. /* got driver keyword */
  1067. add_len = strlen ("DRIVER=") + strlen (value) + 1;
  1068. drv = malloc (add_len);
  1069. snprintf (drv, add_len, "DRIVER=%s", value);
  1070. continue;
  1071. }
  1072. /* +1 for '=', +1 for NUL */
  1073. add_len = strlen (p) + 1 + strlen (value) + 1;
  1074. /* +1 for list-terminating NUL */;
  1075. tmp = realloc (attrs, len + add_len + 1);
  1076. if (tmp == NULL)
  1077. {
  1078. create_error (choose_t->mainwnd, NULL, "Error adding file DSN:",
  1079. strerror (errno));
  1080. goto done;
  1081. }
  1082. attrs = tmp;
  1083. snprintf (attrs + len, add_len, "%s=%s", p, value);
  1084. len += add_len;
  1085. }
  1086. if (drv == NULL)
  1087. {
  1088. /* no driver found, probably unshareable file data source */
  1089. create_error (choose_t->mainwnd, NULL,
  1090. "Can't configure file DSN without DRIVER keyword (probably unshareable data source?)", NULL);
  1091. goto done;
  1092. }
  1093. if (attrs == NULL)
  1094. attrs = "\0\0";
  1095. else
  1096. {
  1097. /* NUL-terminate the list */
  1098. attrs[len] = '\0';
  1099. _attrs = attrs;
  1100. }
  1101. /* Configure file DSN */
  1102. filedsn_configure (choose_t, drv, dsn, attrs, FALSE, TRUE);
  1103. done:
  1104. if (drv != NULL)
  1105. free (drv);
  1106. if (_attrs != NULL)
  1107. free (_attrs);
  1108. }
  1109. void
  1110. filedsn_test_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  1111. {
  1112. char dsn[1024];
  1113. char connstr[4096] = { 0 };
  1114. char *filedsn;
  1115. if (!choose_t)
  1116. return;
  1117. /* Retrieve filedsn file name */
  1118. filedsn = (char*)gtk_entry_get_text (GTK_ENTRY (choose_t->file_entry));
  1119. filedsn_get_dsn (filedsn, dsn, sizeof (dsn));
  1120. /* Create connection string and connect to data source */
  1121. snprintf (connstr, sizeof (connstr), "FILEDSN=%s", filedsn);
  1122. if (test_driver_connect(choose_t, connstr))
  1123. {
  1124. _iodbcdm_messagebox (choose_t->mainwnd, filedsn,
  1125. "The connection DSN was tested successfully, and can be used at this time.");
  1126. }
  1127. }
  1128. void
  1129. filedsn_setdir_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  1130. {
  1131. char msg[4096];
  1132. if (!choose_t)
  1133. return;
  1134. /* confirm setting a directory */
  1135. snprintf (msg, sizeof (msg),
  1136. "Are you sure that you want to make '%s' the default file DSN directory?",
  1137. choose_t->curr_dir);
  1138. if (!create_confirm (choose_t->mainwnd, NULL, msg))
  1139. return;
  1140. /* write FileDSNPath value */
  1141. if (!SQLWritePrivateProfileString ("ODBC", "FileDSNPath",
  1142. choose_t->curr_dir, "odbcinst.ini"))
  1143. {
  1144. create_error (choose_t->mainwnd, NULL,
  1145. "Error setting default file DSN directory", NULL);
  1146. return;
  1147. }
  1148. }
  1149. void
  1150. filedsn_filelist_select (GtkWidget *widget, gint row, gint column,
  1151. GdkEvent *event, TDSNCHOOSER *choose_t)
  1152. {
  1153. LPSTR filename = NULL, temp = NULL;
  1154. if (choose_t)
  1155. {
  1156. /* Get the file name */
  1157. gtk_clist_get_text (GTK_CLIST (choose_t->file_list), row, 0, &filename);
  1158. /* Update the directory and file list */
  1159. temp =
  1160. (LPSTR) malloc (STRLEN (filename) + STRLEN (choose_t->curr_dir) +
  1161. 2);
  1162. if (temp)
  1163. {
  1164. STRCPY (temp, choose_t->curr_dir);
  1165. if (temp[STRLEN (temp) - 1] != '/')
  1166. STRCAT (temp, "/");
  1167. STRCAT (temp, filename);
  1168. /* Check if it's a valid file */
  1169. gtk_entry_set_text (GTK_ENTRY (choose_t->file_entry), temp);
  1170. /* And activate buttons */
  1171. if (choose_t->fremove)
  1172. gtk_widget_set_sensitive (choose_t->fremove, TRUE);
  1173. if (choose_t->fconfigure)
  1174. gtk_widget_set_sensitive (choose_t->fconfigure, TRUE);
  1175. if (choose_t->ftest)
  1176. gtk_widget_set_sensitive (choose_t->ftest, TRUE);
  1177. free (temp);
  1178. }
  1179. }
  1180. }
  1181. void
  1182. filedsn_filelist_unselect (GtkWidget *widget, gint row, gint column,
  1183. GdkEvent *event, TDSNCHOOSER *choose_t)
  1184. {
  1185. if (choose_t)
  1186. {
  1187. /* Check if it's a valid file */
  1188. gtk_entry_set_text (GTK_ENTRY (choose_t->file_entry), "");
  1189. /* And des-activate buttons */
  1190. if (choose_t->fremove)
  1191. gtk_widget_set_sensitive (choose_t->fremove, FALSE);
  1192. if (choose_t->fconfigure)
  1193. gtk_widget_set_sensitive (choose_t->fconfigure, FALSE);
  1194. if (choose_t->ftest)
  1195. gtk_widget_set_sensitive (choose_t->ftest, FALSE);
  1196. }
  1197. }
  1198. void
  1199. filedsn_dirlist_select (GtkWidget *widget, gint row, gint column,
  1200. GdkEvent *event, TDSNCHOOSER *choose_t)
  1201. {
  1202. LPSTR filename = NULL, temp = NULL;
  1203. int i;
  1204. if (choose_t)
  1205. {
  1206. /* Get the directory name */
  1207. gtk_clist_get_text (GTK_CLIST (choose_t->dir_list), row, 0, &filename);
  1208. if (filename && event && event->type == GDK_2BUTTON_PRESS)
  1209. {
  1210. /* Update the directory and file list */
  1211. temp =
  1212. (LPSTR) malloc (STRLEN (filename) +
  1213. STRLEN (choose_t->curr_dir) + 2);
  1214. if (temp)
  1215. {
  1216. if (!strcmp (filename, "."))
  1217. STRCPY (temp, choose_t->curr_dir);
  1218. else if (!strcmp (filename, ".."))
  1219. {
  1220. STRCPY (temp, choose_t->curr_dir);
  1221. for (i = STRLEN (temp) - 1; i - 1 && temp[i] != '/'; i--);
  1222. temp[i] = 0;
  1223. }
  1224. else
  1225. {
  1226. STRCPY (temp, choose_t->curr_dir);
  1227. if (temp[STRLEN (temp) - 1] != '/')
  1228. STRCAT (temp, "/");
  1229. STRCAT (temp, filename);
  1230. }
  1231. strncpy(choose_t->curr_dir, temp, sizeof(choose_t->curr_dir));
  1232. addlistofdir_to_optionmenu (choose_t->dir_combo,
  1233. choose_t->curr_dir, choose_t);
  1234. adddirectories_to_list (choose_t->mainwnd, choose_t->dir_list,
  1235. choose_t->curr_dir);
  1236. addfiles_to_list (choose_t->mainwnd, choose_t->file_list,
  1237. choose_t->curr_dir);
  1238. }
  1239. }
  1240. }
  1241. }
  1242. void
  1243. filedsn_lookin_clicked (GtkWidget *widget, void **array)
  1244. {
  1245. if (array && array[0] && array[1] && ((TDSNCHOOSER *) array[1])->curr_dir
  1246. && strcmp (((TDSNCHOOSER *) array[1])->curr_dir, array[0]))
  1247. {
  1248. TDSNCHOOSER *choose_t = (TDSNCHOOSER *) array[1];
  1249. /* Update the directory and file list */
  1250. strncpy(choose_t->curr_dir, array[0], sizeof(choose_t->curr_dir));
  1251. addlistofdir_to_optionmenu (choose_t->dir_combo,
  1252. (LPCSTR) array[0], choose_t);
  1253. adddirectories_to_list (choose_t->mainwnd,
  1254. choose_t->dir_list, (LPCSTR) array[0]);
  1255. addfiles_to_list (choose_t->mainwnd, choose_t->file_list, (LPCSTR) array[0]);
  1256. }
  1257. }
  1258. void
  1259. userdsn_list_select (GtkWidget *widget, gint row, gint column,
  1260. GdkEvent *event, TDSNCHOOSER *choose_t)
  1261. {
  1262. char *szDSN = NULL;
  1263. if (choose_t)
  1264. {
  1265. if (GTK_CLIST (choose_t->udsnlist)->selection != NULL)
  1266. gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),
  1267. GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->data),
  1268. 0, &szDSN);
  1269. if (szDSN && event && event->type == GDK_2BUTTON_PRESS)
  1270. gtk_signal_emit_by_name (GTK_OBJECT (choose_t->uconfigure), "clicked",
  1271. choose_t);
  1272. gtk_widget_set_sensitive (choose_t->uremove, TRUE);
  1273. gtk_widget_set_sensitive (choose_t->uconfigure, TRUE);
  1274. gtk_widget_set_sensitive (choose_t->utest, TRUE);
  1275. }
  1276. }
  1277. void
  1278. userdsn_list_unselect (GtkWidget *widget, gint row, gint column,
  1279. GdkEvent *event, TDSNCHOOSER *choose_t)
  1280. {
  1281. if (choose_t)
  1282. {
  1283. gtk_widget_set_sensitive (choose_t->uremove, FALSE);
  1284. gtk_widget_set_sensitive (choose_t->uconfigure, FALSE);
  1285. gtk_widget_set_sensitive (choose_t->utest, FALSE);
  1286. }
  1287. }
  1288. void
  1289. systemdsn_list_select (GtkWidget *widget, gint row, gint column,
  1290. GdkEvent *event, TDSNCHOOSER *choose_t)
  1291. {
  1292. char *szDSN = NULL;
  1293. if (choose_t)
  1294. {
  1295. if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL)
  1296. gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),
  1297. GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->data),
  1298. 0, &szDSN);
  1299. if (szDSN && event && event->type == GDK_2BUTTON_PRESS)
  1300. gtk_signal_emit_by_name (GTK_OBJECT (choose_t->sconfigure), "clicked",
  1301. choose_t);
  1302. gtk_widget_set_sensitive (choose_t->sremove, TRUE);
  1303. gtk_widget_set_sensitive (choose_t->sconfigure, TRUE);
  1304. gtk_widget_set_sensitive (choose_t->stest, TRUE);
  1305. }
  1306. }
  1307. void
  1308. systemdsn_list_unselect (GtkWidget *widget, gint row, gint column,
  1309. GdkEvent *event, TDSNCHOOSER *choose_t)
  1310. {
  1311. if (choose_t)
  1312. {
  1313. gtk_widget_set_sensitive (choose_t->sremove, FALSE);
  1314. gtk_widget_set_sensitive (choose_t->sconfigure, FALSE);
  1315. gtk_widget_set_sensitive (choose_t->stest, FALSE);
  1316. }
  1317. }
  1318. static void
  1319. dsnchooser_ok_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  1320. {
  1321. char *szDSN;
  1322. if (choose_t)
  1323. {
  1324. switch (choose_t->type_dsn)
  1325. {
  1326. case USER_DSN:
  1327. if (GTK_CLIST (choose_t->udsnlist)->selection != NULL)
  1328. {
  1329. gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),
  1330. GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->
  1331. data), 0, &szDSN);
  1332. choose_t->dsn = dm_SQL_A2W(szDSN, SQL_NTS);
  1333. }
  1334. else
  1335. choose_t->dsn = NULL;
  1336. break;
  1337. case SYSTEM_DSN:
  1338. if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL)
  1339. {
  1340. gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),
  1341. GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->
  1342. data), 0, &szDSN);
  1343. choose_t->dsn = dm_SQL_A2W (szDSN, SQL_NTS);
  1344. }
  1345. else
  1346. choose_t->dsn = NULL;
  1347. break;
  1348. default:
  1349. choose_t->dsn = NULL;
  1350. break;
  1351. };
  1352. done:
  1353. choose_t->udsnlist = choose_t->sdsnlist = NULL;
  1354. choose_t->uadd = choose_t->uremove = choose_t->utest =
  1355. choose_t->uconfigure = NULL;
  1356. choose_t->sadd = choose_t->sremove = choose_t->stest =
  1357. choose_t->sconfigure = NULL;
  1358. gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd),
  1359. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  1360. gtk_main_quit ();
  1361. gtk_widget_destroy (choose_t->mainwnd);
  1362. }
  1363. }
  1364. static void
  1365. dsnchooser_cancel_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t)
  1366. {
  1367. if (choose_t)
  1368. {
  1369. choose_t->udsnlist = choose_t->sdsnlist = NULL;
  1370. choose_t->uadd = choose_t->uremove = choose_t->utest =
  1371. choose_t->uconfigure = NULL;
  1372. choose_t->sadd = choose_t->sremove = choose_t->stest =
  1373. choose_t->sconfigure = NULL;
  1374. choose_t->type_dsn = -1;
  1375. choose_t->dsn = NULL;
  1376. gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd),
  1377. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  1378. gtk_main_quit ();
  1379. gtk_widget_destroy (choose_t->mainwnd);
  1380. }
  1381. }
  1382. static gint
  1383. delete_event (GtkWidget *widget, GdkEvent *event, TDSNCHOOSER *choose_t)
  1384. {
  1385. dsnchooser_cancel_clicked (widget, choose_t);
  1386. return FALSE;
  1387. }
  1388. void
  1389. create_dsnchooser (HWND hwnd, TDSNCHOOSER * choose_t)
  1390. {
  1391. GdkPixmap *pixmap;
  1392. GdkBitmap *mask;
  1393. GtkStyle *style;
  1394. GtkWidget *dsnchooser;
  1395. GtkWidget *vbox27;
  1396. GtkWidget *notebook1;
  1397. GtkWidget *vbox28;
  1398. GtkWidget *frame60;
  1399. GtkWidget *alignment52;
  1400. GtkWidget *hbox36;
  1401. GtkWidget *scrolledwindow17;
  1402. GtkWidget *clist1;
  1403. GtkWidget *label104;
  1404. GtkWidget *label105;
  1405. GtkWidget *label106;
  1406. GtkWidget *vbox29;
  1407. GtkWidget *b_add;
  1408. GtkWidget *b_remove;
  1409. GtkWidget *b_configure;
  1410. GtkWidget *b_test;
  1411. GtkWidget *frame61;
  1412. GtkWidget *alignment53;
  1413. GtkWidget *label107;
  1414. GtkWidget *frame62;
  1415. GtkWidget *alignment54;
  1416. GtkWidget *hbox37;
  1417. GtkWidget *pixmap1;
  1418. GtkWidget *label108;
  1419. GtkWidget *label109;
  1420. GtkWidget *vbox30;
  1421. GtkWidget *frame63;
  1422. GtkWidget *alignment55;
  1423. GtkWidget *hbox38;
  1424. GtkWidget *scrolledwindow18;
  1425. GtkWidget *clist2;
  1426. GtkWidget *label110;
  1427. GtkWidget *label111;
  1428. GtkWidget *label112;
  1429. GtkWidget *vbox31;
  1430. GtkWidget *bs_add;
  1431. GtkWidget *bs_remove;
  1432. GtkWidget *bs_configure;
  1433. GtkWidget *bs_test;
  1434. GtkWidget *frame64;
  1435. GtkWidget *alignment56;
  1436. GtkWidget *label113;
  1437. GtkWidget *frame65;
  1438. GtkWidget *alignment57;
  1439. GtkWidget *hbox39;
  1440. GtkWidget *pixmap2;
  1441. GtkWidget *label114;
  1442. GtkWidget *label115;
  1443. GtkWidget *vbox32;
  1444. GtkWidget *frame66;
  1445. GtkWidget *alignment58;
  1446. GtkWidget *hbox40;
  1447. GtkWidget *vbox33;
  1448. GtkWidget *hbox41;
  1449. GtkWidget *frame67;
  1450. GtkWidget *alignment59;
  1451. GtkWidget *hbox42;
  1452. GtkWidget *label116;
  1453. GtkWidget *optionmenu1;
  1454. GtkWidget *menu2;
  1455. GtkWidget *hbox43;
  1456. GtkWidget *scrolledwindow19;
  1457. GtkWidget *clist3;
  1458. GtkWidget *label117;
  1459. GtkWidget *scrolledwindow20;
  1460. GtkWidget *clist4;
  1461. GtkWidget *label118;
  1462. GtkWidget *frame68;
  1463. GtkWidget *alignment60;
  1464. GtkWidget *hbox44;
  1465. GtkWidget *label119;
  1466. GtkWidget *t_fileselected;
  1467. GtkWidget *vbox34;
  1468. GtkWidget *bf_add;
  1469. GtkWidget *bf_remove;
  1470. GtkWidget *bf_configure;
  1471. GtkWidget *bf_test;
  1472. GtkWidget *bf_setdir;
  1473. GtkWidget *frame69;
  1474. GtkWidget *alignment61;
  1475. GtkWidget *frame70;
  1476. GtkWidget *alignment62;
  1477. GtkWidget *hbox45;
  1478. GtkWidget *pixmap3;
  1479. GtkWidget *label120;
  1480. GtkWidget *label121;
  1481. GtkWidget *hbuttonbox2;
  1482. GtkWidget *b_cancel;
  1483. GtkWidget *b_ok;
  1484. GtkAccelGroup *accel_group;
  1485. if (!GTK_IS_WIDGET (hwnd))
  1486. {
  1487. gtk_init (0, NULL);
  1488. hwnd = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  1489. }
  1490. if (hwnd == NULL || !GTK_IS_WIDGET (hwnd))
  1491. return;
  1492. accel_group = gtk_accel_group_new ();
  1493. dsnchooser = gtk_dialog_new ();
  1494. gtk_widget_set_name (dsnchooser, "dsnchooser");
  1495. gtk_widget_set_size_request (dsnchooser, 570, 420);
  1496. gtk_window_set_title (GTK_WINDOW (dsnchooser), _("Select Data Source"));
  1497. gtk_window_set_position (GTK_WINDOW (dsnchooser), GTK_WIN_POS_CENTER);
  1498. gtk_window_set_modal (GTK_WINDOW (dsnchooser), TRUE);
  1499. gtk_window_set_default_size (GTK_WINDOW (dsnchooser), 600, 450);
  1500. gtk_window_set_type_hint (GTK_WINDOW (dsnchooser), GDK_WINDOW_TYPE_HINT_DIALOG);
  1501. #if GTK_CHECK_VERSION(2,0,0)
  1502. gtk_widget_show (dsnchooser);
  1503. #endif
  1504. vbox27 = GTK_DIALOG (dsnchooser)->vbox;
  1505. gtk_widget_set_name (vbox27, "vbox27");
  1506. gtk_widget_show (vbox27);
  1507. notebook1 = gtk_notebook_new ();
  1508. gtk_widget_set_name (notebook1, "notebook1");
  1509. gtk_widget_show (notebook1);
  1510. gtk_box_pack_start (GTK_BOX (vbox27), notebook1, TRUE, TRUE, 0);
  1511. vbox28 = gtk_vbox_new (FALSE, 0);
  1512. gtk_widget_set_name (vbox28, "vbox28");
  1513. gtk_widget_show (vbox28);
  1514. gtk_container_add (GTK_CONTAINER (notebook1), vbox28);
  1515. frame60 = gtk_frame_new (NULL);
  1516. gtk_widget_set_name (frame60, "frame60");
  1517. gtk_widget_show (frame60);
  1518. gtk_box_pack_start (GTK_BOX (vbox28), frame60, TRUE, TRUE, 0);
  1519. gtk_frame_set_shadow_type (GTK_FRAME (frame60), GTK_SHADOW_NONE);
  1520. alignment52 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1521. gtk_widget_set_name (alignment52, "alignment52");
  1522. gtk_widget_show (alignment52);
  1523. gtk_container_add (GTK_CONTAINER (frame60), alignment52);
  1524. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment52), 0, 0, 4, 0);
  1525. hbox36 = gtk_hbox_new (FALSE, 0);
  1526. gtk_widget_set_name (hbox36, "hbox36");
  1527. gtk_widget_show (hbox36);
  1528. gtk_container_add (GTK_CONTAINER (alignment52), hbox36);
  1529. scrolledwindow17 = gtk_scrolled_window_new (NULL, NULL);
  1530. gtk_widget_set_name (scrolledwindow17, "scrolledwindow17");
  1531. gtk_widget_show (scrolledwindow17);
  1532. gtk_box_pack_start (GTK_BOX (hbox36), scrolledwindow17, TRUE, TRUE, 0);
  1533. gtk_widget_set_size_request (scrolledwindow17, 440, 219);
  1534. gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow17), GTK_SHADOW_IN);
  1535. clist1 = gtk_clist_new (3);
  1536. gtk_widget_set_name (clist1, "clist1");
  1537. gtk_widget_show (clist1);
  1538. gtk_container_add (GTK_CONTAINER (scrolledwindow17), clist1);
  1539. gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 100);
  1540. gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 162);
  1541. gtk_clist_set_column_width (GTK_CLIST (clist1), 2, 80);
  1542. gtk_clist_column_titles_show (GTK_CLIST (clist1));
  1543. label104 = gtk_label_new (_("Name"));
  1544. gtk_widget_set_name (label104, "label104");
  1545. gtk_widget_show (label104);
  1546. gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, label104);
  1547. gtk_widget_set_size_request (label104, 100, -1);
  1548. label105 = gtk_label_new (_("Description"));
  1549. gtk_widget_set_name (label105, "label105");
  1550. gtk_widget_show (label105);
  1551. gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, label105);
  1552. gtk_widget_set_size_request (label105, 162, -1);
  1553. label106 = gtk_label_new (_("Driver"));
  1554. gtk_widget_set_name (label106, "label106");
  1555. gtk_widget_show (label106);
  1556. gtk_clist_set_column_widget (GTK_CLIST (clist1), 2, label106);
  1557. gtk_widget_set_size_request (label106, 80, -1);
  1558. vbox29 = gtk_vbox_new (FALSE, 0);
  1559. gtk_widget_set_name (vbox29, "vbox29");
  1560. gtk_widget_show (vbox29);
  1561. gtk_box_pack_start (GTK_BOX (hbox36), vbox29, FALSE, TRUE, 0);
  1562. b_add = gtk_button_new_from_stock ("gtk-add");
  1563. gtk_widget_set_name (b_add, "b_add");
  1564. gtk_widget_show (b_add);
  1565. gtk_box_pack_start (GTK_BOX (vbox29), b_add, FALSE, TRUE, 0);
  1566. gtk_container_set_border_width (GTK_CONTAINER (b_add), 4);
  1567. GTK_WIDGET_SET_FLAGS (b_add, GTK_CAN_DEFAULT);
  1568. gtk_widget_add_accelerator (b_add, "clicked", accel_group,
  1569. GDK_A, (GdkModifierType) GDK_MOD1_MASK,
  1570. GTK_ACCEL_VISIBLE);
  1571. b_remove = gtk_button_new_from_stock ("gtk-remove");
  1572. gtk_widget_set_name (b_remove, "b_remove");
  1573. gtk_widget_show (b_remove);
  1574. gtk_box_pack_start (GTK_BOX (vbox29), b_remove, FALSE, TRUE, 0);
  1575. gtk_container_set_border_width (GTK_CONTAINER (b_remove), 4);
  1576. gtk_widget_set_sensitive (b_remove, FALSE);
  1577. GTK_WIDGET_SET_FLAGS (b_remove, GTK_CAN_DEFAULT);
  1578. gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
  1579. GDK_R, (GdkModifierType) GDK_MOD1_MASK,
  1580. GTK_ACCEL_VISIBLE);
  1581. b_configure = gtk_button_new_with_mnemonic (_("Confi_gure"));
  1582. gtk_widget_set_name (b_configure, "b_configure");
  1583. gtk_widget_show (b_configure);
  1584. gtk_box_pack_start (GTK_BOX (vbox29), b_configure, FALSE, TRUE, 0);
  1585. gtk_container_set_border_width (GTK_CONTAINER (b_configure), 4);
  1586. gtk_widget_set_sensitive (b_configure, FALSE);
  1587. GTK_WIDGET_SET_FLAGS (b_configure, GTK_CAN_DEFAULT);
  1588. gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
  1589. GDK_G, (GdkModifierType) GDK_MOD1_MASK,
  1590. GTK_ACCEL_VISIBLE);
  1591. gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
  1592. GDK_g, (GdkModifierType) GDK_MOD1_MASK,
  1593. GTK_ACCEL_VISIBLE);
  1594. b_test = gtk_button_new_with_mnemonic (_("_Test"));
  1595. gtk_widget_set_name (b_test, "b_test");
  1596. gtk_widget_show (b_test);
  1597. gtk_box_pack_start (GTK_BOX (vbox29), b_test, FALSE, TRUE, 0);
  1598. gtk_container_set_border_width (GTK_CONTAINER (b_test), 4);
  1599. gtk_widget_set_sensitive (b_test, FALSE);
  1600. GTK_WIDGET_SET_FLAGS (b_test, GTK_CAN_DEFAULT);
  1601. gtk_widget_add_accelerator (b_test, "clicked", accel_group,
  1602. GDK_T, (GdkModifierType) GDK_MOD1_MASK,
  1603. GTK_ACCEL_VISIBLE);
  1604. frame61 = gtk_frame_new (NULL);
  1605. gtk_widget_set_name (frame61, "frame61");
  1606. gtk_widget_show (frame61);
  1607. gtk_box_pack_start (GTK_BOX (vbox29), frame61, TRUE, TRUE, 0);
  1608. gtk_widget_set_size_request (frame61, -1, 80);
  1609. gtk_frame_set_shadow_type (GTK_FRAME (frame61), GTK_SHADOW_NONE);
  1610. alignment53 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1611. gtk_widget_set_name (alignment53, "alignment53");
  1612. gtk_widget_show (alignment53);
  1613. gtk_container_add (GTK_CONTAINER (frame61), alignment53);
  1614. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment53), 0, 0, 12, 0);
  1615. label107 = gtk_label_new (_(" User Data Sources:"));
  1616. gtk_widget_set_name (label107, "label107");
  1617. gtk_widget_show (label107);
  1618. gtk_frame_set_label_widget (GTK_FRAME (frame60), label107);
  1619. gtk_label_set_use_markup (GTK_LABEL (label107), TRUE);
  1620. frame62 = gtk_frame_new (NULL);
  1621. gtk_widget_set_name (frame62, "frame62");
  1622. gtk_widget_show (frame62);
  1623. gtk_box_pack_start (GTK_BOX (vbox28), frame62, FALSE, TRUE, 0);
  1624. gtk_container_set_border_width (GTK_CONTAINER (frame62), 3);
  1625. alignment54 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1626. gtk_widget_set_name (alignment54, "alignment54");
  1627. gtk_widget_show (alignment54);
  1628. gtk_container_add (GTK_CONTAINER (frame62), alignment54);
  1629. hbox37 = gtk_hbox_new (FALSE, 0);
  1630. gtk_widget_set_name (hbox37, "hbox37");
  1631. gtk_widget_show (hbox37);
  1632. gtk_container_add (GTK_CONTAINER (alignment54), hbox37);
  1633. #if GTK_CHECK_VERSION(2,0,0)
  1634. style = gtk_widget_get_style (dsnchooser);
  1635. pixmap =
  1636. gdk_pixmap_create_from_xpm_d (dsnchooser->window, &mask,
  1637. &style->bg[GTK_STATE_NORMAL], (gchar **) odbc4_xpm);
  1638. #else
  1639. style = gtk_widget_get_style (GTK_WIDGET (hwnd));
  1640. pixmap =
  1641. gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask,
  1642. &style->bg[GTK_STATE_NORMAL], (gchar **) odbc4_xpm);
  1643. #endif
  1644. pixmap1 = gtk_pixmap_new (pixmap, mask);
  1645. gtk_widget_set_name (pixmap1, "pixmap1");
  1646. gtk_widget_show (pixmap1);
  1647. gtk_box_pack_start (GTK_BOX (hbox37), pixmap1, FALSE, TRUE, 10);
  1648. label108 = gtk_label_new (_("An ODBC User data source stores information about to connect to\nthe indicated data provider. A User data source is only available to you,\nand can only be used on the current machine."));
  1649. gtk_widget_set_name (label108, "label108");
  1650. gtk_widget_show (label108);
  1651. gtk_box_pack_start (GTK_BOX (hbox37), label108, FALSE, TRUE, 0);
  1652. gtk_label_set_justify (GTK_LABEL (label108), GTK_JUSTIFY_FILL);
  1653. label109 = gtk_label_new (_("User DSN"));
  1654. gtk_widget_set_name (label109, "label109");
  1655. gtk_widget_show (label109);
  1656. gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label109);
  1657. choose_t->uadd = b_add;
  1658. choose_t->uremove = b_remove;
  1659. choose_t->utest = b_test;
  1660. choose_t->uconfigure = b_configure;
  1661. vbox30 = gtk_vbox_new (FALSE, 0);
  1662. gtk_widget_set_name (vbox30, "vbox30");
  1663. gtk_widget_show (vbox30);
  1664. gtk_container_add (GTK_CONTAINER (notebook1), vbox30);
  1665. frame63 = gtk_frame_new (NULL);
  1666. gtk_widget_set_name (frame63, "frame63");
  1667. gtk_widget_show (frame63);
  1668. gtk_box_pack_start (GTK_BOX (vbox30), frame63, TRUE, TRUE, 0);
  1669. gtk_frame_set_shadow_type (GTK_FRAME (frame63), GTK_SHADOW_NONE);
  1670. alignment55 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1671. gtk_widget_set_name (alignment55, "alignment55");
  1672. gtk_widget_show (alignment55);
  1673. gtk_container_add (GTK_CONTAINER (frame63), alignment55);
  1674. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment55), 0, 0, 4, 0);
  1675. hbox38 = gtk_hbox_new (FALSE, 0);
  1676. gtk_widget_set_name (hbox38, "hbox38");
  1677. gtk_widget_show (hbox38);
  1678. gtk_container_add (GTK_CONTAINER (alignment55), hbox38);
  1679. scrolledwindow18 = gtk_scrolled_window_new (NULL, NULL);
  1680. gtk_widget_set_name (scrolledwindow18, "scrolledwindow18");
  1681. gtk_widget_show (scrolledwindow18);
  1682. gtk_box_pack_start (GTK_BOX (hbox38), scrolledwindow18, TRUE, TRUE, 0);
  1683. gtk_widget_set_size_request (scrolledwindow18, 440, 219);
  1684. gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow18), GTK_SHADOW_IN);
  1685. clist2 = gtk_clist_new (3);
  1686. gtk_widget_set_name (clist2, "clist2");
  1687. gtk_widget_show (clist2);
  1688. gtk_container_add (GTK_CONTAINER (scrolledwindow18), clist2);
  1689. gtk_clist_set_column_width (GTK_CLIST (clist2), 0, 100);
  1690. gtk_clist_set_column_width (GTK_CLIST (clist2), 1, 163);
  1691. gtk_clist_set_column_width (GTK_CLIST (clist2), 2, 80);
  1692. gtk_clist_column_titles_show (GTK_CLIST (clist2));
  1693. label110 = gtk_label_new (_("Name"));
  1694. gtk_widget_set_name (label110, "label110");
  1695. gtk_widget_show (label110);
  1696. gtk_clist_set_column_widget (GTK_CLIST (clist2), 0, label110);
  1697. gtk_widget_set_size_request (label110, 100, -1);
  1698. label111 = gtk_label_new (_("Description"));
  1699. gtk_widget_set_name (label111, "label111");
  1700. gtk_widget_show (label111);
  1701. gtk_clist_set_column_widget (GTK_CLIST (clist2), 1, label111);
  1702. gtk_widget_set_size_request (label111, 162, -1);
  1703. label112 = gtk_label_new (_("Driver"));
  1704. gtk_widget_set_name (label112, "label112");
  1705. gtk_widget_show (label112);
  1706. gtk_clist_set_column_widget (GTK_CLIST (clist2), 2, label112);
  1707. gtk_widget_set_size_request (label112, 80, -1);
  1708. vbox31 = gtk_vbox_new (FALSE, 0);
  1709. gtk_widget_set_name (vbox31, "vbox31");
  1710. gtk_widget_show (vbox31);
  1711. gtk_box_pack_start (GTK_BOX (hbox38), vbox31, FALSE, TRUE, 0);
  1712. bs_add = gtk_button_new_from_stock ("gtk-add");
  1713. gtk_widget_set_name (bs_add, "bs_add");
  1714. gtk_widget_show (bs_add);
  1715. gtk_box_pack_start (GTK_BOX (vbox31), bs_add, FALSE, TRUE, 0);
  1716. gtk_container_set_border_width (GTK_CONTAINER (bs_add), 4);
  1717. GTK_WIDGET_SET_FLAGS (bs_add, GTK_CAN_DEFAULT);
  1718. gtk_widget_add_accelerator (bs_add, "clicked", accel_group,
  1719. GDK_A, (GdkModifierType) GDK_MOD1_MASK,
  1720. GTK_ACCEL_VISIBLE);
  1721. bs_remove = gtk_button_new_from_stock ("gtk-remove");
  1722. gtk_widget_set_name (bs_remove, "bs_remove");
  1723. gtk_widget_show (bs_remove);
  1724. gtk_box_pack_start (GTK_BOX (vbox31), bs_remove, FALSE, TRUE, 0);
  1725. gtk_container_set_border_width (GTK_CONTAINER (bs_remove), 4);
  1726. gtk_widget_set_sensitive (bs_remove, FALSE);
  1727. GTK_WIDGET_SET_FLAGS (bs_remove, GTK_CAN_DEFAULT);
  1728. gtk_widget_add_accelerator (bs_remove, "clicked", accel_group,
  1729. GDK_R, (GdkModifierType) GDK_MOD1_MASK,
  1730. GTK_ACCEL_VISIBLE);
  1731. bs_configure = gtk_button_new_with_mnemonic (_("Confi_gure"));
  1732. gtk_widget_set_name (bs_configure, "bs_configure");
  1733. gtk_widget_show (bs_configure);
  1734. gtk_box_pack_start (GTK_BOX (vbox31), bs_configure, FALSE, TRUE, 0);
  1735. gtk_container_set_border_width (GTK_CONTAINER (bs_configure), 4);
  1736. gtk_widget_set_sensitive (bs_configure, FALSE);
  1737. GTK_WIDGET_SET_FLAGS (bs_configure, GTK_CAN_DEFAULT);
  1738. gtk_widget_add_accelerator (bs_configure, "clicked", accel_group,
  1739. GDK_G, (GdkModifierType) GDK_MOD1_MASK,
  1740. GTK_ACCEL_VISIBLE);
  1741. gtk_widget_add_accelerator (bs_configure, "clicked", accel_group,
  1742. GDK_g, (GdkModifierType) GDK_MOD1_MASK,
  1743. GTK_ACCEL_VISIBLE);
  1744. bs_test = gtk_button_new_with_mnemonic (_("_Test"));
  1745. gtk_widget_set_name (bs_test, "bs_test");
  1746. gtk_widget_show (bs_test);
  1747. gtk_box_pack_start (GTK_BOX (vbox31), bs_test, FALSE, TRUE, 0);
  1748. gtk_container_set_border_width (GTK_CONTAINER (bs_test), 4);
  1749. gtk_widget_set_sensitive (bs_test, FALSE);
  1750. GTK_WIDGET_SET_FLAGS (bs_test, GTK_CAN_DEFAULT);
  1751. gtk_widget_add_accelerator (bs_test, "clicked", accel_group,
  1752. GDK_T, (GdkModifierType) GDK_MOD1_MASK,
  1753. GTK_ACCEL_VISIBLE);
  1754. frame64 = gtk_frame_new (NULL);
  1755. gtk_widget_set_name (frame64, "frame64");
  1756. gtk_widget_show (frame64);
  1757. gtk_box_pack_start (GTK_BOX (vbox31), frame64, TRUE, TRUE, 0);
  1758. gtk_widget_set_size_request (frame64, -1, 80);
  1759. gtk_frame_set_shadow_type (GTK_FRAME (frame64), GTK_SHADOW_NONE);
  1760. alignment56 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1761. gtk_widget_set_name (alignment56, "alignment56");
  1762. gtk_widget_show (alignment56);
  1763. gtk_container_add (GTK_CONTAINER (frame64), alignment56);
  1764. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment56), 0, 0, 12, 0);
  1765. label113 = gtk_label_new (_(" System Data Sources:"));
  1766. gtk_widget_set_name (label113, "label113");
  1767. gtk_widget_show (label113);
  1768. gtk_frame_set_label_widget (GTK_FRAME (frame63), label113);
  1769. gtk_label_set_use_markup (GTK_LABEL (label113), TRUE);
  1770. frame65 = gtk_frame_new (NULL);
  1771. gtk_widget_set_name (frame65, "frame65");
  1772. gtk_widget_show (frame65);
  1773. gtk_box_pack_start (GTK_BOX (vbox30), frame65, FALSE, TRUE, 0);
  1774. gtk_container_set_border_width (GTK_CONTAINER (frame65), 3);
  1775. alignment57 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1776. gtk_widget_set_name (alignment57, "alignment57");
  1777. gtk_widget_show (alignment57);
  1778. gtk_container_add (GTK_CONTAINER (frame65), alignment57);
  1779. hbox39 = gtk_hbox_new (FALSE, 0);
  1780. gtk_widget_set_name (hbox39, "hbox39");
  1781. gtk_widget_show (hbox39);
  1782. gtk_container_add (GTK_CONTAINER (alignment57), hbox39);
  1783. gtk_container_set_border_width (GTK_CONTAINER (hbox39), 10);
  1784. pixmap2 = gtk_pixmap_new (pixmap, mask);
  1785. gtk_widget_set_name (pixmap2, "pixmap2");
  1786. gtk_widget_show (pixmap2);
  1787. gtk_box_pack_start (GTK_BOX (hbox39), pixmap2, FALSE, TRUE, 10);
  1788. label114 = gtk_label_new (_("An ODBC System data source stores information about to connect to\nthe indicated data provider. A System data source is visible to all\nusers on this machine, including daemons."));
  1789. gtk_widget_set_name (label114, "label114");
  1790. gtk_widget_show (label114);
  1791. gtk_box_pack_start (GTK_BOX (hbox39), label114, FALSE, TRUE, 0);
  1792. gtk_label_set_justify (GTK_LABEL (label114), GTK_JUSTIFY_FILL);
  1793. label115 = gtk_label_new (_("System DSN"));
  1794. gtk_widget_set_name (label115, "label115");
  1795. gtk_widget_show (label115);
  1796. gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label115);
  1797. choose_t->sadd = bs_add;
  1798. choose_t->sremove = bs_remove;
  1799. choose_t->stest = bs_test;
  1800. choose_t->sconfigure = bs_configure;
  1801. vbox32 = gtk_vbox_new (FALSE, 0);
  1802. gtk_widget_set_name (vbox32, "vbox32");
  1803. gtk_widget_show (vbox32);
  1804. gtk_container_add (GTK_CONTAINER (notebook1), vbox32);
  1805. frame66 = gtk_frame_new (NULL);
  1806. gtk_widget_set_name (frame66, "frame66");
  1807. gtk_widget_show (frame66);
  1808. gtk_box_pack_start (GTK_BOX (vbox32), frame66, TRUE, TRUE, 0);
  1809. gtk_container_set_border_width (GTK_CONTAINER (frame66), 2);
  1810. gtk_frame_set_shadow_type (GTK_FRAME (frame66), GTK_SHADOW_NONE);
  1811. alignment58 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1812. gtk_widget_set_name (alignment58, "alignment58");
  1813. gtk_widget_show (alignment58);
  1814. gtk_container_add (GTK_CONTAINER (frame66), alignment58);
  1815. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment58), 0, 0, 4, 0);
  1816. hbox40 = gtk_hbox_new (FALSE, 0);
  1817. gtk_widget_set_name (hbox40, "hbox40");
  1818. gtk_widget_show (hbox40);
  1819. gtk_container_add (GTK_CONTAINER (alignment58), hbox40);
  1820. vbox33 = gtk_vbox_new (FALSE, 0);
  1821. gtk_widget_set_name (vbox33, "vbox33");
  1822. gtk_widget_show (vbox33);
  1823. gtk_box_pack_start (GTK_BOX (hbox40), vbox33, TRUE, TRUE, 0);
  1824. gtk_widget_set_size_request (vbox33, 436, 250);
  1825. hbox41 = gtk_hbox_new (FALSE, 0);
  1826. gtk_widget_set_name (hbox41, "hbox41");
  1827. gtk_widget_show (hbox41);
  1828. gtk_box_pack_start (GTK_BOX (vbox33), hbox41, FALSE, FALSE, 0);
  1829. frame67 = gtk_frame_new (NULL);
  1830. gtk_widget_set_name (frame67, "frame67");
  1831. gtk_widget_show (frame67);
  1832. gtk_box_pack_start (GTK_BOX (hbox41), frame67, TRUE, TRUE, 0);
  1833. gtk_container_set_border_width (GTK_CONTAINER (frame67), 4);
  1834. gtk_frame_set_shadow_type (GTK_FRAME (frame67), GTK_SHADOW_NONE);
  1835. alignment59 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1836. gtk_widget_set_name (alignment59, "alignment59");
  1837. gtk_widget_show (alignment59);
  1838. gtk_container_add (GTK_CONTAINER (frame67), alignment59);
  1839. gtk_container_set_border_width (GTK_CONTAINER (alignment59), 2);
  1840. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment59), 0, 0, 6, 0);
  1841. hbox42 = gtk_hbox_new (FALSE, 0);
  1842. gtk_widget_set_name (hbox42, "hbox42");
  1843. gtk_widget_show (hbox42);
  1844. gtk_container_add (GTK_CONTAINER (alignment59), hbox42);
  1845. label116 = gtk_label_new (_("Look in : "));
  1846. gtk_widget_set_name (label116, "label116");
  1847. gtk_widget_show (label116);
  1848. gtk_box_pack_start (GTK_BOX (hbox42), label116, FALSE, FALSE, 0);
  1849. optionmenu1 = gtk_option_menu_new ();
  1850. gtk_widget_set_name (optionmenu1, "optionmenu1");
  1851. gtk_widget_show (optionmenu1);
  1852. gtk_box_pack_start (GTK_BOX (hbox42), optionmenu1, TRUE, TRUE, 0);
  1853. menu2 = gtk_menu_new ();
  1854. gtk_widget_set_name (menu2, "menu2");
  1855. gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu1), menu2);
  1856. hbox43 = gtk_hbox_new (FALSE, 0);
  1857. gtk_widget_set_name (hbox43, "hbox43");
  1858. gtk_widget_show (hbox43);
  1859. gtk_box_pack_start (GTK_BOX (vbox33), hbox43, TRUE, TRUE, 0);
  1860. scrolledwindow19 = gtk_scrolled_window_new (NULL, NULL);
  1861. gtk_widget_set_name (scrolledwindow19, "scrolledwindow19");
  1862. gtk_widget_show (scrolledwindow19);
  1863. gtk_box_pack_start (GTK_BOX (hbox43), scrolledwindow19, TRUE, TRUE, 0);
  1864. gtk_widget_set_size_request (scrolledwindow19, 96, -1);
  1865. gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow19), 4);
  1866. clist3 = gtk_clist_new (1);
  1867. gtk_widget_set_name (clist3, "clist3");
  1868. gtk_widget_show (clist3);
  1869. gtk_container_add (GTK_CONTAINER (scrolledwindow19), clist3);
  1870. gtk_clist_set_column_width (GTK_CLIST (clist3), 0, 80);
  1871. gtk_clist_column_titles_show (GTK_CLIST (clist3));
  1872. label117 = gtk_label_new (_("Directories"));
  1873. gtk_widget_set_name (label117, "label117");
  1874. gtk_widget_show (label117);
  1875. gtk_clist_set_column_widget (GTK_CLIST (clist3), 0, label117);
  1876. scrolledwindow20 = gtk_scrolled_window_new (NULL, NULL);
  1877. gtk_widget_set_name (scrolledwindow20, "scrolledwindow20");
  1878. gtk_widget_show (scrolledwindow20);
  1879. gtk_box_pack_start (GTK_BOX (hbox43), scrolledwindow20, TRUE, TRUE, 0);
  1880. gtk_widget_set_size_request (scrolledwindow20, 102, -1);
  1881. gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow20), 4);
  1882. clist4 = gtk_clist_new (1);
  1883. gtk_widget_set_name (clist4, "clist4");
  1884. gtk_widget_show (clist4);
  1885. gtk_container_add (GTK_CONTAINER (scrolledwindow20), clist4);
  1886. gtk_clist_set_column_width (GTK_CLIST (clist4), 0, 80);
  1887. gtk_clist_column_titles_show (GTK_CLIST (clist4));
  1888. label118 = gtk_label_new (_("Files"));
  1889. gtk_widget_set_name (label118, "label118");
  1890. gtk_widget_show (label118);
  1891. gtk_clist_set_column_widget (GTK_CLIST (clist4), 0, label118);
  1892. frame68 = gtk_frame_new (NULL);
  1893. gtk_widget_set_name (frame68, "frame68");
  1894. gtk_widget_show (frame68);
  1895. gtk_box_pack_start (GTK_BOX (vbox33), frame68, FALSE, TRUE, 0);
  1896. gtk_container_set_border_width (GTK_CONTAINER (frame68), 4);
  1897. gtk_frame_set_shadow_type (GTK_FRAME (frame68), GTK_SHADOW_NONE);
  1898. alignment60 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1899. gtk_widget_set_name (alignment60, "alignment60");
  1900. gtk_widget_show (alignment60);
  1901. gtk_container_add (GTK_CONTAINER (frame68), alignment60);
  1902. gtk_container_set_border_width (GTK_CONTAINER (alignment60), 2);
  1903. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment60), 0, 0, 6, 0);
  1904. hbox44 = gtk_hbox_new (FALSE, 0);
  1905. gtk_widget_set_name (hbox44, "hbox44");
  1906. gtk_widget_show (hbox44);
  1907. gtk_container_add (GTK_CONTAINER (alignment60), hbox44);
  1908. label119 = gtk_label_new (_("File selected:"));
  1909. gtk_widget_set_name (label119, "label119");
  1910. gtk_widget_show (label119);
  1911. gtk_box_pack_start (GTK_BOX (hbox44), label119, FALSE, FALSE, 0);
  1912. t_fileselected = gtk_entry_new ();
  1913. gtk_widget_set_name (t_fileselected, "t_fileselected");
  1914. gtk_widget_show (t_fileselected);
  1915. gtk_box_pack_start (GTK_BOX (hbox44), t_fileselected, TRUE, TRUE, 0);
  1916. vbox34 = gtk_vbox_new (FALSE, 0);
  1917. gtk_widget_set_name (vbox34, "vbox34");
  1918. gtk_widget_show (vbox34);
  1919. gtk_box_pack_start (GTK_BOX (hbox40), vbox34, FALSE, TRUE, 0);
  1920. bf_add = gtk_button_new_from_stock ("gtk-add");
  1921. gtk_widget_set_name (bf_add, "bf_add");
  1922. gtk_widget_show (bf_add);
  1923. gtk_box_pack_start (GTK_BOX (vbox34), bf_add, FALSE, TRUE, 0);
  1924. gtk_container_set_border_width (GTK_CONTAINER (bf_add), 4);
  1925. GTK_WIDGET_SET_FLAGS (bf_add, GTK_CAN_DEFAULT);
  1926. gtk_widget_add_accelerator (bf_add, "clicked", accel_group,
  1927. GDK_A, (GdkModifierType) GDK_MOD1_MASK,
  1928. GTK_ACCEL_VISIBLE);
  1929. bf_remove = gtk_button_new_from_stock ("gtk-remove");
  1930. gtk_widget_set_name (bf_remove, "bf_remove");
  1931. gtk_widget_show (bf_remove);
  1932. gtk_box_pack_start (GTK_BOX (vbox34), bf_remove, FALSE, TRUE, 0);
  1933. gtk_container_set_border_width (GTK_CONTAINER (bf_remove), 4);
  1934. GTK_WIDGET_SET_FLAGS (bf_remove, GTK_CAN_DEFAULT);
  1935. gtk_widget_add_accelerator (bf_remove, "clicked", accel_group,
  1936. GDK_R, (GdkModifierType) GDK_MOD1_MASK,
  1937. GTK_ACCEL_VISIBLE);
  1938. bf_configure = gtk_button_new_with_mnemonic (_("Confi_gure"));
  1939. gtk_widget_set_name (bf_configure, "bf_configure");
  1940. gtk_widget_show (bf_configure);
  1941. gtk_box_pack_start (GTK_BOX (vbox34), bf_configure, FALSE, TRUE, 0);
  1942. gtk_container_set_border_width (GTK_CONTAINER (bf_configure), 4);
  1943. GTK_WIDGET_SET_FLAGS (bf_configure, GTK_CAN_DEFAULT);
  1944. gtk_widget_add_accelerator (bf_configure, "clicked", accel_group,
  1945. GDK_G, (GdkModifierType) GDK_MOD1_MASK,
  1946. GTK_ACCEL_VISIBLE);
  1947. gtk_widget_add_accelerator (bf_configure, "clicked", accel_group,
  1948. GDK_g, (GdkModifierType) GDK_MOD1_MASK,
  1949. GTK_ACCEL_VISIBLE);
  1950. bf_test = gtk_button_new_with_mnemonic (_("_Test"));
  1951. gtk_widget_set_name (bf_test, "bf_test");
  1952. gtk_widget_show (bf_test);
  1953. gtk_box_pack_start (GTK_BOX (vbox34), bf_test, FALSE, TRUE, 0);
  1954. gtk_container_set_border_width (GTK_CONTAINER (bf_test), 4);
  1955. GTK_WIDGET_SET_FLAGS (bf_test, GTK_CAN_DEFAULT);
  1956. gtk_widget_add_accelerator (bf_test, "clicked", accel_group,
  1957. GDK_T, (GdkModifierType) GDK_MOD1_MASK,
  1958. GTK_ACCEL_VISIBLE);
  1959. bf_setdir = gtk_button_new_with_mnemonic (_("_Set Dir"));
  1960. gtk_widget_set_name (bf_setdir, "bf_setdir");
  1961. gtk_widget_show (bf_setdir);
  1962. gtk_box_pack_start (GTK_BOX (vbox34), bf_setdir, FALSE, TRUE, 0);
  1963. gtk_container_set_border_width (GTK_CONTAINER (bf_setdir), 4);
  1964. GTK_WIDGET_SET_FLAGS (bf_setdir, GTK_CAN_DEFAULT);
  1965. gtk_widget_add_accelerator (bf_setdir, "clicked", accel_group,
  1966. GDK_S, (GdkModifierType) GDK_MOD1_MASK,
  1967. GTK_ACCEL_VISIBLE);
  1968. frame69 = gtk_frame_new (NULL);
  1969. gtk_widget_set_name (frame69, "frame69");
  1970. gtk_widget_show (frame69);
  1971. gtk_box_pack_start (GTK_BOX (vbox34), frame69, TRUE, TRUE, 0);
  1972. gtk_widget_set_size_request (frame69, -1, 80);
  1973. gtk_frame_set_shadow_type (GTK_FRAME (frame69), GTK_SHADOW_NONE);
  1974. alignment61 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1975. gtk_widget_set_name (alignment61, "alignment61");
  1976. gtk_widget_show (alignment61);
  1977. gtk_container_add (GTK_CONTAINER (frame69), alignment61);
  1978. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment61), 0, 0, 12, 0);
  1979. frame70 = gtk_frame_new (NULL);
  1980. gtk_widget_set_name (frame70, "frame70");
  1981. gtk_widget_show (frame70);
  1982. gtk_box_pack_start (GTK_BOX (vbox32), frame70, FALSE, TRUE, 0);
  1983. gtk_container_set_border_width (GTK_CONTAINER (frame70), 3);
  1984. alignment62 = gtk_alignment_new (0.5, 0.5, 1, 1);
  1985. gtk_widget_set_name (alignment62, "alignment62");
  1986. gtk_widget_show (alignment62);
  1987. gtk_container_add (GTK_CONTAINER (frame70), alignment62);
  1988. hbox45 = gtk_hbox_new (FALSE, 0);
  1989. gtk_widget_set_name (hbox45, "hbox45");
  1990. gtk_widget_show (hbox45);
  1991. gtk_container_add (GTK_CONTAINER (alignment62), hbox45);
  1992. gtk_container_set_border_width (GTK_CONTAINER (hbox45), 10);
  1993. pixmap3 = gtk_pixmap_new (pixmap, mask);
  1994. gtk_widget_set_name (pixmap3, "pixmap3");
  1995. gtk_widget_show (pixmap3);
  1996. gtk_box_pack_start (GTK_BOX (hbox45), pixmap3, FALSE, TRUE, 10);
  1997. label120 = gtk_label_new (_("Select the file data source that describes the driver that you wish to\nconnect to. You can use any file data source that refers to an ODBC\ndriver which is installed on your machine."));
  1998. gtk_widget_set_name (label120, "label120");
  1999. gtk_widget_show (label120);
  2000. gtk_box_pack_start (GTK_BOX (hbox45), label120, FALSE, TRUE, 0);
  2001. gtk_label_set_justify (GTK_LABEL (label120), GTK_JUSTIFY_FILL);
  2002. label121 = gtk_label_new (_("File DSN"));
  2003. gtk_widget_set_name (label121, "label121");
  2004. gtk_widget_show (label121);
  2005. gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), label121);
  2006. choose_t->fadd = bf_add;
  2007. choose_t->fremove = bf_remove;
  2008. choose_t->fconfigure = bf_configure;
  2009. choose_t->ftest = bf_test;
  2010. choose_t->dir_list = clist3;
  2011. choose_t->dir_combo = optionmenu1;
  2012. choose_t->file_list = clist4;
  2013. choose_t->file_entry = t_fileselected;
  2014. choose_t->fsetdir = bf_setdir;
  2015. hbuttonbox2 = GTK_DIALOG (dsnchooser)->action_area;
  2016. gtk_widget_set_name (hbuttonbox2, "hbuttonbox2");
  2017. gtk_widget_show (hbuttonbox2);
  2018. gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox2), GTK_BUTTONBOX_END);
  2019. b_cancel = gtk_button_new_from_stock ("gtk-cancel");
  2020. gtk_widget_set_name (b_cancel, "b_cancel");
  2021. gtk_widget_show (b_cancel);
  2022. gtk_dialog_add_action_widget (GTK_DIALOG (dsnchooser), b_cancel, GTK_RESPONSE_CANCEL);
  2023. GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT);
  2024. b_ok = gtk_button_new_from_stock ("gtk-ok");
  2025. gtk_widget_set_name (b_ok, "b_ok");
  2026. gtk_widget_show (b_ok);
  2027. gtk_dialog_add_action_widget (GTK_DIALOG (dsnchooser), b_ok, GTK_RESPONSE_OK);
  2028. GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT);
  2029. /* Store pointers to all widgets, for use by lookup_widget(). */
  2030. GLADE_HOOKUP_OBJECT_NO_REF (dsnchooser, dsnchooser, "dsnchooser");
  2031. GLADE_HOOKUP_OBJECT_NO_REF (dsnchooser, vbox27, "vbox27");
  2032. GLADE_HOOKUP_OBJECT (dsnchooser, notebook1, "notebook1");
  2033. GLADE_HOOKUP_OBJECT (dsnchooser, vbox28, "vbox28");
  2034. GLADE_HOOKUP_OBJECT (dsnchooser, frame60, "frame60");
  2035. GLADE_HOOKUP_OBJECT (dsnchooser, alignment52, "alignment52");
  2036. GLADE_HOOKUP_OBJECT (dsnchooser, hbox36, "hbox36");
  2037. GLADE_HOOKUP_OBJECT (dsnchooser, scrolledwindow17, "scrolledwindow17");
  2038. GLADE_HOOKUP_OBJECT (dsnchooser, clist1, "clist1");
  2039. GLADE_HOOKUP_OBJECT (dsnchooser, label104, "label104");
  2040. GLADE_HOOKUP_OBJECT (dsnchooser, label105, "label105");
  2041. GLADE_HOOKUP_OBJECT (dsnchooser, label106, "label106");
  2042. GLADE_HOOKUP_OBJECT (dsnchooser, vbox29, "vbox29");
  2043. GLADE_HOOKUP_OBJECT (dsnchooser, b_add, "b_add");
  2044. GLADE_HOOKUP_OBJECT (dsnchooser, b_remove, "b_remove");
  2045. GLADE_HOOKUP_OBJECT (dsnchooser, b_configure, "b_configure");
  2046. GLADE_HOOKUP_OBJECT (dsnchooser, b_test, "b_test");
  2047. GLADE_HOOKUP_OBJECT (dsnchooser, frame61, "frame61");
  2048. GLADE_HOOKUP_OBJECT (dsnchooser, alignment53, "alignment53");
  2049. GLADE_HOOKUP_OBJECT (dsnchooser, label107, "label107");
  2050. GLADE_HOOKUP_OBJECT (dsnchooser, frame62, "frame62");
  2051. GLADE_HOOKUP_OBJECT (dsnchooser, alignment54, "alignment54");
  2052. GLADE_HOOKUP_OBJECT (dsnchooser, hbox37, "hbox37");
  2053. GLADE_HOOKUP_OBJECT (dsnchooser, pixmap1, "pixmap1");
  2054. GLADE_HOOKUP_OBJECT (dsnchooser, label108, "label108");
  2055. GLADE_HOOKUP_OBJECT (dsnchooser, label109, "label109");
  2056. GLADE_HOOKUP_OBJECT (dsnchooser, vbox30, "vbox30");
  2057. GLADE_HOOKUP_OBJECT (dsnchooser, frame63, "frame63");
  2058. GLADE_HOOKUP_OBJECT (dsnchooser, alignment55, "alignment55");
  2059. GLADE_HOOKUP_OBJECT (dsnchooser, hbox38, "hbox38");
  2060. GLADE_HOOKUP_OBJECT (dsnchooser, scrolledwindow18, "scrolledwindow18");
  2061. GLADE_HOOKUP_OBJECT (dsnchooser, clist2, "clist2");
  2062. GLADE_HOOKUP_OBJECT (dsnchooser, label110, "label110");
  2063. GLADE_HOOKUP_OBJECT (dsnchooser, label111, "label111");
  2064. GLADE_HOOKUP_OBJECT (dsnchooser, label112, "label112");
  2065. GLADE_HOOKUP_OBJECT (dsnchooser, vbox31, "vbox31");
  2066. GLADE_HOOKUP_OBJECT (dsnchooser, bs_add, "bs_add");
  2067. GLADE_HOOKUP_OBJECT (dsnchooser, bs_remove, "bs_remove");
  2068. GLADE_HOOKUP_OBJECT (dsnchooser, bs_configure, "bs_configure");
  2069. GLADE_HOOKUP_OBJECT (dsnchooser, bs_test, "bs_test");
  2070. GLADE_HOOKUP_OBJECT (dsnchooser, frame64, "frame64");
  2071. GLADE_HOOKUP_OBJECT (dsnchooser, alignment56, "alignment56");
  2072. GLADE_HOOKUP_OBJECT (dsnchooser, label113, "label113");
  2073. GLADE_HOOKUP_OBJECT (dsnchooser, frame65, "frame65");
  2074. GLADE_HOOKUP_OBJECT (dsnchooser, alignment57, "alignment57");
  2075. GLADE_HOOKUP_OBJECT (dsnchooser, hbox39, "hbox39");
  2076. GLADE_HOOKUP_OBJECT (dsnchooser, pixmap2, "pixmap2");
  2077. GLADE_HOOKUP_OBJECT (dsnchooser, label114, "label114");
  2078. GLADE_HOOKUP_OBJECT (dsnchooser, label115, "label115");
  2079. GLADE_HOOKUP_OBJECT (dsnchooser, vbox32, "vbox32");
  2080. GLADE_HOOKUP_OBJECT (dsnchooser, frame66, "frame66");
  2081. GLADE_HOOKUP_OBJECT (dsnchooser, alignment58, "alignment58");
  2082. GLADE_HOOKUP_OBJECT (dsnchooser, hbox40, "hbox40");
  2083. GLADE_HOOKUP_OBJECT (dsnchooser, vbox33, "vbox33");
  2084. GLADE_HOOKUP_OBJECT (dsnchooser, hbox41, "hbox41");
  2085. GLADE_HOOKUP_OBJECT (dsnchooser, frame67, "frame67");
  2086. GLADE_HOOKUP_OBJECT (dsnchooser, alignment59, "alignment59");
  2087. GLADE_HOOKUP_OBJECT (dsnchooser, hbox42, "hbox42");
  2088. GLADE_HOOKUP_OBJECT (dsnchooser, label116, "label116");
  2089. GLADE_HOOKUP_OBJECT (dsnchooser, optionmenu1, "optionmenu1");
  2090. GLADE_HOOKUP_OBJECT (dsnchooser, menu2, "menu2");
  2091. GLADE_HOOKUP_OBJECT (dsnchooser, hbox43, "hbox43");
  2092. GLADE_HOOKUP_OBJECT (dsnchooser, scrolledwindow19, "scrolledwindow19");
  2093. GLADE_HOOKUP_OBJECT (dsnchooser, clist3, "clist3");
  2094. GLADE_HOOKUP_OBJECT (dsnchooser, label117, "label117");
  2095. GLADE_HOOKUP_OBJECT (dsnchooser, scrolledwindow20, "scrolledwindow20");
  2096. GLADE_HOOKUP_OBJECT (dsnchooser, clist4, "clist4");
  2097. GLADE_HOOKUP_OBJECT (dsnchooser, label118, "label118");
  2098. GLADE_HOOKUP_OBJECT (dsnchooser, frame68, "frame68");
  2099. GLADE_HOOKUP_OBJECT (dsnchooser, alignment60, "alignment60");
  2100. GLADE_HOOKUP_OBJECT (dsnchooser, hbox44, "hbox44");
  2101. GLADE_HOOKUP_OBJECT (dsnchooser, label119, "label119");
  2102. GLADE_HOOKUP_OBJECT (dsnchooser, t_fileselected, "t_fileselected");
  2103. GLADE_HOOKUP_OBJECT (dsnchooser, vbox34, "vbox34");
  2104. GLADE_HOOKUP_OBJECT (dsnchooser, bf_add, "bf_add");
  2105. GLADE_HOOKUP_OBJECT (dsnchooser, bf_remove, "bf_remove");
  2106. GLADE_HOOKUP_OBJECT (dsnchooser, bf_configure, "bf_configure");
  2107. GLADE_HOOKUP_OBJECT (dsnchooser, bf_test, "bf_test");
  2108. GLADE_HOOKUP_OBJECT (dsnchooser, bf_setdir, "bf_setdir");
  2109. GLADE_HOOKUP_OBJECT (dsnchooser, frame69, "frame69");
  2110. GLADE_HOOKUP_OBJECT (dsnchooser, alignment61, "alignment61");
  2111. GLADE_HOOKUP_OBJECT (dsnchooser, frame70, "frame70");
  2112. GLADE_HOOKUP_OBJECT (dsnchooser, alignment62, "alignment62");
  2113. GLADE_HOOKUP_OBJECT (dsnchooser, hbox45, "hbox45");
  2114. GLADE_HOOKUP_OBJECT (dsnchooser, pixmap3, "pixmap3");
  2115. GLADE_HOOKUP_OBJECT (dsnchooser, label120, "label120");
  2116. GLADE_HOOKUP_OBJECT (dsnchooser, label121, "label121");
  2117. GLADE_HOOKUP_OBJECT_NO_REF (dsnchooser, hbuttonbox2, "hbuttonbox2");
  2118. GLADE_HOOKUP_OBJECT (dsnchooser, b_cancel, "b_cancel");
  2119. GLADE_HOOKUP_OBJECT (dsnchooser, b_ok, "b_ok");
  2120. /* Notebook events */
  2121. gtk_signal_connect_after (GTK_OBJECT (notebook1), "switch_page",
  2122. GTK_SIGNAL_FUNC (dsnchooser_switch_page), choose_t);
  2123. /* Ok button events */
  2124. gtk_signal_connect (GTK_OBJECT (b_ok), "clicked",
  2125. GTK_SIGNAL_FUNC (dsnchooser_ok_clicked), choose_t);
  2126. /* Cancel button events */
  2127. gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked",
  2128. GTK_SIGNAL_FUNC (dsnchooser_cancel_clicked), choose_t);
  2129. /* Close window button events */
  2130. gtk_signal_connect (GTK_OBJECT (dsnchooser), "delete_event",
  2131. GTK_SIGNAL_FUNC (delete_event), choose_t);
  2132. gtk_signal_connect (GTK_OBJECT (dsnchooser), "destroy",
  2133. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  2134. /* Add user DSN button events */
  2135. gtk_signal_connect (GTK_OBJECT (choose_t->uadd), "clicked",
  2136. GTK_SIGNAL_FUNC (userdsn_add_clicked), choose_t);
  2137. /* Remove user DSN button events */
  2138. gtk_signal_connect (GTK_OBJECT (choose_t->uremove), "clicked",
  2139. GTK_SIGNAL_FUNC (userdsn_remove_clicked), choose_t);
  2140. /* Test user DSN button events */
  2141. gtk_signal_connect (GTK_OBJECT (choose_t->utest), "clicked",
  2142. GTK_SIGNAL_FUNC (userdsn_test_clicked), choose_t);
  2143. /* Configure user DSN button events */
  2144. gtk_signal_connect (GTK_OBJECT (choose_t->uconfigure), "clicked",
  2145. GTK_SIGNAL_FUNC (userdsn_configure_clicked), choose_t);
  2146. /* Add system DSN button events */
  2147. gtk_signal_connect (GTK_OBJECT (choose_t->sadd), "clicked",
  2148. GTK_SIGNAL_FUNC (systemdsn_add_clicked), choose_t);
  2149. /* Remove system DSN button events */
  2150. gtk_signal_connect (GTK_OBJECT (choose_t->sremove), "clicked",
  2151. GTK_SIGNAL_FUNC (systemdsn_remove_clicked), choose_t);
  2152. /* Test system DSN button events */
  2153. gtk_signal_connect (GTK_OBJECT (choose_t->stest), "clicked",
  2154. GTK_SIGNAL_FUNC (systemdsn_test_clicked), choose_t);
  2155. /* Configure system DSN button events */
  2156. gtk_signal_connect (GTK_OBJECT (choose_t->sconfigure), "clicked",
  2157. GTK_SIGNAL_FUNC (systemdsn_configure_clicked), choose_t);
  2158. /* User DSN list events */
  2159. gtk_signal_connect (GTK_OBJECT (clist1), "select_row",
  2160. GTK_SIGNAL_FUNC (userdsn_list_select), choose_t);
  2161. gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row",
  2162. GTK_SIGNAL_FUNC (userdsn_list_unselect), choose_t);
  2163. /* System DSN list events */
  2164. gtk_signal_connect (GTK_OBJECT (clist2), "select_row",
  2165. GTK_SIGNAL_FUNC (systemdsn_list_select), choose_t);
  2166. gtk_signal_connect (GTK_OBJECT (clist2), "unselect_row",
  2167. GTK_SIGNAL_FUNC (systemdsn_list_unselect), choose_t);
  2168. /* Add file DSN button events */
  2169. gtk_signal_connect (GTK_OBJECT (choose_t->fadd), "clicked",
  2170. GTK_SIGNAL_FUNC (filedsn_add_clicked),
  2171. choose_t);
  2172. /* Remove file DSN button events */
  2173. gtk_signal_connect (GTK_OBJECT (choose_t->fremove), "clicked",
  2174. GTK_SIGNAL_FUNC (filedsn_remove_clicked),
  2175. choose_t);
  2176. /* Test file DSN button events */
  2177. gtk_signal_connect (GTK_OBJECT (choose_t->ftest), "clicked",
  2178. GTK_SIGNAL_FUNC (filedsn_test_clicked),
  2179. choose_t);
  2180. /* Configure file DSN button events */
  2181. gtk_signal_connect (GTK_OBJECT (choose_t->fconfigure), "clicked",
  2182. GTK_SIGNAL_FUNC (filedsn_configure_clicked),
  2183. choose_t);
  2184. /* Configure file DSN button events */
  2185. gtk_signal_connect (GTK_OBJECT (choose_t->fsetdir), "clicked",
  2186. GTK_SIGNAL_FUNC (filedsn_setdir_clicked),
  2187. choose_t);
  2188. /* Directories file DSN list events */
  2189. gtk_signal_connect (GTK_OBJECT (clist3), "select_row",
  2190. GTK_SIGNAL_FUNC (filedsn_dirlist_select),
  2191. choose_t);
  2192. /* Files file DSN list events */
  2193. gtk_signal_connect (GTK_OBJECT (clist4), "select_row",
  2194. GTK_SIGNAL_FUNC (filedsn_filelist_select),
  2195. choose_t);
  2196. gtk_signal_connect (GTK_OBJECT (clist4), "unselect_row",
  2197. GTK_SIGNAL_FUNC (filedsn_filelist_unselect),
  2198. choose_t);
  2199. gtk_window_add_accel_group (GTK_WINDOW (dsnchooser), accel_group);
  2200. SQLSetConfigMode (ODBC_BOTH_DSN);
  2201. if (!SQLGetPrivateProfileString("ODBC", "FileDSNPath", "",
  2202. choose_t->curr_dir, sizeof(choose_t->curr_dir), "odbcinst.ini"))
  2203. strcpy(choose_t->curr_dir, DEFAULT_FILEDSNPATH);
  2204. adddsns_to_list (clist1, FALSE);
  2205. choose_t->udsnlist = clist1;
  2206. choose_t->sdsnlist = clist2;
  2207. choose_t->type_dsn = USER_DSN;
  2208. choose_t->mainwnd = dsnchooser;
  2209. gtk_widget_show_all (dsnchooser);
  2210. gtk_main ();
  2211. }
  2212. #define CHECK_DRVCONN_DIALBOX(path) \
  2213. { \
  2214. if ((handle = DLL_OPEN(path)) != NULL) \
  2215. { \
  2216. if (DLL_PROC(handle, "_iodbcdm_drvconn_dialboxw") != NULL) \
  2217. { \
  2218. DLL_CLOSE(handle); \
  2219. retVal = TRUE; \
  2220. goto quit; \
  2221. } \
  2222. else \
  2223. { \
  2224. if (DLL_PROC(handle, "_iodbcdm_drvconn_dialbox") != NULL) \
  2225. { \
  2226. DLL_CLOSE(handle); \
  2227. retVal = TRUE; \
  2228. goto quit; \
  2229. } \
  2230. } \
  2231. DLL_CLOSE(handle); \
  2232. } \
  2233. }
  2234. static BOOL
  2235. _CheckDriverLoginDlg (
  2236. char *drv
  2237. )
  2238. {
  2239. char drvbuf[4096] = { L'\0'};
  2240. HDLL handle;
  2241. BOOL retVal = FALSE;
  2242. if (!drv)
  2243. return FALSE;
  2244. SQLSetConfigMode (ODBC_USER_DSN);
  2245. if (!access (drv, X_OK))
  2246. { CHECK_DRVCONN_DIALBOX (drv); }
  2247. if (SQLGetPrivateProfileString (drv, "Driver", "", drvbuf,
  2248. sizeof (drvbuf), "odbcinst.ini"))
  2249. { CHECK_DRVCONN_DIALBOX (drvbuf); }
  2250. if (SQLGetPrivateProfileString (drv, "Setup", "", drvbuf,
  2251. sizeof (drvbuf), "odbcinst.ini"))
  2252. { CHECK_DRVCONN_DIALBOX (drvbuf); }
  2253. SQLSetConfigMode (ODBC_SYSTEM_DSN);
  2254. if (!access (drv, X_OK))
  2255. { CHECK_DRVCONN_DIALBOX (drv); }
  2256. if (SQLGetPrivateProfileString (drv, "Driver", "", drvbuf,
  2257. sizeof (drvbuf), "odbcinst.ini"))
  2258. { CHECK_DRVCONN_DIALBOX (drvbuf); }
  2259. if (SQLGetPrivateProfileString (drv, "Setup", "", drvbuf,
  2260. sizeof (drvbuf), "odbcinst.ini"))
  2261. { CHECK_DRVCONN_DIALBOX (drvbuf); }
  2262. quit:
  2263. return retVal;
  2264. }