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 + -
显示快捷键?