dsnchooser.c

来自「一个可以替代windows ODBC驱动程序管理器的通用ODBC数据库引擎」· C语言 代码 · 共 1,772 行 · 第 1/4 页

C
1,772
字号
	      display_sqlerror (choose_t->mainwnd,		  "The File DSN creation failed.", NULL, SQL_NULL_HENV,		  SQL_NULL_HDBC, SQL_NULL_HSTMT);	      return;	    }	  if (SQLAllocConnect (henv, &hdbc) != SQL_SUCCESS)	    {	      SQLFreeEnv (henv);	      display_sqlerror (choose_t->mainwnd,		  "The File DSN creation failed.", NULL, henv, SQL_NULL_HDBC,		  SQL_NULL_HSTMT);	      return;	    }	  if (SQLDriverConnect (hdbc, choose_t->mainwnd, connstr, SQL_NTS,		  outconnstr, sizeof (outconnstr), &buflen,		  SQL_DRIVER_PROMPT) != SQL_SUCCESS)	    display_sqlerror (choose_t->mainwnd,		"The File DSN creation failed.", NULL, henv, hdbc,		SQL_NULL_HSTMT);	  else	    SQLDisconnect (hdbc);	  SQLFreeConnect (hdbc);	  SQLFreeEnv (henv);	  /*SQLSetConfigMode(ODBC_SYSTEM_DSN);	     if( !SQLConfigDataSource(choose_t->mainwnd, ODBC_ADD_DSN, drv+STRLEN("DRIVER="), "") )	     {	     if( SQLInstallerError(1, &error, connstr, sizeof(connstr), NULL) != SQL_NO_DATA && error!=ODBC_ERROR_REQUEST_FAILED)	     _iodbcdm_errorbox(choose_t->mainwnd, NULL, "An error occured when trying to add the DSN : ");	     goto done;	     }	     adddsns_to_list(choose_t->sdsnlist, TRUE); */	  if (choose_t->uremove)	    gtk_widget_set_sensitive (choose_t->uremove, FALSE);	  if (choose_t->uconfigure)	    gtk_widget_set_sensitive (choose_t->uconfigure, FALSE);	  if (choose_t->utest)	    gtk_widget_set_sensitive (choose_t->utest, FALSE);	  if (choose_t->sremove)	    gtk_widget_set_sensitive (choose_t->sremove, FALSE);	  if (choose_t->sconfigure)	    gtk_widget_set_sensitive (choose_t->sconfigure, FALSE);	  if (choose_t->stest)	    gtk_widget_set_sensitive (choose_t->stest, FALSE);	  /*if(choose_t->fremove) gtk_widget_set_sensitive(choose_t->fremove,FALSE);	     if(choose_t->fconfigure) gtk_widget_set_sensitive(choose_t->fconfigure,FALSE);	     if(choose_t->ftest) gtk_widget_set_sensitive(choose_t->ftest,FALSE); */	}    }quit:  return;}voidfiledsn_remove_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t){}voidfiledsn_configure_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t){}voidfiledsn_test_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t){}voidfiledsn_filelist_select (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDSNCHOOSER *choose_t){  LPSTR filename = NULL, temp = NULL;  char filecontent[4096];  if (choose_t)    {      /* Get the file name */      gtk_clist_get_text (GTK_CLIST (choose_t->file_list), row, 0, &filename);      /* Update the directory and file list */      temp =	  (LPSTR) malloc (STRLEN (filename) + STRLEN (choose_t->curr_dir) +	  2);      if (temp)	{	  STRCPY (temp, choose_t->curr_dir);	  if (temp[STRLEN (temp) - 1] != '/')	    STRCAT (temp, "/");	  STRCAT (temp, filename);	  /* Check if it's a valid file */	  gtk_entry_set_text (GTK_ENTRY (choose_t->file_entry), temp);	  /* And activate buttons */	  if (choose_t->fremove)	    gtk_widget_set_sensitive (choose_t->fremove, TRUE);	  if (choose_t->fconfigure)	    gtk_widget_set_sensitive (choose_t->fconfigure, TRUE);	  if (choose_t->ftest)	    gtk_widget_set_sensitive (choose_t->ftest, TRUE);	  free (temp);	}    }}voidfiledsn_filelist_unselect (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDSNCHOOSER *choose_t){  if (choose_t)    {      /* Check if it's a valid file */      gtk_entry_set_text (GTK_ENTRY (choose_t->file_entry), "");      /* And des-activate buttons */      if (choose_t->fremove)	gtk_widget_set_sensitive (choose_t->fremove, FALSE);      if (choose_t->fconfigure)	gtk_widget_set_sensitive (choose_t->fconfigure, FALSE);      if (choose_t->ftest)	gtk_widget_set_sensitive (choose_t->ftest, FALSE);    }}voidfiledsn_dirlist_select (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDSNCHOOSER *choose_t){  LPSTR filename = NULL, temp = NULL;  int i;  if (choose_t)    {      /* Get the directory name */      gtk_clist_get_text (GTK_CLIST (choose_t->dir_list), row, 0, &filename);      if (filename && event && event->type == GDK_2BUTTON_PRESS)	{	  /* Update the directory and file list */	  temp =	      (LPSTR) malloc (STRLEN (filename) +	      STRLEN (choose_t->curr_dir) + 2);	  if (temp)	    {	      if (!strcmp (filename, "."))		STRCPY (temp, choose_t->curr_dir);	      else if (!strcmp (filename, ".."))		{		  STRCPY (temp, choose_t->curr_dir);		  for (i = STRLEN (temp) - 1; i - 1 && temp[i] != '/'; i--);		  temp[i] = 0;		}	      else		{		  STRCPY (temp, choose_t->curr_dir);		  if (temp[STRLEN (temp) - 1] != '/')		    STRCAT (temp, "/");		  STRCAT (temp, filename);		}	      if (choose_t->curr_dir)		free (choose_t->curr_dir);	      choose_t->curr_dir = temp;	      addlistofdir_to_optionmenu (choose_t->dir_combo,		  choose_t->curr_dir, choose_t);	      adddirectories_to_list (choose_t->mainwnd, choose_t->dir_list,		  choose_t->curr_dir);	      addfiles_to_list (choose_t->mainwnd, choose_t->file_list,		  choose_t->curr_dir);	    }	}    }}voidfiledsn_lookin_clicked (GtkWidget *widget, void **array){  if (array && array[0] && array[1] && ((TDSNCHOOSER *) array[1])->curr_dir      && strcmp (((TDSNCHOOSER *) array[1])->curr_dir, array[0]))    {      /* Update the directory and file list */      if (((TDSNCHOOSER *) array[1])->curr_dir)	free (((TDSNCHOOSER *) array[1])->curr_dir);      ((TDSNCHOOSER *) array[1])->curr_dir = strdup (array[0]);      addlistofdir_to_optionmenu (((TDSNCHOOSER *) array[1])->dir_combo,	  (LPCSTR) array[0], (TDSNCHOOSER *) array[1]);      adddirectories_to_list (((TDSNCHOOSER *) array[1])->mainwnd,	  ((TDSNCHOOSER *) array[1])->dir_list, (LPCSTR) array[0]);      addfiles_to_list (((TDSNCHOOSER *) array[1])->mainwnd,	  ((TDSNCHOOSER *) array[1])->file_list, (LPCSTR) array[0]);    }}voiduserdsn_list_select (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDSNCHOOSER *choose_t){  char *szDSN = NULL;  if (choose_t)    {      if (GTK_CLIST (choose_t->udsnlist)->selection != NULL)	gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),	    GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->data),	    0, &szDSN);      if (szDSN && event && event->type == GDK_2BUTTON_PRESS)	gtk_signal_emit_by_name (GTK_OBJECT (choose_t->uconfigure), "clicked",	    choose_t);      gtk_widget_set_sensitive (choose_t->uremove, TRUE);      gtk_widget_set_sensitive (choose_t->uconfigure, TRUE);      gtk_widget_set_sensitive (choose_t->utest, TRUE);    }}voiduserdsn_list_unselect (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDSNCHOOSER *choose_t){  if (choose_t)    {      gtk_widget_set_sensitive (choose_t->uremove, FALSE);      gtk_widget_set_sensitive (choose_t->uconfigure, FALSE);      gtk_widget_set_sensitive (choose_t->utest, FALSE);    }}voidsystemdsn_list_select (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDSNCHOOSER *choose_t){  char *szDSN = NULL;  if (choose_t)    {      if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL)	gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),	    GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->data),	    0, &szDSN);      if (szDSN && event && event->type == GDK_2BUTTON_PRESS)	gtk_signal_emit_by_name (GTK_OBJECT (choose_t->sconfigure), "clicked",	    choose_t);      gtk_widget_set_sensitive (choose_t->sremove, TRUE);      gtk_widget_set_sensitive (choose_t->sconfigure, TRUE);      gtk_widget_set_sensitive (choose_t->stest, TRUE);    }}voidsystemdsn_list_unselect (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDSNCHOOSER *choose_t){  if (choose_t)    {      gtk_widget_set_sensitive (choose_t->sremove, FALSE);      gtk_widget_set_sensitive (choose_t->sconfigure, FALSE);      gtk_widget_set_sensitive (choose_t->stest, FALSE);    }}static voiddsnchooser_ok_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t){  char *szDSN;  int i;  if (choose_t)    {      switch (choose_t->type_dsn)	{	case 0:	  if (GTK_CLIST (choose_t->udsnlist)->selection != NULL)	    {	      gtk_clist_get_text (GTK_CLIST (choose_t->udsnlist),		  GPOINTER_TO_INT (GTK_CLIST (choose_t->udsnlist)->selection->		      data), 0, &szDSN);	      choose_t->dsn = strdup (szDSN);	    }	  else	    choose_t->dsn = NULL;	  SQLSetConfigMode (ODBC_USER_DSN);	  break;	case 1:	  if (GTK_CLIST (choose_t->sdsnlist)->selection != NULL)	    {	      gtk_clist_get_text (GTK_CLIST (choose_t->sdsnlist),		  GPOINTER_TO_INT (GTK_CLIST (choose_t->sdsnlist)->selection->		      data), 0, &szDSN);	      choose_t->dsn = strdup (szDSN);	    }	  else	    choose_t->dsn = NULL;	  SQLSetConfigMode (ODBC_SYSTEM_DSN);	  break;	default:	  choose_t->dsn = NULL;	  break;	};    done:      choose_t->udsnlist = choose_t->sdsnlist = NULL;      choose_t->uadd = choose_t->uremove = choose_t->utest =	  choose_t->uconfigure = NULL;      choose_t->sadd = choose_t->sremove = choose_t->stest =	  choose_t->sconfigure = NULL;      gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd),	  GTK_SIGNAL_FUNC (gtk_main_quit), NULL);      gtk_main_quit ();      gtk_widget_destroy (choose_t->mainwnd);    }}static voiddsnchooser_cancel_clicked (GtkWidget *widget, TDSNCHOOSER *choose_t){  if (choose_t)    {      choose_t->udsnlist = choose_t->sdsnlist = NULL;      choose_t->uadd = choose_t->uremove = choose_t->utest =	  choose_t->uconfigure = NULL;      choose_t->sadd = choose_t->sremove = choose_t->stest =	  choose_t->sconfigure = NULL;      choose_t->type_dsn = -1;      choose_t->dsn = NULL;      gtk_signal_disconnect_by_func (GTK_OBJECT (choose_t->mainwnd),	  GTK_SIGNAL_FUNC (gtk_main_quit), NULL);      gtk_main_quit ();      gtk_widget_destroy (choose_t->mainwnd);    }}static gintdelete_event (GtkWidget *widget, GdkEvent *event, TDSNCHOOSER *choose_t){  dsnchooser_cancel_clicked (widget, choose_t);  return FALSE;}voidcreate_dsnchooser (HWND hwnd, TDSNCHOOSER * choose_t){  guint b_ok_key, b_cancel_key, b_add_key, b_remove_key, b_test_key,      b_configure_key;  GtkWidget *dsnchooser, *dialog_vbox1, *notebook1, *vbox1, *fixed1,      *scrolledwindow1;  GtkWidget *clist1, *l_name, *l_description, *l_driver, *l_usdsn, *frame1,      *table1;  GtkWidget *l_explanation, *pixmap1, *vbuttonbox1, *b_add, *b_remove,      *b_configure;  GtkWidget *b_test, *udsn, *fixed2, *scrolledwindow2, *clist2;  GtkWidget *l_sdsn, *frame2, *table2, *pixmap2, *vbuttonbox2, *sdsn,      *dialog_action_area1;  GtkWidget *hbuttonbox1, *b_ok, *b_cancel;  GdkPixmap *pixmap;  GdkBitmap *mask;  GtkStyle *style;  GtkAccelGroup *accel_group;  if (hwnd == NULL || !GTK_IS_WIDGET (hwnd))    return;  accel_group = gtk_accel_group_new ();  dsnchooser = gtk_dialog_new ();  gtk_object_set_data (GTK_OBJECT (dsnchooser), "dsnchooser", dsnchooser);  gtk_widget_set_usize (dsnchooser, 565, 415);  gtk_window_set_title (GTK_WINDOW (dsnchooser), "Select a Data Source");  gtk_window_set_position (GTK_WINDOW (dsnchooser), GTK_WIN_POS_CENTER);  gtk_window_set_modal (GTK_WINDOW (dsnchooser), TRUE);  gtk_window_set_policy (GTK_WINDOW (dsnchooser), FALSE, FALSE, FALSE);  dialog_vbox1 = GTK_DIALOG (dsnchooser)->vbox;  gtk_object_set_data (GTK_OBJECT (dsnchooser), "dialog_vbox1", dialog_vbox1);  gtk_widget_show (dialog_vbox1);  notebook1 = gtk_notebook_new ();  gtk_widget_ref (notebook1);  gtk_object_set_data_full (GTK_OBJECT (dsnchooser), "notebook1", notebook1,      (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (notebook1);  gtk_box_pack_start (GTK_BOX (dialog_vbox1), notebook1, TRUE, TRUE, 0);  vbox1 = gtk_vbox_new (FALSE, 0);  gtk_widget_ref (vbox1);  gtk_object_set_data_full (GTK_OBJECT (dsnchooser), "vbox1", vbox1,      (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (vbox1);  gtk_container_add (GTK_CONTAINER (notebook1), vbox1);  fixed1 = gtk_fixed_new ();  gtk_widget_ref (fixed1);  gtk_object_set_data_full (GTK_OBJECT (dsnchooser), "fixed1", fixed1,      (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (fixed1);  gtk_box_pack_start (GTK_BOX (vbox1), fixed1, TRUE, TRUE, 0);  gtk_container_set_border_width (GTK_CONTAINER (fixed1), 6);  scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);  gtk_widget_ref (scrolledwindow1);  gtk_object_set_data_full (GTK_OBJECT (dsnchooser), "scrolledwindow1",      scrolledwindow1, (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (scrolledwindow1);  gtk_widget_set_usize (scrolledwindow1, 456, 232);  gtk_fixed_put (GTK_FIXED (fixed1), scrolledwindow1, 3, 19);  clist1 = gtk_clist_new (3);  gtk_widget_ref (clist1);  gtk_object_set_data_full (GTK_OBJECT (dsnchooser), "clist1", clist1,      (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (clist1);  gtk_container_add (GTK_CONTAINER (scrolledwindow1), clist1);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?