gensetup.c 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002
  1. /*
  2. * gensetup.c
  3. *
  4. * $Id$
  5. *
  6. * The iODBC driver manager.
  7. *
  8. * Copyright (C) 1996-2021 OpenLink Software <[email protected]>
  9. * All Rights Reserved.
  10. *
  11. * This software is released under the terms of either of the following
  12. * licenses:
  13. *
  14. * - GNU Library General Public License (see LICENSE.LGPL)
  15. * - The BSD License (see LICENSE.BSD).
  16. *
  17. * Note that the only valid version of the LGPL license as far as this
  18. * project is concerned is the original GNU Library General Public License
  19. * Version 2, dated June 1991.
  20. *
  21. * While not mandated by the BSD license, any patches you make to the
  22. * iODBC source code may be contributed back into the iODBC project
  23. * at your discretion. Contributions will benefit the Open Source and
  24. * Data Access community as a whole. Submissions may be made at:
  25. *
  26. * http://www.iodbc.org
  27. *
  28. *
  29. * GNU Library Generic Public License Version 2
  30. * ============================================
  31. * This library is free software; you can redistribute it and/or
  32. * modify it under the terms of the GNU Library General Public
  33. * License as published by the Free Software Foundation; only
  34. * Version 2 of the License dated June 1991.
  35. *
  36. * This library is distributed in the hope that it will be useful,
  37. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  38. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  39. * Library General Public License for more details.
  40. *
  41. * You should have received a copy of the GNU Library General Public
  42. * License along with this library; if not, write to the Free
  43. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  44. *
  45. *
  46. * The BSD License
  47. * ===============
  48. * Redistribution and use in source and binary forms, with or without
  49. * modification, are permitted provided that the following conditions
  50. * are met:
  51. *
  52. * 1. Redistributions of source code must retain the above copyright
  53. * notice, this list of conditions and the following disclaimer.
  54. * 2. Redistributions in binary form must reproduce the above copyright
  55. * notice, this list of conditions and the following disclaimer in
  56. * the documentation and/or other materials provided with the
  57. * distribution.
  58. * 3. Neither the name of OpenLink Software Inc. nor the names of its
  59. * contributors may be used to endorse or promote products derived
  60. * from this software without specific prior written permission.
  61. *
  62. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  63. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  64. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  65. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OPENLINK OR
  66. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  67. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  68. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  69. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  70. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  71. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  72. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  73. */
  74. #include "gui.h"
  75. static char* STRCONN = "DSN=%s\0Description=%s\0\0";
  76. static int STRCONN_NB_TOKENS = 2;
  77. static char *szKeysColumnNames[] = {
  78. "Keyword",
  79. "Value"
  80. };
  81. static char *szKeysButtons[] = {
  82. "_Add",
  83. "_Update"
  84. };
  85. static void
  86. addkeywords_to_list(GtkWidget* widget, LPCSTR attrs, TGENSETUP *gensetup_t)
  87. {
  88. char *curr, *cour;
  89. char *data[2];
  90. if (!GTK_IS_CLIST (widget))
  91. return;
  92. gtk_clist_clear (GTK_CLIST (widget));
  93. for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1))
  94. {
  95. if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")) ||
  96. !strncasecmp (curr, "Driver=", STRLEN ("Driver=")) ||
  97. !strncasecmp (curr, "Description=", STRLEN ("Description=")))
  98. continue;
  99. if ((cour = strchr (curr, '=')))
  100. {
  101. *cour = '\0';
  102. data[0] = curr;
  103. data[1] = cour + 1;
  104. gtk_clist_append (GTK_CLIST (widget), data);
  105. *cour = '=';
  106. }
  107. else
  108. {
  109. data[0] = "";
  110. gtk_clist_append (GTK_CLIST (widget), data);
  111. }
  112. }
  113. if (GTK_CLIST (widget)->rows > 0)
  114. gtk_clist_sort (GTK_CLIST (widget));
  115. }
  116. static void
  117. parse_attribute_line(TGENSETUP *gensetup_t, LPCSTR dsn, LPCSTR attrs, BOOL add)
  118. {
  119. if (dsn && gensetup_t->dsn_entry)
  120. {
  121. gtk_entry_set_text (GTK_ENTRY (gensetup_t->dsn_entry), dsn);
  122. if (add)
  123. gtk_widget_set_sensitive (gensetup_t->dsn_entry, TRUE);
  124. else
  125. gtk_widget_set_sensitive (gensetup_t->dsn_entry, FALSE);
  126. }
  127. addkeywords_to_list (gensetup_t->key_list, attrs, gensetup_t);
  128. }
  129. static void
  130. gensetup_add_clicked(GtkWidget* widget, TGENSETUP *gensetup_t)
  131. {
  132. char *szKey;
  133. char *data[2];
  134. int i = 0;
  135. if (gensetup_t)
  136. {
  137. data[0] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->key_entry));
  138. if (STRLEN (data[0]))
  139. {
  140. data[1] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->value_entry));
  141. /* Try to see if the keyword already exists */
  142. for (i = 0; i < GTK_CLIST (gensetup_t->key_list)->rows; i++)
  143. {
  144. gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 0,
  145. &szKey);
  146. if (STREQ (data[0], szKey))
  147. goto done;
  148. }
  149. /* An update operation */
  150. if (i < GTK_CLIST (gensetup_t->key_list)->rows)
  151. {
  152. gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 1,
  153. data[1]);
  154. }
  155. else if (STRLEN (data[1]))
  156. {
  157. gtk_clist_append (GTK_CLIST (gensetup_t->key_list), data);
  158. }
  159. }
  160. gtk_clist_sort (GTK_CLIST (gensetup_t->key_list));
  161. done:
  162. gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), "");
  163. gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), "");
  164. }
  165. }
  166. static void
  167. gensetup_update_clicked(GtkWidget* widget, TGENSETUP *gensetup_t)
  168. {
  169. char *data[2];
  170. int i;
  171. if (gensetup_t)
  172. {
  173. data[0] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->key_entry));
  174. if (STRLEN (data[0]))
  175. {
  176. data[1] = (char*)gtk_entry_get_text (GTK_ENTRY (gensetup_t->value_entry));
  177. if (GTK_CLIST (gensetup_t->key_list)->selection != NULL)
  178. i = GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->
  179. data);
  180. else
  181. i = 0;
  182. /* An update operation */
  183. if (i < GTK_CLIST (gensetup_t->key_list)->rows)
  184. {
  185. gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 0,
  186. data[0]);
  187. gtk_clist_set_text (GTK_CLIST (gensetup_t->key_list), i, 1,
  188. data[1]);
  189. }
  190. }
  191. gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), "");
  192. gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), "");
  193. }
  194. }
  195. static void
  196. gensetup_list_select(GtkWidget* widget, gint row, gint column, GdkEvent *event, TGENSETUP *gensetup_t)
  197. {
  198. char *szKey, *szValue;
  199. if (gensetup_t && GTK_CLIST (gensetup_t->key_list)->selection != NULL)
  200. {
  201. gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list),
  202. GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->data),
  203. 0, &szKey);
  204. gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list),
  205. GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->data),
  206. 1, &szValue);
  207. gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), szKey);
  208. gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), szValue);
  209. gtk_widget_set_sensitive (gensetup_t->bupdate, TRUE);
  210. }
  211. }
  212. static void
  213. gensetup_list_unselect(GtkWidget* widget, gint row, gint column, GdkEvent *event, TGENSETUP *gensetup_t)
  214. {
  215. if (gensetup_t)
  216. {
  217. gtk_widget_set_sensitive (gensetup_t->bupdate, FALSE);
  218. gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), "");
  219. gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), "");
  220. }
  221. }
  222. static void
  223. gensetup_ok_clicked(GtkWidget* widget, TGENSETUP *gensetup_t)
  224. {
  225. char *curr, *cour, *szKey, *szValue;
  226. int i = 0, size = 0;
  227. if (gensetup_t)
  228. {
  229. /* What is the size of the block to malloc */
  230. if (gensetup_t->dsn_entry)
  231. {
  232. size +=
  233. STRLEN (gtk_entry_get_text (GTK_ENTRY (gensetup_t->dsn_entry))) +
  234. STRLEN ("DSN=") + 1;
  235. size += STRLEN ("Description=") + 1;
  236. }
  237. else
  238. {
  239. size = 1;
  240. }
  241. /* Malloc it (+1 for list-terminating NUL) */
  242. if ((gensetup_t->connstr = (char *) calloc (sizeof(char), ++size)))
  243. {
  244. if (gensetup_t->dsn_entry)
  245. {
  246. for (curr = STRCONN, cour = gensetup_t->connstr;
  247. i < STRCONN_NB_TOKENS; i++, curr += (STRLEN (curr) + 1))
  248. switch (i)
  249. {
  250. case 0:
  251. sprintf (cour, curr,
  252. gtk_entry_get_text (GTK_ENTRY (gensetup_t->dsn_entry)));
  253. cour += (STRLEN (cour) + 1);
  254. break;
  255. case 1:
  256. sprintf (cour, curr, "");
  257. cour += (STRLEN (cour) + 1);
  258. break;
  259. };
  260. }
  261. else
  262. size = 1;
  263. for (i = 0; i < GTK_CLIST (gensetup_t->key_list)->rows; i++)
  264. {
  265. gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 0,
  266. &szKey);
  267. gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 1,
  268. &szValue);
  269. cour = gensetup_t->connstr;
  270. gensetup_t->connstr =
  271. (char *) malloc (size + STRLEN (szKey) + STRLEN (szValue) +
  272. 2);
  273. if (gensetup_t->connstr)
  274. {
  275. memcpy (gensetup_t->connstr, cour, size);
  276. sprintf (gensetup_t->connstr + size - 1, "%s=%s", szKey, szValue);
  277. free (cour);
  278. size += STRLEN (szKey) + STRLEN (szValue) + 2;
  279. }
  280. else
  281. gensetup_t->connstr = cour;
  282. }
  283. /* add list-terminating NUL */
  284. gensetup_t->connstr[size - 1] = '\0';
  285. }
  286. gensetup_t->dsn_entry = NULL;
  287. gensetup_t->key_list = NULL;
  288. gensetup_t->verify_conn = gtk_toggle_button_get_active((GtkToggleButton*)gensetup_t->verify_conn_cb);
  289. gtk_signal_disconnect_by_func (GTK_OBJECT (gensetup_t->mainwnd),
  290. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  291. gtk_main_quit ();
  292. gtk_widget_destroy (gensetup_t->mainwnd);
  293. }
  294. }
  295. static void
  296. gensetup_cancel_clicked(GtkWidget* widget, TGENSETUP *gensetup_t)
  297. {
  298. if (gensetup_t)
  299. {
  300. gensetup_t->connstr = (LPSTR) -1L;
  301. gensetup_t->dsn_entry = NULL;
  302. gensetup_t->key_list = NULL;
  303. gtk_signal_disconnect_by_func (GTK_OBJECT (gensetup_t->mainwnd),
  304. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  305. gtk_main_quit ();
  306. gtk_widget_destroy (gensetup_t->mainwnd);
  307. }
  308. }
  309. static gint delete_event( GtkWidget *widget,
  310. GdkEvent *event, TGENSETUP *gensetup_t)
  311. {
  312. gensetup_cancel_clicked (widget, gensetup_t);
  313. return FALSE;
  314. }
  315. LPSTR
  316. create_fgensetup (HWND hwnd, LPCSTR dsn, LPCSTR attrs, BOOL add, BOOL *verify_conn)
  317. {
  318. GdkPixmap *pixmap;
  319. GdkBitmap *mask;
  320. GtkStyle *style;
  321. GtkWidget *gensetup;
  322. GtkWidget *dialog_vbox5;
  323. GtkWidget *vbox25;
  324. GtkWidget *frame56;
  325. GtkWidget *alignment48;
  326. GtkWidget *hbox35;
  327. GtkWidget *label93;
  328. GtkWidget *t_dsn;
  329. GtkWidget *frame55;
  330. GtkWidget *alignment47;
  331. GtkWidget *label92;
  332. GtkWidget *frame54;
  333. GtkWidget *alignment46;
  334. GtkWidget *scrolledwindow15;
  335. GtkWidget *clist1;
  336. GtkWidget *l_key;
  337. GtkWidget *l_value;
  338. GtkWidget *frame53;
  339. GtkWidget *alignment45;
  340. GtkWidget *hbox34;
  341. GtkWidget *table4;
  342. GtkWidget *label88;
  343. GtkWidget *t_value;
  344. GtkWidget *b_update;
  345. GtkWidget *b_add;
  346. GtkWidget *t_keyword;
  347. GtkWidget *label89;
  348. GtkWidget *frame52;
  349. GtkWidget *alignment44;
  350. GtkWidget *hbox33;
  351. GtkWidget *cb_verify;
  352. GtkWidget *dialog_action_area5;
  353. GtkWidget *b_cancel;
  354. GtkWidget *b_ok;
  355. TGENSETUP gensetup_t;
  356. char buff[1024];
  357. if (hwnd == NULL || !GTK_IS_WIDGET (hwnd))
  358. return (LPSTR) attrs;
  359. gensetup = gtk_dialog_new ();
  360. gtk_widget_set_name (gensetup, "gensetup");
  361. gtk_widget_set_size_request (gensetup, 354, 471);
  362. gtk_window_set_title (GTK_WINDOW (gensetup), _("File DSN Generic Setup"));
  363. gtk_window_set_position (GTK_WINDOW (gensetup), GTK_WIN_POS_CENTER);
  364. gtk_window_set_modal (GTK_WINDOW (gensetup), TRUE);
  365. gtk_window_set_type_hint (GTK_WINDOW (gensetup), GDK_WINDOW_TYPE_HINT_DIALOG);
  366. #if GTK_CHECK_VERSION(2,0,0)
  367. gtk_widget_show (gensetup);
  368. #endif
  369. dialog_vbox5 = GTK_DIALOG (gensetup)->vbox;
  370. gtk_widget_set_name (dialog_vbox5, "dialog_vbox5");
  371. gtk_widget_show (dialog_vbox5);
  372. vbox25 = gtk_vbox_new (FALSE, 0);
  373. gtk_widget_set_name (vbox25, "vbox25");
  374. gtk_widget_show (vbox25);
  375. gtk_box_pack_start (GTK_BOX (dialog_vbox5), vbox25, TRUE, TRUE, 0);
  376. frame56 = gtk_frame_new (NULL);
  377. gtk_widget_set_name (frame56, "frame56");
  378. gtk_widget_show (frame56);
  379. gtk_box_pack_start (GTK_BOX (vbox25), frame56, FALSE, TRUE, 0);
  380. gtk_frame_set_shadow_type (GTK_FRAME (frame56), GTK_SHADOW_NONE);
  381. alignment48 = gtk_alignment_new (0.5, 0.5, 1, 1);
  382. gtk_widget_set_name (alignment48, "alignment48");
  383. gtk_widget_show (alignment48);
  384. gtk_container_add (GTK_CONTAINER (frame56), alignment48);
  385. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment48), 4, 0, 0, 0);
  386. hbox35 = gtk_hbox_new (FALSE, 0);
  387. gtk_widget_set_name (hbox35, "hbox35");
  388. gtk_widget_show (hbox35);
  389. gtk_container_add (GTK_CONTAINER (alignment48), hbox35);
  390. label93 = gtk_label_new (_("File Data Source Name : "));
  391. gtk_widget_set_name (label93, "label93");
  392. gtk_widget_show (label93);
  393. gtk_box_pack_start (GTK_BOX (hbox35), label93, FALSE, FALSE, 0);
  394. t_dsn = gtk_entry_new ();
  395. gtk_widget_set_name (t_dsn, "t_dsn");
  396. gtk_widget_show (t_dsn);
  397. gtk_box_pack_start (GTK_BOX (hbox35), t_dsn, TRUE, TRUE, 0);
  398. frame55 = gtk_frame_new (NULL);
  399. gtk_widget_set_name (frame55, "frame55");
  400. gtk_widget_show (frame55);
  401. gtk_box_pack_start (GTK_BOX (vbox25), frame55, FALSE, TRUE, 0);
  402. gtk_frame_set_shadow_type (GTK_FRAME (frame55), GTK_SHADOW_NONE);
  403. alignment47 = gtk_alignment_new (0.5, 0.5, 1, 1);
  404. gtk_widget_set_name (alignment47, "alignment47");
  405. gtk_widget_show (alignment47);
  406. gtk_container_add (GTK_CONTAINER (frame55), alignment47);
  407. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment47), 4, 4, 0, 0);
  408. label92 = gtk_label_new (_("If you know the driver-specific keywords for this data\nsource, you can type them and their values here. For\nmore information on driver-specific keywords, please\nconsult your ODBC driver documentation."));
  409. gtk_widget_set_name (label92, "label92");
  410. gtk_widget_show (label92);
  411. gtk_container_add (GTK_CONTAINER (alignment47), label92);
  412. frame54 = gtk_frame_new (NULL);
  413. gtk_widget_set_name (frame54, "frame54");
  414. gtk_widget_show (frame54);
  415. gtk_box_pack_start (GTK_BOX (vbox25), frame54, TRUE, TRUE, 0);
  416. gtk_widget_set_size_request (frame54, -1, 180);
  417. gtk_frame_set_shadow_type (GTK_FRAME (frame54), GTK_SHADOW_NONE);
  418. alignment46 = gtk_alignment_new (0.5, 0.5, 1, 1);
  419. gtk_widget_set_name (alignment46, "alignment46");
  420. gtk_widget_show (alignment46);
  421. gtk_container_add (GTK_CONTAINER (frame54), alignment46);
  422. scrolledwindow15 = gtk_scrolled_window_new (NULL, NULL);
  423. gtk_widget_set_name (scrolledwindow15, "scrolledwindow15");
  424. gtk_widget_show (scrolledwindow15);
  425. gtk_container_add (GTK_CONTAINER (alignment46), scrolledwindow15);
  426. clist1 = gtk_clist_new (2);
  427. gtk_widget_set_name (clist1, "clist1");
  428. gtk_widget_show (clist1);
  429. gtk_container_add (GTK_CONTAINER (scrolledwindow15), clist1);
  430. gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 80);
  431. gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80);
  432. gtk_clist_column_titles_show (GTK_CLIST (clist1));
  433. l_key = gtk_label_new (_("Keyword"));
  434. gtk_widget_set_name (l_key, "l_key");
  435. gtk_widget_show (l_key);
  436. gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, l_key);
  437. gtk_widget_set_size_request (l_key, 137, -1);
  438. l_value = gtk_label_new (_("Value"));
  439. gtk_widget_set_name (l_value, "l_value");
  440. gtk_widget_show (l_value);
  441. gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, l_value);
  442. frame53 = gtk_frame_new (NULL);
  443. gtk_widget_set_name (frame53, "frame53");
  444. gtk_widget_show (frame53);
  445. gtk_box_pack_start (GTK_BOX (vbox25), frame53, FALSE, TRUE, 0);
  446. gtk_frame_set_shadow_type (GTK_FRAME (frame53), GTK_SHADOW_NONE);
  447. alignment45 = gtk_alignment_new (0.5, 0.5, 1, 1);
  448. gtk_widget_set_name (alignment45, "alignment45");
  449. gtk_widget_show (alignment45);
  450. gtk_container_add (GTK_CONTAINER (frame53), alignment45);
  451. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment45), 3, 0, 0, 0);
  452. hbox34 = gtk_hbox_new (FALSE, 0);
  453. gtk_widget_set_name (hbox34, "hbox34");
  454. gtk_widget_show (hbox34);
  455. gtk_container_add (GTK_CONTAINER (alignment45), hbox34);
  456. table4 = gtk_table_new (2, 3, FALSE);
  457. gtk_widget_set_name (table4, "table4");
  458. gtk_widget_show (table4);
  459. gtk_box_pack_start (GTK_BOX (hbox34), table4, TRUE, TRUE, 0);
  460. label88 = gtk_label_new (_("Value : "));
  461. gtk_widget_set_name (label88, "label88");
  462. gtk_widget_show (label88);
  463. gtk_table_attach (GTK_TABLE (table4), label88, 0, 1, 1, 2,
  464. (GtkAttachOptions) (GTK_FILL),
  465. (GtkAttachOptions) (0), 0, 0);
  466. t_value = gtk_entry_new ();
  467. gtk_widget_set_name (t_value, "t_value");
  468. gtk_widget_show (t_value);
  469. gtk_table_attach (GTK_TABLE (table4), t_value, 1, 2, 1, 2,
  470. (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
  471. (GtkAttachOptions) (0), 0, 0);
  472. b_update = gtk_button_new_with_mnemonic (_(" _Update "));
  473. gtk_widget_set_name (b_update, "b_update");
  474. gtk_widget_show (b_update);
  475. gtk_table_attach (GTK_TABLE (table4), b_update, 2, 3, 1, 2,
  476. (GtkAttachOptions) (GTK_FILL),
  477. (GtkAttachOptions) (0), 0, 0);
  478. gtk_container_set_border_width (GTK_CONTAINER (b_update), 6);
  479. gtk_widget_set_sensitive(b_update, FALSE);
  480. b_add = gtk_button_new_from_stock ("gtk-add");
  481. gtk_widget_set_name (b_add, "b_add");
  482. gtk_widget_show (b_add);
  483. gtk_table_attach (GTK_TABLE (table4), b_add, 2, 3, 0, 1,
  484. (GtkAttachOptions) (GTK_FILL),
  485. (GtkAttachOptions) (0), 0, 0);
  486. gtk_container_set_border_width (GTK_CONTAINER (b_add), 6);
  487. t_keyword = gtk_entry_new ();
  488. gtk_widget_set_name (t_keyword, "t_keyword");
  489. gtk_widget_show (t_keyword);
  490. gtk_table_attach (GTK_TABLE (table4), t_keyword, 1, 2, 0, 1,
  491. (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
  492. (GtkAttachOptions) (0), 0, 0);
  493. label89 = gtk_label_new (_("Keyword : "));
  494. gtk_widget_set_name (label89, "label89");
  495. gtk_widget_show (label89);
  496. gtk_table_attach (GTK_TABLE (table4), label89, 0, 1, 0, 1,
  497. (GtkAttachOptions) (GTK_FILL),
  498. (GtkAttachOptions) (0), 0, 0);
  499. frame52 = gtk_frame_new (NULL);
  500. gtk_widget_set_name (frame52, "frame52");
  501. gtk_widget_show (frame52);
  502. gtk_box_pack_start (GTK_BOX (vbox25), frame52, FALSE, TRUE, 0);
  503. gtk_frame_set_shadow_type (GTK_FRAME (frame52), GTK_SHADOW_NONE);
  504. alignment44 = gtk_alignment_new (0.5, 0.5, 1, 1);
  505. gtk_widget_set_name (alignment44, "alignment44");
  506. gtk_widget_show (alignment44);
  507. gtk_container_add (GTK_CONTAINER (frame52), alignment44);
  508. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment44), 0, 3, 12, 0);
  509. hbox33 = gtk_hbox_new (FALSE, 0);
  510. gtk_widget_set_name (hbox33, "hbox33");
  511. gtk_widget_show (hbox33);
  512. gtk_container_add (GTK_CONTAINER (alignment44), hbox33);
  513. cb_verify = gtk_check_button_new_with_mnemonic (_("Verify this connection (recommended)"));
  514. gtk_widget_set_name (cb_verify, "cb_verify");
  515. gtk_widget_show (cb_verify);
  516. gtk_box_pack_start (GTK_BOX (hbox33), cb_verify, FALSE, FALSE, 0);
  517. gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_verify), TRUE);
  518. dialog_action_area5 = GTK_DIALOG (gensetup)->action_area;
  519. gtk_widget_set_name (dialog_action_area5, "dialog_action_area5");
  520. gtk_widget_show (dialog_action_area5);
  521. gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area5), GTK_BUTTONBOX_END);
  522. b_cancel = gtk_button_new_from_stock ("gtk-cancel");
  523. gtk_widget_set_name (b_cancel, "b_cancel");
  524. gtk_widget_show (b_cancel);
  525. gtk_dialog_add_action_widget (GTK_DIALOG (gensetup), b_cancel, GTK_RESPONSE_CANCEL);
  526. GTK_WIDGET_SET_FLAGS (b_cancel, GTK_CAN_DEFAULT);
  527. b_ok = gtk_button_new_from_stock ("gtk-ok");
  528. gtk_widget_set_name (b_ok, "b_ok");
  529. gtk_widget_show (b_ok);
  530. gtk_dialog_add_action_widget (GTK_DIALOG (gensetup), b_ok, GTK_RESPONSE_OK);
  531. GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT);
  532. /* Store pointers to all widgets, for use by lookup_widget(). */
  533. GLADE_HOOKUP_OBJECT_NO_REF (gensetup, gensetup, "gensetup");
  534. GLADE_HOOKUP_OBJECT_NO_REF (gensetup, dialog_vbox5, "dialog_vbox5");
  535. GLADE_HOOKUP_OBJECT (gensetup, vbox25, "vbox25");
  536. GLADE_HOOKUP_OBJECT (gensetup, frame56, "frame56");
  537. GLADE_HOOKUP_OBJECT (gensetup, alignment48, "alignment48");
  538. GLADE_HOOKUP_OBJECT (gensetup, hbox35, "hbox35");
  539. GLADE_HOOKUP_OBJECT (gensetup, label93, "label93");
  540. GLADE_HOOKUP_OBJECT (gensetup, t_dsn, "t_dsn");
  541. GLADE_HOOKUP_OBJECT (gensetup, frame55, "frame55");
  542. GLADE_HOOKUP_OBJECT (gensetup, alignment47, "alignment47");
  543. GLADE_HOOKUP_OBJECT (gensetup, label92, "label92");
  544. GLADE_HOOKUP_OBJECT (gensetup, frame54, "frame54");
  545. GLADE_HOOKUP_OBJECT (gensetup, alignment46, "alignment46");
  546. GLADE_HOOKUP_OBJECT (gensetup, scrolledwindow15, "scrolledwindow15");
  547. GLADE_HOOKUP_OBJECT (gensetup, clist1, "clist1");
  548. GLADE_HOOKUP_OBJECT (gensetup, l_key, "l_key");
  549. GLADE_HOOKUP_OBJECT (gensetup, l_value, "l_value");
  550. GLADE_HOOKUP_OBJECT (gensetup, frame53, "frame53");
  551. GLADE_HOOKUP_OBJECT (gensetup, alignment45, "alignment45");
  552. GLADE_HOOKUP_OBJECT (gensetup, hbox34, "hbox34");
  553. GLADE_HOOKUP_OBJECT (gensetup, table4, "table4");
  554. GLADE_HOOKUP_OBJECT (gensetup, label88, "label88");
  555. GLADE_HOOKUP_OBJECT (gensetup, t_value, "t_value");
  556. GLADE_HOOKUP_OBJECT (gensetup, b_update, "b_update");
  557. GLADE_HOOKUP_OBJECT (gensetup, b_add, "b_add");
  558. GLADE_HOOKUP_OBJECT (gensetup, t_keyword, "t_keyword");
  559. GLADE_HOOKUP_OBJECT (gensetup, label89, "label89");
  560. GLADE_HOOKUP_OBJECT (gensetup, frame52, "frame52");
  561. GLADE_HOOKUP_OBJECT (gensetup, alignment44, "alignment44");
  562. GLADE_HOOKUP_OBJECT (gensetup, hbox33, "hbox33");
  563. GLADE_HOOKUP_OBJECT (gensetup, cb_verify, "cb_verify");
  564. GLADE_HOOKUP_OBJECT_NO_REF (gensetup, dialog_action_area5, "dialog_action_area5");
  565. GLADE_HOOKUP_OBJECT (gensetup, b_cancel, "b_cancel");
  566. GLADE_HOOKUP_OBJECT (gensetup, b_ok, "b_ok");
  567. /* Ok button events */
  568. gtk_signal_connect (GTK_OBJECT (b_ok), "clicked",
  569. GTK_SIGNAL_FUNC (gensetup_ok_clicked), &gensetup_t);
  570. /* Cancel button events */
  571. gtk_signal_connect (GTK_OBJECT (b_cancel), "clicked",
  572. GTK_SIGNAL_FUNC (gensetup_cancel_clicked), &gensetup_t);
  573. /* Add button events */
  574. gtk_signal_connect (GTK_OBJECT (b_add), "clicked",
  575. GTK_SIGNAL_FUNC (gensetup_add_clicked), &gensetup_t);
  576. /* Update button events */
  577. gtk_signal_connect (GTK_OBJECT (b_update), "clicked",
  578. GTK_SIGNAL_FUNC (gensetup_update_clicked), &gensetup_t);
  579. /* Close window button events */
  580. gtk_signal_connect (GTK_OBJECT (gensetup), "delete_event",
  581. GTK_SIGNAL_FUNC (delete_event), &gensetup_t);
  582. gtk_signal_connect (GTK_OBJECT (gensetup), "destroy",
  583. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  584. /* List events */
  585. gtk_signal_connect (GTK_OBJECT (clist1), "select_row",
  586. GTK_SIGNAL_FUNC (gensetup_list_select), &gensetup_t);
  587. gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row",
  588. GTK_SIGNAL_FUNC (gensetup_list_unselect), &gensetup_t);
  589. gensetup_t.dsn_entry = t_dsn;
  590. gensetup_t.key_list = clist1;
  591. gensetup_t.bupdate = b_update;
  592. gensetup_t.key_entry = t_keyword;
  593. gensetup_t.value_entry = t_value;
  594. gensetup_t.mainwnd = gensetup;
  595. gensetup_t.verify_conn_cb = cb_verify;
  596. gensetup_t.verify_conn = *verify_conn;
  597. gtk_toggle_button_set_active((GtkToggleButton*)cb_verify, *verify_conn);
  598. /* Parse the attributes line */
  599. parse_attribute_line (&gensetup_t, dsn, attrs, add);
  600. gtk_widget_show_all (gensetup);
  601. gtk_main ();
  602. *verify_conn = gensetup_t.verify_conn;
  603. return gensetup_t.connstr;
  604. }
  605. LPSTR
  606. create_keyval (HWND hwnd, LPCSTR attrs, BOOL *verify_conn)
  607. {
  608. GdkPixmap *pixmap;
  609. GdkBitmap *mask;
  610. GtkStyle *style;
  611. GtkWidget *genkeyval;
  612. GtkWidget *dialog_vbox4;
  613. GtkWidget *vbox24;
  614. GtkWidget *frame48;
  615. GtkWidget *alignment40;
  616. GtkWidget *label81;
  617. GtkWidget *frame49;
  618. GtkWidget *alignment41;
  619. GtkWidget *scrolledwindow14;
  620. GtkWidget *clist1;
  621. GtkWidget *l_key;
  622. GtkWidget *l_value;
  623. GtkWidget *frame50;
  624. GtkWidget *alignment42;
  625. GtkWidget *hbox31;
  626. GtkWidget *table3;
  627. GtkWidget *label86;
  628. GtkWidget *t_value;
  629. GtkWidget *b_update;
  630. GtkWidget *b_add;
  631. GtkWidget *t_keyword;
  632. GtkWidget *label87;
  633. GtkWidget *frame51;
  634. GtkWidget *alignment43;
  635. GtkWidget *hbox32;
  636. GtkWidget *cb_verify;
  637. GtkWidget *dialog_action_area4;
  638. GtkWidget *cancelbutton2;
  639. GtkWidget *okbutton2;
  640. TGENSETUP gensetup_t;
  641. char buff[1024];
  642. if (hwnd == NULL || !GTK_IS_WIDGET (hwnd))
  643. return (LPSTR) attrs;
  644. genkeyval = gtk_dialog_new ();
  645. gtk_widget_set_name (genkeyval, "genkeyval");
  646. gtk_widget_set_size_request (genkeyval, 355, 430);
  647. gtk_window_set_title (GTK_WINDOW (genkeyval), _("Advanced File DSN Creation Settings"));
  648. gtk_window_set_position (GTK_WINDOW (genkeyval), GTK_WIN_POS_CENTER);
  649. gtk_window_set_modal (GTK_WINDOW (genkeyval), TRUE);
  650. gtk_window_set_default_size (GTK_WINDOW (genkeyval), 355, 430);
  651. gtk_window_set_type_hint (GTK_WINDOW (genkeyval), GDK_WINDOW_TYPE_HINT_DIALOG);
  652. #if GTK_CHECK_VERSION(2,0,0)
  653. gtk_widget_show (genkeyval);
  654. #endif
  655. dialog_vbox4 = GTK_DIALOG (genkeyval)->vbox;
  656. gtk_widget_set_name (dialog_vbox4, "dialog_vbox4");
  657. gtk_widget_show (dialog_vbox4);
  658. vbox24 = gtk_vbox_new (FALSE, 0);
  659. gtk_widget_set_name (vbox24, "vbox24");
  660. gtk_widget_show (vbox24);
  661. gtk_box_pack_start (GTK_BOX (dialog_vbox4), vbox24, TRUE, TRUE, 0);
  662. frame48 = gtk_frame_new (NULL);
  663. gtk_widget_set_name (frame48, "frame48");
  664. gtk_widget_show (frame48);
  665. gtk_box_pack_start (GTK_BOX (vbox24), frame48, FALSE, TRUE, 0);
  666. gtk_frame_set_shadow_type (GTK_FRAME (frame48), GTK_SHADOW_NONE);
  667. alignment40 = gtk_alignment_new (0.5, 0.5, 1, 1);
  668. gtk_widget_set_name (alignment40, "alignment40");
  669. gtk_widget_show (alignment40);
  670. gtk_container_add (GTK_CONTAINER (frame48), alignment40);
  671. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment40), 4, 4, 0, 0);
  672. label81 = gtk_label_new (_("If you know the driver-specific keywords for this data\nsource, you can type them and their values here. For\nmore information on driver-specific keywords, please\nconsult your ODBC driver documentation."));
  673. gtk_widget_set_name (label81, "label81");
  674. gtk_widget_show (label81);
  675. gtk_container_add (GTK_CONTAINER (alignment40), label81);
  676. frame49 = gtk_frame_new (NULL);
  677. gtk_widget_set_name (frame49, "frame49");
  678. gtk_widget_show (frame49);
  679. gtk_box_pack_start (GTK_BOX (vbox24), frame49, TRUE, TRUE, 0);
  680. gtk_frame_set_shadow_type (GTK_FRAME (frame49), GTK_SHADOW_NONE);
  681. alignment41 = gtk_alignment_new (0.5, 0.5, 1, 1);
  682. gtk_widget_set_name (alignment41, "alignment41");
  683. gtk_widget_show (alignment41);
  684. gtk_container_add (GTK_CONTAINER (frame49), alignment41);
  685. scrolledwindow14 = gtk_scrolled_window_new (NULL, NULL);
  686. gtk_widget_set_name (scrolledwindow14, "scrolledwindow14");
  687. gtk_widget_show (scrolledwindow14);
  688. gtk_container_add (GTK_CONTAINER (alignment41), scrolledwindow14);
  689. clist1 = gtk_clist_new (2);
  690. gtk_widget_set_name (clist1, "clist1");
  691. gtk_widget_show (clist1);
  692. gtk_container_add (GTK_CONTAINER (scrolledwindow14), clist1);
  693. gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 80);
  694. gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80);
  695. gtk_clist_column_titles_show (GTK_CLIST (clist1));
  696. l_key = gtk_label_new (_("Keyword"));
  697. gtk_widget_set_name (l_key, "l_key");
  698. gtk_widget_show (l_key);
  699. gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, l_key);
  700. gtk_widget_set_size_request (l_key, 137, -1);
  701. l_value = gtk_label_new (_("Value"));
  702. gtk_widget_set_name (l_value, "l_value");
  703. gtk_widget_show (l_value);
  704. gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, l_value);
  705. frame50 = gtk_frame_new (NULL);
  706. gtk_widget_set_name (frame50, "frame50");
  707. gtk_widget_show (frame50);
  708. gtk_box_pack_start (GTK_BOX (vbox24), frame50, FALSE, TRUE, 0);
  709. gtk_frame_set_shadow_type (GTK_FRAME (frame50), GTK_SHADOW_NONE);
  710. alignment42 = gtk_alignment_new (0.5, 0.5, 1, 1);
  711. gtk_widget_set_name (alignment42, "alignment42");
  712. gtk_widget_show (alignment42);
  713. gtk_container_add (GTK_CONTAINER (frame50), alignment42);
  714. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment42), 3, 0, 0, 0);
  715. hbox31 = gtk_hbox_new (FALSE, 0);
  716. gtk_widget_set_name (hbox31, "hbox31");
  717. gtk_widget_show (hbox31);
  718. gtk_container_add (GTK_CONTAINER (alignment42), hbox31);
  719. table3 = gtk_table_new (2, 3, FALSE);
  720. gtk_widget_set_name (table3, "table3");
  721. gtk_widget_show (table3);
  722. gtk_box_pack_start (GTK_BOX (hbox31), table3, TRUE, TRUE, 0);
  723. label86 = gtk_label_new (_("Value : "));
  724. gtk_widget_set_name (label86, "label86");
  725. gtk_widget_show (label86);
  726. gtk_table_attach (GTK_TABLE (table3), label86, 0, 1, 1, 2,
  727. (GtkAttachOptions) (GTK_FILL),
  728. (GtkAttachOptions) (0), 0, 0);
  729. t_value = gtk_entry_new ();
  730. gtk_widget_set_name (t_value, "t_value");
  731. gtk_widget_show (t_value);
  732. gtk_table_attach (GTK_TABLE (table3), t_value, 1, 2, 1, 2,
  733. (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
  734. (GtkAttachOptions) (0), 0, 0);
  735. b_update = gtk_button_new_with_mnemonic (_(" _Update "));
  736. gtk_widget_set_name (b_update, "b_update");
  737. gtk_widget_show (b_update);
  738. gtk_table_attach (GTK_TABLE (table3), b_update, 2, 3, 1, 2,
  739. (GtkAttachOptions) (GTK_FILL),
  740. (GtkAttachOptions) (0), 0, 0);
  741. gtk_container_set_border_width (GTK_CONTAINER (b_update), 6);
  742. gtk_widget_set_sensitive(b_update, FALSE);
  743. b_add = gtk_button_new_from_stock ("gtk-add");
  744. gtk_widget_set_name (b_add, "b_add");
  745. gtk_widget_show (b_add);
  746. gtk_table_attach (GTK_TABLE (table3), b_add, 2, 3, 0, 1,
  747. (GtkAttachOptions) (GTK_FILL),
  748. (GtkAttachOptions) (0), 0, 0);
  749. gtk_container_set_border_width (GTK_CONTAINER (b_add), 6);
  750. t_keyword = gtk_entry_new ();
  751. gtk_widget_set_name (t_keyword, "t_keyword");
  752. gtk_widget_show (t_keyword);
  753. gtk_table_attach (GTK_TABLE (table3), t_keyword, 1, 2, 0, 1,
  754. (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
  755. (GtkAttachOptions) (0), 0, 0);
  756. label87 = gtk_label_new (_("Keyword : "));
  757. gtk_widget_set_name (label87, "label87");
  758. gtk_widget_show (label87);
  759. gtk_table_attach (GTK_TABLE (table3), label87, 0, 1, 0, 1,
  760. (GtkAttachOptions) (GTK_FILL),
  761. (GtkAttachOptions) (0), 0, 0);
  762. frame51 = gtk_frame_new (NULL);
  763. gtk_widget_set_name (frame51, "frame51");
  764. gtk_widget_show (frame51);
  765. gtk_box_pack_start (GTK_BOX (vbox24), frame51, FALSE, TRUE, 0);
  766. gtk_frame_set_shadow_type (GTK_FRAME (frame51), GTK_SHADOW_NONE);
  767. alignment43 = gtk_alignment_new (0.5, 0.5, 1, 1);
  768. gtk_widget_set_name (alignment43, "alignment43");
  769. gtk_widget_show (alignment43);
  770. gtk_container_add (GTK_CONTAINER (frame51), alignment43);
  771. gtk_alignment_set_padding (GTK_ALIGNMENT (alignment43), 0, 3, 12, 0);
  772. hbox32 = gtk_hbox_new (FALSE, 0);
  773. gtk_widget_set_name (hbox32, "hbox32");
  774. gtk_widget_show (hbox32);
  775. gtk_container_add (GTK_CONTAINER (alignment43), hbox32);
  776. cb_verify = gtk_check_button_new_with_mnemonic (_("Verify this connection (recommended)"));
  777. gtk_widget_set_name (cb_verify, "cb_verify");
  778. gtk_widget_show (cb_verify);
  779. gtk_box_pack_start (GTK_BOX (hbox32), cb_verify, FALSE, FALSE, 0);
  780. gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb_verify), TRUE);
  781. dialog_action_area4 = GTK_DIALOG (genkeyval)->action_area;
  782. gtk_widget_set_name (dialog_action_area4, "dialog_action_area4");
  783. gtk_widget_show (dialog_action_area4);
  784. gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area4), GTK_BUTTONBOX_END);
  785. cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel");
  786. gtk_widget_set_name (cancelbutton2, "cancelbutton2");
  787. gtk_widget_show (cancelbutton2);
  788. gtk_dialog_add_action_widget (GTK_DIALOG (genkeyval), cancelbutton2, GTK_RESPONSE_CANCEL);
  789. GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT);
  790. okbutton2 = gtk_button_new_from_stock ("gtk-ok");
  791. gtk_widget_set_name (okbutton2, "okbutton2");
  792. gtk_widget_show (okbutton2);
  793. gtk_dialog_add_action_widget (GTK_DIALOG (genkeyval), okbutton2, GTK_RESPONSE_OK);
  794. GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT);
  795. /* Store pointers to all widgets, for use by lookup_widget(). */
  796. GLADE_HOOKUP_OBJECT_NO_REF (genkeyval, genkeyval, "genkeyval");
  797. GLADE_HOOKUP_OBJECT_NO_REF (genkeyval, dialog_vbox4, "dialog_vbox4");
  798. GLADE_HOOKUP_OBJECT (genkeyval, vbox24, "vbox24");
  799. GLADE_HOOKUP_OBJECT (genkeyval, frame48, "frame48");
  800. GLADE_HOOKUP_OBJECT (genkeyval, alignment40, "alignment40");
  801. GLADE_HOOKUP_OBJECT (genkeyval, label81, "label81");
  802. GLADE_HOOKUP_OBJECT (genkeyval, frame49, "frame49");
  803. GLADE_HOOKUP_OBJECT (genkeyval, alignment41, "alignment41");
  804. GLADE_HOOKUP_OBJECT (genkeyval, scrolledwindow14, "scrolledwindow14");
  805. GLADE_HOOKUP_OBJECT (genkeyval, clist1, "clist1");
  806. GLADE_HOOKUP_OBJECT (genkeyval, l_key, "l_key");
  807. GLADE_HOOKUP_OBJECT (genkeyval, l_value, "l_value");
  808. GLADE_HOOKUP_OBJECT (genkeyval, frame50, "frame50");
  809. GLADE_HOOKUP_OBJECT (genkeyval, alignment42, "alignment42");
  810. GLADE_HOOKUP_OBJECT (genkeyval, hbox31, "hbox31");
  811. GLADE_HOOKUP_OBJECT (genkeyval, table3, "table3");
  812. GLADE_HOOKUP_OBJECT (genkeyval, label86, "label86");
  813. GLADE_HOOKUP_OBJECT (genkeyval, t_value, "t_value");
  814. GLADE_HOOKUP_OBJECT (genkeyval, b_update, "b_update");
  815. GLADE_HOOKUP_OBJECT (genkeyval, b_add, "b_add");
  816. GLADE_HOOKUP_OBJECT (genkeyval, t_keyword, "t_keyword");
  817. GLADE_HOOKUP_OBJECT (genkeyval, label87, "label87");
  818. GLADE_HOOKUP_OBJECT (genkeyval, frame51, "frame51");
  819. GLADE_HOOKUP_OBJECT (genkeyval, alignment43, "alignment43");
  820. GLADE_HOOKUP_OBJECT (genkeyval, hbox32, "hbox32");
  821. GLADE_HOOKUP_OBJECT (genkeyval, cb_verify, "cb_verify");
  822. GLADE_HOOKUP_OBJECT_NO_REF (genkeyval, dialog_action_area4, "dialog_action_area4");
  823. GLADE_HOOKUP_OBJECT (genkeyval, cancelbutton2, "cancelbutton2");
  824. GLADE_HOOKUP_OBJECT (genkeyval, okbutton2, "okbutton2");
  825. /* Ok button events */
  826. gtk_signal_connect (GTK_OBJECT (okbutton2), "clicked",
  827. GTK_SIGNAL_FUNC (gensetup_ok_clicked), &gensetup_t);
  828. /* Cancel button events */
  829. gtk_signal_connect (GTK_OBJECT (cancelbutton2), "clicked",
  830. GTK_SIGNAL_FUNC (gensetup_cancel_clicked), &gensetup_t);
  831. /* Add button events */
  832. gtk_signal_connect (GTK_OBJECT (b_add), "clicked",
  833. GTK_SIGNAL_FUNC (gensetup_add_clicked), &gensetup_t);
  834. /* Update button events */
  835. gtk_signal_connect (GTK_OBJECT (b_update), "clicked",
  836. GTK_SIGNAL_FUNC (gensetup_update_clicked), &gensetup_t);
  837. /* Close window button events */
  838. gtk_signal_connect (GTK_OBJECT (genkeyval), "delete_event",
  839. GTK_SIGNAL_FUNC (delete_event), &gensetup_t);
  840. gtk_signal_connect (GTK_OBJECT (genkeyval), "destroy",
  841. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  842. /* List events */
  843. gtk_signal_connect (GTK_OBJECT (clist1), "select_row",
  844. GTK_SIGNAL_FUNC (gensetup_list_select), &gensetup_t);
  845. gtk_signal_connect (GTK_OBJECT (clist1), "unselect_row",
  846. GTK_SIGNAL_FUNC (gensetup_list_unselect), &gensetup_t);
  847. // gtk_window_add_accel_group (GTK_WINDOW (gensetup), accel_group);
  848. gensetup_t.dsn_entry = NULL;
  849. gensetup_t.key_list = clist1;
  850. gensetup_t.bupdate = b_update;
  851. gensetup_t.key_entry = t_keyword;
  852. gensetup_t.value_entry = t_value;
  853. gensetup_t.mainwnd = genkeyval;
  854. gensetup_t.verify_conn_cb = cb_verify;
  855. gensetup_t.verify_conn = *verify_conn;
  856. gtk_toggle_button_set_active((GtkToggleButton*)cb_verify, *verify_conn);
  857. /* Parse the attributes line */
  858. parse_attribute_line (&gensetup_t, NULL, attrs, TRUE);
  859. gtk_widget_show_all (genkeyval);
  860. gtk_main ();
  861. *verify_conn = gensetup_t.verify_conn;
  862. return gensetup_t.connstr;
  863. }