gensetup.c
来自「一个可以替代windows ODBC驱动程序管理器的通用ODBC数据库引擎」· C语言 代码 · 共 572 行 · 第 1/2 页
C
572 行
/* * gensetup.c * * $Id: gensetup.c,v 1.1 2001/06/07 00:50:20 source Exp $ * * The iODBC driver manager. * * Copyright (C) 2001 by OpenLink Software <iodbc@openlinksw.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include "gui.h"static char* STRCONN = "DSN=%s\0Description=%s\0\0";static int STRCONN_NB_TOKENS = 2;char *szKeysColumnNames[] = { "Keyword", "Value"};char *szKeysButtons[] = { "_Add", "_Update"};static voidaddkeywords_to_list(GtkWidget* widget, LPCSTR attrs, TGENSETUP *gensetup_t){ char *curr, *cour; char *data[2]; if (!GTK_IS_CLIST (widget)) return; gtk_clist_clear (GTK_CLIST (widget)); for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "Description=", STRLEN ("Description="))) gtk_entry_set_text (GTK_ENTRY (gensetup_t->comment_entry), curr + STRLEN ("Description=")); if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")) || !strncasecmp (curr, "Driver=", STRLEN ("Driver=")) || !strncasecmp (curr, "Description=", STRLEN ("Description="))) continue; data[0] = curr; if ((cour = strchr (curr, '='))) { data[1] = cour + 1; *cour = 0; gtk_clist_append (GTK_CLIST (widget), data); *cour = '='; } else { data[1] = ""; gtk_clist_append (GTK_CLIST (widget), data); } } if (GTK_CLIST (widget)->rows > 0) gtk_clist_sort (GTK_CLIST (widget));}static voidparse_attribute_line(TGENSETUP *gensetup_t, LPCSTR dsn, LPCSTR attrs, BOOL add){ char *curr, *cour; if (dsn) { gtk_entry_set_text (GTK_ENTRY (gensetup_t->dsn_entry), dsn); if (add) gtk_entry_set_editable (GTK_ENTRY (gensetup_t->dsn_entry), FALSE); else gtk_entry_set_editable (GTK_ENTRY (gensetup_t->dsn_entry), TRUE); } addkeywords_to_list (gensetup_t->key_list, attrs, gensetup_t);}static voidgensetup_add_clicked(GtkWidget* widget, TGENSETUP *gensetup_t){ char *szKey; char *data[2]; int i = 0; if (gensetup_t) { data[0] = gtk_entry_get_text (GTK_ENTRY (gensetup_t->key_entry)); if (!STRLEN (data[0])) goto done; data[1] = gtk_entry_get_text (GTK_ENTRY (gensetup_t->value_entry)); for (i = 0; i < GTK_CLIST (gensetup_t->key_list)->rows; i++) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 0, &szKey); if (!strcmp (szKey, data[0])) { gtk_clist_remove (GTK_CLIST (gensetup_t->key_list), i); break; } } gtk_clist_append (GTK_CLIST (gensetup_t->key_list), data); if (GTK_CLIST (gensetup_t->key_list)->rows > 0) gtk_clist_sort (GTK_CLIST (gensetup_t->key_list)); done: gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); }}static voidgensetup_update_clicked(GtkWidget* widget, TGENSETUP *gensetup_t){ char *data[2]; if (gensetup_t && GTK_CLIST (gensetup_t->key_list)->selection != NULL) { data[0] = gtk_entry_get_text (GTK_ENTRY (gensetup_t->key_entry)); data[1] = gtk_entry_get_text (GTK_ENTRY (gensetup_t->value_entry)); gtk_clist_remove (GTK_CLIST (gensetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection-> data)); if (STRLEN (data[0])) { gtk_clist_append (GTK_CLIST (gensetup_t->key_list), data); if (GTK_CLIST (gensetup_t->key_list)->rows > 0) gtk_clist_sort (GTK_CLIST (gensetup_t->key_list)); } gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); }}static voidgensetup_list_select(GtkWidget* widget, gint row, gint column, GdkEvent *event, TGENSETUP *gensetup_t){ char *szKey, *szValue; if (gensetup_t && GTK_CLIST (gensetup_t->key_list)->selection != NULL) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->data), 0, &szKey); gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), GPOINTER_TO_INT (GTK_CLIST (gensetup_t->key_list)->selection->data), 1, &szValue); gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), szKey); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), szValue); gtk_widget_set_sensitive (gensetup_t->bupdate, TRUE); }}static voidgensetup_list_unselect(GtkWidget* widget, gint row, gint column, GdkEvent *event, TGENSETUP *gensetup_t){ if (gensetup_t) { gtk_widget_set_sensitive (gensetup_t->bupdate, FALSE); gtk_entry_set_text (GTK_ENTRY (gensetup_t->key_entry), ""); gtk_entry_set_text (GTK_ENTRY (gensetup_t->value_entry), ""); }}static voidgensetup_ok_clicked(GtkWidget* widget, TGENSETUP *gensetup_t){ char *curr, *cour, *szKey, *szValue; int i = 0, size; if (gensetup_t) { gensetup_t->connstr = (char *) malloc (sizeof (char) * (size = ((STRLEN (gtk_entry_get_text (GTK_ENTRY (gensetup_t-> dsn_entry))) ? STRLEN (gtk_entry_get_text (GTK_ENTRY (gensetup_t-> dsn_entry))) + STRLEN ("DSN=") + 1 : STRLEN ("DSN=") + 1) + (STRLEN (gtk_entry_get_text (GTK_ENTRY (gensetup_t-> comment_entry))) ? STRLEN (gtk_entry_get_text (GTK_ENTRY (gensetup_t-> comment_entry))) + STRLEN ("Description=") + 1 : STRLEN ("Description=") + 1) + 1))); if (gensetup_t->connstr) { for (curr = STRCONN, cour = gensetup_t->connstr; i < STRCONN_NB_TOKENS; i++, curr += (STRLEN (curr) + 1)) switch (i) { case 0: sprintf (cour, curr, gtk_entry_get_text (GTK_ENTRY (gensetup_t->dsn_entry))); cour += (STRLEN (cour) + 1); break; case 1: sprintf (cour, curr, gtk_entry_get_text (GTK_ENTRY (gensetup_t-> comment_entry))); cour += (STRLEN (cour) + 1); break; }; for (i = 0; i < GTK_CLIST (gensetup_t->key_list)->rows; i++) { gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 0, &szKey); gtk_clist_get_text (GTK_CLIST (gensetup_t->key_list), i, 1, &szValue); cour = (char *) gensetup_t->connstr; gensetup_t->connstr = (LPSTR) malloc (size + STRLEN (szKey) + STRLEN (szValue) + 2); if (gensetup_t->connstr) { memcpy (gensetup_t->connstr, cour, size); sprintf (gensetup_t->connstr + size - 1, "%s=%s", szKey, szValue); free (cour); size += STRLEN (szKey) + STRLEN (szValue) + 2; } else gensetup_t->connstr = cour; } gensetup_t->connstr[size - 1] = 0; } gensetup_t->dsn_entry = gensetup_t->comment_entry = NULL; gensetup_t->key_list = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (gensetup_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (gensetup_t->mainwnd); }}static voidgensetup_cancel_clicked(GtkWidget* widget, TGENSETUP *gensetup_t){ if (gensetup_t) { gensetup_t->connstr = (LPSTR) - 1L; gensetup_t->dsn_entry = gensetup_t->comment_entry = NULL; gensetup_t->key_list = NULL; gtk_signal_disconnect_by_func (GTK_OBJECT (gensetup_t->mainwnd), GTK_SIGNAL_FUNC (gtk_main_quit), NULL); gtk_main_quit (); gtk_widget_destroy (gensetup_t->mainwnd); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?