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