⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callbacks.c

📁 这个项目里有两个关于收、发GSM 手机短信的C语言程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    /* open the about dialog box */    About = create_about();    gtk_widget_show(About);}void on_send_pressed(GtkButton * button, gpointer user_data){    /* lauch smsend for the current provider */    PProvider_t Pv = (PProvider_t) user_data;    if (DelaySend)    {    	/* allocate parameters struct */    	PcmdParam_t sms_param = g_new(cmdParam_t, 1);    	sms_param->Pv        = Pv;    	sms_param->Help      = FALSE;    	sms_param->Update    = FALSE;    	sms_param->Callback  = 0;    	sms_param->Callback2 = 0;    	sms_param->Done      = 999;    	sms_param->argc      = 0;	CreateArgv(sms_param);	DelayList = g_slist_append(DelayList,(gpointer)sms_param);	gnome_appbar_set_status(GNOME_APPBAR(Appbar), _("SmsSend delayed ..."));	gnome_appbar_set_progress(GNOME_APPBAR(Appbar), 0.0);    }    else    	LaunchSms(Pv, FALSE, FALSE);}void on_message_changed(GtkEditable * editable, gpointer user_data){    /* check length of message with respect to the maximum size */    guint Size = (guint) (user_data);	/* user_data yields Size field */    GtkText *message = GTK_TEXT(editable);    guint CurSize = gtk_text_get_length(message);    GtkWidget *SizeVal = (GtkWidget *) gtk_object_get_data(GTK_OBJECT(message), "remain");	/* remaining entry widget is saved in editable widget */    if (CurSize >= Size)    {	/* check if not too much data: erase it */	gtk_text_set_point(message, CurSize);	gtk_text_backward_delete(message, (CurSize - Size));	CurSize = gtk_text_get_length(message);    }    if ((Size - CurSize) < 0)	return;    if (SizeVal != (GtkWidget *) NULL)    {	/* update remaining */	char remain[4];	g_snprintf(remain, 4, "%d", Size - CurSize);	gtk_entry_set_text(GTK_ENTRY(SizeVal), remain);    }}void on_value_check(GtkEditable * editable, gpointer user_data){    /* Check if a parameter entry is an alias and change it */    GtkEntry *param = GTK_ENTRY(editable);    gchar *tmp = gtk_entry_get_text(param);    gchar *key,*value;    if ((AliasHash) && (tmp) && (tmp[0] == '@'))    {	key = g_strdup(tmp+1);	/* Check in alias hash array */        value = (gchar *)g_hash_table_lookup (AliasHash, (gconstpointer) key);	if (value)	{	   /* update with aliased value */	   gtk_entry_set_text(param,value);	}    	g_free(key);    }}void on_alias_clist_select_row(GtkCList *clist,                               gint     row,                               gint     column,                               GdkEvent *event,                               gpointer user_data){    /* called on each select/unselect in the aliases clist */    GtkEntry *alias = GTK_ENTRY(lookup_widget(GTK_WIDGET(clist), "alias_key"));    GtkEntry *value = GTK_ENTRY(lookup_widget(GTK_WIDGET(clist), "alias_value"));    gchar *key_s;    gchar *value_s;    if ((int)user_data == SEL_PRESSED)    {    	gtk_clist_get_text(clist, row, KEY_COL, &key_s);    	gtk_clist_get_text(clist, row, VAL_COL, &value_s);    	aliasRow = row;    	gtk_entry_set_text(alias,key_s);    	gtk_entry_set_text(value,value_s);    }    else    {	aliasRow = -1;    	gtk_entry_set_text(alias,"");    	gtk_entry_set_text(value,"");    }}void on_updown_clicked(GtkButton *button, gpointer user_data){    /* Called to moved items in the clist */    GtkCList *clist = GTK_CLIST(lookup_widget(GTK_WIDGET(button), "alias_clist"));    if (aliasRow >= 0)    {        gint row1;        gint row2;    	if ((int)user_data == UP_PRESSED)	{	    row1 = aliasRow; row2 = aliasRow -1;	}	else	{	    row1 = aliasRow+1; row2 = aliasRow;	}    	gtk_clist_moveto(clist, aliasRow,KEY_COL,0.5,0.5);	gtk_clist_swap_rows(clist, row1, row2);    	gtk_clist_unselect_row(clist,row1,KEY_COL);    	gtk_clist_unselect_row(clist,row2,KEY_COL);    	aliasRow = -1;    }}void on_add_clicked(GtkButton *button, gpointer user_data){    /* called to add a new pair of alias/value */    GtkCList *clist = GTK_CLIST(lookup_widget(GTK_WIDGET(button), "alias_clist"));    GtkEntry *alias = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "alias_key"));    GtkEntry *value = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "alias_value"));    gchar *key_s   = gtk_entry_get_text(alias);    gchar *value_s = gtk_entry_get_text(value);    gchar *tmp[ALIAS_CLIST_COLS];    if (key_s && value_s && strlen(key_s) && strlen(value_s))    {        tmp[KEY_COL] = (gchar *) key_s;        tmp[VAL_COL] = (gchar *) value_s;	if (!AliasHash)		AliasHash = g_hash_table_new(g_str_hash,g_str_equal);	if (g_hash_table_lookup (AliasHash, (gconstpointer) key_s) == NULL)	{		/* add it to clist and hash if not allready present */        	gtk_clist_append (clist,tmp);        	g_hash_table_insert(AliasHash,(gpointer) key_s, (gpointer) value_s);	}    	gtk_entry_set_text(alias,"");    	gtk_entry_set_text(value,"");    }    if (aliasRow >= 0)    {    	gtk_clist_unselect_row(clist,aliasRow,KEY_COL);    	aliasRow = -1;    }}void on_delete_clicked(GtkButton *button, gpointer user_data){    /* called to delete a selected pair of alias/value */    GtkEntry *alias = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "alias_key"));    GtkEntry *value = GTK_ENTRY(lookup_widget(GTK_WIDGET(button), "alias_value"));    GtkCList *clist = GTK_CLIST(lookup_widget(GTK_WIDGET(button), "alias_clist"));    gchar *key_s   = gtk_entry_get_text(alias);    if (aliasRow >= 0)    {       	gtk_clist_remove(clist,aliasRow);    	gtk_clist_unselect_row(clist,aliasRow,KEY_COL);    	g_hash_table_remove(AliasHash, (gconstpointer) key_s);    	aliasRow = -1;    }    gtk_entry_set_text(alias,"");    gtk_entry_set_text(value,"");}static void update_alias_file(gpointer key,                  	gpointer value,                  	gpointer user_data){   /* local function called for each each alias/value pair */   FILE *fp = (FILE *)user_data;   fprintf(fp,"%s %s\n",(gchar *) key,(gchar *) value);}void on_alias_ok_pressed(GtkButton * button, gpointer user_data){    gchar *path;    if (((int)user_data == OK_PRESSED) && (g_hash_table_size(AliasHash)>0))    {	FILE *fp;	/* We have a hash : save the file */	path = gnome_util_prepend_user_home(".smssend/aliases");	if (g_file_test(path, G_FILE_TEST_ISFILE))	    unlink(path);	fp = fopen(path,"a");	if (fp != (FILE *)NULL)        {	    time_t now = time(NULL); 	    fprintf(fp,"# Alias file generated by %s version %s\n#\n",PACKAGE,VERSION);	    fprintf(fp,"# Date: %s#\n",ctime(&now));  	    g_hash_table_foreach(AliasHash,update_alias_file,(gpointer)fp);	    fclose(fp);	}	g_free(path);    }}static void update_script_file(gpointer key,                  	       gpointer value,                  	       gpointer user_data){   /* local function called for each each script */   FILE *fp = (FILE *)user_data;   fprintf(fp,"%s\n",(gchar *) key);}void on_script_val_pressed(GtkButton * button, gpointer user_data){    GtkCList *clist = GTK_CLIST(lookup_widget(GTK_WIDGET(Scripts), "script_clist"));    /* if OK or APPLY, updated hashes and notebook */    if ((int)user_data != CANCEL_PRESSED)    {        GtkNotebook *nb = GTK_NOTEBOOK(Notebook);	int row;	if (!SavedProviderHash)	    SavedProviderHash = g_hash_table_new(g_str_hash,g_str_equal);        /* get script selection state from clist*/	for (row=0;row < NumProvider;row++)	{    	    gchar *row_data[SCRIPT_CLIST_COLS] = {NULL,NULL,NULL};	    GdkPixmap *pixmap;	    GdkBitmap *mask;	    gint is_show,is_save;	    #define FILENAME row_data[SCRIPT_COL]	    #define SHOW row_data[SHOW_COL]	    #define SAVE row_data[SAVE_COL]            PProvider_t Pv = (PProvider_t) NULL;    	    gtk_clist_get_text(clist, row, SCRIPT_COL, &FILENAME);	    /*    	    gtk_clist_get_text(clist, row, SHOW_COL, &SHOW);    	    gtk_clist_get_text(clist, row, SAVE_COL, &SAVE);	    */	    is_show = gtk_clist_get_pixmap(clist, row, SHOW_COL,                                           &pixmap, &mask);	    is_save = gtk_clist_get_pixmap(clist, row, SAVE_COL,                                           &pixmap, &mask);	    Pv = g_hash_table_lookup(ProviderHash,(gconstpointer)FILENAME);	    /* add it or not to the hash */	    if (is_show)	    {	        if (g_hash_table_lookup(ShownProviderHash,(gconstpointer)FILENAME) == NULL)		    show_provider(FILENAME,Pv);	    }	    else /* Not SHOW */	    {	        Pv = g_hash_table_lookup(ShownProviderHash,(gconstpointer)FILENAME);		if (Pv)		{		    /* get page number */		    gint page = gtk_notebook_page_num(nb,Pv->PageWidget);		    /* TODO: free stuff ? */		    /* Remove from hash */		    g_hash_table_remove(ShownProviderHash,(gconstpointer)FILENAME);		    /* Remove from notebook */		    gtk_notebook_remove_page(nb,page);		}	    }	    if (is_save)	    {	        if (g_hash_table_lookup(SavedProviderHash,(gconstpointer)FILENAME) == NULL)		    /* Add it to saved hash */		    g_hash_table_insert(SavedProviderHash,(gpointer)FILENAME, (gpointer) Pv);	    }	    else /* Not SAVE */	    {	        Pv = g_hash_table_lookup(SavedProviderHash,(gconstpointer)FILENAME);		if (Pv)		{		    /* TODO: free stuff ? */		    /* Remove from hash */		    g_hash_table_remove(SavedProviderHash,(gconstpointer)FILENAME);		}	    }	}		/* destroy hash if empty */    	if (g_hash_table_size(SavedProviderHash) == 0)    	{	    g_hash_table_destroy (SavedProviderHash);	    SavedProviderHash = (GHashTable *) NULL;    	}    }    /* only save in user file when OK */    if ((int)user_data == OK_PRESSED)    {	FILE *fp;    	gchar *path;	/* Save the list of scripts in a file */	path = gnome_util_prepend_user_home(".smssend/scripts");	if (g_file_test(path, G_FILE_TEST_ISFILE))	    unlink(path);	if (SavedProviderHash)	{	fp = fopen(path,"a");	    if (fp != (FILE *)NULL)            {	    	time_t now = time(NULL); 	    	fprintf(fp,"# Scripts file generated by %s version %s\n#\n",PACKAGE,VERSION);	    	fprintf(fp,"# Date: %s#\n",ctime(&now));  	    	g_hash_table_foreach(SavedProviderHash,update_script_file,(gpointer)fp);	    	fclose(fp);	    }	}	g_free(path);    }    /* delete clist */    gtk_clist_clear(clist);    gtk_widget_hide(Scripts);}

⌨️ 快捷键说明

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