1/*
2 *  administrator.c
3 *
4 *  $Id: administrator.c,v 1.13 2007/02/02 11:58:14 source Exp $
5 *
6 *  The iODBC driver manager.
7 *
8 *  Copyright (C) 1996-2006 by OpenLink Software <iodbc@openlinksw.com>
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
75#include <iodbc.h>
76#include <dlfcn.h>
77#include <sys/stat.h>
78#include <unistd.h>
79#include <time.h>
80
81#include "../gui.h"
82#include "odbc4.xpm"
83
84
85#if !defined(HAVE_DL_INFO)
86typedef struct
87{
88  const char *dli_fname;	/* File name of defining object.  */
89  void *dli_fbase;		/* Load address of that object.  */
90  const char *dli_sname;	/* Name of nearest symbol.  */
91  void *dli_saddr;		/* Exact value of nearest symbol.  */
92} Dl_info;
93#endif /* HAVE_DL_INFO */
94
95static char *szDriverButtons[] = {
96  "_Add a driver",
97  "_Remove the driver",
98  "Confi_gure the driver"
99};
100
101static char *szCpLabels[] = {
102  "Name",
103  "Pool timeout (seconds)",
104  "Probe query"
105};
106
107static struct
108{
109  char *lib_name;
110  char *lib_desc;
111  char *lib_ver_sym;
112} iODBC_Components[] =
113{
114  {"libiodbc.so", "iODBC Driver Manager", "iodbc_version"},
115  {"libiodbcadm.so", "iODBC Administrator", "iodbcadm_version"},
116  {"libiodbcinst.so", "iODBC Installer", "iodbcinst_version"},
117  {"libdrvproxy.so", "iODBC Driver Setup Proxy", "iodbcproxy_version"},
118  {"libtranslator.so", "iODBC Translation Manager", "iodbctrans_version"}
119};
120
121
122static void
123addcomponents_to_list (GtkWidget *widget)
124{
125  char _date[1024], _size[1024];
126  char *data[5];
127  struct stat _stat;
128#if defined(HAVE_DLADDR)
129  Dl_info info;
130#endif
131  void *handle, *proc;
132  int i;
133
134  if (!GTK_IS_CLIST (widget))
135    return;
136
137  gtk_clist_clear (GTK_CLIST (widget));
138
139  for (i = 0; i < sizeof (iODBC_Components) / sizeof (iODBC_Components[0]);
140      i++)
141    {
142      /*
143       *  Collect basic info on the components
144       */
145      data[0] = iODBC_Components[i].lib_desc;
146      data[1] = VERSION;
147      data[2] = iODBC_Components[i].lib_name;
148      data[3] = "";		/* Modification Date */
149      data[4] = "";		/* Size */
150
151      if ((handle = dlopen (iODBC_Components[i].lib_name, RTLD_LAZY)))
152	{
153	  /* Find out the version of the library */
154	  if ((proc = dlsym (handle, iODBC_Components[i].lib_ver_sym)))
155	    data[1] = *(char **) proc;
156
157	  /* Check the size and modification date of the library */
158#ifdef HAVE_DLADDR
159	  dladdr (proc, &info);
160	  if (!stat (info.dli_fname, &_stat))
161	    {
162	      sprintf (_size, "%lu Kb",
163		  (unsigned long) _stat.st_size / 1024L);
164	      sprintf (_date, "%s", ctime (&_stat.st_mtime));
165	      _date[strlen (_date) - 1] = '\0';	/* remove last \n */
166	      data[3] = _date;
167	      data[4] = _size;
168	    }
169#endif
170	  gtk_clist_append (GTK_CLIST (widget), data);
171
172	  dlclose (handle);
173	}
174    }
175
176  if (GTK_CLIST (widget)->rows > 0)
177    {
178      gtk_clist_columns_autosize (GTK_CLIST (widget));
179      gtk_clist_sort (GTK_CLIST (widget));
180    }
181}
182
183
184static void
185addconnectionpool_to_list (GtkWidget *widget)
186{
187  char *curr, *buffer = (char *) malloc (sizeof (char) * 65536), *szDriver;
188  char cptime[128], cpprobe[1024];
189  char *data[3];
190  int len, i;
191  BOOL careabout;
192  UWORD confMode = ODBC_USER_DSN;
193
194  if (!buffer || !GTK_IS_CLIST (widget))
195    return;
196  gtk_clist_clear (GTK_CLIST (widget));
197
198  /* Get the current config mode */
199  while (confMode != ODBC_SYSTEM_DSN + 1)
200    {
201      /* Get the list of drivers in the user context */
202      SQLSetConfigMode (confMode);
203#ifdef WIN32
204      len =
205	  SQLGetPrivateProfileString ("ODBC 32 bit Drivers", NULL, "", buffer,
206	  65535, "odbcinst.ini");
207#else
208      len =
209	  SQLGetPrivateProfileString ("ODBC Drivers", NULL, "", buffer, 65535,
210	  "odbcinst.ini");
211#endif
212      if (len)
213	goto process;
214
215      goto end;
216
217    process:
218      for (curr = buffer; *curr; curr += (STRLEN (curr) + 1))
219	{
220	  /* Shadowing system odbcinst.ini */
221	  for (i = 0, careabout = TRUE; i < GTK_CLIST (widget)->rows; i++)
222	    {
223	      gtk_clist_get_text (GTK_CLIST (widget), i, 0, &szDriver);
224	      if (!strcmp (szDriver, curr))
225		{
226		  careabout = FALSE;
227		  break;
228		}
229	    }
230
231	  if (!careabout)
232	    continue;
233
234	  SQLSetConfigMode (confMode);
235#ifdef WIN32
236	  SQLGetPrivateProfileString ("ODBC 32 bit Drivers", curr, "", cpprobe,
237	      sizeof (cpprobe), "odbcinst.ini");
238#else
239	  SQLGetPrivateProfileString ("ODBC Drivers", curr, "", cpprobe,
240	      sizeof (cpprobe), "odbcinst.ini");
241#endif
242
243	  /* Check if the driver is installed */
244	  if (strcasecmp (cpprobe, "Installed"))
245	    goto end;
246
247	  /* Get the driver library name */
248	  SQLSetConfigMode (confMode);
249	  if (!SQLGetPrivateProfileString (curr, "CPTimeout", "<Not pooled>",
250		  cptime, sizeof (cptime), "odbcinst.ini"))
251	    {
252	      SQLSetConfigMode (confMode);
253	      SQLGetPrivateProfileString ("Default", "CPTimeout",
254		  "<Not pooled>", cptime, sizeof (cptime), "odbcinst.ini");
255	    }
256	  if (!SQLGetPrivateProfileString (curr, "CPProbe", "",
257		  cpprobe, sizeof (cpprobe), "odbcinst.ini"))
258	    {
259	      SQLSetConfigMode (confMode);
260	      SQLGetPrivateProfileString ("Default", "CPProbe",
261		  "", cpprobe, sizeof (cpprobe), "odbcinst.ini");
262	    }
263
264	  if (STRLEN (curr) && STRLEN (cptime))
265	    {
266	      data[0] = curr;
267	      data[1] = cptime;
268	      data[2] = cpprobe;
269	      gtk_clist_append (GTK_CLIST (widget), data);
270	    }
271	}
272
273    end:
274      if (confMode == ODBC_USER_DSN)
275	confMode = ODBC_SYSTEM_DSN;
276      else
277	confMode = ODBC_SYSTEM_DSN + 1;
278    }
279
280  if (GTK_CLIST (widget)->rows > 0)
281    {
282      gtk_clist_columns_autosize (GTK_CLIST (widget));
283      gtk_clist_sort (GTK_CLIST (widget));
284    }
285
286  /* Make the clean up */
287  free (buffer);
288}
289
290
291static void
292admin_apply_tracing (TTRACING *tracing_t)
293{
294  /* Write keywords for tracing in the ini file */
295  SQLWritePrivateProfileString ("ODBC", "Trace",
296      (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tracing_t->
297		  allthetime_rb)) == TRUE
298	  || gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tracing_t->
299		  onetime_rb)) == TRUE) ? "1" : "0", NULL);
300  SQLWritePrivateProfileString ("ODBC", "TraceAutoStop",
301      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (tracing_t->
302	      onetime_rb)) ? "1" : "0", NULL);
303  SQLWritePrivateProfileString ("ODBC", "TraceFile",
304      gtk_entry_get_text (GTK_ENTRY (tracing_t->logfile_entry)), NULL);
305}
306
307
308static void
309admin_switch_page (GtkNotebook *notebook, GtkNotebookPage *page,
310    gint page_num, void **inparams)
311{
312  TDSNCHOOSER *dsnchoose_t = (inparams) ? inparams[0] : NULL;
313  TDRIVERCHOOSER *driverchoose_t = (inparams) ? inparams[1] : NULL;
314  TTRACING *tracing_t = (inparams) ? inparams[2] : NULL;
315  TCOMPONENT *component_t = (inparams) ? inparams[3] : NULL;
316  TCONNECTIONPOOLING *connectionpool_t = (inparams) ? inparams[4] : NULL;
317  BOOL trace = FALSE, traceauto = FALSE, perfmon = FALSE;
318  char tokenstr[4096] = { 0 };
319
320  switch (page_num)
321    {
322      /* The User DSN panel */
323    case 0:
324      if (dsnchoose_t)
325	{
326	  dsnchoose_t->type_dsn = USER_DSN;
327	  adddsns_to_list (dsnchoose_t->udsnlist, FALSE);
328	}
329      break;
330
331      /* The System DSN panel */
332    case 1:
333      if (dsnchoose_t)
334	{
335	  dsnchoose_t->type_dsn = SYSTEM_DSN;
336	  adddsns_to_list (dsnchoose_t->sdsnlist, TRUE);
337	}
338      break;
339
340      /* The File DSN panel */
341    case 2:
342      if (dsnchoose_t)
343        {
344          dsnchoose_t->type_dsn = FILE_DSN;
345
346          addlistofdir_to_optionmenu(dsnchoose_t->dir_combo,
347	      dsnchoose_t->curr_dir, dsnchoose_t);
348          adddirectories_to_list(dsnchoose_t->mainwnd,
349	      dsnchoose_t->dir_list, dsnchoose_t->curr_dir);
350          addfiles_to_list(dsnchoose_t->mainwnd,
351	      dsnchoose_t->file_list, dsnchoose_t->curr_dir);
352        }
353       break;
354
355      /* The ODBC Driver panel */
356    case 3:
357      if (driverchoose_t)
358	{
359	  adddrivers_to_list (driverchoose_t->driverlist,
360	      driverchoose_t->mainwnd);
361	  gtk_widget_set_sensitive (driverchoose_t->b_remove, FALSE);
362	  gtk_widget_set_sensitive (driverchoose_t->b_configure, FALSE);
363	}
364      break;
365
366      /* The Connection Pooling */
367    case 4:
368      if (!connectionpool_t->changed)
369	{
370	  /* Get the connection pooling options */
371	  SQLGetPrivateProfileString ("ODBC Connection Pooling", "Perfmon",
372	      "", tokenstr, sizeof (tokenstr), "odbcinst.ini");
373	  if (!strcasecmp (tokenstr, "1") || !strcasecmp (tokenstr, "On"))
374	    perfmon = TRUE;
375	  SQLGetPrivateProfileString ("ODBC Connection Pooling", "Retry Wait",
376	      "", tokenstr, sizeof (tokenstr), "odbcinst.ini");
377
378	  if (perfmon)
379	    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
380		(connectionpool_t->enperfmon_rb), 1);
381	  else
382	    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
383		(connectionpool_t->disperfmon_rb), 1);
384
385	  gtk_entry_set_text (GTK_ENTRY (connectionpool_t->retwait_entry),
386	      tokenstr);
387
388	  connectionpool_t->changed = TRUE;
389	}
390
391      addconnectionpool_to_list (connectionpool_t->driverlist);
392
393      break;
394
395      /* The tracing panel */
396    case 5:
397      if (!tracing_t->changed)
398	{
399	  /* Get the traces options */
400	  SQLGetPrivateProfileString ("ODBC", "Trace", "", tokenstr,
401	      sizeof (tokenstr), NULL);
402	  if (!strcasecmp (tokenstr, "1") || !strcasecmp (tokenstr, "On"))
403	    trace = TRUE;
404	  SQLGetPrivateProfileString ("ODBC", "TraceAutoStop", "", tokenstr,
405	      sizeof (tokenstr), NULL);
406	  if (!strcasecmp (tokenstr, "1") || !strcasecmp (tokenstr, "On"))
407	    traceauto = TRUE;
408	  SQLGetPrivateProfileString ("ODBC", "TraceFile", "", tokenstr,
409	      sizeof (tokenstr), NULL);
410
411	  /* Set the widgets */
412	  if (trace)
413	    {
414	      if (!traceauto)
415		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tracing_t->
416			allthetime_rb), 1);
417	      else
418		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tracing_t->
419			onetime_rb), 1);
420	    }
421	  else
422	    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tracing_t->
423		    donttrace_rb), 1);
424
425	  gtk_entry_set_text (GTK_ENTRY (tracing_t->logfile_entry),
426	      (STRLEN (tokenstr)) ? tokenstr : "sql.log");
427
428	  tracing_t->changed = TRUE;
429	}
430      break;
431
432      /* The About panel */
433    case 6:
434      if (component_t)
435	addcomponents_to_list (component_t->componentlist);
436      break;
437    };
438
439  if (dsnchoose_t)
440    {
441      if (dsnchoose_t->uremove)
442	gtk_widget_set_sensitive (dsnchoose_t->uremove, FALSE);
443      if (dsnchoose_t->uconfigure)
444	gtk_widget_set_sensitive (dsnchoose_t->uconfigure, FALSE);
445      if (dsnchoose_t->utest)
446	gtk_widget_set_sensitive (dsnchoose_t->utest, FALSE);
447      if (dsnchoose_t->sremove)
448	gtk_widget_set_sensitive (dsnchoose_t->sremove, FALSE);
449      if (dsnchoose_t->sconfigure)
450	gtk_widget_set_sensitive (dsnchoose_t->sconfigure, FALSE);
451      if (dsnchoose_t->stest)
452	gtk_widget_set_sensitive (dsnchoose_t->stest, FALSE);
453      if (dsnchoose_t->fremove)
454	gtk_widget_set_sensitive(dsnchoose_t->fremove, FALSE);
455      if (dsnchoose_t->fconfigure)
456	gtk_widget_set_sensitive(dsnchoose_t->fconfigure, FALSE);
457      if (dsnchoose_t->ftest)
458	gtk_widget_set_sensitive(dsnchoose_t->ftest, FALSE);
459    }
460}
461
462
463static void
464tracing_start_clicked (GtkWidget *widget, TTRACING *tracing_t)
465{
466  if (tracing_t)
467    admin_apply_tracing (tracing_t);
468}
469
470
471static void
472tracing_logfile_choosen (GtkWidget *widget, TTRACING *tracing_t)
473{
474  if (tracing_t)
475    {
476      gtk_entry_set_text (GTK_ENTRY (tracing_t->logfile_entry),
477	  gtk_file_selection_get_filename (GTK_FILE_SELECTION (tracing_t->
478		  filesel)));
479      tracing_t->filesel = NULL;
480    }
481}
482
483
484static void
485tracing_browse_clicked (GtkWidget *widget, TTRACING *tracing_t)
486{
487  GtkWidget *filesel;
488
489  if (tracing_t)
490    {
491      filesel = gtk_file_selection_new ("Choose your log file ...");
492      gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);
493      gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel),
494	  gtk_entry_get_text (GTK_ENTRY (tracing_t->logfile_entry)));
495      /* Ok button events */
496      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->
497	      ok_button), "clicked",
498	  GTK_SIGNAL_FUNC (tracing_logfile_choosen), tracing_t);
499      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->
500	      ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
501      /* Cancel button events */
502      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->
503	      cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit),
504	  NULL);
505      /* Close window button events */
506      gtk_signal_connect (GTK_OBJECT (filesel), "delete_event",
507	  GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
508
509      tracing_t->filesel = filesel;
510
511      gtk_widget_show_all (filesel);
512      gtk_main ();
513      gtk_widget_destroy (filesel);
514
515      tracing_t->filesel = NULL;
516    }
517}
518
519
520static void
521cpdriver_list_select (GtkWidget *widget, gint row, gint column,
522    GdkEvent *event, TCONNECTIONPOOLING *connectionpool_t)
523{
524  char *szDriver = NULL, *cptimeout, *cpprobe;
525  char sztime[1024] = { 0 };
526  char szprobe[1024] = { 0 };
527  TCONNECTIONPOOLING choose_t;
528
529  if (connectionpool_t)
530    {
531      choose_t = *connectionpool_t;
532      if (GTK_CLIST (connectionpool_t->driverlist)->selection != NULL)
533	{
534          memset(choose_t.timeout, 0, sizeof(choose_t.timeout));
535          memset(choose_t.probe, 0, sizeof(choose_t.probe));
536
537	  gtk_clist_get_text (GTK_CLIST (choose_t.driverlist),
538	      GPOINTER_TO_INT (GTK_CLIST (choose_t.driverlist)->
539		  selection->data), 0, &szDriver);
540	  gtk_clist_get_text (GTK_CLIST (choose_t.driverlist),
541	      GPOINTER_TO_INT (GTK_CLIST (choose_t.driverlist)->
542		  selection->data), 1, &cptimeout);
543	  gtk_clist_get_text (GTK_CLIST (choose_t.driverlist),
544	      GPOINTER_TO_INT (GTK_CLIST (choose_t.driverlist)->
545		  selection->data), 2, &cpprobe);
546
547          strncpy (choose_t.timeout, cptimeout, sizeof(choose_t.timeout)-1);
548          strncpy (choose_t.probe, cpprobe, sizeof(choose_t.probe)-1);
549	}
550
551      if (szDriver && event && event->type == GDK_2BUTTON_PRESS
552	  && (create_connectionpool (connectionpool_t->mainwnd, &choose_t) == TRUE))
553	{
554	  sprintf (sztime, "CPTimeout=%s", choose_t.timeout);
555	  if (!SQLConfigDriver (connectionpool_t->mainwnd, ODBC_CONFIG_DRIVER,
556		  szDriver, sztime, NULL, 0, NULL))
557	    _iodbcdm_errorbox (connectionpool_t->mainwnd, szDriver,
558		"An error occured when trying to set the connection pooling time-out : ");
559
560	  sprintf (szprobe, "CPProbe=%s", choose_t.probe);
561	  if (!SQLConfigDriver (connectionpool_t->mainwnd, ODBC_CONFIG_DRIVER,
562		  szDriver, szprobe, NULL, 0, NULL))
563	    _iodbcdm_errorbox (connectionpool_t->mainwnd, szDriver,
564		"An error occured when trying to set the connection probe query : ");
565
566	  addconnectionpool_to_list (connectionpool_t->driverlist);
567	}
568    }
569}
570
571
572static void
573driver_list_select (GtkWidget *widget, gint row, gint column,
574    GdkEvent *event, TDRIVERCHOOSER *choose_t)
575{
576  char *szDriver = NULL;
577
578  if (choose_t)
579    {
580      if (GTK_CLIST (choose_t->driverlist)->selection != NULL)
581	gtk_clist_get_text (GTK_CLIST (choose_t->driverlist),
582	    GPOINTER_TO_INT (GTK_CLIST (choose_t->driverlist)->selection->
583		data), 0, &szDriver);
584
585      if (szDriver && event && event->type == GDK_2BUTTON_PRESS)
586	gtk_signal_emit_by_name (GTK_OBJECT (choose_t->b_configure),
587	    "clicked", choose_t);
588      else
589	{
590	  gtk_widget_set_sensitive (choose_t->b_remove, TRUE);
591	  gtk_widget_set_sensitive (choose_t->b_configure, TRUE);
592	}
593    }
594}
595
596
597static void
598driver_list_unselect (GtkWidget *widget, gint row, gint column,
599    GdkEvent *event, TDRIVERCHOOSER *choose_t)
600{
601  if (choose_t)
602    {
603      gtk_widget_set_sensitive (choose_t->b_remove, FALSE);
604      gtk_widget_set_sensitive (choose_t->b_configure, FALSE);
605    }
606}
607
608
609static void
610driver_add_clicked (GtkWidget *widget, TDRIVERCHOOSER *choose_t)
611{
612  char connstr[4096] = { 0 };
613  char tokenstr[4096] = { 0 };
614  char *cstr;
615
616  if (choose_t)
617    {
618      cstr = create_driversetup (choose_t->mainwnd, NULL, connstr, FALSE, TRUE);
619
620      if (cstr && cstr != connstr && cstr != (LPSTR) - 1L)
621	{
622	  SQLSetConfigMode (ODBC_USER_DSN);
623	  if (!SQLInstallDriverEx (cstr, NULL, tokenstr, sizeof (tokenstr),
624		  NULL, ODBC_INSTALL_COMPLETE, NULL))
625	    {
626	      _iodbcdm_errorbox (choose_t->mainwnd, NULL,
627		  "An error occured when trying to add the driver : ");
628	      goto done;
629	    }
630
631	  free (cstr);
632	}
633
634      adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd);
635
636    done:
637      if (GTK_CLIST (choose_t->driverlist)->selection == NULL)
638	{
639	  if (choose_t->b_remove)
640	    gtk_widget_set_sensitive (choose_t->b_remove, FALSE);
641	  if (choose_t->b_configure)
642	    gtk_widget_set_sensitive (choose_t->b_configure, FALSE);
643	}
644    }
645
646  return;
647}
648
649
650static void
651driver_remove_clicked (GtkWidget *widget, TDRIVERCHOOSER *choose_t)
652{
653  char *szDriver = NULL;
654
655  if (choose_t)
656    {
657      /* Retrieve the driver name */
658      if (GTK_CLIST (choose_t->driverlist)->selection != NULL)
659	gtk_clist_get_text (GTK_CLIST (choose_t->driverlist),
660	    GPOINTER_TO_INT (GTK_CLIST (choose_t->driverlist)->selection->
661		data), 0, &szDriver);
662
663      /* Call the right function */
664      if (szDriver
665	  && create_confirm (choose_t->mainwnd, szDriver,
666	      "Are you sure you want to remove this driver ?"))
667	{
668	  if (!SQLRemoveDriver (szDriver, create_confirm (choose_t->mainwnd,
669		      szDriver,
670		      "Do you want to remove all the DSN associated to this driver ?"),
671		  NULL))
672	    {
673	      _iodbcdm_errorbox (choose_t->mainwnd, szDriver,
674		  "An error occured when trying to remove the driver : ");
675	      goto done;
676	    }
677
678	  adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd);
679	}
680
681    done:
682      if (GTK_CLIST (choose_t->driverlist)->selection == NULL)
683	{
684	  if (choose_t->b_remove)
685	    gtk_widget_set_sensitive (choose_t->b_remove, FALSE);
686	  if (choose_t->b_configure)
687	    gtk_widget_set_sensitive (choose_t->b_configure, FALSE);
688	}
689    }
690
691  return;
692}
693
694
695static void
696driver_configure_clicked (GtkWidget *widget, TDRIVERCHOOSER *choose_t)
697{
698  char connstr[4096] = { 0 };
699  char tokenstr[4096] = { 0 };
700  char *szDriver = NULL, *curr, *cour, *cstr;
701  int size = sizeof (connstr);
702
703  if (choose_t)
704    {
705      /* Retrieve the driver name */
706      if (GTK_CLIST (choose_t->driverlist)->selection != NULL)
707	gtk_clist_get_text (GTK_CLIST (choose_t->driverlist),
708	    GPOINTER_TO_INT (GTK_CLIST (choose_t->driverlist)->selection->
709		data), 0, &szDriver);
710
711      /* Call the right function */
712      if (szDriver)
713	{
714	  SQLSetConfigMode (ODBC_USER_DSN);
715	  if (!SQLGetPrivateProfileString (szDriver, NULL, "", tokenstr,
716		  sizeof (tokenstr), "odbcinst.ini"))
717	    {
718	      _iodbcdm_errorbox (choose_t->mainwnd, szDriver,
719		  "An error occured when trying to configure the driver : ");
720	      goto done;
721	    }
722
723	  for (curr = tokenstr, cour = connstr; *curr;
724	      curr += (STRLEN (curr) + 1), cour += (STRLEN (cour) + 1))
725	    {
726	      STRCPY (cour, curr);
727	      cour[STRLEN (curr)] = '=';
728	      SQLSetConfigMode (ODBC_USER_DSN);
729	      SQLGetPrivateProfileString (szDriver, curr, "",
730		  cour + STRLEN (curr) + 1, size - STRLEN (curr) - 1,
731		  "odbcinst.ini");
732	      size -= (STRLEN (cour) + 1);
733	    }
734
735	  *cour = 0;
736
737	  cstr =
738	      create_driversetup (choose_t->mainwnd, szDriver, connstr,
739	      FALSE, TRUE);
740
741	  if (cstr && cstr != connstr && cstr != (LPSTR) - 1L)
742	    {
743	      SQLSetConfigMode (ODBC_USER_DSN);
744	      if (!SQLInstallDriverEx (cstr, NULL, tokenstr,
745		      sizeof (tokenstr), NULL, ODBC_INSTALL_COMPLETE, NULL))
746		{
747		  _iodbcdm_errorbox (choose_t->mainwnd, NULL,
748		      "An error occured when trying to configure the driver : ");
749		  goto done;
750		}
751
752	      free (cstr);
753	    }
754
755	  adddrivers_to_list (choose_t->driverlist, choose_t->mainwnd);
756	}
757
758    done:
759      if (GTK_CLIST (choose_t->driverlist)->selection == NULL)
760	{
761	  if (choose_t->b_remove)
762	    gtk_widget_set_sensitive (choose_t->b_remove, FALSE);
763	  if (choose_t->b_configure)
764	    gtk_widget_set_sensitive (choose_t->b_configure, FALSE);
765	}
766    }
767
768  return;
769}
770
771
772static void
773admin_ok_clicked (GtkWidget *widget, void **inparams)
774{
775  TDSNCHOOSER *dsnchoose_t = (inparams) ? inparams[0] : NULL;
776  TDRIVERCHOOSER *driverchoose_t = (inparams) ? inparams[1] : NULL;
777  TTRACING *tracing_t = (inparams) ? inparams[2] : NULL;
778  TCOMPONENT *component_t = (inparams) ? inparams[3] : NULL;
779  TCONNECTIONPOOLING *connectionpool_t = (inparams) ? inparams[4] : NULL;
780  GtkWidget *mainwnd = (inparams) ? inparams[5] : NULL;
781
782  if (dsnchoose_t)
783    {
784      dsnchoose_t->udsnlist = dsnchoose_t->sdsnlist = dsnchoose_t->dir_list =
785	  NULL;
786      dsnchoose_t->fadd = dsnchoose_t->fremove = dsnchoose_t->ftest =
787	  dsnchoose_t->fconfigure = dsnchoose_t->fsetdir = NULL;
788      dsnchoose_t->uadd = dsnchoose_t->uremove = dsnchoose_t->utest =
789	  dsnchoose_t->uconfigure = NULL;
790      dsnchoose_t->sadd = dsnchoose_t->sremove = dsnchoose_t->stest =
791	  dsnchoose_t->sconfigure = NULL;
792      dsnchoose_t->file_list = dsnchoose_t->file_entry =
793	  dsnchoose_t->dir_combo = NULL;
794      dsnchoose_t->type_dsn = -1;
795      dsnchoose_t->dsn = NULL;
796    }
797
798  if (driverchoose_t)
799    driverchoose_t->driverlist = NULL;
800
801  if (component_t)
802    component_t->componentlist = NULL;
803
804  if (tracing_t)
805    {
806      if (tracing_t->changed)
807	admin_apply_tracing (tracing_t);
808
809      tracing_t->logfile_entry = tracing_t->tracelib_entry =
810	  tracing_t->b_start_stop = NULL;
811      tracing_t->donttrace_rb = tracing_t->allthetime_rb =
812	  tracing_t->onetime_rb = NULL;
813    }
814
815  if (connectionpool_t)
816    {
817      if (connectionpool_t->changed)
818	{
819	  /* Write keywords for tracing in the ini file */
820	  SQLWritePrivateProfileString ("ODBC Connection Pooling", "PerfMon",
821	      (GTK_TOGGLE_BUTTON (connectionpool_t->enperfmon_rb)->
822		  active) ? "1" : "0", "odbcinst.ini");
823	  SQLWritePrivateProfileString ("ODBC Connection Pooling",
824	      "Retry Wait",
825	      gtk_entry_get_text (GTK_ENTRY (connectionpool_t->
826		      retwait_entry)), "odbcinst.ini");
827	}
828
829      connectionpool_t->driverlist = connectionpool_t->mainwnd = NULL;
830      connectionpool_t->enperfmon_rb = connectionpool_t->disperfmon_rb = NULL;
831      connectionpool_t->retwait_entry = NULL;
832    }
833
834  if (mainwnd)
835    {
836      gtk_signal_disconnect_by_func (GTK_OBJECT (mainwnd),
837	  GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
838      gtk_main_quit ();
839      gtk_widget_destroy (mainwnd);
840    }
841}
842
843
844static void
845admin_cancel_clicked (GtkWidget *widget, void **inparams)
846{
847  TDSNCHOOSER *dsnchoose_t = (inparams) ? inparams[0] : NULL;
848  TDRIVERCHOOSER *driverchoose_t = (inparams) ? inparams[1] : NULL;
849  TTRACING *tracing_t = (inparams) ? inparams[2] : NULL;
850  TCOMPONENT *component_t = (inparams) ? inparams[3] : NULL;
851  TCONNECTIONPOOLING *connectionpool_t = (inparams) ? inparams[4] : NULL;
852  GtkWidget *mainwnd = (inparams) ? inparams[5] : NULL;
853
854  if (dsnchoose_t)
855    {
856      dsnchoose_t->udsnlist = dsnchoose_t->sdsnlist = dsnchoose_t->dir_list =
857	  NULL;
858      dsnchoose_t->fadd = dsnchoose_t->fremove = dsnchoose_t->ftest =
859	  dsnchoose_t->fconfigure = dsnchoose_t->fsetdir = NULL;
860      dsnchoose_t->uadd = dsnchoose_t->uremove = dsnchoose_t->utest =
861	  dsnchoose_t->uconfigure = NULL;
862      dsnchoose_t->sadd = dsnchoose_t->sremove = dsnchoose_t->stest =
863	  dsnchoose_t->sconfigure = NULL;
864      dsnchoose_t->file_list = dsnchoose_t->file_entry =
865	  dsnchoose_t->dir_combo = NULL;
866      dsnchoose_t->type_dsn = -1;
867      dsnchoose_t->dsn = NULL;
868    }
869
870  if (driverchoose_t)
871    driverchoose_t->driverlist = NULL;
872
873  if (component_t)
874    component_t->componentlist = NULL;
875
876  if (tracing_t)
877    {
878      tracing_t->logfile_entry = tracing_t->tracelib_entry =
879	  tracing_t->b_start_stop = NULL;
880      tracing_t->donttrace_rb = tracing_t->allthetime_rb =
881	  tracing_t->onetime_rb = NULL;
882    }
883
884  if (connectionpool_t)
885    {
886      connectionpool_t->driverlist = connectionpool_t->mainwnd = NULL;
887      connectionpool_t->enperfmon_rb = connectionpool_t->disperfmon_rb = NULL;
888      connectionpool_t->retwait_entry = NULL;
889    }
890
891  if (mainwnd)
892    {
893      gtk_signal_disconnect_by_func (GTK_OBJECT (mainwnd),
894	  GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
895      gtk_main_quit ();
896      gtk_widget_destroy (mainwnd);
897    }
898}
899
900
901static gint
902delete_event (GtkWidget *widget, GdkEvent *event, void **inparams)
903{
904  admin_cancel_clicked (widget, inparams);
905  return FALSE;
906}
907
908
909void
910create_administrator (HWND hwnd)
911{
912  GtkWidget *admin, *dialog_vbox1, *notebook1, *vbox1, *fixed1,
913      *scrolledwindow1;
914  GtkWidget *clist1, *l_name, *l_description, *l_driver, *l_usdsn, *frame1,
915      *table1;
916  GtkWidget *l_explanation, *pixmap1, *vbuttonbox1, *b_add, *b_remove,
917      *b_configure;
918  GtkWidget *b_test, *udsn, *fixed2, *scrolledwindow2, *clist2, *hbuttonbox2;
919  GtkWidget *l_sdsn, *frame2, *table2, *pixmap2, *vbuttonbox2, *sdsn,
920      *dialog_action_area1;
921  GtkWidget *hbuttonbox1, *b_ok, *b_cancel, *fixed4, *scrolledwindow5,
922      *clist5, *l_file;
923  GtkWidget *l_date, *l_size, *frame4, *table4, *pixmap4, *l_drivers,
924      *fdrivers;
925  GtkWidget *fixed6, *frame6, *hbox1, *vbox2, *b_donottrace, *b_allthetime;
926  GtkWidget *b_onetime, *vbox3, *b_start, *frame7, *table6, *t_logfile,
927      *b_browse, *frame8;
928  GtkWidget *table7, *t_tracelib, *b_select, *frame5, *table5, *pixmap5,
929      *ftracing;
930  GtkWidget *fixed7, *frame9, *table8, *pixmap6, *l_about, *scrolledwindow6,
931      *clist6;
932  GtkWidget *l_version, *fabout, *pixmap3, *clist3, *clist4, *l_files,
933      *l_selected, *scrolledwindow4;
934  GtkWidget *t_fileselected, *l_lookin, *optionmenu1, *frame3, *table3, *fdsn,
935      *l_directory, *fixed3;
936  GtkWidget *optionmenu1_menu, *scrolledwindow3, *fpooling, *l_poolto,
937      *l_poolprobe, *clist7, *l_odbcdrivers;
938  GtkWidget *fixed8, *frame11, *alignment1, *vbox4, *frame13, *fixed5,
939      *frame10, *table9, *vbuttonbox3;
940  GtkWidget *pixmap7, *frame12, *vbox5, *br_enable, *br_disable, *t_retrywait,
941      *scrolledwindow7;
942  GtkWidget *b_setdir;
943  GSList *vbox2_group = NULL, *vbox5_group = NULL;
944  GdkPixmap *pixmap;
945  GdkBitmap *mask;
946  GtkStyle *style;
947  GtkAccelGroup *accel_group;
948  TDSNCHOOSER dsnchoose_t;
949  TDRIVERCHOOSER driverchoose_t;
950  TCOMPONENT component_t;
951  TTRACING tracing_t;
952  TCONNECTIONPOOLING connectionpool_t;
953  void *inparams[6];
954  guint b_key;
955
956  if (hwnd == NULL || !GTK_IS_WIDGET (hwnd))
957    return;
958
959  accel_group = gtk_accel_group_new ();
960
961  admin = gtk_dialog_new ();
962  gtk_object_set_data (GTK_OBJECT (admin), "admin", admin);
963  gtk_widget_set_usize (admin, 565, 415);
964  gtk_window_set_title (GTK_WINDOW (admin),
965      "iODBC Data Source Administrator");
966  gtk_window_set_position (GTK_WINDOW (admin), GTK_WIN_POS_CENTER);
967  gtk_window_set_modal (GTK_WINDOW (admin), TRUE);
968  gtk_window_set_policy (GTK_WINDOW (admin), FALSE, FALSE, FALSE);
969
970#if GTK_CHECK_VERSION(2,0,0)
971  gtk_widget_show (admin);
972#endif
973
974  dialog_vbox1 = GTK_DIALOG (admin)->vbox;
975  gtk_object_set_data (GTK_OBJECT (admin), "dialog_vbox1", dialog_vbox1);
976  gtk_widget_show (dialog_vbox1);
977
978  notebook1 = gtk_notebook_new ();
979  gtk_widget_ref (notebook1);
980  gtk_object_set_data_full (GTK_OBJECT (admin), "notebook1", notebook1,
981      (GtkDestroyNotify) gtk_widget_unref);
982  gtk_widget_show (notebook1);
983  gtk_box_pack_start (GTK_BOX (dialog_vbox1), notebook1, TRUE, TRUE, 0);
984
985  vbox1 = gtk_vbox_new (FALSE, 0);
986  gtk_widget_ref (vbox1);
987  gtk_object_set_data_full (GTK_OBJECT (admin), "vbox1", vbox1,
988      (GtkDestroyNotify) gtk_widget_unref);
989  gtk_widget_show (vbox1);
990  gtk_container_add (GTK_CONTAINER (notebook1), vbox1);
991
992  /* User DSN panel */
993  fixed1 = gtk_fixed_new ();
994  gtk_widget_ref (fixed1);
995  gtk_object_set_data_full (GTK_OBJECT (admin), "fixed1", fixed1,
996      (GtkDestroyNotify) gtk_widget_unref);
997  gtk_widget_show (fixed1);
998  gtk_box_pack_start (GTK_BOX (vbox1), fixed1, TRUE, TRUE, 0);
999  gtk_container_set_border_width (GTK_CONTAINER (fixed1), 6);
1000
1001  scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
1002  gtk_widget_ref (scrolledwindow1);
1003  gtk_object_set_data_full (GTK_OBJECT (admin), "scrolledwindow1",
1004      scrolledwindow1, (GtkDestroyNotify) gtk_widget_unref);
1005  gtk_widget_show (scrolledwindow1);
1006  gtk_widget_set_usize (scrolledwindow1, 456, 232);
1007  gtk_fixed_put (GTK_FIXED (fixed1), scrolledwindow1, 3, 19);
1008
1009  clist1 = gtk_clist_new (3);
1010  gtk_widget_ref (clist1);
1011  gtk_object_set_data_full (GTK_OBJECT (admin), "clist1", clist1,
1012      (GtkDestroyNotify) gtk_widget_unref);
1013  gtk_widget_show (clist1);
1014  gtk_container_add (GTK_CONTAINER (scrolledwindow1), clist1);
1015  gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 100);
1016  gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 162);
1017  gtk_clist_set_column_width (GTK_CLIST (clist1), 2, 80);
1018  gtk_clist_column_titles_show (GTK_CLIST (clist1));
1019
1020  l_name = gtk_label_new (szDSNColumnNames[0]);
1021  gtk_widget_ref (l_name);
1022  gtk_object_set_data_full (GTK_OBJECT (admin), "l_name", l_name,
1023      (GtkDestroyNotify) gtk_widget_unref);
1024  gtk_widget_show (l_name);
1025  gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, l_name);
1026
1027  l_description = gtk_label_new (szDSNColumnNames[1]);
1028  gtk_widget_ref (l_description);
1029  gtk_object_set_data_full (GTK_OBJECT (admin), "l_description",
1030      l_description, (GtkDestroyNotify) gtk_widget_unref);
1031  gtk_widget_show (l_description);
1032  gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, l_description);
1033
1034  l_driver = gtk_label_new (szDSNColumnNames[2]);
1035  gtk_widget_ref (l_driver);
1036  gtk_object_set_data_full (GTK_OBJECT (admin), "l_driver", l_driver,
1037      (GtkDestroyNotify) gtk_widget_unref);
1038  gtk_widget_show (l_driver);
1039  gtk_clist_set_column_widget (GTK_CLIST (clist1), 2, l_driver);
1040
1041  l_usdsn = gtk_label_new ("User Data Sources :");
1042  gtk_widget_ref (l_usdsn);
1043  gtk_object_set_data_full (GTK_OBJECT (admin), "l_usdsn", l_usdsn,
1044      (GtkDestroyNotify) gtk_widget_unref);
1045  gtk_widget_show (l_usdsn);
1046  gtk_fixed_put (GTK_FIXED (fixed1), l_usdsn, 8, 8);
1047
1048#if GTK_CHECK_VERSION(2,0,0)
1049  gtk_widget_set_uposition (l_usdsn, 12, 35);
1050  gtk_widget_set_usize (l_usdsn, 120, 16);
1051#else
1052  gtk_widget_set_uposition (l_usdsn, 8, 8);
1053  gtk_widget_set_usize (l_usdsn, 112, 16);
1054#endif
1055  gtk_label_set_justify (GTK_LABEL (l_usdsn), GTK_JUSTIFY_LEFT);
1056
1057  frame1 = gtk_frame_new (NULL);
1058  gtk_widget_ref (frame1);
1059  gtk_object_set_data_full (GTK_OBJECT (admin), "frame1", frame1,
1060      (GtkDestroyNotify) gtk_widget_unref);
1061  gtk_widget_show (frame1);
1062#if GTK_CHECK_VERSION(2,0,0)
1063  gtk_fixed_put (GTK_FIXED (fixed1), frame1, 8, 295);
1064  gtk_widget_set_uposition (frame1, 8, 295);
1065#else
1066  gtk_fixed_put (GTK_FIXED (fixed1), frame1, 8, 264);
1067  gtk_widget_set_uposition (frame1, 8, 264);
1068#endif
1069  gtk_widget_set_usize (frame1, 546, 64);
1070
1071  table1 = gtk_table_new (1, 2, FALSE);
1072  gtk_widget_ref (table1);
1073  gtk_object_set_data_full (GTK_OBJECT (admin), "table1", table1,
1074      (GtkDestroyNotify) gtk_widget_unref);
1075  gtk_widget_show (table1);
1076  gtk_container_add (GTK_CONTAINER (frame1), table1);
1077  gtk_container_set_border_width (GTK_CONTAINER (table1), 6);
1078  gtk_table_set_row_spacings (GTK_TABLE (table1), 6);
1079  gtk_table_set_col_spacings (GTK_TABLE (table1), 6);
1080
1081  l_explanation =
1082      gtk_label_new
1083      ("An ODBC User data source stores information about how 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.");
1084  gtk_widget_ref (l_explanation);
1085  gtk_object_set_data_full (GTK_OBJECT (admin), "l_explanation",
1086      l_explanation, (GtkDestroyNotify) gtk_widget_unref);
1087  gtk_widget_show (l_explanation);
1088  gtk_table_attach (GTK_TABLE (table1), l_explanation, 1, 2, 0, 1,
1089      (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1090  gtk_label_set_justify (GTK_LABEL (l_explanation), GTK_JUSTIFY_LEFT);
1091
1092#if GTK_CHECK_VERSION(2,0,0)
1093  style = gtk_widget_get_style (admin);
1094  pixmap =
1095      gdk_pixmap_create_from_xpm_d (admin->window, &mask,
1096      &style->bg[GTK_STATE_NORMAL], (gchar **) odbc4_xpm);
1097#else
1098  style = gtk_widget_get_style (GTK_WIDGET (hwnd));
1099  pixmap =
1100      gdk_pixmap_create_from_xpm_d (GTK_WIDGET (hwnd)->window, &mask,
1101      &style->bg[GTK_STATE_NORMAL], (gchar **) odbc4_xpm);
1102#endif
1103  pixmap1 = gtk_pixmap_new (pixmap, mask);
1104  gtk_widget_ref (pixmap1);
1105  gtk_object_set_data_full (GTK_OBJECT (admin), "pixmap1", pixmap1,
1106      (GtkDestroyNotify) gtk_widget_unref);
1107  gtk_widget_show (pixmap1);
1108  gtk_table_attach (GTK_TABLE (table1), pixmap1, 0, 1, 0, 1,
1109      (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0);
1110
1111  vbuttonbox1 = gtk_vbutton_box_new ();
1112  gtk_widget_ref (vbuttonbox1);
1113  gtk_object_set_data_full (GTK_OBJECT (admin), "vbuttonbox1", vbuttonbox1,
1114      (GtkDestroyNotify) gtk_widget_unref);
1115  gtk_widget_show (vbuttonbox1);
1116  gtk_fixed_put (GTK_FIXED (fixed1), vbuttonbox1, 472, 16);
1117#if GTK_CHECK_VERSION(2,0,0)
1118  gtk_widget_set_uposition (vbuttonbox1, 472, 52);
1119#else
1120  gtk_widget_set_uposition (vbuttonbox1, 472, 16);
1121#endif
1122  gtk_widget_set_usize (vbuttonbox1, 85, 135);
1123
1124  b_add = gtk_button_new_with_label ("");
1125  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_add)->child),
1126      szDSNButtons[0]);
1127  gtk_widget_add_accelerator (b_add, "clicked", accel_group,
1128      b_key, GDK_MOD1_MASK, 0);
1129  gtk_widget_ref (b_add);
1130  gtk_object_set_data_full (GTK_OBJECT (admin), "b_add", b_add,
1131      (GtkDestroyNotify) gtk_widget_unref);
1132  gtk_widget_show (b_add);
1133  gtk_container_add (GTK_CONTAINER (vbuttonbox1), b_add);
1134  GTK_WIDGET_SET_FLAGS (b_add, GTK_CAN_DEFAULT);
1135  gtk_widget_add_accelerator (b_add, "clicked", accel_group,
1136      'A', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1137
1138  b_remove = gtk_button_new_with_label ("");
1139  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_remove)->child),
1140      szDSNButtons[1]);
1141  gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
1142      b_key, GDK_MOD1_MASK, 0);
1143  gtk_widget_ref (b_remove);
1144  gtk_object_set_data_full (GTK_OBJECT (admin), "b_remove", b_remove,
1145      (GtkDestroyNotify) gtk_widget_unref);
1146  gtk_widget_show (b_remove);
1147  gtk_container_add (GTK_CONTAINER (vbuttonbox1), b_remove);
1148  GTK_WIDGET_SET_FLAGS (b_remove, GTK_CAN_DEFAULT);
1149  gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
1150      'R', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1151  gtk_widget_set_sensitive (b_remove, FALSE);
1152
1153  b_configure = gtk_button_new_with_label ("");
1154  b_key =
1155      gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_configure)->child),
1156      szDSNButtons[2]);
1157  gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
1158      b_key, GDK_MOD1_MASK, 0);
1159  gtk_widget_ref (b_configure);
1160  gtk_object_set_data_full (GTK_OBJECT (admin), "b_configure", b_configure,
1161      (GtkDestroyNotify) gtk_widget_unref);
1162  gtk_widget_show (b_configure);
1163  gtk_container_add (GTK_CONTAINER (vbuttonbox1), b_configure);
1164  GTK_WIDGET_SET_FLAGS (b_configure, GTK_CAN_DEFAULT);
1165  gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
1166      'G', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1167  gtk_widget_set_sensitive (b_configure, FALSE);
1168
1169  b_test = gtk_button_new_with_label ("");
1170  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_test)->child),
1171      szDSNButtons[3]);
1172  gtk_widget_add_accelerator (b_test, "clicked", accel_group,
1173      b_key, GDK_MOD1_MASK, 0);
1174  gtk_widget_ref (b_test);
1175  gtk_object_set_data_full (GTK_OBJECT (admin), "b_test", b_test,
1176      (GtkDestroyNotify) gtk_widget_unref);
1177  gtk_widget_show (b_test);
1178  gtk_container_add (GTK_CONTAINER (vbuttonbox1), b_test);
1179  GTK_WIDGET_SET_FLAGS (b_test, GTK_CAN_DEFAULT);
1180  gtk_widget_add_accelerator (b_test, "clicked", accel_group,
1181      'T', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1182  gtk_widget_set_sensitive (b_test, FALSE);
1183
1184  dsnchoose_t.uadd = b_add;
1185  dsnchoose_t.uremove = b_remove;
1186  dsnchoose_t.utest = b_test;
1187  dsnchoose_t.uconfigure = b_configure;
1188
1189  udsn = gtk_label_new (szTabNames[0]);
1190  gtk_widget_ref (udsn);
1191  gtk_object_set_data_full (GTK_OBJECT (admin), "udsn", udsn,
1192      (GtkDestroyNotify) gtk_widget_unref);
1193  gtk_widget_show (udsn);
1194  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
1195      gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), udsn);
1196
1197  /* System DSN panel */
1198  fixed2 = gtk_fixed_new ();
1199  gtk_widget_ref (fixed2);
1200  gtk_object_set_data_full (GTK_OBJECT (admin), "fixed2", fixed2,
1201      (GtkDestroyNotify) gtk_widget_unref);
1202  gtk_widget_show (fixed2);
1203  gtk_container_add (GTK_CONTAINER (notebook1), fixed2);
1204  gtk_container_set_border_width (GTK_CONTAINER (fixed2), 6);
1205
1206  scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
1207  gtk_widget_ref (scrolledwindow2);
1208  gtk_object_set_data_full (GTK_OBJECT (admin), "scrolledwindow2",
1209      scrolledwindow2, (GtkDestroyNotify) gtk_widget_unref);
1210  gtk_widget_show (scrolledwindow2);
1211  gtk_widget_set_usize (scrolledwindow2, 456, 232);
1212  gtk_fixed_put (GTK_FIXED (fixed2), scrolledwindow2, 3, 19);
1213
1214  clist2 = gtk_clist_new (3);
1215  gtk_widget_ref (clist2);
1216  gtk_object_set_data_full (GTK_OBJECT (admin), "clist2", clist2,
1217      (GtkDestroyNotify) gtk_widget_unref);
1218  gtk_widget_show (clist2);
1219  gtk_container_add (GTK_CONTAINER (scrolledwindow2), clist2);
1220  gtk_clist_set_column_width (GTK_CLIST (clist2), 0, 100);
1221  gtk_clist_set_column_width (GTK_CLIST (clist2), 1, 163);
1222  gtk_clist_set_column_width (GTK_CLIST (clist2), 2, 80);
1223  gtk_clist_column_titles_show (GTK_CLIST (clist2));
1224
1225  l_name = gtk_label_new (szDSNColumnNames[0]);
1226  gtk_widget_ref (l_name);
1227  gtk_object_set_data_full (GTK_OBJECT (admin), "l_name", l_name,
1228      (GtkDestroyNotify) gtk_widget_unref);
1229  gtk_widget_show (l_name);
1230  gtk_clist_set_column_widget (GTK_CLIST (clist2), 0, l_name);
1231
1232  l_description = gtk_label_new (szDSNColumnNames[1]);
1233  gtk_widget_ref (l_description);
1234  gtk_object_set_data_full (GTK_OBJECT (admin), "l_description",
1235      l_description, (GtkDestroyNotify) gtk_widget_unref);
1236  gtk_widget_show (l_description);
1237  gtk_clist_set_column_widget (GTK_CLIST (clist2), 1, l_description);
1238
1239  l_driver = gtk_label_new (szDSNColumnNames[2]);
1240  gtk_widget_ref (l_driver);
1241  gtk_object_set_data_full (GTK_OBJECT (admin), "l_driver", l_driver,
1242      (GtkDestroyNotify) gtk_widget_unref);
1243  gtk_widget_show (l_driver);
1244  gtk_clist_set_column_widget (GTK_CLIST (clist2), 2, l_driver);
1245
1246  l_sdsn = gtk_label_new ("System Data Sources :");
1247  gtk_widget_ref (l_sdsn);
1248  gtk_object_set_data_full (GTK_OBJECT (admin), "l_sdsn", l_sdsn,
1249      (GtkDestroyNotify) gtk_widget_unref);
1250  gtk_widget_show (l_sdsn);
1251  gtk_fixed_put (GTK_FIXED (fixed2), l_sdsn, 8, 8);
1252#if GTK_CHECK_VERSION(2,0,0)
1253  gtk_widget_set_uposition (l_sdsn, 12, 35);
1254  gtk_widget_set_usize (l_sdsn, 138, 16);
1255#else
1256  gtk_widget_set_uposition (l_sdsn, 8, 8);
1257  gtk_widget_set_usize (l_sdsn, 130, 16);
1258#endif
1259  gtk_label_set_justify (GTK_LABEL (l_sdsn), GTK_JUSTIFY_LEFT);
1260
1261  frame2 = gtk_frame_new (NULL);
1262  gtk_widget_ref (frame2);
1263  gtk_object_set_data_full (GTK_OBJECT (admin), "frame2", frame2,
1264      (GtkDestroyNotify) gtk_widget_unref);
1265  gtk_widget_show (frame2);
1266#if GTK_CHECK_VERSION(2,0,0)
1267  gtk_fixed_put (GTK_FIXED (fixed2), frame2, 8, 295);
1268  gtk_widget_set_uposition (frame2, 8, 295);
1269#else
1270  gtk_fixed_put (GTK_FIXED (fixed2), frame2, 8, 264);
1271  gtk_widget_set_uposition (frame2, 8, 264);
1272#endif
1273  gtk_widget_set_usize (frame2, 546, 64);
1274
1275  table2 = gtk_table_new (1, 2, FALSE);
1276  gtk_widget_ref (table2);
1277  gtk_object_set_data_full (GTK_OBJECT (admin), "table2", table2,
1278      (GtkDestroyNotify) gtk_widget_unref);
1279  gtk_widget_show (table2);
1280  gtk_container_add (GTK_CONTAINER (frame2), table2);
1281  gtk_container_set_border_width (GTK_CONTAINER (table2), 6);
1282  gtk_table_set_row_spacings (GTK_TABLE (table2), 6);
1283  gtk_table_set_col_spacings (GTK_TABLE (table2), 6);
1284
1285  l_explanation =
1286      gtk_label_new
1287      ("An ODBC System data source stores information about how to connect\nto the indicated data provider. A system data source is visible to all\nusers on this machine, including daemons.");
1288  gtk_widget_ref (l_explanation);
1289  gtk_object_set_data_full (GTK_OBJECT (admin), "l_explanation",
1290      l_explanation, (GtkDestroyNotify) gtk_widget_unref);
1291  gtk_widget_show (l_explanation);
1292  gtk_table_attach (GTK_TABLE (table2), l_explanation, 1, 2, 0, 1,
1293      (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1294  gtk_label_set_justify (GTK_LABEL (l_explanation), GTK_JUSTIFY_LEFT);
1295
1296  pixmap2 = gtk_pixmap_new (pixmap, mask);
1297  gtk_widget_ref (pixmap2);
1298  gtk_object_set_data_full (GTK_OBJECT (admin), "pixmap2", pixmap2,
1299      (GtkDestroyNotify) gtk_widget_unref);
1300  gtk_widget_show (pixmap2);
1301  gtk_table_attach (GTK_TABLE (table2), pixmap2, 0, 1, 0, 1,
1302      (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0);
1303
1304  vbuttonbox2 = gtk_vbutton_box_new ();
1305  gtk_widget_ref (vbuttonbox2);
1306  gtk_object_set_data_full (GTK_OBJECT (admin), "vbuttonbox2", vbuttonbox2,
1307      (GtkDestroyNotify) gtk_widget_unref);
1308  gtk_widget_show (vbuttonbox2);
1309  gtk_fixed_put (GTK_FIXED (fixed2), vbuttonbox2, 472, 16);
1310#if GTK_CHECK_VERSION(2,0,0)
1311  gtk_widget_set_uposition (vbuttonbox2, 472, 52);
1312#else
1313  gtk_widget_set_uposition (vbuttonbox2, 472, 16);
1314#endif
1315  gtk_widget_set_usize (vbuttonbox2, 85, 135);
1316
1317  b_add = gtk_button_new_with_label ("");
1318  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_add)->child),
1319      szDSNButtons[0]);
1320  gtk_widget_add_accelerator (b_add, "clicked", accel_group,
1321      b_key, GDK_MOD1_MASK, 0);
1322  gtk_widget_ref (b_add);
1323  gtk_object_set_data_full (GTK_OBJECT (admin), "b_add", b_add,
1324      (GtkDestroyNotify) gtk_widget_unref);
1325  gtk_widget_show (b_add);
1326  gtk_container_add (GTK_CONTAINER (vbuttonbox2), b_add);
1327  GTK_WIDGET_SET_FLAGS (b_add, GTK_CAN_DEFAULT);
1328  gtk_widget_add_accelerator (b_add, "clicked", accel_group,
1329      'A', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1330
1331  b_remove = gtk_button_new_with_label ("");
1332  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_remove)->child),
1333      szDSNButtons[1]);
1334  gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
1335      b_key, GDK_MOD1_MASK, 0);
1336  gtk_widget_ref (b_remove);
1337  gtk_object_set_data_full (GTK_OBJECT (admin), "b_remove", b_remove,
1338      (GtkDestroyNotify) gtk_widget_unref);
1339  gtk_widget_show (b_remove);
1340  gtk_container_add (GTK_CONTAINER (vbuttonbox2), b_remove);
1341  GTK_WIDGET_SET_FLAGS (b_remove, GTK_CAN_DEFAULT);
1342  gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
1343      'R', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1344  gtk_widget_set_sensitive (b_remove, FALSE);
1345
1346  b_configure = gtk_button_new_with_label ("");
1347  b_key =
1348      gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_configure)->child),
1349      szDSNButtons[2]);
1350  gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
1351      b_key, GDK_MOD1_MASK, 0);
1352  gtk_widget_ref (b_configure);
1353  gtk_object_set_data_full (GTK_OBJECT (admin), "b_configure", b_configure,
1354      (GtkDestroyNotify) gtk_widget_unref);
1355  gtk_widget_show (b_configure);
1356  gtk_container_add (GTK_CONTAINER (vbuttonbox2), b_configure);
1357  GTK_WIDGET_SET_FLAGS (b_configure, GTK_CAN_DEFAULT);
1358  gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
1359      'G', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1360  gtk_widget_set_sensitive (b_configure, FALSE);
1361
1362  b_test = gtk_button_new_with_label ("");
1363  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_test)->child),
1364      szDSNButtons[3]);
1365  gtk_widget_add_accelerator (b_test, "clicked", accel_group,
1366      b_key, GDK_MOD1_MASK, 0);
1367  gtk_widget_ref (b_test);
1368  gtk_object_set_data_full (GTK_OBJECT (admin), "b_test", b_test,
1369      (GtkDestroyNotify) gtk_widget_unref);
1370  gtk_widget_show (b_test);
1371  gtk_container_add (GTK_CONTAINER (vbuttonbox2), b_test);
1372  GTK_WIDGET_SET_FLAGS (b_test, GTK_CAN_DEFAULT);
1373  gtk_widget_add_accelerator (b_test, "clicked", accel_group,
1374      'T', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1375  gtk_widget_set_sensitive (b_test, FALSE);
1376
1377  dsnchoose_t.sadd = b_add;
1378  dsnchoose_t.sremove = b_remove;
1379  dsnchoose_t.stest = b_test;
1380  dsnchoose_t.sconfigure = b_configure;
1381
1382  sdsn = gtk_label_new (szTabNames[1]);
1383  gtk_widget_ref (sdsn);
1384  gtk_object_set_data_full (GTK_OBJECT (admin), "sdsn", sdsn,
1385      (GtkDestroyNotify) gtk_widget_unref);
1386  gtk_widget_show (sdsn);
1387  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
1388      gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), sdsn);
1389
1390  /* File DSN panel */
1391  fixed3 = gtk_fixed_new ();
1392  gtk_widget_ref (fixed3);
1393  gtk_object_set_data_full (GTK_OBJECT (admin), "fixed3", fixed3,
1394     (GtkDestroyNotify) gtk_widget_unref);
1395  gtk_widget_show (fixed3);
1396  gtk_container_add (GTK_CONTAINER (notebook1), fixed3);
1397  gtk_container_set_border_width (GTK_CONTAINER (fixed3), 6);
1398
1399  l_lookin = gtk_label_new ("Look in : ");
1400  gtk_widget_ref (l_lookin);
1401  gtk_object_set_data_full (GTK_OBJECT (admin), "l_lookin", l_lookin,
1402     (GtkDestroyNotify) gtk_widget_unref);
1403  gtk_widget_show (l_lookin);
1404#if GTK_CHECK_VERSION(2,0,0)
1405  gtk_fixed_put (GTK_FIXED (fixed3), l_lookin, 16, 44);
1406  gtk_widget_set_uposition (l_lookin, 16, 44);
1407#else
1408  gtk_fixed_put (GTK_FIXED (fixed3), l_lookin, 16, 16);
1409  gtk_widget_set_uposition (l_lookin, 16, 16);
1410#endif
1411  gtk_widget_set_usize (l_lookin, 57, 16);
1412  gtk_label_set_justify (GTK_LABEL (l_lookin), GTK_JUSTIFY_LEFT);
1413
1414  optionmenu1 = gtk_option_menu_new ();
1415  gtk_widget_ref (optionmenu1);
1416  gtk_object_set_data_full (GTK_OBJECT (admin), "optionmenu1", optionmenu1,
1417     (GtkDestroyNotify) gtk_widget_unref);
1418  gtk_widget_show (optionmenu1);
1419#if GTK_CHECK_VERSION(2,0,0)
1420  gtk_fixed_put (GTK_FIXED (fixed3), optionmenu1, 72, 40);
1421  gtk_widget_set_uposition (optionmenu1, 72, 40);
1422#else
1423  gtk_fixed_put (GTK_FIXED (fixed3), optionmenu1, 72, 16);
1424  gtk_widget_set_uposition (optionmenu1, 72, 16);
1425#endif
1426  gtk_widget_set_usize (optionmenu1, 392, 24);
1427  optionmenu1_menu = gtk_menu_new ();
1428  gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu1), optionmenu1_menu);
1429
1430  scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL);
1431  gtk_widget_ref (scrolledwindow3);
1432  gtk_object_set_data_full (GTK_OBJECT (admin), "scrolledwindow3", scrolledwindow3,
1433     (GtkDestroyNotify) gtk_widget_unref);
1434  gtk_widget_show (scrolledwindow3);
1435#if GTK_CHECK_VERSION(2,0,0)
1436  gtk_fixed_put (GTK_FIXED (fixed3), scrolledwindow3, 8, 74);
1437  gtk_widget_set_uposition (scrolledwindow3, 8, 74);
1438#else
1439  gtk_fixed_put (GTK_FIXED (fixed3), scrolledwindow3, 8, 48);
1440  gtk_widget_set_uposition (scrolledwindow3, 8, 48);
1441#endif
1442  gtk_widget_set_usize (scrolledwindow3, 224, 176);
1443
1444  clist3 = gtk_clist_new (1);
1445  gtk_widget_ref (clist3);
1446  gtk_object_set_data_full (GTK_OBJECT (admin), "clist3", clist3,
1447     (GtkDestroyNotify) gtk_widget_unref);
1448  gtk_widget_show (clist3);
1449  gtk_container_add (GTK_CONTAINER (scrolledwindow3), clist3);
1450  gtk_widget_set_usize (clist3, 144, 168);
1451  gtk_clist_set_column_width (GTK_CLIST (clist3), 0, 80);
1452  gtk_clist_column_titles_show (GTK_CLIST (clist3));
1453
1454  l_directory = gtk_label_new ("Directories");
1455  gtk_widget_ref (l_directory);
1456  gtk_object_set_data_full (GTK_OBJECT (admin), "l_directory", l_directory,
1457     (GtkDestroyNotify) gtk_widget_unref);
1458  gtk_widget_show (l_directory);
1459  gtk_clist_set_column_widget (GTK_CLIST (clist3), 0, l_directory);
1460  gtk_label_set_justify (GTK_LABEL (l_directory), GTK_JUSTIFY_LEFT);
1461
1462  scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL);
1463  gtk_widget_ref (scrolledwindow4);
1464  gtk_object_set_data_full (GTK_OBJECT (admin), "scrolledwindow4", scrolledwindow4,
1465     (GtkDestroyNotify) gtk_widget_unref);
1466  gtk_widget_show (scrolledwindow4);
1467#if GTK_CHECK_VERSION(2,0,0)
1468  gtk_fixed_put (GTK_FIXED (fixed3), scrolledwindow4, 240, 74);
1469  gtk_widget_set_uposition (scrolledwindow4, 240, 74);
1470#else
1471  gtk_fixed_put (GTK_FIXED (fixed3), scrolledwindow4, 240, 48);
1472  gtk_widget_set_uposition (scrolledwindow4, 240, 48);
1473#endif
1474  gtk_widget_set_usize (scrolledwindow4, 224, 176);
1475
1476  clist4 = gtk_clist_new (1);
1477  gtk_widget_ref (clist4);
1478  gtk_object_set_data_full (GTK_OBJECT (admin), "clist4", clist4,
1479     (GtkDestroyNotify) gtk_widget_unref);
1480  gtk_widget_show (clist4);
1481  gtk_container_add (GTK_CONTAINER (scrolledwindow4), clist4);
1482  gtk_clist_set_column_width (GTK_CLIST (clist4), 0, 80);
1483  gtk_clist_column_titles_show (GTK_CLIST (clist4));
1484
1485  l_files = gtk_label_new ("Files");
1486  gtk_widget_ref (l_files);
1487  gtk_object_set_data_full (GTK_OBJECT (admin), "l_files", l_files,
1488     (GtkDestroyNotify) gtk_widget_unref);
1489  gtk_widget_show (l_files);
1490  gtk_clist_set_column_widget (GTK_CLIST (clist4), 0, l_files);
1491  gtk_label_set_justify (GTK_LABEL (l_files), GTK_JUSTIFY_LEFT);
1492
1493  t_fileselected = gtk_entry_new ();
1494  gtk_widget_ref (t_fileselected);
1495  gtk_object_set_data_full (GTK_OBJECT (admin), "t_fileselected", t_fileselected,
1496     (GtkDestroyNotify) gtk_widget_unref);
1497  gtk_widget_show (t_fileselected);
1498#if GTK_CHECK_VERSION(2,0,0)
1499  gtk_fixed_put (GTK_FIXED (fixed3), t_fileselected, 95, 260);
1500  gtk_widget_set_uposition (t_fileselected, 95, 260);
1501#else
1502  gtk_fixed_put (GTK_FIXED (fixed3), t_fileselected, 95, 234);
1503  gtk_widget_set_uposition (t_fileselected, 95, 234);
1504#endif
1505  gtk_widget_set_usize (t_fileselected, 370, 22);
1506
1507  frame3 = gtk_frame_new (NULL);
1508  gtk_widget_ref (frame3);
1509  gtk_object_set_data_full (GTK_OBJECT (admin), "frame3", frame3,
1510     (GtkDestroyNotify) gtk_widget_unref);
1511  gtk_widget_show (frame3);
1512#if GTK_CHECK_VERSION(2,0,0)
1513  gtk_fixed_put (GTK_FIXED (fixed3), frame3, 8, 295);
1514  gtk_widget_set_uposition (frame3, 8, 295);
1515#else
1516  gtk_fixed_put (GTK_FIXED (fixed3), frame3, 8, 264);
1517  gtk_widget_set_uposition (frame3, 8, 264);
1518#endif
1519  gtk_widget_set_usize (frame3, 546, 64);
1520
1521  table3 = gtk_table_new (1, 2, FALSE);
1522  gtk_widget_ref (table3);
1523  gtk_object_set_data_full (GTK_OBJECT (admin), "table3", table3,
1524     (GtkDestroyNotify) gtk_widget_unref);
1525  gtk_widget_show (table3);
1526  gtk_container_add (GTK_CONTAINER (frame3), table3);
1527  gtk_container_set_border_width (GTK_CONTAINER (table3), 6);
1528  gtk_table_set_row_spacings (GTK_TABLE (table3), 6);
1529  gtk_table_set_col_spacings (GTK_TABLE (table3), 6);
1530
1531  l_explanation = 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.");
1532  gtk_widget_ref (l_explanation);
1533  gtk_object_set_data_full (GTK_OBJECT (admin), "l_explanation", l_explanation,
1534     (GtkDestroyNotify) gtk_widget_unref);
1535  gtk_widget_show (l_explanation);
1536  gtk_table_attach (GTK_TABLE (table3), l_explanation, 1, 2, 0, 1,
1537     (GtkAttachOptions) (0),
1538     (GtkAttachOptions) (0), 0, 0);
1539  gtk_label_set_justify (GTK_LABEL (l_explanation), GTK_JUSTIFY_LEFT);
1540
1541  pixmap3 = gtk_pixmap_new (pixmap, mask);
1542  gtk_widget_ref (pixmap3);
1543  gtk_object_set_data_full (GTK_OBJECT (admin), "pixmap3", pixmap3,
1544     (GtkDestroyNotify) gtk_widget_unref);
1545  gtk_widget_show (pixmap3);
1546  gtk_table_attach (GTK_TABLE (table3), pixmap3, 0, 1, 0, 1,
1547     (GtkAttachOptions) (GTK_FILL),
1548     (GtkAttachOptions) (GTK_FILL), 0, 0);
1549
1550  l_selected = gtk_label_new ("File selected : ");
1551  gtk_widget_ref (l_selected);
1552  gtk_object_set_data_full (GTK_OBJECT (admin), "l_selected", l_selected,
1553     (GtkDestroyNotify) gtk_widget_unref);
1554  gtk_widget_show (l_selected);
1555#if GTK_CHECK_VERSION(2,0,0)
1556  gtk_fixed_put (GTK_FIXED (fixed3), l_selected, 8, 263);
1557  gtk_widget_set_uposition (l_selected, 8, 263);
1558#else
1559  gtk_fixed_put (GTK_FIXED (fixed3), l_selected, 8, 237);
1560  gtk_widget_set_uposition (l_selected, 8, 237);
1561#endif
1562  gtk_widget_set_usize (l_selected, 85, 16);
1563
1564  vbuttonbox3 = gtk_vbutton_box_new ();
1565  gtk_widget_ref (vbuttonbox3);
1566  gtk_object_set_data_full (GTK_OBJECT (admin), "vbuttonbox3", vbuttonbox3,
1567     (GtkDestroyNotify) gtk_widget_unref);
1568  gtk_widget_show (vbuttonbox3);
1569  gtk_fixed_put (GTK_FIXED (fixed3), vbuttonbox3, 472, 16);
1570#if GTK_CHECK_VERSION(2,0,0)
1571  gtk_widget_set_uposition (vbuttonbox3, 472, 52);
1572#else
1573  gtk_widget_set_uposition (vbuttonbox3, 472, 16);
1574#endif
1575  gtk_widget_set_usize (vbuttonbox3, 85, 165);
1576
1577  b_add = gtk_button_new_with_label ("");
1578  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_add)->child),
1579     szDSNButtons[0]);
1580  gtk_widget_add_accelerator (b_add, "clicked", accel_group,
1581     b_key, GDK_MOD1_MASK, 0);
1582  gtk_widget_ref (b_add);
1583  gtk_object_set_data_full (GTK_OBJECT (admin), "b_add", b_add,
1584     (GtkDestroyNotify) gtk_widget_unref);
1585  gtk_widget_show (b_add);
1586  gtk_container_add (GTK_CONTAINER (vbuttonbox3), b_add);
1587  GTK_WIDGET_SET_FLAGS (b_add, GTK_CAN_DEFAULT);
1588  gtk_widget_add_accelerator (b_add, "clicked", accel_group,
1589     'A', GDK_MOD1_MASK,
1590     GTK_ACCEL_VISIBLE);
1591
1592  b_remove = gtk_button_new_with_label ("");
1593  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_remove)->child),
1594     szDSNButtons[1]);
1595  gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
1596     b_key, GDK_MOD1_MASK, 0);
1597  gtk_widget_ref (b_remove);
1598  gtk_object_set_data_full (GTK_OBJECT (admin), "b_remove", b_remove,
1599     (GtkDestroyNotify) gtk_widget_unref);
1600  gtk_widget_show (b_remove);
1601  gtk_container_add (GTK_CONTAINER (vbuttonbox3), b_remove);
1602  GTK_WIDGET_SET_FLAGS (b_remove, GTK_CAN_DEFAULT);
1603  gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
1604     'R', GDK_MOD1_MASK,
1605     GTK_ACCEL_VISIBLE);
1606
1607  b_configure = gtk_button_new_with_label ("");
1608  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_configure)->child),
1609     szDSNButtons[2]);
1610  gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
1611  b_key, GDK_MOD1_MASK, 0);
1612  gtk_widget_ref (b_configure);
1613  gtk_object_set_data_full (GTK_OBJECT (admin), "b_configure", b_configure,
1614     (GtkDestroyNotify) gtk_widget_unref);
1615  gtk_widget_show (b_configure);
1616  gtk_container_add (GTK_CONTAINER (vbuttonbox3), b_configure);
1617  GTK_WIDGET_SET_FLAGS (b_configure, GTK_CAN_DEFAULT);
1618  gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
1619     'C', GDK_MOD1_MASK,
1620     GTK_ACCEL_VISIBLE);
1621
1622  b_test = gtk_button_new_with_label ("");
1623  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_test)->child),
1624     szDSNButtons[3]);
1625  gtk_widget_add_accelerator (b_test, "clicked", accel_group,
1626     b_key, GDK_MOD1_MASK, 0);
1627  gtk_widget_ref (b_test);
1628  gtk_object_set_data_full (GTK_OBJECT (admin), "b_test", b_test,
1629     (GtkDestroyNotify) gtk_widget_unref);
1630  gtk_widget_show (b_test);
1631  gtk_container_add (GTK_CONTAINER (vbuttonbox3), b_test);
1632  GTK_WIDGET_SET_FLAGS (b_test, GTK_CAN_DEFAULT);
1633  gtk_widget_add_accelerator (b_test, "clicked", accel_group,
1634     'T', GDK_MOD1_MASK,
1635     GTK_ACCEL_VISIBLE);
1636
1637  b_setdir = gtk_button_new_with_label ("");
1638  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_setdir)->child),
1639     szDSNButtons[4]);
1640  gtk_widget_add_accelerator (b_setdir, "clicked", accel_group,
1641     b_key, GDK_MOD1_MASK, 0);
1642  gtk_widget_ref (b_setdir);
1643  gtk_object_set_data_full (GTK_OBJECT (admin), "b_setdir", b_setdir,
1644     (GtkDestroyNotify) gtk_widget_unref);
1645  gtk_widget_show (b_setdir);
1646  gtk_container_add (GTK_CONTAINER (vbuttonbox3), b_setdir);
1647  GTK_WIDGET_SET_FLAGS (b_setdir, GTK_CAN_DEFAULT);
1648  gtk_widget_add_accelerator (b_setdir, "clicked", accel_group,
1649     'S', GDK_MOD1_MASK,
1650     GTK_ACCEL_VISIBLE);
1651
1652  dsnchoose_t.fadd = b_add; dsnchoose_t.fremove = b_remove; dsnchoose_t.fconfigure = b_configure;
1653  dsnchoose_t.ftest = b_test; dsnchoose_t.dir_list = clist3; dsnchoose_t.dir_combo = optionmenu1;
1654  dsnchoose_t.file_list = clist4; dsnchoose_t.file_entry = t_fileselected;
1655  dsnchoose_t.fsetdir = b_setdir;
1656
1657  fdsn = gtk_label_new (szTabNames[2]);
1658  gtk_widget_ref (fdsn);
1659  gtk_object_set_data_full (GTK_OBJECT (admin), "fdsn", fdsn,
1660     (GtkDestroyNotify) gtk_widget_unref);
1661  gtk_widget_show (fdsn);
1662  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
1663      gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), fdsn);
1664
1665  dsnchoose_t.udsnlist = clist1;
1666  dsnchoose_t.sdsnlist = clist2;
1667  dsnchoose_t.type_dsn = 0;
1668  dsnchoose_t.mainwnd = admin;
1669
1670  /* ODBC Drivers panel */
1671  fixed4 = gtk_fixed_new ();
1672  gtk_widget_ref (fixed4);
1673  gtk_object_set_data_full (GTK_OBJECT (admin), "fixed4", fixed4,
1674      (GtkDestroyNotify) gtk_widget_unref);
1675  gtk_widget_show (fixed4);
1676  gtk_container_add (GTK_CONTAINER (notebook1), fixed4);
1677  gtk_container_set_border_width (GTK_CONTAINER (fixed4), 6);
1678
1679  scrolledwindow5 = gtk_scrolled_window_new (NULL, NULL);
1680  gtk_widget_ref (scrolledwindow5);
1681  gtk_object_set_data_full (GTK_OBJECT (admin), "scrolledwindow5",
1682      scrolledwindow5, (GtkDestroyNotify) gtk_widget_unref);
1683  gtk_widget_show (scrolledwindow5);
1684#if GTK_CHECK_VERSION(2,0,0)
1685  gtk_fixed_put (GTK_FIXED (fixed4), scrolledwindow5, 8, 50);
1686  gtk_widget_set_uposition (scrolledwindow5, 8, 50);
1687#else
1688  gtk_fixed_put (GTK_FIXED (fixed4), scrolledwindow5, 8, 24);
1689  gtk_widget_set_uposition (scrolledwindow5, 8, 24);
1690#endif
1691  gtk_widget_set_usize (scrolledwindow5, 536, 200);
1692
1693  clist5 = gtk_clist_new (4);
1694  gtk_widget_ref (clist5);
1695  gtk_object_set_data_full (GTK_OBJECT (admin), "clist5", clist5,
1696      (GtkDestroyNotify) gtk_widget_unref);
1697  gtk_widget_show (clist5);
1698  gtk_container_add (GTK_CONTAINER (scrolledwindow5), clist5);
1699  gtk_clist_set_column_width (GTK_CLIST (clist5), 0, 188);
1700  gtk_clist_set_column_width (GTK_CLIST (clist5), 1, 170);
1701  gtk_clist_set_column_width (GTK_CLIST (clist5), 2, 134);
1702  gtk_clist_set_column_width (GTK_CLIST (clist5), 3, 80);
1703  gtk_clist_column_titles_show (GTK_CLIST (clist5));
1704
1705  l_name = gtk_label_new (szDriverColumnNames[0]);
1706  gtk_widget_ref (l_name);
1707  gtk_object_set_data_full (GTK_OBJECT (admin), "l_name", l_name,
1708      (GtkDestroyNotify) gtk_widget_unref);
1709  gtk_widget_show (l_name);
1710  gtk_clist_set_column_widget (GTK_CLIST (clist5), 0, l_name);
1711
1712  l_file = gtk_label_new (szDriverColumnNames[1]);
1713  gtk_widget_ref (l_file);
1714  gtk_object_set_data_full (GTK_OBJECT (admin), "l_file", l_file,
1715      (GtkDestroyNotify) gtk_widget_unref);
1716  gtk_widget_show (l_file);
1717  gtk_clist_set_column_widget (GTK_CLIST (clist5), 1, l_file);
1718
1719  l_date = gtk_label_new (szDriverColumnNames[2]);
1720  gtk_widget_ref (l_date);
1721  gtk_object_set_data_full (GTK_OBJECT (admin), "l_date", l_date,
1722      (GtkDestroyNotify) gtk_widget_unref);
1723  gtk_widget_show (l_date);
1724  gtk_clist_set_column_widget (GTK_CLIST (clist5), 2, l_date);
1725
1726  l_size = gtk_label_new (szDriverColumnNames[3]);
1727  gtk_widget_ref (l_size);
1728  gtk_object_set_data_full (GTK_OBJECT (admin), "l_size", l_size,
1729      (GtkDestroyNotify) gtk_widget_unref);
1730  gtk_widget_show (l_size);
1731  gtk_clist_set_column_widget (GTK_CLIST (clist5), 3, l_size);
1732
1733  frame4 = gtk_frame_new (NULL);
1734  gtk_widget_ref (frame4);
1735  gtk_object_set_data_full (GTK_OBJECT (admin), "frame4", frame4,
1736      (GtkDestroyNotify) gtk_widget_unref);
1737  gtk_widget_show (frame4);
1738#if GTK_CHECK_VERSION(2,0,0)
1739  gtk_fixed_put (GTK_FIXED (fixed4), frame4, 8, 295);
1740  gtk_widget_set_uposition (frame4, 8, 295);
1741#else
1742  gtk_fixed_put (GTK_FIXED (fixed4), frame4, 8, 264);
1743  gtk_widget_set_uposition (frame4, 8, 264);
1744#endif
1745  gtk_widget_set_usize (frame4, 546, 64);
1746
1747  table4 = gtk_table_new (1, 2, FALSE);
1748  gtk_widget_ref (table4);
1749  gtk_object_set_data_full (GTK_OBJECT (admin), "table4", table4,
1750      (GtkDestroyNotify) gtk_widget_unref);
1751  gtk_widget_show (table4);
1752  gtk_container_add (GTK_CONTAINER (frame4), table4);
1753  gtk_container_set_border_width (GTK_CONTAINER (table4), 6);
1754  gtk_table_set_row_spacings (GTK_TABLE (table4), 6);
1755  gtk_table_set_col_spacings (GTK_TABLE (table4), 6);
1756
1757  l_explanation =
1758      gtk_label_new
1759      ("An ODBC driver allows ODBC-enabled programs to get information from\nODBC data sources. To install new drivers, use the driver's setup\nprogram if available, or add it with the 'Add' button.");
1760  gtk_widget_ref (l_explanation);
1761  gtk_object_set_data_full (GTK_OBJECT (admin), "l_explanation",
1762      l_explanation, (GtkDestroyNotify) gtk_widget_unref);
1763  gtk_widget_show (l_explanation);
1764  gtk_table_attach (GTK_TABLE (table4), l_explanation, 1, 2, 0, 1,
1765      (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1766  gtk_label_set_justify (GTK_LABEL (l_explanation), GTK_JUSTIFY_LEFT);
1767
1768  pixmap4 = gtk_pixmap_new (pixmap, mask);
1769  gtk_widget_ref (pixmap4);
1770  gtk_object_set_data_full (GTK_OBJECT (admin), "pixmap4", pixmap4,
1771      (GtkDestroyNotify) gtk_widget_unref);
1772  gtk_widget_show (pixmap4);
1773  gtk_table_attach (GTK_TABLE (table4), pixmap4, 0, 1, 0, 1,
1774      (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0);
1775
1776  l_drivers =
1777      gtk_label_new ("ODBC Drivers that are installed on your system : ");
1778  gtk_widget_ref (l_drivers);
1779  gtk_object_set_data_full (GTK_OBJECT (admin), "l_drivers", l_drivers,
1780      (GtkDestroyNotify) gtk_widget_unref);
1781  gtk_widget_show (l_drivers);
1782#if GTK_CHECK_VERSION(2,0,0)
1783  gtk_fixed_put (GTK_FIXED (fixed4), l_drivers, 8, 32);
1784  gtk_widget_set_uposition (l_drivers, 8, 32);
1785#else
1786  gtk_fixed_put (GTK_FIXED (fixed4), l_drivers, 8, 8);
1787  gtk_widget_set_uposition (l_drivers, 8, 8);
1788#endif
1789  gtk_widget_set_usize (l_drivers, 290, 16);
1790  gtk_label_set_justify (GTK_LABEL (l_drivers), GTK_JUSTIFY_LEFT);
1791
1792  hbuttonbox2 = gtk_hbutton_box_new ();
1793  gtk_widget_ref (hbuttonbox2);
1794  gtk_object_set_data_full (GTK_OBJECT (admin), "hbuttonbox2", hbuttonbox2,
1795      (GtkDestroyNotify) gtk_widget_unref);
1796  gtk_widget_show (hbuttonbox2);
1797#if GTK_CHECK_VERSION(2,0,0)
1798  gtk_fixed_put (GTK_FIXED (fixed4), hbuttonbox2, 16, 256);
1799  gtk_widget_set_uposition (hbuttonbox2, 16, 256);
1800#else
1801  gtk_fixed_put (GTK_FIXED (fixed4), hbuttonbox2, 16, 227);
1802  gtk_widget_set_uposition (hbuttonbox2, 16, 227);
1803#endif
1804  gtk_widget_set_usize (hbuttonbox2, 530, 33);
1805  gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox2), 6);
1806  gtk_button_box_set_child_size (GTK_BUTTON_BOX (hbuttonbox2), 64, -1);
1807
1808  b_add = gtk_button_new_with_label ("");
1809  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_add)->child),
1810      szDriverButtons[0]);
1811  gtk_widget_add_accelerator (b_add, "clicked", accel_group,
1812      b_key, GDK_MOD1_MASK, 0);
1813  gtk_widget_ref (b_add);
1814  gtk_object_set_data_full (GTK_OBJECT (admin), "b_add", b_add,
1815      (GtkDestroyNotify) gtk_widget_unref);
1816  gtk_widget_show (b_add);
1817  gtk_container_add (GTK_CONTAINER (hbuttonbox2), b_add);
1818  GTK_WIDGET_SET_FLAGS (b_add, GTK_CAN_DEFAULT);
1819  gtk_widget_add_accelerator (b_add, "clicked", accel_group,
1820      'A', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1821
1822  b_remove = gtk_button_new_with_label ("");
1823  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_remove)->child),
1824      szDriverButtons[1]);
1825  gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
1826      b_key, GDK_MOD1_MASK, 0);
1827  gtk_widget_ref (b_remove);
1828  gtk_object_set_data_full (GTK_OBJECT (admin), "b_remove", b_remove,
1829      (GtkDestroyNotify) gtk_widget_unref);
1830  gtk_widget_show (b_remove);
1831  gtk_container_add (GTK_CONTAINER (hbuttonbox2), b_remove);
1832  GTK_WIDGET_SET_FLAGS (b_remove, GTK_CAN_DEFAULT);
1833  gtk_widget_add_accelerator (b_remove, "clicked", accel_group,
1834      'R', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1835
1836  b_configure = gtk_button_new_with_label ("");
1837  b_key =
1838      gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_configure)->child),
1839      szDriverButtons[2]);
1840  gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
1841      b_key, GDK_MOD1_MASK, 0);
1842  gtk_widget_ref (b_configure);
1843  gtk_object_set_data_full (GTK_OBJECT (admin), "b_configure", b_configure,
1844      (GtkDestroyNotify) gtk_widget_unref);
1845  gtk_widget_show (b_configure);
1846  gtk_container_add (GTK_CONTAINER (hbuttonbox2), b_configure);
1847  GTK_WIDGET_SET_FLAGS (b_configure, GTK_CAN_DEFAULT);
1848  gtk_widget_add_accelerator (b_configure, "clicked", accel_group,
1849      'G', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1850
1851  fdrivers = gtk_label_new (szTabNames[3]);
1852  gtk_widget_ref (fdrivers);
1853  gtk_object_set_data_full (GTK_OBJECT (admin), "fdrivers", fdrivers,
1854      (GtkDestroyNotify) gtk_widget_unref);
1855  gtk_widget_show (fdrivers);
1856  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
1857      gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 3), fdrivers);
1858
1859  driverchoose_t.driverlist = clist5;
1860  driverchoose_t.mainwnd = admin;
1861  driverchoose_t.b_add = b_add;
1862  driverchoose_t.b_remove = b_remove;
1863  driverchoose_t.b_configure = b_configure;
1864
1865  /* Connection pooling panel */
1866  fixed5 = gtk_fixed_new ();
1867  gtk_widget_ref (fixed5);
1868  gtk_object_set_data_full (GTK_OBJECT (admin), "fixed5", fixed5,
1869      (GtkDestroyNotify) gtk_widget_unref);
1870  gtk_widget_show (fixed5);
1871  gtk_container_add (GTK_CONTAINER (notebook1), fixed5);
1872  gtk_container_set_border_width (GTK_CONTAINER (fixed5), 6);
1873
1874  frame10 = gtk_frame_new (NULL);
1875  gtk_widget_ref (frame10);
1876  gtk_object_set_data_full (GTK_OBJECT (admin), "frame10", frame10,
1877      (GtkDestroyNotify) gtk_widget_unref);
1878  gtk_widget_show (frame10);
1879#if GTK_CHECK_VERSION(2,0,0)
1880  gtk_fixed_put (GTK_FIXED (fixed5), frame10, 8, 295);
1881  gtk_widget_set_uposition (frame10, 8, 295);
1882#else
1883  gtk_fixed_put (GTK_FIXED (fixed5), frame10, 8, 264);
1884  gtk_widget_set_uposition (frame10, 8, 264);
1885#endif
1886  gtk_widget_set_usize (frame10, 546, 64);
1887
1888  table9 = gtk_table_new (1, 2, FALSE);
1889  gtk_widget_ref (table9);
1890  gtk_object_set_data_full (GTK_OBJECT (admin), "table9", table9,
1891      (GtkDestroyNotify) gtk_widget_unref);
1892  gtk_widget_show (table9);
1893  gtk_container_add (GTK_CONTAINER (frame10), table9);
1894  gtk_container_set_border_width (GTK_CONTAINER (table9), 6);
1895  gtk_table_set_row_spacings (GTK_TABLE (table9), 6);
1896  gtk_table_set_col_spacings (GTK_TABLE (table9), 6);
1897
1898  l_explanation =
1899      gtk_label_new
1900      ("Connection pooling allows an application to reuse open connection\nhandles, which saves round-trips to the server.\n");
1901  gtk_widget_ref (l_explanation);
1902  gtk_object_set_data_full (GTK_OBJECT (admin), "l_explanation",
1903      l_explanation, (GtkDestroyNotify) gtk_widget_unref);
1904  gtk_widget_show (l_explanation);
1905  gtk_table_attach (GTK_TABLE (table9), l_explanation, 1, 2, 0, 1,
1906      (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
1907  gtk_label_set_justify (GTK_LABEL (l_explanation), GTK_JUSTIFY_LEFT);
1908
1909  pixmap7 = gtk_pixmap_new (pixmap, mask);
1910  gtk_widget_ref (pixmap7);
1911  gtk_object_set_data_full (GTK_OBJECT (admin), "pixmap7", pixmap7,
1912      (GtkDestroyNotify) gtk_widget_unref);
1913  gtk_widget_show (pixmap7);
1914  gtk_table_attach (GTK_TABLE (table9), pixmap7, 0, 1, 0, 1,
1915      (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0);
1916
1917  frame12 = gtk_frame_new (" PerfMon ");
1918  gtk_widget_ref (frame12);
1919  gtk_object_set_data_full (GTK_OBJECT (admin), "frame12", frame12,
1920      (GtkDestroyNotify) gtk_widget_unref);
1921  gtk_widget_show (frame12);
1922#if GTK_CHECK_VERSION(2,0,0)
1923  gtk_fixed_put (GTK_FIXED (fixed5), frame12, 424, 32);
1924  gtk_widget_set_uposition (frame12, 424, 32);
1925#else
1926  gtk_fixed_put (GTK_FIXED (fixed5), frame12, 424, 8);
1927  gtk_widget_set_uposition (frame12, 424, 8);
1928#endif
1929  gtk_widget_set_usize (frame12, 128, 72);
1930
1931  vbox5 = gtk_vbox_new (TRUE, 6);
1932  gtk_widget_ref (vbox5);
1933  gtk_object_set_data_full (GTK_OBJECT (admin), "vbox5", vbox5,
1934      (GtkDestroyNotify) gtk_widget_unref);
1935  gtk_widget_show (vbox5);
1936  gtk_container_add (GTK_CONTAINER (frame12), vbox5);
1937  gtk_container_set_border_width (GTK_CONTAINER (vbox5), 6);
1938
1939  br_enable = gtk_radio_button_new_with_label (vbox5_group, "");
1940  b_key =
1941      gtk_label_parse_uline (GTK_LABEL (GTK_BIN (br_enable)->child),
1942      "_Enable");
1943  gtk_widget_add_accelerator (br_enable, "clicked", accel_group,
1944      b_key, GDK_MOD1_MASK, 0);
1945  vbox5_group = gtk_radio_button_group (GTK_RADIO_BUTTON (br_enable));
1946  gtk_widget_ref (br_enable);
1947  gtk_object_set_data_full (GTK_OBJECT (admin), "br_enable", br_enable,
1948      (GtkDestroyNotify) gtk_widget_unref);
1949  gtk_widget_show (br_enable);
1950  gtk_box_pack_start (GTK_BOX (vbox5), br_enable, FALSE, FALSE, 0);
1951
1952  br_disable = gtk_radio_button_new_with_label (vbox5_group, "");
1953  b_key =
1954      gtk_label_parse_uline (GTK_LABEL (GTK_BIN (br_disable)->child),
1955      "_Disable");
1956  gtk_widget_add_accelerator (br_disable, "clicked", accel_group,
1957      b_key, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1958  vbox5_group = gtk_radio_button_group (GTK_RADIO_BUTTON (br_disable));
1959  gtk_widget_ref (br_disable);
1960  gtk_object_set_data_full (GTK_OBJECT (admin), "br_disable", br_disable,
1961      (GtkDestroyNotify) gtk_widget_unref);
1962  gtk_widget_show (br_disable);
1963  gtk_box_pack_start (GTK_BOX (vbox5), br_disable, FALSE, FALSE, 0);
1964  gtk_widget_add_accelerator (br_disable, "clicked", accel_group,
1965      'D', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
1966  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (br_disable), TRUE);
1967
1968  frame13 = gtk_frame_new (" Retry Wait time ");
1969  gtk_widget_ref (frame13);
1970  gtk_object_set_data_full (GTK_OBJECT (admin), "frame13", frame13,
1971      (GtkDestroyNotify) gtk_widget_unref);
1972  gtk_widget_show (frame13);
1973#if GTK_CHECK_VERSION(2,0,0)
1974  gtk_fixed_put (GTK_FIXED (fixed5), frame13, 424, 112);
1975  gtk_widget_set_uposition (frame13, 424, 112);
1976#else
1977  gtk_fixed_put (GTK_FIXED (fixed5), frame13, 424, 88);
1978  gtk_widget_set_uposition (frame13, 424, 88);
1979#endif
1980  gtk_widget_set_usize (frame13, 128, 80);
1981
1982  vbox4 = gtk_vbox_new (TRUE, 0);
1983  gtk_widget_ref (vbox4);
1984  gtk_object_set_data_full (GTK_OBJECT (admin), "vbox4", vbox4,
1985      (GtkDestroyNotify) gtk_widget_unref);
1986  gtk_widget_show (vbox4);
1987  gtk_container_add (GTK_CONTAINER (frame13), vbox4);
1988  gtk_container_set_border_width (GTK_CONTAINER (vbox4), 6);
1989
1990  t_retrywait = gtk_entry_new ();
1991  gtk_widget_ref (t_retrywait);
1992  gtk_object_set_data_full (GTK_OBJECT (admin), "t_retrywait", t_retrywait,
1993      (GtkDestroyNotify) gtk_widget_unref);
1994  gtk_widget_show (t_retrywait);
1995  gtk_box_pack_start (GTK_BOX (vbox4), t_retrywait, FALSE, FALSE, 0);
1996
1997  alignment1 = gtk_alignment_new (0.5, 0.5, 1, 1);
1998  gtk_widget_ref (alignment1);
1999  gtk_object_set_data_full (GTK_OBJECT (admin), "alignment1", alignment1,
2000      (GtkDestroyNotify) gtk_widget_unref);
2001  gtk_widget_show (alignment1);
2002#if GTK_CHECK_VERSION(2,0,0)
2003  gtk_fixed_put (GTK_FIXED (fixed5), alignment1, 8, 32);
2004  gtk_widget_set_uposition (alignment1, 8, 32);
2005#else
2006  gtk_fixed_put (GTK_FIXED (fixed5), alignment1, 8, 8);
2007  gtk_widget_set_uposition (alignment1, 8, 8);
2008#endif
2009  gtk_widget_set_usize (alignment1, 410, 248);
2010
2011  frame11 = gtk_frame_new (" Connection Pooling Timeout ");
2012  gtk_widget_ref (frame11);
2013  gtk_object_set_data_full (GTK_OBJECT (admin), "frame11", frame11,
2014      (GtkDestroyNotify) gtk_widget_unref);
2015  gtk_widget_show (frame11);
2016  gtk_container_add (GTK_CONTAINER (alignment1), frame11);
2017  gtk_widget_set_usize (frame11, 368, 248);
2018
2019  fixed8 = gtk_fixed_new ();
2020  gtk_widget_ref (fixed8);
2021  gtk_object_set_data_full (GTK_OBJECT (admin), "fixed8", fixed8,
2022      (GtkDestroyNotify) gtk_widget_unref);
2023  gtk_widget_show (fixed8);
2024  gtk_container_add (GTK_CONTAINER (frame11), fixed8);
2025  gtk_container_set_border_width (GTK_CONTAINER (fixed8), 6);
2026
2027  l_odbcdrivers = gtk_label_new ("ODBC Drivers :");
2028  gtk_widget_ref (l_odbcdrivers);
2029  gtk_object_set_data_full (GTK_OBJECT (admin), "l_odbcdrivers",
2030      l_odbcdrivers, (GtkDestroyNotify) gtk_widget_unref);
2031  gtk_widget_show (l_odbcdrivers);
2032#if GTK_CHECK_VERSION(2,0,0)
2033  gtk_fixed_put (GTK_FIXED (fixed8), l_odbcdrivers, 16, 51);
2034  gtk_widget_set_uposition (l_odbcdrivers, 16, 51);
2035#else
2036  gtk_fixed_put (GTK_FIXED (fixed8), l_odbcdrivers, 8, 3);
2037  gtk_widget_set_uposition (l_odbcdrivers, 8, 3);
2038#endif
2039  gtk_widget_set_usize (l_odbcdrivers, 89, 16);
2040
2041  scrolledwindow7 = gtk_scrolled_window_new (NULL, NULL);
2042  gtk_widget_ref (scrolledwindow7);
2043  gtk_object_set_data_full (GTK_OBJECT (admin), "scrolledwindow7",
2044      scrolledwindow7, (GtkDestroyNotify) gtk_widget_unref);
2045  gtk_widget_show (scrolledwindow7);
2046#if GTK_CHECK_VERSION(2,0,0)
2047  gtk_fixed_put (GTK_FIXED (fixed8), scrolledwindow7, 16, 68);
2048  gtk_widget_set_uposition (scrolledwindow7, 16, 68);
2049#else
2050  gtk_fixed_put (GTK_FIXED (fixed8), scrolledwindow7, 8, 24);
2051  gtk_widget_set_uposition (scrolledwindow7, 8, 24);
2052#endif
2053  gtk_widget_set_usize (scrolledwindow7, 392, 200);
2054
2055  clist7 = gtk_clist_new (3);
2056  gtk_widget_ref (clist7);
2057  gtk_object_set_data_full (GTK_OBJECT (admin), "clist7", clist7,
2058      (GtkDestroyNotify) gtk_widget_unref);
2059  gtk_widget_show (clist7);
2060  gtk_container_add (GTK_CONTAINER (scrolledwindow7), clist7);
2061  gtk_clist_set_column_width (GTK_CLIST (clist7), 0, 210);
2062  gtk_clist_set_column_width (GTK_CLIST (clist7), 1, 80);
2063  gtk_clist_set_column_width (GTK_CLIST (clist7), 2, 150);
2064  gtk_clist_column_titles_show (GTK_CLIST (clist7));
2065
2066  l_name = gtk_label_new (szCpLabels[0]);
2067  gtk_widget_ref (l_name);
2068  gtk_object_set_data_full (GTK_OBJECT (admin), "l_name", l_name,
2069      (GtkDestroyNotify) gtk_widget_unref);
2070  gtk_widget_show (l_name);
2071  gtk_clist_set_column_widget (GTK_CLIST (clist7), 0, l_name);
2072
2073  l_poolto = gtk_label_new (szCpLabels[1]);
2074  gtk_widget_ref (l_poolto);
2075  gtk_object_set_data_full (GTK_OBJECT (admin), "l_poolto", l_poolto,
2076      (GtkDestroyNotify) gtk_widget_unref);
2077  gtk_widget_show (l_poolto);
2078  gtk_clist_set_column_widget (GTK_CLIST (clist7), 1, l_poolto);
2079
2080  l_poolprobe = gtk_label_new (szCpLabels[2]);
2081  gtk_widget_ref (l_poolprobe);
2082  gtk_object_set_data_full (GTK_OBJECT (admin), "l_poolprobe", l_poolprobe,
2083      (GtkDestroyNotify) gtk_widget_unref);
2084  gtk_widget_show (l_poolprobe);
2085  gtk_clist_set_column_widget (GTK_CLIST (clist7), 2, l_poolprobe);
2086
2087  fpooling = gtk_label_new (szTabNames[4]);
2088  gtk_widget_ref (fpooling);
2089  gtk_object_set_data_full (GTK_OBJECT (admin), "fpooling", fpooling,
2090      (GtkDestroyNotify) gtk_widget_unref);
2091  gtk_widget_show (fpooling);
2092  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
2093      gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 4), fpooling);
2094
2095  connectionpool_t.driverlist = clist7;
2096  connectionpool_t.enperfmon_rb = br_enable;
2097  connectionpool_t.disperfmon_rb = br_disable;
2098  connectionpool_t.retwait_entry = t_retrywait;
2099  connectionpool_t.changed = FALSE;
2100  connectionpool_t.mainwnd = admin;
2101
2102  /* Tracing panel */
2103  fixed6 = gtk_fixed_new ();
2104  gtk_widget_ref (fixed6);
2105  gtk_object_set_data_full (GTK_OBJECT (admin), "fixed6", fixed6,
2106      (GtkDestroyNotify) gtk_widget_unref);
2107  gtk_widget_show (fixed6);
2108  gtk_container_add (GTK_CONTAINER (notebook1), fixed6);
2109  gtk_container_set_border_width (GTK_CONTAINER (fixed6), 6);
2110
2111  frame6 = gtk_frame_new (" When to trace ");
2112  gtk_widget_ref (frame6);
2113  gtk_object_set_data_full (GTK_OBJECT (admin), "frame6", frame6,
2114      (GtkDestroyNotify) gtk_widget_unref);
2115  gtk_widget_show (frame6);
2116#if GTK_CHECK_VERSION(2,0,0)
2117  gtk_fixed_put (GTK_FIXED (fixed6), frame6, 8, 32);
2118  gtk_widget_set_uposition (frame6, 8, 32);
2119#else
2120  gtk_fixed_put (GTK_FIXED (fixed6), frame6, 8, 8);
2121  gtk_widget_set_uposition (frame6, 8, 8);
2122#endif
2123  gtk_widget_set_usize (frame6, 280, 104);
2124
2125  hbox1 = gtk_hbox_new (TRUE, 0);
2126  gtk_widget_ref (hbox1);
2127  gtk_object_set_data_full (GTK_OBJECT (admin), "hbox1", hbox1,
2128      (GtkDestroyNotify) gtk_widget_unref);
2129  gtk_widget_show (hbox1);
2130  gtk_container_add (GTK_CONTAINER (frame6), hbox1);
2131  gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6);
2132
2133  vbox2 = gtk_vbox_new (FALSE, 0);
2134  gtk_widget_ref (vbox2);
2135  gtk_object_set_data_full (GTK_OBJECT (admin), "vbox2", vbox2,
2136      (GtkDestroyNotify) gtk_widget_unref);
2137  gtk_widget_show (vbox2);
2138  gtk_box_pack_start (GTK_BOX (hbox1), vbox2, TRUE, TRUE, 0);
2139
2140  b_donottrace = gtk_radio_button_new_with_label (vbox2_group, "");
2141  b_key =
2142      gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_donottrace)->child),
2143      "_Don't trace");
2144  gtk_widget_add_accelerator (b_donottrace, "clicked", accel_group,
2145      b_key, GDK_MOD1_MASK, 0);
2146  vbox2_group = gtk_radio_button_group (GTK_RADIO_BUTTON (b_donottrace));
2147  gtk_widget_ref (b_donottrace);
2148  gtk_object_set_data_full (GTK_OBJECT (admin), "b_donottrace", b_donottrace,
2149      (GtkDestroyNotify) gtk_widget_unref);
2150  gtk_widget_show (b_donottrace);
2151  gtk_box_pack_start (GTK_BOX (vbox2), b_donottrace, FALSE, FALSE, 0);
2152  gtk_widget_add_accelerator (b_donottrace, "clicked", accel_group,
2153      'D', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
2154  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b_donottrace), TRUE);
2155
2156  b_allthetime = gtk_radio_button_new_with_label (vbox2_group, "");
2157  b_key =
2158      gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_allthetime)->child),
2159      "All the t_ime");
2160  gtk_widget_add_accelerator (b_allthetime, "clicked", accel_group,
2161      b_key, GDK_MOD1_MASK, 0);
2162  vbox2_group = gtk_radio_button_group (GTK_RADIO_BUTTON (b_allthetime));
2163  gtk_widget_ref (b_allthetime);
2164  gtk_object_set_data_full (GTK_OBJECT (admin), "b_allthetime", b_allthetime,
2165      (GtkDestroyNotify) gtk_widget_unref);
2166  gtk_widget_show (b_allthetime);
2167  gtk_box_pack_start (GTK_BOX (vbox2), b_allthetime, FALSE, FALSE, 0);
2168  gtk_widget_add_accelerator (b_allthetime, "clicked", accel_group,
2169      'I', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
2170
2171  b_onetime = gtk_radio_button_new_with_label (vbox2_group, "");
2172  b_key =
2173      gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_onetime)->child),
2174      "One-_time only");
2175  gtk_widget_add_accelerator (b_onetime, "clicked", accel_group,
2176      b_key, GDK_MOD1_MASK, 0);
2177  vbox2_group = gtk_radio_button_group (GTK_RADIO_BUTTON (b_onetime));
2178  gtk_widget_ref (b_onetime);
2179  gtk_object_set_data_full (GTK_OBJECT (admin), "b_onetime", b_onetime,
2180      (GtkDestroyNotify) gtk_widget_unref);
2181  gtk_widget_show (b_onetime);
2182  gtk_box_pack_start (GTK_BOX (vbox2), b_onetime, FALSE, FALSE, 0);
2183  gtk_widget_add_accelerator (b_onetime, "clicked", accel_group,
2184      'T', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
2185
2186  vbox3 = gtk_vbox_new (FALSE, 0);
2187  gtk_widget_ref (vbox3);
2188  gtk_object_set_data_full (GTK_OBJECT (admin), "vbox3", vbox3,
2189      (GtkDestroyNotify) gtk_widget_unref);
2190  gtk_widget_show (vbox3);
2191  gtk_box_pack_start (GTK_BOX (hbox1), vbox3, FALSE, FALSE, 0);
2192
2193  b_start = gtk_button_new_with_label ("");
2194  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_start)->child),
2195      "_Apply tracing settings");
2196  gtk_widget_add_accelerator (b_start, "clicked", accel_group,
2197      b_key, GDK_MOD1_MASK, 0);
2198  gtk_widget_ref (b_start);
2199  gtk_object_set_data_full (GTK_OBJECT (admin), "b_start", b_start,
2200      (GtkDestroyNotify) gtk_widget_unref);
2201  gtk_widget_show (b_start);
2202  gtk_box_pack_start (GTK_BOX (vbox3), b_start, FALSE, FALSE, 0);
2203  gtk_widget_add_accelerator (b_start, "clicked", accel_group,
2204      'A', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
2205
2206  frame7 = gtk_frame_new (" Log file path ");
2207  gtk_widget_ref (frame7);
2208  gtk_object_set_data_full (GTK_OBJECT (admin), "frame7", frame7,
2209      (GtkDestroyNotify) gtk_widget_unref);
2210  gtk_widget_show (frame7);
2211#if GTK_CHECK_VERSION(2,0,0)
2212  gtk_fixed_put (GTK_FIXED (fixed6), frame7, 296, 32);
2213  gtk_widget_set_uposition (frame7, 296, 32);
2214#else
2215  gtk_fixed_put (GTK_FIXED (fixed6), frame7, 296, 8);
2216  gtk_widget_set_uposition (frame7, 296, 8);
2217#endif
2218  gtk_widget_set_usize (frame7, 256, 104);
2219
2220  table6 = gtk_table_new (2, 1, TRUE);
2221  gtk_widget_ref (table6);
2222  gtk_object_set_data_full (GTK_OBJECT (admin), "table6", table6,
2223      (GtkDestroyNotify) gtk_widget_unref);
2224  gtk_widget_show (table6);
2225  gtk_container_add (GTK_CONTAINER (frame7), table6);
2226  gtk_container_set_border_width (GTK_CONTAINER (table6), 6);
2227  gtk_table_set_row_spacings (GTK_TABLE (table6), 6);
2228
2229  t_logfile = gtk_entry_new ();
2230  gtk_widget_ref (t_logfile);
2231  gtk_object_set_data_full (GTK_OBJECT (admin), "t_logfile", t_logfile,
2232      (GtkDestroyNotify) gtk_widget_unref);
2233  gtk_widget_show (t_logfile);
2234  gtk_table_attach (GTK_TABLE (table6), t_logfile, 0, 1, 0, 1,
2235      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
2236      (GtkAttachOptions) (0), 0, 0);
2237
2238  b_browse = gtk_button_new_with_label ("");
2239  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_browse)->child),
2240      "_Browse");
2241  gtk_widget_add_accelerator (b_browse, "clicked", accel_group,
2242      b_key, GDK_MOD1_MASK, 0);
2243  gtk_widget_ref (b_browse);
2244  gtk_object_set_data_full (GTK_OBJECT (admin), "b_browse", b_browse,
2245      (GtkDestroyNotify) gtk_widget_unref);
2246  gtk_widget_show (b_browse);
2247  gtk_table_attach (GTK_TABLE (table6), b_browse, 0, 1, 1, 2,
2248      (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
2249  gtk_widget_add_accelerator (b_browse, "clicked", accel_group,
2250      'B', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
2251
2252  frame8 = gtk_frame_new (" Custom trace library ");
2253  gtk_widget_ref (frame8);
2254  gtk_object_set_data_full (GTK_OBJECT (admin), "frame8", frame8,
2255      (GtkDestroyNotify) gtk_widget_unref);
2256  gtk_widget_show (frame8);
2257#if GTK_CHECK_VERSION(2,0,0)
2258  gtk_fixed_put (GTK_FIXED (fixed6), frame8, 8, 120);
2259  gtk_widget_set_uposition (frame8, 8, 144);
2260#else
2261  gtk_fixed_put (GTK_FIXED (fixed6), frame8, 8, 144);
2262  gtk_widget_set_uposition (frame8, 8, 120);
2263#endif
2264  gtk_widget_set_usize (frame8, 280, 96);
2265
2266  table7 = gtk_table_new (2, 1, TRUE);
2267  gtk_widget_ref (table7);
2268  gtk_object_set_data_full (GTK_OBJECT (admin), "table7", table7,
2269      (GtkDestroyNotify) gtk_widget_unref);
2270  gtk_widget_show (table7);
2271  gtk_container_add (GTK_CONTAINER (frame8), table7);
2272  gtk_container_set_border_width (GTK_CONTAINER (table7), 6);
2273  gtk_table_set_row_spacings (GTK_TABLE (table7), 6);
2274
2275  t_tracelib = gtk_entry_new ();
2276  gtk_widget_ref (t_tracelib);
2277  gtk_object_set_data_full (GTK_OBJECT (admin), "t_tracelib", t_tracelib,
2278      (GtkDestroyNotify) gtk_widget_unref);
2279  gtk_widget_show (t_tracelib);
2280  gtk_table_attach (GTK_TABLE (table7), t_tracelib, 0, 1, 0, 1,
2281      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
2282      (GtkAttachOptions) (0), 0, 0);
2283
2284  b_select = gtk_button_new_with_label ("");
2285  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_select)->child),
2286      "_Select library");
2287  gtk_widget_add_accelerator (b_select, "clicked", accel_group,
2288      b_key, GDK_MOD1_MASK, 0);
2289  gtk_widget_ref (b_select);
2290  gtk_object_set_data_full (GTK_OBJECT (admin), "b_select", b_select,
2291      (GtkDestroyNotify) gtk_widget_unref);
2292  gtk_widget_show (b_select);
2293  gtk_table_attach (GTK_TABLE (table7), b_select, 0, 1, 1, 2,
2294      (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
2295  gtk_widget_add_accelerator (b_select, "clicked", accel_group,
2296      'S', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
2297
2298  frame5 = gtk_frame_new (NULL);
2299  gtk_widget_ref (frame5);
2300  gtk_object_set_data_full (GTK_OBJECT (admin), "frame5", frame5,
2301      (GtkDestroyNotify) gtk_widget_unref);
2302  gtk_widget_show (frame5);
2303#if GTK_CHECK_VERSION(2,0,0)
2304  gtk_fixed_put (GTK_FIXED (fixed6), frame5, 8, 295);
2305  gtk_widget_set_uposition (frame5, 8, 295);
2306#else
2307  gtk_fixed_put (GTK_FIXED (fixed6), frame5, 8, 264);
2308  gtk_widget_set_uposition (frame5, 8, 264);
2309#endif
2310  gtk_widget_set_usize (frame5, 546, 64);
2311
2312  table5 = gtk_table_new (1, 2, FALSE);
2313  gtk_widget_ref (table5);
2314  gtk_object_set_data_full (GTK_OBJECT (admin), "table5", table5,
2315      (GtkDestroyNotify) gtk_widget_unref);
2316  gtk_widget_show (table5);
2317  gtk_container_add (GTK_CONTAINER (frame5), table5);
2318  gtk_container_set_border_width (GTK_CONTAINER (table5), 6);
2319  gtk_table_set_row_spacings (GTK_TABLE (table5), 6);
2320  gtk_table_set_col_spacings (GTK_TABLE (table5), 6);
2321
2322  l_explanation =
2323      gtk_label_new
2324      ("ODBC tracing allows you to create logs of the calls to ODBC drivers for\nuse by support personnel or to aid you in debugging your applications.\nNote: log files can become very large.");
2325  gtk_widget_ref (l_explanation);
2326  gtk_object_set_data_full (GTK_OBJECT (admin), "l_explanation",
2327      l_explanation, (GtkDestroyNotify) gtk_widget_unref);
2328  gtk_widget_show (l_explanation);
2329  gtk_table_attach (GTK_TABLE (table5), l_explanation, 1, 2, 0, 1,
2330      (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
2331  gtk_label_set_justify (GTK_LABEL (l_explanation), GTK_JUSTIFY_LEFT);
2332
2333  pixmap5 = gtk_pixmap_new (pixmap, mask);
2334  gtk_widget_ref (pixmap5);
2335  gtk_object_set_data_full (GTK_OBJECT (admin), "pixmap5", pixmap5,
2336      (GtkDestroyNotify) gtk_widget_unref);
2337  gtk_widget_show (pixmap5);
2338  gtk_table_attach (GTK_TABLE (table5), pixmap5, 0, 1, 0, 1,
2339      (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0);
2340
2341  ftracing = gtk_label_new (szTabNames[5]);
2342  gtk_widget_ref (ftracing);
2343  gtk_object_set_data_full (GTK_OBJECT (admin), "ftracing", ftracing,
2344      (GtkDestroyNotify) gtk_widget_unref);
2345  gtk_widget_show (ftracing);
2346  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
2347      gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 5), ftracing);
2348
2349  tracing_t.logfile_entry = t_logfile;
2350  tracing_t.tracelib_entry = t_tracelib;
2351  tracing_t.b_start_stop = b_start;
2352  tracing_t.donttrace_rb = b_donottrace;
2353  tracing_t.allthetime_rb = b_allthetime;
2354  tracing_t.onetime_rb = b_onetime;
2355  tracing_t.changed = FALSE;
2356
2357  /* About panel */
2358  fixed7 = gtk_fixed_new ();
2359  gtk_widget_ref (fixed7);
2360  gtk_object_set_data_full (GTK_OBJECT (admin), "fixed7", fixed7,
2361      (GtkDestroyNotify) gtk_widget_unref);
2362  gtk_widget_show (fixed7);
2363  gtk_container_add (GTK_CONTAINER (notebook1), fixed7);
2364  gtk_container_set_border_width (GTK_CONTAINER (fixed7), 6);
2365
2366  frame9 = gtk_frame_new (NULL);
2367  gtk_widget_ref (frame9);
2368  gtk_object_set_data_full (GTK_OBJECT (admin), "frame9", frame9,
2369      (GtkDestroyNotify) gtk_widget_unref);
2370  gtk_widget_show (frame9);
2371#if GTK_CHECK_VERSION(2,0,0)
2372  gtk_fixed_put (GTK_FIXED (fixed7), frame9, 8, 295);
2373  gtk_widget_set_uposition (frame9, 8, 295);
2374#else
2375  gtk_fixed_put (GTK_FIXED (fixed7), frame9, 8, 264);
2376  gtk_widget_set_uposition (frame9, 8, 264);
2377#endif
2378  gtk_widget_set_usize (frame9, 546, 64);
2379
2380  table8 = gtk_table_new (1, 2, FALSE);
2381  gtk_widget_ref (table8);
2382  gtk_object_set_data_full (GTK_OBJECT (admin), "table8", table8,
2383      (GtkDestroyNotify) gtk_widget_unref);
2384  gtk_widget_show (table8);
2385  gtk_container_add (GTK_CONTAINER (frame9), table8);
2386  gtk_container_set_border_width (GTK_CONTAINER (table8), 6);
2387  gtk_table_set_row_spacings (GTK_TABLE (table8), 6);
2388  gtk_table_set_col_spacings (GTK_TABLE (table8), 6);
2389
2390  l_explanation =
2391      gtk_label_new
2392      ("ODBC is a programming interface that enables applications to access\ndata in database management systems that use Structured Query\nLanguage (SQL) as a data access standard.");
2393  gtk_widget_ref (l_explanation);
2394  gtk_object_set_data_full (GTK_OBJECT (admin), "l_explanation",
2395      l_explanation, (GtkDestroyNotify) gtk_widget_unref);
2396  gtk_widget_show (l_explanation);
2397  gtk_table_attach (GTK_TABLE (table8), l_explanation, 1, 2, 0, 1,
2398      (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0);
2399  gtk_label_set_justify (GTK_LABEL (l_explanation), GTK_JUSTIFY_LEFT);
2400
2401  pixmap6 = gtk_pixmap_new (pixmap, mask);
2402  gtk_widget_ref (pixmap6);
2403  gtk_object_set_data_full (GTK_OBJECT (admin), "pixmap6", pixmap6,
2404      (GtkDestroyNotify) gtk_widget_unref);
2405  gtk_widget_show (pixmap6);
2406  gtk_table_attach (GTK_TABLE (table8), pixmap6, 0, 1, 0, 1,
2407      (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0);
2408
2409  l_about = gtk_label_new ("ODBC components installed on your system : ");
2410  gtk_widget_ref (l_about);
2411  gtk_object_set_data_full (GTK_OBJECT (admin), "l_about", l_about,
2412      (GtkDestroyNotify) gtk_widget_unref);
2413  gtk_widget_show (l_about);
2414#if GTK_CHECK_VERSION(2,0,0)
2415  gtk_fixed_put (GTK_FIXED (fixed7), l_about, 8, 32);
2416  gtk_widget_set_uposition (l_about, 8, 32);
2417#else
2418  gtk_fixed_put (GTK_FIXED (fixed7), l_about, 8, 8);
2419  gtk_widget_set_uposition (l_about, 8, 8);
2420#endif
2421  gtk_widget_set_usize (l_about, 280, 16);
2422  gtk_label_set_justify (GTK_LABEL (l_about), GTK_JUSTIFY_LEFT);
2423
2424  scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL);
2425  gtk_widget_ref (scrolledwindow6);
2426  gtk_object_set_data_full (GTK_OBJECT (admin), "scrolledwindow6",
2427      scrolledwindow6, (GtkDestroyNotify) gtk_widget_unref);
2428  gtk_widget_show (scrolledwindow6);
2429#if GTK_CHECK_VERSION(2,0,0)
2430  gtk_fixed_put (GTK_FIXED (fixed7), scrolledwindow6, 8, 48);
2431  gtk_widget_set_uposition (scrolledwindow6, 8, 48);
2432#else
2433  gtk_fixed_put (GTK_FIXED (fixed7), scrolledwindow6, 8, 24);
2434  gtk_widget_set_uposition (scrolledwindow6, 8, 24);
2435#endif
2436  gtk_widget_set_usize (scrolledwindow6, 536, 232);
2437
2438  clist6 = gtk_clist_new (5);
2439  gtk_widget_ref (clist6);
2440  gtk_object_set_data_full (GTK_OBJECT (admin), "clist6", clist6,
2441      (GtkDestroyNotify) gtk_widget_unref);
2442  gtk_widget_show (clist6);
2443  gtk_container_add (GTK_CONTAINER (scrolledwindow6), clist6);
2444  gtk_clist_set_column_width (GTK_CLIST (clist6), 0, 80);
2445  gtk_clist_set_column_width (GTK_CLIST (clist6), 1, 80);
2446  gtk_clist_set_column_width (GTK_CLIST (clist6), 2, 131);
2447  gtk_clist_set_column_width (GTK_CLIST (clist6), 3, 91);
2448  gtk_clist_set_column_width (GTK_CLIST (clist6), 4, 80);
2449  gtk_clist_column_titles_show (GTK_CLIST (clist6));
2450
2451  l_name = gtk_label_new (szDriverColumnNames[0]);
2452  gtk_widget_ref (l_name);
2453  gtk_object_set_data_full (GTK_OBJECT (admin), "l_name", l_name,
2454      (GtkDestroyNotify) gtk_widget_unref);
2455  gtk_widget_show (l_name);
2456  gtk_clist_set_column_widget (GTK_CLIST (clist6), 0, l_name);
2457
2458  l_version = gtk_label_new (szDriverColumnNames[4]);
2459  gtk_widget_ref (l_version);
2460  gtk_object_set_data_full (GTK_OBJECT (admin), "l_version", l_version,
2461      (GtkDestroyNotify) gtk_widget_unref);
2462  gtk_widget_show (l_version);
2463  gtk_clist_set_column_widget (GTK_CLIST (clist6), 1, l_version);
2464
2465  l_file = gtk_label_new (szDriverColumnNames[1]);
2466  gtk_widget_ref (l_file);
2467  gtk_object_set_data_full (GTK_OBJECT (admin), "l_file", l_file,
2468      (GtkDestroyNotify) gtk_widget_unref);
2469  gtk_widget_show (l_file);
2470  gtk_clist_set_column_widget (GTK_CLIST (clist6), 2, l_file);
2471
2472  l_date = gtk_label_new (szDriverColumnNames[2]);
2473  gtk_widget_ref (l_date);
2474  gtk_object_set_data_full (GTK_OBJECT (admin), "l_date", l_date,
2475      (GtkDestroyNotify) gtk_widget_unref);
2476  gtk_widget_show (l_date);
2477  gtk_clist_set_column_widget (GTK_CLIST (clist6), 3, l_date);
2478
2479  l_size = gtk_label_new (szDriverColumnNames[3]);
2480  gtk_widget_ref (l_size);
2481  gtk_object_set_data_full (GTK_OBJECT (admin), "l_size", l_size,
2482      (GtkDestroyNotify) gtk_widget_unref);
2483  gtk_widget_show (l_size);
2484  gtk_clist_set_column_widget (GTK_CLIST (clist6), 4, l_size);
2485
2486  fabout = gtk_label_new (szTabNames[6]);
2487  gtk_widget_ref (fabout);
2488  gtk_object_set_data_full (GTK_OBJECT (admin), "fabout", fabout,
2489      (GtkDestroyNotify) gtk_widget_unref);
2490  gtk_widget_show (fabout);
2491  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
2492      gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 6), fabout);
2493
2494  dialog_action_area1 = GTK_DIALOG (admin)->action_area;
2495  gtk_object_set_data (GTK_OBJECT (admin), "dialog_action_area1",
2496      dialog_action_area1);
2497  gtk_widget_show (dialog_action_area1);
2498  gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area1), 5);
2499
2500  hbuttonbox1 = gtk_hbutton_box_new ();
2501  gtk_widget_ref (hbuttonbox1);
2502  gtk_object_set_data_full (GTK_OBJECT (admin), "hbuttonbox1", hbuttonbox1,
2503      (GtkDestroyNotify) gtk_widget_unref);
2504  gtk_widget_show (hbuttonbox1);
2505  gtk_box_pack_start (GTK_BOX (dialog_action_area1), hbuttonbox1, TRUE, TRUE,
2506      0);
2507  gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END);
2508  gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox1), 10);
2509
2510  b_ok = gtk_button_new_with_label ("");
2511  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_ok)->child), "_Ok");
2512  gtk_widget_add_accelerator (b_ok, "clicked", accel_group,
2513      b_key, GDK_MOD1_MASK, 0);
2514  gtk_widget_ref (b_ok);
2515  gtk_object_set_data_full (GTK_OBJECT (admin), "b_ok", b_ok,
2516      (GtkDestroyNotify) gtk_widget_unref);
2517  gtk_widget_show (b_ok);
2518  gtk_container_add (GTK_CONTAINER (hbuttonbox1), b_ok);
2519  GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT);
2520  gtk_widget_add_accelerator (b_ok, "clicked", accel_group,
2521      'O', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
2522
2523  b_cancel = gtk_button_new_with_label ("");
2524  b_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (b_cancel)->child),
2525      "_Cancel");
2526  gtk_widget_add_accelerator (b_cancel, "clicked", accel_group,
2527      b_key, GDK_MOD1_MASK, 0);
2528  gtk_widget_ref (b_cancel);
2529  gtk_object_set_data_full (GTK_OBJECT (admin), "b_cancel", b_cancel,
2530      (GtkDestroyNotify) gtk_widget_unref);
2531  gtk_widget_show (b_cancel);
2532  gtk_container_add (GTK_CONTAINER (hbuttonbox1), b_cancel);
2533  GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT);
2534  gtk_widget_add_accelerator (b_cancel, "clicked", accel_group,
2535      'C', GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
2536
2537  /* Notebook events */
2538  gtk_signal_connect_after (GTK_OBJECT (notebook1), "switch_page",
2539      GTK_SIGNAL_FUNC (admin_switch_page), inparams);
2540  /* Ok button events */
2541  gtk_signal_connect (GTK_OBJECT (b_ok), "clicked",
2542      GTK_SIGNAL_FUNC (admin_ok_clicked), inparams);
2543  /* Cancel button events */
2544  gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked",
2545      GTK_SIGNAL_FUNC (admin_cancel_clicked), inparams);
2546  /* Close window button events */
2547  gtk_signal_connect (GTK_OBJECT (admin), "delete_event",
2548      GTK_SIGNAL_FUNC (delete_event), inparams);
2549  gtk_signal_connect (GTK_OBJECT (admin), "destroy",
2550      GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
2551  /* Add user DSN button events */
2552  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.uadd), "clicked",
2553      GTK_SIGNAL_FUNC (userdsn_add_clicked), &dsnchoose_t);
2554  /* Remove user DSN button events */
2555  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.uremove), "clicked",
2556      GTK_SIGNAL_FUNC (userdsn_remove_clicked), &dsnchoose_t);
2557  /* Test user DSN button events */
2558  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.utest), "clicked",
2559      GTK_SIGNAL_FUNC (userdsn_test_clicked), &dsnchoose_t);
2560  /* Configure user DSN button events */
2561  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.uconfigure), "clicked",
2562      GTK_SIGNAL_FUNC (userdsn_configure_clicked), &dsnchoose_t);
2563  /* Add system DSN button events */
2564  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.sadd), "clicked",
2565      GTK_SIGNAL_FUNC (systemdsn_add_clicked), &dsnchoose_t);
2566  /* Remove system DSN button events */
2567  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.sremove), "clicked",
2568      GTK_SIGNAL_FUNC (systemdsn_remove_clicked), &dsnchoose_t);
2569  /* Test system DSN button events */
2570  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.stest), "clicked",
2571      GTK_SIGNAL_FUNC (systemdsn_test_clicked), &dsnchoose_t);
2572  /* Configure system DSN button events */
2573  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.sconfigure), "clicked",
2574      GTK_SIGNAL_FUNC (systemdsn_configure_clicked), &dsnchoose_t);
2575
2576  /* Add file DSN button events */
2577  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.fadd), "clicked",
2578      GTK_SIGNAL_FUNC (filedsn_add_clicked),
2579      &dsnchoose_t);
2580  /* Remove file DSN button events */
2581  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.fremove), "clicked",
2582      GTK_SIGNAL_FUNC (filedsn_remove_clicked),
2583      &dsnchoose_t);
2584  /* Test file DSN button events */
2585  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.ftest), "clicked",
2586     GTK_SIGNAL_FUNC (filedsn_test_clicked),
2587     &dsnchoose_t);
2588  /* Configure file DSN button events */
2589  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.fconfigure), "clicked",
2590     GTK_SIGNAL_FUNC (filedsn_configure_clicked),
2591     &dsnchoose_t);
2592  /* Configure file DSN button events */
2593  gtk_signal_connect (GTK_OBJECT (dsnchoose_t.fsetdir), "clicked",
2594     GTK_SIGNAL_FUNC (filedsn_setdir_clicked),
2595     &dsnchoose_t);
2596  /* Add driver button events */
2597  gtk_signal_connect (GTK_OBJECT (driverchoose_t.b_add), "clicked",
2598      GTK_SIGNAL_FUNC (driver_add_clicked), &driverchoose_t);
2599  /* Remove driver button events */
2600  gtk_signal_connect (GTK_OBJECT (driverchoose_t.b_remove), "clicked",
2601      GTK_SIGNAL_FUNC (driver_remove_clicked), &driverchoose_t);
2602  /* Configure driver button events */
2603  gtk_signal_connect (GTK_OBJECT (driverchoose_t.b_configure), "clicked",
2604      GTK_SIGNAL_FUNC (driver_configure_clicked), &driverchoose_t);
2605  /* User DSN list events */
2606  gtk_signal_connect (GTK_OBJECT (clist1), "select_row",
2607      GTK_SIGNAL_FUNC (userdsn_list_select), &dsnchoose_t);
2608  gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row",
2609      GTK_SIGNAL_FUNC (userdsn_list_unselect), &dsnchoose_t);
2610  /* System DSN list events */
2611  gtk_signal_connect (GTK_OBJECT (clist2), "select_row",
2612      GTK_SIGNAL_FUNC (systemdsn_list_select), &dsnchoose_t);
2613  gtk_signal_connect (GTK_OBJECT (clist2), "unselect_row",
2614      GTK_SIGNAL_FUNC (systemdsn_list_unselect), &dsnchoose_t);
2615  /* Directories file DSN list events */
2616  gtk_signal_connect (GTK_OBJECT (clist3), "select_row",
2617     GTK_SIGNAL_FUNC (filedsn_dirlist_select),
2618     &dsnchoose_t);
2619  /* Files file DSN list events */
2620  gtk_signal_connect (GTK_OBJECT (clist4), "select_row",
2621     GTK_SIGNAL_FUNC (filedsn_filelist_select),
2622     &dsnchoose_t);
2623  gtk_signal_connect (GTK_OBJECT (clist4), "unselect_row",
2624     GTK_SIGNAL_FUNC (filedsn_filelist_unselect),
2625     &dsnchoose_t);
2626  /* Start tracing button events */
2627  gtk_signal_connect (GTK_OBJECT (b_start), "clicked",
2628      GTK_SIGNAL_FUNC (tracing_start_clicked), &tracing_t);
2629  /* Browse file entry events */
2630  gtk_signal_connect (GTK_OBJECT (b_browse), "clicked",
2631      GTK_SIGNAL_FUNC (tracing_browse_clicked), &tracing_t);
2632  /* Driver list events */
2633  gtk_signal_connect (GTK_OBJECT (clist5), "select_row",
2634      GTK_SIGNAL_FUNC (driver_list_select), &driverchoose_t);
2635  gtk_signal_connect (GTK_OBJECT (clist5), "unselect_row",
2636      GTK_SIGNAL_FUNC (driver_list_unselect), &driverchoose_t);
2637  /* Connection pooling list events */
2638  gtk_signal_connect (GTK_OBJECT (clist7), "select_row",
2639      GTK_SIGNAL_FUNC (cpdriver_list_select), &connectionpool_t);
2640
2641  gtk_window_add_accel_group (GTK_WINDOW (admin), accel_group);
2642
2643  SQLSetConfigMode (ODBC_BOTH_DSN);
2644  if (!SQLGetPrivateProfileString("ODBC", "FileDSNPath", "",
2645      dsnchoose_t.curr_dir, sizeof(dsnchoose_t.curr_dir), "odbcinst.ini"))
2646    strcpy(dsnchoose_t.curr_dir, DEFAULT_FILEDSNPATH);
2647
2648  adddsns_to_list (clist1, FALSE);
2649  component_t.componentlist = clist6;
2650
2651  inparams[0] = &dsnchoose_t;
2652  inparams[1] = &driverchoose_t;
2653  inparams[2] = &tracing_t;
2654  inparams[3] = &component_t;
2655  inparams[4] = &connectionpool_t;
2656  inparams[5] = admin;
2657
2658  gtk_widget_show_all (admin);
2659  gtk_main ();
2660}
2661